1.引例
在业内流传着这样一个段子:
程序员A:明天情人节你有空吗,可以一起去看电影吗?
程序员B:你请客吗?你请客的话我可以带着我的对象和你一起去。
程序员A:???
程序员B:我可以帮你也new一个对象,这样我们就有四个人了。
博主目前为大一学生,上学期学了面向过程程序设计,也就是C语言,目前正在学习Java。
众所周知,像C++,Java,C#等高级语言都是引入了面向对象编程的思想,这和C语言面向过程的思想是有很大的不同的,今年我们来探讨一下,这两种思想到底有什么不同的地方。
2.面向过程和面向对象的区别
面向过程:是一种以过程为中心的编程思想。
主要的关注点是:实现的具体过程,因果关系【集成显卡的开发思路】。
面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
主要的关注点是:主要关注对象【独立体】能完成哪些功能【独立显卡的开发思路】。
比如要实现一个五子棋的小游戏,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。
如果是面向对象的设计思想来解决问题,面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。
上述的内容是从网上查到的,觉得这个例子非常的生动形象,我就写了下来,现在就应该理解了他俩的区别了吧,其实就是两句话,面向对象就是高度实物抽象化、面向过程就是自顶向下的编程!
3、面向过程和面向对象的优缺点
(1)面向过程
优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低。
缺点:①采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致软件元素之间的耦合度非常高,只要其中一环出问题,整个系统受到影响,导致最终的软件扩展力差。②另外,由于没有独立体的概念,所以无法达到组件复用。
(2)面向对象
优点:耦合度低,扩展力强。更容易解决现实世界当中更复杂的业务逻辑。组件复用性强。
缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。
4.面向对象程序设计
知道了面向过程和面向对象区别,下面我们来正式学习面向对象编程。
如果我们想采用面向对象的方式来开发一个软件,在生命周期当中,我们要做的是:
1.面向对象分析(OOA)
2.面向对象设计(OOD)
3.面向对象编程(OOP)
描述一下整个软件开发的过程:
程序员先观察世界,从现实世界当中寻找对象
寻找了N多个对象之后,发现所有的对象都有共同特征
程序员在大脑中形成了一个模板【类】
Java程序员可以通过Java代码来描述一个类
Java程序中有了类的定义
然后通过类就可以创建对象
有了对象之后,可以让对象直接协作起来形成一个系统
1.类
(1)定义:类(class)是构造对象的模板或蓝图。类就是同一类事物的统称,如果将现实世界中的一个事物抽象成对象,类就是这类对象的统称。类是封装对象属性和行为的载体。
(2)构成:在类的定义中我们讲到类是封装对象属性和行为的载体。
类的定义方式一般为:
类{
属性; //描述对象的状态信息
方法; //描述对象的动作信息
}
属性我们采用定义成员变量的方式,行为我们采用定义方法来实现。
比如我们定义一个学生类:
//学生类是一个模板
//描述了所有学生的共同特征【状态 + 行为】
public class Student{
int no;
int age;
String name;
String address;
boolean sex;
public void study(){
System.out.println("this.name" + "在认真学习");
}
public void eat(){
System.out.println("this.name" + "在吃饭");
}
}
如果我们把类和C语言的结构体进行类比的话,我们会发现:类实际上就是高度封装的结构体。
2.对象
(1)定义:对象就是符合某个类的定义所产生出来的实例。更为恰当的描述是,类是世间事物的抽象称呼,而对象是这个事物相对应的实体。
(2)创建方式:
通过一个类可以实例化N个对象,实例化对象的语法:new 类名();
new是Java语言当中的一个运算符,new运算符的作用是创建对象,在JVM堆内存当中开辟新的内存空间
JVM的内存构成:
方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间当中
栈内存(局部变量):方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈
堆内存:new的对象在堆内存中存储
//student是一个引用数据类型
//s是一个变量名
//new Student()是一个学生对象
//s是一个局部变量【在栈内存中存储】
public class OOTest{
public static void main(String[] args){
Student s = new Student();
}
}
创建好对象之后,我们可以通过操作对象之间不同的关系,来实现程序的设计。