首先说一下什么是面向对象?
- 面向对象(Object-Orientation,简称OO)是一种系统建模技术。
- 面向对象编程(Object-Orientation Programming,简称OOP)是安装OO的方法来开发程序的过程。
- 通过分析系统内对象的交互来描述或建模一个系统。
- 交互的对象最终以类的形式组织。
- OO的方法由三部分组成(这个地方不太明白)
- 过程
- 标识
- 规则
对象?
- 是一个客观存在的,唯一的实体。
- 是面向对象编程过程中分析和解决问题的出发点与基础。
- 拥有自己的标识,数据和行为。
- 可以简单或复杂,可以抽象或具体。
- 在OOP中是一个类的动态实例。
类?
- 类是对象的模板。
- 对象通过类实例化产生。
- 一个类可以创建多个对象。
OOAD?
OOAD是根据OO方法学,对软件系统进行分析和设计的过程
- OOA 分析(Analyse)阶段
- 分析阶段主要解决以下问题:
- 建立针对业务问题域的清晰视图
- 列出系统必须要完成的核心任务
- 针对问题域建立公共词汇表
- 列出针对此问题域的最佳解决方案。
此阶段要解决的核心问题是 “What to do ?”
- 分析阶段主要解决以下问题:
- OOD 设计(Design)阶段
- 设计阶段主要解决以下问题:
- 如何解决业务的具体问题
- 引入系统工作所需的支持元素
- 定义系统的实现策略
此阶段要解决的核心问题是 “How to do ?”
- 设计阶段主要解决以下问题:
OOP的主要特征
抽象(Abstract)
忽略掉一个对象或实体的细节,而只关注其本质特征的过程。
简化功能与格式
帮助用户与对象交互封装(encapsulation)
隐藏数据与实现
提供公共方法供用户调用功能
对象的两种视图:对外视图是对象能做的工作;对内视图是对象如何完成工作继承(inheritance)
通过存在的类型定义新类型的机制
通过继承可实现代码重用,另外继承也是多态的基础
通常在两个类型之间存在“is a”或“kind of”这样的关系多态(polymorphism)
一个名称,多种形态;例如 List list = new ArrayList();这就是多态的一种体现。List编译时类型,ArrayList是运行时类型。
基于继承的多态;调用方法时根据所给对象的不同选择不同的处理方式关联(association)
对象之间交互时的一种引入方式
当一个对象通过对另一个对象的引用去使用另一个对象的 服务或操作时,两个对象之间便产生了关联。
我这这么理解的,就是在A类中new了B类的一个实例,使用B的实例来调用了B类的一个方法。这样A类和B类就有了关联关系。聚合(aggregation)
关联关系的一种,一个对象成为另一个对象的组成部分。
是一种较强的关联关系。
在两个对象之间存在“has a”这样的关系,一个对象作为另一个对象的属性存在,在外部对象被生产时,可有客户端指定与其关联的内部对象。
这个就是B类是A类的属性的情况。组合(composition)
当一个对象包含另一个对象时,外部对象负责管理内部对象的生命周期情况。
关联关系中最为强烈的一种。
内部对象的创建由外部对象自己控制。
外部对象不存在时,内部对象也不能存在。
其实这个也不难理解,具体点来说就行电视机和显示器的关系。从类的角度来看,就是 A类中 包含(B类作为A类的属性存在)B类,但是B类的创建方式还是在A类中,这样就满足了上面的描述条件。组合和聚合这两种关联关系还是比较像的,只不过聚合中的B类由客户端创建,之后通过setter方法传递给A类,组合中的B类是由A类自己创建。内聚与耦合(cohesion & coupling)
域模型
域模型是面向对象的。在面向对象的术语中,域模型也可以称为设计模型。域模型由一下内容组成:
- 具有状态和行为的域对象
- 域对象之间的关系:
- 关联
- 依赖
- 聚集
- 一般化(泛化 ,其实就是继承关系)
其实吧 我认为域模型就是一个实体类
内聚与耦合
- 内聚:度量一个类独自完成某项工作的能力
- 耦合:度量系统内或系统之间依赖关系的复杂度
- 设计原则:高内聚,低耦合!
UML图的分类
- 静态模型
- 创建并记录一个系统的静态特征
- 反应一个软件系统基础,固定的框架结构
- 创建相关问题域主要元素的视图
- 静态建模包括:
- 用例图(use case diagrams)
- 类图(class diagrams)
- 对象图(object diagrams)
- 组件图(component diagrams)
- 部署图(deployment diagrams)
- 动态模型
- 时序图(sequence diagrams)
- 协作图(collaboration diagrams)
- 状态图(state chart diagrams)
- 活动图(activity diagrams)
其他重要的UML元素
• 包(package)
• UML的扩展机制
—— 注释(comments)
—— 构造型(stereotypes)
—— 标记值(tagged values)
—— 限制(constraints)