从素数问题看面向对象
定义:除了1于本身之外,不能被其他正整数整除的数。
筛选法:生成2<i<n的素数序列,设n=60
- 用结构化思维解决上诉问题
- 用对象思维解决上述问题
如何表达设计思想:代码,图形
代码是计算机的表达方式,人脑需要花很多时间模拟计算机思维,不适合交流设计思想。
- 通过流程图(结构化建模)可以更清楚表达设计思想
- 针对过程的抽象
- 过程(函数)是系统的核心,通过过程实现系统功能
- 数据是静态的,由过程来控制对数据的访问
面向对象
- 筛子:储存源数据
- 过滤器:表明当前过滤因子
- 计数器:记录当前正在筛选的元素
通过UML类图,可以更清楚表达设计思想,并为代码实现提供框架
- 类拥有自己的数据和行为,能够完成自生的工作职责
- 过程是类的组成部分,为类提供行为
- 通过类的对象之间的协作完成系统功能
问题:对象识别,职责分配,多态抽象
面向对象
- 建立对象的思维方式
- 面向对象思想和理论有进一步理解
- 能够熟练地使用UML表达面向对象的思想设计
- 运用对象技术的一般原则和模式进行应用系统和分析和设计建模
- Model:建模是最终目的
- OO:面向对象技术是一种建模理论
- UML:同意建模语言是一种体现OO的建模语言,是将OO理论转化为实践的工具
面向对象技术
面向对象技术是一系列指导软件构造的原则(抽象,封装,多态),并通过语言,数据库和其他工具来支持这些原则
- 沟通
- 顺应人类思维习惯,在计算机中模拟事物
- 稳定
- 较小的需求变化不会导致系统结构大的变化
- 复用
- 代码重用
- 能提到质量
对象和类
对象
对象:可以标记出来的事物,是一个实体
- 具有明确的定义边界和标识
- 边界意味着对象是一个封装体,通过封装与其他对象分割
- 表示则表明了每一个对象都是唯一的
- 对象封装了状态和行为
- 对象的状态通过对象的属性和关系来表达
- 对象的行为通过对象的操作,方法和状态机来表达
类
- 一系列对象的抽象描述,这些对象共享相同的属性,操作,关系和语义
- 类是一种抽象
- 将相似的实体抽象成相同的概念
- 强调相关特征而忽略其他的特征
属性:类的特征或特性
- 属性的值是某一特定对象的属性值
- 在类中属性名必须唯一
- 每个类的实例都有为这个类定义的所有属性的值
操作:访问或修改对象的属性值
- 对象的行为是由为此对象定义的一系列操作决定的
- 一个类可能同时存在多个实例
- 一个类的所有实例都可以使用在这个类中定义的操作
面向对象相关原则
抽象
抽象是揭示事物区别于其他食物的本质特征和过程
- 是一个分析和理解问题的过程
- 抽象的结果去接与使用者的目的,应该包括使用者所感兴趣的那些职责,而忽略掉其他不相关的部分
对象到类的过程就是抽象
抽象取决于项目的上下文
封装
对客户隐藏具体的实现细节
- 客户只依赖于接口
- 通过封装实现信息隐藏和数据抽象
数据一致性
- 操作这个数据结构的程序员,必须严格遵守一系列业务逻辑规则,否则很容易破坏数据的一致性
- 结构化程序设计处理大项目时,多人协同开发时,本质上无法保证数据的一致性
可进行
- public:
+
- package:
~
- protected:
#
- private:
-
分解
分解是指将多个大规模复杂系统划分为多个不同的小勾件
- 分解的构建通过抽象,封装等技术形成相对独立的单元,可以独立设计和开发,从而实现化繁为简,分而治之
分解的方法
- 结构化方法:函数,模块进行功能分解
- 面向对象:基于类和对象的分解基础上,进行合理的打包和分层,从而实现更加复杂的分解结构
泛化
是类之间的一种“是”(is a/is kind of)关系,通过该关系的一个类可以共享另外一个或多个类的结构和行为
- 采用继承实现泛化关系
通过泛化关系,可以建立类之间的层次结构,根据继承层次中父类的个数不同,分为
- 单一继承
- 多重继承
子类继承父类所有的内容:属性,操作,关系和语义
- 其访问权限仍受可见性的约束
子类还可以
- 添加新的属性,操作,关系和语义
- 重定义继承的操作
设计继承层次
- 父类定义公告的属性,操作,关系和语义
- 针对不同的情况定义不同的子类,已扩展父类的属性,操作,行为和语义
多态
在统一外表(接口)下隐藏不同实现的能力
- 即一个接口可以有不同的实现行为
- 是面向对象技术的本质特征
分层
分层是指面向不同的目标建立不同的抽象级别层次,从而在不同的抽象层次对系统进行分解,进一步简化对系统的理解
- 类层次结构:在不同的抽象级别进行对象的抽象,通过泛化关系,行程类间的继承层次结构
- 对象层次结构:对象间的组成结构,即大的对象由小的对象组成
复用
借助已有软件的各种有关知识建立新的软件的过程
- 将软件看成是由不同功能部分的构建组成的有机体,每个构件在设计编写时可以被设计成完成同类工作的通用工具
- 如果完成各种工作的构建被建立起来以后,编写特定软件的工作就变成了将各种不同构建进行组合的简单问题,从而对软件产品的最终质量和维护工作都有本质性的改变
复用原则要求设计者不仅针对当前的业务需求开展设计,还需要考虑业务的通用性和可扩展性等问题,从而设计抽象层次高,复用粒度大的组件
上升到面向对象
- 这里面有什么事物:类和对象
- 每个事物看上去是什么样:类的属性
- 每个事物能做点什么用:类的操作
- 这些事物都呆在什么地方:类的状态,部署
- 这些事物之间有什么关系:类之间间的关联
- 这些事物是怎么成事的:类之间间的交互