一、面向对象的概念
面向对象是相对于面向过程而言的,面向对象和面向过程都是一种编程思想;
C、C++语言是面向过程的,强调的是功能行为;
java语言是面向对象的语言,就是把很多功能进行封装,强调的是具备了功能的对象;对象封装了很多功能,每个功能都是一个函数,每个函数又都是面向过程的,所以面向对象也就是基于面向过程的。
二、面向对象的特点
可以将复杂的事情简单化,将程序员从执行者转换成了指挥者,就是从面向过程到面向对象的变化;
在完成某个需求时,先要去找具有所需功能的对象来用;如果该对象不存在,就创建一个具有所需功能的对象;这样可以简化开发,并提高程序功能的复用性。
三、面向对象的开发、设计
面向对象的开发过程就是不断地找对象、创建对象、使用对象;
面向对象的设计过程就是管理和维护对象之间的关系。
四、面向对象的三大特性:封装、继承和多态
五、面向对象设计的重要经验:谁拥有数据,谁就对外提供操作这些数据的方法。
六、面向对象的经典案例:
1、人在黑板上画圆:画圆是谁的方法?
person, blackboard, circle
draw(){
x,y --->radius
//画圆需要圆心和半径,都是圆内部的数据,圆拥有数据,画圆的方法就是圆对象的。
}
2、列车司机紧急刹车:刹车是谁的方法?
刹车的动作是车身上的方法,列车司机只是给列车发了信号,刹车是由车自己完成的。
3、售货员统计售货小票的金额:是谁在统计金额?
需要统计的金额和数据都是在小票上面,售货员只是调用小票上的getTotalMoney方法,此方法是小票提供的。
4、人把门关上了:
人只是调用了门上的关门方法,门是得到了关门的信号,自己转动到一定位置才关上的。
5、球从一根绳子的一端移动到了另一端:
//为了方便理解,可以用如下代码来描述小球和绳子。
class Rope{
private Point start;
private Point end;
public Rope(Point start,Point end){
this.start = start;
this.end = end;
}
//绳子拥有座标,就有方法提供小球的下一个点nextPoint
public Point nextPoint(Point currentPoint){
/*通过两点一线的数学公式可以计算出当前点的下一个点,如果当前点是终止点,则返回null,
如果当前点不是线上的点,则抛出异常*/
}
}
class Ball{
//小球有移动的方法,移动要依赖于绳子,和移动初始点,所以小球的构造方法有绳子和起始点。
private Rope rope;
private Point currentPoint;
public Ball(Rope rope,Point startPoint){
this.rope = rope;
this.currentPoint = startPoint;
}
public void move(){
currentPoint = rope.nextPoint(currentPoint);
System.out.println("小球移动到了" + currentPoint);
}
}
6
、
两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子
stone:石头变成石刀,但变成石刀的方法不能在自己身上,否则石头这个对象就不存在了,自己把自己变没啦…
可以设想:有一个石刀加工厂,有制造石刀的功能,接收石头做成石刀
StoneKnife = KnifeFactory.createKnife(Stone first, Stone second);
石刀有砍的方法,接收树木,砍成木材
Wood = StoneKnife.cut(tree);
木材不能自己把自己变成椅子,可以设想有一个椅子加工厂,拥有制造椅子的方法,接收木材做成椅子
Chair = ChairFactory.makeChair(wood);