面向对象开发
面向对象与面向过程的区别
面相过程和面相对象的最大区别在于决策链的不同,面相过程是以问题为点,把所以的问题串起来形成一条直线。而面相对象则是以对象为点形成的散点图。面相对象的对象是为了自身能够适应某个问题而产生的。
面向过程
- 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
- 缺点:没有面向对象易维护、易复用、易扩展
面向对象
- 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
- 缺点:性能比面向过程低
核心思想和概念
对象
- 万物皆对象
- 每个对象都是唯一的
- 对象具有属性和行为
- 对象具有状态
- 对象都属于某个类
类、类型
- 类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。
消息、服务
- 对象提供的服务是由对象的方法来实现的,因此发送消息实际上也就是调用一个对象的方法。
接口
-
接口是一个抽象的概念,是指系统对外提供的所有服务。
- 接口可以降低系统的耦合程度
- 接口提高了系统的可拓展性
封装、透明
-
封装是指隐藏对象的属性和实现细节,仅仅对外公开接口。
- 便于使用者正确、方便地理解和使用系统
- 有助于各系统之间的解耦
- 有助于提高软件的复用性
- 降低构建大型系统的风险
-
与封装具有相同含义的一个概念就是透明
- 透明在此理解为“看不见”
抽象
- 抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的思维过程。
继承、扩展、覆盖
- 在父类和子类之间同时存在着继承和扩展关系。子类继承了父类的属性和方法,同时,子类中还可以扩展出新的属性和方法,并且可以覆盖父类中方法的实现方法。
组合
-
组合是一种用多个简单子系统来组装出复杂系统的有效手段。
- 在软件的设计分析阶段,简化为复杂系统建立对象模型的过程。
- 在软件编程阶段,简化创建复杂系统的过程。
- 向使用者隐藏系统的复杂性。
- 提高程序代码的可重用性。
多态、动态绑定
- 多态是指当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务,而这一切对系统A是透明的。
抽象类和接口
-
相同点
- 降低耦合度
- 都不能被实例化
- 都包含抽象方法
-
不同点
-
一个类只能继承一个父类,而可以继承多个接口。
-
接口
- 接口中的成员全都是 public 的
- 接口中不能定义构造器
- 方法全部都是抽象方法
- 抽象类中的成员可以是 private、默认、protected、public
- 接口中定义的成员变量实际上都是常量
- 接口中不能有静态方法
-
抽象类
- 抽象类中可以定义构造器
- 抽象类可以有抽象方法和具体方法
- 抽象类中可以定义成员变量
- 有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
- 抽象类中可以包含静态方法
-
UML(统一建模语言)
用例图
-
描述系统提供的功能
-
角色
- 角色是系统的边界,用人形符号表示
-
用例
- 表示系统的某个功能,用椭圆符号表示
-
角色和用例的关系
- 角色和用例之间是使用关系,用带实现的箭头符号表示
-
用例之间的关系
-
用例之间可存在包含和扩展关系
- 包含关系是指一个用例包含了另一个用例的功能
- 扩展关系是指一个用例继承了另一个用例的功能
-
-
类图
-
类
- 类是类图中的主要元素,用矩形表示,矩形的上层表示类,中层表示属性,下层表示方法。
-
类之间的关系
- 关联
- 依赖
- 聚集
- 泛化
- 实现
时序图(顺序图)
-
水平维度
- 显示对象之间发送消息的过程
-
垂直维度
- 显示发送消息的时间顺序
协作图
- 时序图演示的是对象与角色随时间的变化进行的交互,而协作图不参照时间,直接显示对象与角色之间交互的过程。
状态转换图
-
初始点
- 用实心圆表示
-
状态之间的转换
- 用箭头表示
-
状态
- 用圆角矩形表示
-
终止点
- 用内部包含实心圆的圆表示
组件图
- 主要用途是显示软件系统中组件的依赖关系,以及和其他第三方组件的依赖关系。
部署图
- 表示软件系统如何部署到硬件系统中
类之间的关系
关联
-
类之间的特定对应关系
- 一对一
- 一对多
- 多对多
- 单向关联
- 双向关联
-
在UML中用实线箭头表示
依赖
- 类之间的调用关系
- 在UML中用虚线箭头表示
聚集
-
整体和部分之间的关系
-
普通聚集关系
- 被聚集的子系统允许被拆卸和替换
-
强聚集关系
- 被聚集的子系统不允许被拆卸和替换
-
-
在UML中用带实线的菱形箭头表示
泛化
- 类之间的继承关系
- 在UML中用带实现的三角形箭头表示
实现
- 类和接口之间的关系
- 在UML中用带虚线的三角箭头表示
区分依赖、关联、聚集关系
-
依赖关系的特征
- 在两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统是依赖关系。
-
关联关系的特征
- 两个相对独立的系统,当一个系统的实例与另一个系统的一些特定的实例存在固定的对应关系时,这两个系统之间为关联关系。
-
聚集关系的特征
- 当系统A被加入系统B中,成为B系统的组成部分时,系统B和系统A之间为聚集关系。