什么是面向对象,什么是面向过程
面向过程就是分析出解决问题所需要的,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为 。
1.什么是面向对象技术?
面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术 。它具有抽象性、封装性、继承性及多态性 。
2.面向对象与面向过程程序设计有什么不同?
面向对象与面向过程程序设计有如下不同:
(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理 。函数与数据是否分离
(2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护 。
(3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要 。预定顺序;由运行时各种事件的实际发生来触发
(4)面向对象程序设计方法可以利用框架产品(如MFC,Microsoft Foundation Classes)进行编程 。面向对象可利用框架 面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态 。
3.面向对象技术有哪些优点?
面向对象技术具有程序结构清晰,自动生成程序框架,实现简单,可有效地减少程序的维护工作量,代码重用率高,软件开发效率高等优点 。4.面向对象技术中的封装性有何优缺点?如何克服这些缺点?
封装将对象有关的数据和行为封装成整体来处理,使得对象以外的部分不能随意存取对象的内部属性,从而有效地避免了外部错误对它的影响,大大减小了查错和排错的难度 。另一方面,当进行修改对象内部时,由于只有少量的外部接口对外提供服务,因此同样减小了内部的修改对外部的影响 。如果一味地强调封装,对象的任何属性都不允许外部直接存取,则要增加许多没有其他意义、只负责读或写的行为 。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿 。为了避免这一点,在程序的具体实现过程中应使对象有不同程度的可见性,进而与客观世界的具体情况相符合 。
面向对象的特点是:封装,多态,继承 。其中多态有分为重载和重写 。面向对象的编程思想更加接近现实的事物 。有这样几点好处:
1、是编程更加容易 。因为面向对象更接近于现实,所以你可以从现实的东西出发,进行适当的抽象 。
2、在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚 。
3、在设计模式上(似乎只有面向对象才设计到设计模式),面向对象可以更好的实现开-闭原则 。也使代码更易阅读 。相对而言,面向过程的程序设计是面向对象程序设计的基础 。面向对象的程序里面一定会有面向过程的程序片断的
5.为什么要应用继承机制? 客观事物既有共性,也有特性 。如果只考虑事物的共性,而不考虑事物的特性,就不能反映出客观世界中事物之间的层次关系 。抽象机制是考虑事物的共性,继承机制是考虑事物的特性,这样才能完整地描述客观世界的层次关系 。继承能使软件模块具有可重用性、独立性,缩短软件开发周期,提高软件开发效率,同时使软件易于维护 。
6.C对多态性的支持体现在哪些方面?
C的多态性分为编译时多态和运行时多态 。编译时多态是指在程序的编译阶段由编译系统根据参数确定与哪个同名的函数相联系;运行时多态是指在程序的运行阶段才根据产生的信息确定需要调用哪个同名的函数 。C通过函数重载和运算符重载实现编译时多态,通过继承和虚函数来实现运行时多态 。
7.目前常用的面向对象程序设计语言有何异同? 目前常用的面向对象程序设计语言有C、Java、Visual Basic等 。C是混合型面向对象程序设计语言,继承并改进了C语言,是一种既支持面向对象又支持面向过程的程序设计方法 。Java是纯面向对象程序设计语言,从C发展而来 。C和Java均支持面向对象技术的基本概念和基本特征,如封装、类、构造函数、析构函数、继承、多态等 。C与Java语法描述有相同之处,也有不同之处 。如基本结构语句的语法大致相同,而类定义的语法等方面则不相同 。
此外还有以下不同:
(1)C有运算符重载机制,而Java没有此特性;
(2)C支持多重继承,而Java只支持单重继承;
(3)C通过构造函数创建对象,可以直接使用指针来操作对象的成员,而Java通过new运算符创建对象,通过new运算符返回的对象引用来使用对象,而不是直接操作指针;
(4)C程序要显式地释放所分配的内存,而Java具有内存垃圾收集机制,自动管理内存,不需要显式释放所分配的内存 。Visual Basic继承了BASIC语言所具有的语法简单、容易学习、容易使用、数据处理能力强的特点,又引入了面向对象、事件驱动的编程机制和可视化程序设计方法,大大降低了开发Windows应用程序的难度,有效地提高了应用程序开发的效率 。但是,Visual Basic存在语法不严格、开发出的系统稳定性较低的缺点 。相对C来说,Visual Basic面向系统底层的编程能力有限
面相对象编程?
是类的一例,态和行为 。例如,一条狗是一个对象,它的状态有:颜色、、品种;行为有:摇尾巴、叫、吃等 。
类是一个模板,它描述一类对象的行为和状态 。
男孩(boy)、女孩(girl)为类(class),而具体的每个人为该类的对象(object)
编程里面我对面相过程跟面相对象的概念我的认为 。
理解的面了 。而且走偏了 。
面向对象和面向过程指两种不同的编程思维方式 。
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为 。
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果 。把上面每个步骤用分别的函数来实现,问题就解决了 。
而面向对象的设计则是从另外的思路来解决问题 。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等 。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定 。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤 。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化 。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一 。
功能上的统一保证了面向对象设计的可扩展性 。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整 。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的 。
再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写 。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了 。)而下棋的大致步骤从面向对象的角度来看没有任何变化 。
面向过程-->面向对象 这是一种思维的进步
什么叫面相对象?
http://www.jade-china.net/data/2005/1229/article_31.htm
转自:伊图网[www.4ico.com]在阐述类的概念之前我们来先说说面向对象编程的概念:面向对象的设计(Object-Oriented Programming,简记为OOP)立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者 。它通过给程序中加入扩展语句,把函数“封装”进编程所必需的“对象”中 。面向对象的编程语言使得复杂的工作条理清晰、编写容易 。说它是一场革命,不是对对象本身而言,而是对它们处理工作的能力而言 。对象并不与传统程序设计和编程方法兼容,只是部分面向对象反而会使情形更糟 。除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的麻烦多 。有人可能会说PHP不是一个真正的面向对象编程的语言,PHP 是一个混合型 语言,你可以使用面向对象编程,也可以使用传统的过程化编程 。然而,对于大型项目的开发,你可能想需要在PHP中使用纯的面向对象编程去声明类,而且在你的项目开发只用对象和类 。随着项目越来越大,使用面向对象编程可能会有帮助,面向对象编程代码很容易维护,容易理解和重复使用,这些就是软件工程的基础 。在基于Web的项目中应用这些概念就成为将来网站成功的关键 。
对象(Object)是问题域或实现域中某些事物的一个抽象,它反映此事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体 。关于对象要从两方面理解:一方面指系统所要处理的现实世界中的对象;另一方面对象是计算机不直接处理的对象,而是处理相应的计算机表示,这种计算机表示也称为对象 。简单的来说,一个人就是一个对象,一个尺子也可以说是个对象 。当这些对象可以用数据直接表示时,我们就称他为属性,尺子的度量单位可以是厘米,公尺或英尺,这个度量单位就是尺子的属性 。
在PHP里我们可以定义一个类,类(Class)就是指变量与一些使用这些变量的函数的集合 。PHP是一种松散类型的语言,所以通过类型重载不起作用,通过参数的个数不同来重载也不起作用 。有时在面向中重载构造函数非常好,这样你可以通过不同的方法创建对象(传递不同数量的参数) 。在PHP中就是通过类来实现的 。
在PHP中是通过类来完成信息封装的,在PHP中定义类的语法是:
<?php
class Class_name // 在面向对象编程类中,习惯上类的第一个字符为大写,并且必须符合变量的命名规则 。
{
//函数与变量的集合
}
?>
在定义类时你可以按自已的喜好的格式进行定义,但最好能保持一种标准,这样开发起来会更有效些 。
数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的 。一个数据成员可以是一个整数,一个数组,一个相关数组(Associative Array)或者是一个对象 。
下面是一个类定义的实际例子:
<?php
class Student
{
var $str_Name; //姓名
var $str_Sex; //性别
var $int_Id; //学号
var $int_English; //英语成绩
var $int_maths; //数学成绩
}
?>
这是一个很普通定义类的简单例子,用于显示学生的学习成绩,类名为Student,Student类包涵了一个学生的基本属性:姓名、性别、学号、英语成绩和数学成绩 。
function我们称之为在类中被定义的函数,在函数中访问类成员变量时,你应该使用$this->var_name,其中var_name指的是类中被声明的变量,否则对一个函数来说,它只能是局部变量 。我们先定义一个Input()的函数,用来给实例中的对象赋以初值:
function Input ( $Name, $Sex, $Id, $Englis, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_Englis=$English;
$this->int_Maths=$Maths;
}
现在我们再定义一个叫“ShowInfo()”的函数,用于打印学生的基本情况:
function ShowInfo() //定义ShowInfo()函数
{
echo (“姓名:$this->str_Name
”);
echo (“性别:$this->str_Sex
”);
echo (“学号:$this->int_Id
”);
echo (“英语成绩:$this->int_English
”);
echo (“数学成绩:$this->int_Maths
”);
}
而定义好的类则必须使用new关键词来生成对象:
$A_student=new Student;
例如我们要为一个名为$Wing的对象创建实例,并进行赋值,可以使用下面的代码:
$Wing =new Student; //用new关键词来生成对象
$Wing ->Input (“Wing”,”男”,33,95,87);
//分别输入Wing的姓名、性别、学号、英语成绩、数学成绩,其中姓名和性别是字符型变量,所以需要用双引号,其它为数值型变量则不需要 。
通过下面这段完整的源代码,我们就可以很清楚的看到类在PHP是怎么被运用的:
<?php
class Student
{
var $str_Name;
var $str_Sex;
var $int_Id;
var $int_English;
var $int_maths;
function Input ( $Name, $Sex, $Id, $English, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_English=$English;
$this->int_Maths=$Maths;
}
function ShowInfo()
{
echo (“姓名:$this->str_Name
”);
echo (“性别:$this->str_Sex
”);
echo (“学号:$this->int_Id
”);
echo (“英语成绩:$this->int_English
”);
echo (“数学成绩:$this->int_Maths
”);
}
}
$Wing = new Student;
$Wing->Input (“Wing”,”男”,33,95,87);
$Paladin = new Student;
$Paladin->Input (“paladin”,”女”,38,58,59.5);
$Wing->ShowInfo();
$Paladin->ShowInfo();
?>
执行结果应是这样的:
姓名:Wing
性别:男
学号:33
英语成绩:95
数学成绩:87
姓名:Paladin
性别:女
学号:38
英语成绩:58
数学成绩:59.5
PHP现有的版本较以前的版本在对面向对象编程的支持方面有了很大的改善,但支持的还不是很完整,不过现阶段PHP对面向对象编程语言提供的支持不但有利于我们设计程序的结构,对于对程序的维护也能提供很大的帮助 。
面相对象的特征
只要好看就行了呗对吧?你们说对吧?面向对象的什么玩意儿?哼!
面相对象问题
你只是面向类的对象,不是实体的对象 。所以你的对象是没有实体的,也就是没有现实中的对象 。不过你可以面向过程编程,有过程才有对象 。
- mgc卸甲里面的风水:风水学上的“mgc卸甲”是什么意思,请风水高手指点?
- 十年后变丑女的九个护肤恶习
- “花”的繁体字是什么?《花字代表着什么》
- “托蒂特点“知道托蒂是谁吗?
- “家里来鸽子有什么预兆“青你3无限符号座位图,这个符号座位图有什么寓意吗?
- “梦里遇到发洪水“梦见发大水有什么预兆
- “1992年农历12月12日凌晨1点五行属相表“73年五行缺什么
- 忽略眼部保养常见的症状
- 『五帝钱是道教还是佛教』道教和佛教开光哪个好
- “dnf镇魂开光几率怎么样“DNF战魂 好用吗