1 面向过程和面向对象的区别
面向过程一上来考虑的是步骤的问题,第一步应该做什么,第二步应该做什么,第三步……直到整个事情做完。
面向对象却不应该是这样考虑,面向对象一上来应该考虑三个问题:
(1)这个问题涉及到哪些类哪些对象,即类和对象的设计
(2)这些类应该有哪些属性、哪些方法,即类的属性和方法的设计
(3)这些类哪些是有关系的、存在着哪一些关系,即类的关系考虑
2 类的关系
2.1 关联关系
关联关系是一种弱关系,具体应该表现为一个类的方法涉及到另一个类的对象。如老师教学生,在老师这个类的教的方法里就涉及到了学生这个类的实例;又如司机开车,在司机这个类的驾驶的这个方法里涉及到了车这个类的实力。
2.2 继承关系
继承关系表明类之间的一般和特殊这种关系,可以简单概括为“什么是一种什么”。如幼儿园教师、小学教师和中学教师都继承自教师,它们就可以表诉“幼儿园教师是一种教师”。然而小学语文教师、小学数学教师和小学英语教师都继承自小学教师,也可以这样说“小学语文教师一种小学教师”。
继承关系可以体现为多种继承。像小学教师这样,他可以继承自人这个大类,也可以继承自教师这一个类。
2.3 聚合关系
聚合关系相当于一种整体和部分的关系,可以概括为“什么是什么的一部分”。例如发动机是汽车的一部分,队长是球队的一部分,腿、头和身体是人的一部分。前者是一种距系关系,而后面两者是一种组合关系,队长可以同时兼任两个队的队长(如一个人可以同时担当足球队和篮球队的队长),并非是缺一不可的。而后面两者,发动机只能是这辆车的发动机,而不能是另外一辆车的发动机,这个身体只能是这个人的身体,而不能是另外一个人的身体。所以聚集的关系相对于组合没有那么严谨,组合更加体现的是一种“专属”的感觉。
2.4 实现关系
实现关系是一种接口和具体实现的关系,是一种抽象和具体的关系。例如定义了车这种接口,可以有不同的实现,如自行车可以实现车这个接口、东风车可以实现汽车这个接口、小轿车也可以实现这种接口
2.5 多态关系
同时传入公共接口,但是可以根据实际是什么做其专属的事情。例如定义了司机这个类,该类里有一个驾驶的方法,该方法接收一个“车”的实例,车的类里面有一个启动的方法,每种实现车这个公共接口的类实现这个启动的方法是不一样的,自行车有自行车启动的方法,汽车有汽车启动的方法,东风车有东风车启动的方法,但当它们具体传进司机的驾驶这个方法里,它们都能自己调用自己的启动方法。
3 面向对象编程的目的
Reusable(可复用)
Extendable(可扩展)