OOAD梳理

明确几个基本概念:

1. 对象

     对象(Object),广义上指在内存中一段有意义的区域,在显示支持面向对象的编程语言中,指在内存中装载的类的实例,具有相关的成员变量和成员方法。即对象是类的实例,也就是对象是通过类的实例化产生。

2. 类

     类(Class),描述具有一类对象的行为和状态,是对现实生活中一类具有共同特性的事物的抽象,是对象的模板。

3. 面向对象

     面向对象(Object-Orientation,简称OO),是一种系统建模技术。

4. 面向对象编程

     面向对象编程(Object-Orientation Programming,简称OOP),按照OO的方法学来开发程序的过程。

什么是OOAD

OOAD(Object Oriented Analysis Design),面向对象的分析与设计。

是根据OO的方法学对软件系统进行分析与设计的过程。

从其定义可以看出其分为两部分OOA和OOD

定义OOA阶段

1.主要解决以下问题

    --建立针对业务问题域的清晰视图

    --列出系统必须完成的核心任务

    --针对问题域建立公共词汇表

    --列出针对此问题的最佳解决方案

2.此阶段要解决的核心问题是:what to do?

定义OOD阶段

1.主要解决以下问题

    --如何解决具体的业务问题

    --引入系统工作所需的支持元素

    --定义系统的实现策略

2.此阶段要解决的核心问题是:How to do?

OOAD的主要特性

1.抽象(abstract)

2.封装(encapsulation)

3.继承(inheritance)

4.多态(polymorphism)

5.关联(association)

6.聚合(aggregation)

7.组合(composition)

8.内聚与耦合(cohesion & coupling)

抽象

 忽略掉一个对象或实体的具体细节,只关注其本质特征的过程。

 简化功能与格式。

 帮助用户与对象交互。

封装

 隐藏数据和实现。

 提供公共方法供用户调用功能。

 具有两种视图:

     外部视图--对象能做的工作

     内部视图--对象如果完成工作 

继承

 通过存在的类型定义新类型的机制。

 通常在两个类型之间存在‘is a’或‘kind of’的关系。

 通过继承可实现代码重用,另外继承也是多态的基础。 

多态

 一个名称,多种形式。

 基于继承的多态。

 调用方法时,根据所给的对象不同,调用不同的处理方式。

 如:Football-->play() 用脚完成

      Basketball-->play() 用手完成

关联

 对象之间交互时的一种引用方式。

 当一个对象通过另一个对象的引用去使用另一个对象的服务或操作时,两个对象之间变产生了关联。

 如:person使用Computer,两者之间便产生了关联。

 在java中一般使用成员变量来实现。

聚合

 关联的一种,一个对象成为另一个对象的组成部分。

 一种关系较强的关联,体现的是整体与部分、拥有的关系。

 在两个对象之间存在has a 的关系,一个对象作为另一个对象的属性存在。

 代码层面聚合和关联关系是一致的。普通关联关系中类A和B没有必然联系,聚合中需要B是A的一部分,如家庭有孩子。但是A不是必须拥有B,可以有也可以没有,A是整体,B是部分,整体和部分可分离,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。

 不同于关联关系的平等地位,聚合是不平等的。

组合

 也是关联关系的一种特例。

 体现的是一种contains a 的关系,这种关系比聚合更强,成为强聚合。

 组合同样体现整体与部分的关系,但是整体与部分不可分离,整体的生命周期结束也意味着部分的生命周期结束。

 同样只看代码无法区分关联、组合、聚合,只能从语义级别来区分。

 组合也是关系不平等的。

 小结:两个类的生命周期同步则为组合,不同步则为聚合。

内聚与耦合

 内聚-度量一个类独立完成某项工作的能力

 耦合-度量系统内部或系统之间依赖关系的复杂度

 设计原则:增加内聚,减少耦合(高内聚,低耦合)。 


参考文章来源:https://blog.csdn.net/tanga842428/article/details/52770403



你可能感兴趣的:(java)