面向对象程序设计的方法论

一、什么是面向对象?

面向对象表示软件通过离散的对象组织起来,这些对象本身包含了数据和行为。

结构化方法以算法作为基本的构造块

OO方法以对象和类作为基本构造块

二、面向对象的实现过程

面向对象分析(OOA

面向对象设计(OOD

面向对象编程(OOP

 OOP使用对象而不是算法作为程序的基本构造块

 每个对象都是某个类的实例

 类可以继承

 

三、对象模型的要素

抽象、封装、模块化、层次化

(1)抽象

  抽象集中于对象的外部视图

这个外部视图确定了一个其他对象可以信赖一种契约(contract

*这个契约由对象内部细节实现

*这个契约表达了该对象的职责和功能,确定了它的行为

*契约中的每个操作都有唯一的签名

操作:

#操作的不变式是一个逻辑条件,该条件在整个操作的执行过程中保持不变

#操作应满足的条件称为前置条件

#操作的结果称为后置条件

#如果不变式不能被满足,应抛出异常

   所有的抽象都有静态和动态特性

    >类包含哪些属性是它的静态特性

>这些属性的具体取值是它的动态特性

 

(2)封装

         一旦选择了某种实现,这种实现应被看做是内部的秘密,对外隐藏。

 每个类有2个部分:

 接口:类的外部视图(public部分)

 实现:类的内部实现(private部分)

 

(3)模块化

 #就是系统分解。整个系统分解为多个子系统,每个子系统应有清晰的边界,

 #模块的接口尽量的窄,容易发生改变的部分必须隐藏在模块内部

 #架构师负责模块的划分和接口的定义,编程人员负责模块的内部实现

 

(4)层次化

层次是抽象级别的顺序

层次有2个方面

类结构(is a)继承结构

对象结构(part of )组成结构

强关系称为组合,表示整体和部分有相同的生命周期,通过对象成员实现

 

弱关系称为聚合,表示整体和部分有各自的生命周期,通过指针成员实现

 

(5)对象

对象包含状态、行为和唯一标识

1,状态

包含属性(静态结构)和属性的取值(动态特性)

2,行为

行为表明对象如何动作,如何响应消息和改变自身状态

行为可分为

选择和读取(不改变对象状态)

修改(改变对象状态)

迭代器

对象拥有的行为确定了对象的职责

对象的状态和行为描述了对象的角色

3,唯一标识

#每个对象都有一个标识表明自己的唯一性

#内存中的对象一般以内存的地址作为唯一标识

#数据库中的对象需借助唯一标识号进行唯一标识

 

四、对象间的关系

两种:链与聚合

链(link

对象可以沿着链向另一个对象发送消息(及调用另一个对象的方法)

 

聚合

聚合表明一种整体——部分的关系

 

五、

类是拥有相同结构、相同行为的同种事物的抽象

单个对象是类的一个实例

接口与实现

接口是类的外部视图

实现是类内部的细节

 

六、类之间的关系

3:关联关系;泛化/特化关系;整体/部分关系

* 关联

是一种很弱的语义关系,表明2个类之间的依赖关系

从一个类可以找到另一个类

 

 

* 继承

描述类之间的泛化/特化关系

基类描述泛化

派生类描述特化

 

* 聚合

描述类之间的整体/部分关系

组合:物理包含

聚合:引用包含

 

七、总体开发过程

1》建立系统概念

分析师和用户构思应用前景,建立尝试性的需求

 

2》系统分析

建立面向对象的分析模型包含2个部分

领域模型: 完全是业务逻辑

应用模型: 包含了用户使用需求

编写系统需求规格说明

3》系统设计

建立系统架构

系统逻辑结构(分层与分区)

系统物理部署

编制系统架构文档

4》类设计

向分析模型中得到的类添加细节,形成完整的类设计

5》实现

编码实现和测试,实现类内部细节

 

八、类的设计过程

△确定系统中有哪些类

△确定类的属性、职责、方法和角色

通过用例确定类的职责

先分析行为,确定类的方法名称和职责

△分析类之间的关系

建立类之间的关联关系

△实现类

确定类内部实现的数据结构

确定类操作的实现算法

 

九、抽象数据类型ADT

》类封装了数据成员和成员函数,组成一个只包含的实体

》这样的一个实体称为“抽象数据类型”(Abstract Data Type,ADT)

》抽象:外部调用程序只关心这个类型对外表现的行为,而不关心它如何实现这种行为

ADT的基本特征是对这种自定义类型简单和清楚的描述

 

开发步骤:

.类的设计者需要首先确定类的行为

类的行为通过类对外的接口体现,及类的公有方法

每个方法应包含方法原型说明,前置条件和后置条件

设计完成后以一种固定的格式向类的使用者清楚的说明类的作用和组成,这种文档的格式称为应用程序接口【APIApplication Programming Interface

.再设计实现细节部分

类的这些私有信息外部程序无法访问,从而达到实现技术封装和信息隐藏的目的

只要类的外部接口保持不变,内部算法或各种实现细节的改变不会对外部程序产生影响,从而减少程序各部分之间的耦合,增强的程序的稳定性。

.设计工作完成后,在着手按照设计的内容用C++语言实现这个类

首先在一个头文件中声明类

然后在一个实现文件中实现该类的各个方法。