面向对象思想
现实问题=>面向对象问题:物质=>对象,意识=>类。
其中 对象是独立存在的客观事物,由一组属性和一组操作组成。 属性和操作是其两大特性,属性是对象静态特征的描述,操作是动态特征的描述,而属性一般只能通过操作来改变。
操作也叫成方法或服务,描述了对象动态执行的功能。通过消息传递,可以为其他对象所使用。
对象具有一系列的性质:
- 封装性—信息隐藏;
- 自治性—主动数据;
- 通信性—并发;
- 暂存性—作用域/作用周期;
- 永久性—文档可串行化。
其中 封装—信息隐藏是指:
作为某对象提供的服务的一个用户,只需要知道对象要接受的消息的名字;不需要知道完成操作所要执行的动作有哪些。
关于对象:
任何事物都是对象。对象有属性和操作。复杂对象可以由简单对象由某种方式构成。
通过类比发现对象间的相似性,即对象的共同属性,是构成对象类的依据。
对象间的相互联系是通过消息传递来完成的。通过对象间的消息通信驱动对象执行一系列的操作从而完成某一任务。
这里的消息传递是指:选择一对象并通知它要做什么,这个消息发送的对象叫做“接收器”。发送消息的对象不需要知道接收器如何响应请求,如果接收器接收了消息并响应,那么它会自己去执行消息以完成任务。消息的解释由接收器决定,并且随接收器的不同而不同。
过程调用没有指定的接收器。
在面向对象中,我们用责任来描述行为,从而提高抽象水平,使对象间更加独立。
类与实例的关系:
类是一个抽象的概念,它是具有相同属性和操作的对象的集合 。 自然也包括属性和操作。
类是相关对象行为的存储库,即同一个类的对象能够执行相同的行为。因此,一个特定类的所有对象会使用相同的方法来响应类似的消息。
我们说对象是类的实例,类是一组相似对象的集合。
对象之间存在着一般和特殊的结构关系,也称泛化和特化的关系,即继承关系。
特殊类对象具有一般类对象的全部属性和服务。
多态性是指一般类中定义的属性及服务,在特殊类中不改变名字,但通过各自不同的实现后,可以具有不同的数据类型或行为。
通过上面的学习知道,接收器搜索并执行相应的方法来响应给定的程序。若本类中未找到匹配的方法,搜索会在**父类链**上一直进行下去,直到找到匹配的方法或链结束。
面向对象编程
结构化
结构化程序设计是按照一定的原则与原理,组织和编写正确且易读的程序的软件技术。
目标在于使程序具有一个合理结构,以保证和验证程序的正确性,从而开发出正确、合理的程序。
属于自顶向下的设计,在设计阶段就不得不考虑如何实现系统的功能,因为分解的过程其实就是实现功能的过程。
- 程序的主体是方法
- 方法是最小的功能模块
- 一组相关的方法组合成一个大的功能模块
例子:一个画板系统panel,包括四个功能:选择形状、画长方形、画圆、画直线。
则:我们需要
- 定义形状 标示常量
- 设置方法drawCircle(),drawLine(),drawRectangle(),selectShape()
- 在select方法中判断用户要求的形状并执行对应的draw方法
这样设计会产生问题:
当用户要求一个新要求:画三角形,那么1、2、3步中均需要改动,制约了软件的可维护性和可扩展性,且修改或增加一个模块会影响到其他模块。
面向对象编程
- 程序被划分为一组通信的对象。
- 每个对象均封装了关于某个概念所有行为和信息
- 实现功能的能力、实现功能所需的“知识”或数据被分布在对象之中。
- 当一个对象对其他对象有需求时,就向该对象发出消息,这个对象接受到此消息后做出相应的动作并很有可能返回值给调用者。
- 对象分摊工作和责任
在面向对象编程语言中,类可以被视为对象的模板,定义了对象拥有的数据类型、该对象的行为及该对象对这些数据的责任。