OOAD与UML
学习目标:
理解与掌握面向对象的概念与方法
- 使用UML
- 完成面向对象的分析与设计工作
- 了解OO的设计原则及一些典型的设计模式
什么是面向对象?
面向对象(Object-Orientation,简称OO)是一种系统建模技术
面向对象编程是(Object-Orientation Programming,简称OOP)是按照OO的方法学来开发程序的过程
通过分析系统内对象的交互来描述或建模一个系统
交互的对象最终以类的形式组织
OO的方法由三部分组成
- 过程
- 标识
- 规则
在软件工程早期,主流是结构化编程。编程时首先开发标准代码块,然后将代码复制粘贴到编写的每个应用程序中,尽管这样做可以在一定程度上减少新应用程序的开发时间,但如果代码需要改变,则开发人员需要在复制代码的每个地方进行修改。
随着软件复杂度的不断提高及对软件开发周期越来越短的要求,传统的结构化编程方式已不能适应现在的环境,面向对象编程方式应运而生。通过面向对象的方法,应用程序被分成许多小块(对象),这些对象彼此独立,然后可以通过组合这些对象,建立应用程序,如同建造一座房屋(应用程序),我们可以先把基本的砖块(对象)准备好,那么建造过程中我们只需要按要求把这些砖块搭建起来就可以了。
对象:
一个客观存在的、唯一的实体
是面向对象编程过程中分析与解决问题的出发点与基础
拥有自己的标识、数据与行为
可以简单或复杂
可以抽象或具体
在OOP中的一个类的动态实例
如Student----------id,name,age(attributes)
----------setName,getName,countScore(methods)
----------new Student()
类:
类是对象的模板
对象通过类实例化产生
一个类可以创建多个对象
OOAD是根据OO的方法学,对软件进行分析和设计的过程
---- OOA 分析阶段
---- OOD 设计阶段
面向对象的分析与设计主要分为两个阶段,其中第一个阶段称之面向对象分析(OOA)阶段,其任务在于弄清用户需要软件解决什么具体问题,是一个研究问题域的过程;第二个阶段称之为面向对象设计(OOD)阶段,用以决定软件的总体结构(例如整个系统包括多少个子系统,每个子系统又包括多少模块等等),以及每个模块的内部逻辑,包括模块的控制结构与数据结构等,是一个解决系统实现所需细节的过程。
定义OOA阶段
分析阶段主要以下问题
---- 建立针对业务问题域的清晰视图
---- 列出系统必须要完成的核心任务
---- 针对问题域建立公共词汇表
---- 列出针对此问题域的最佳解决方案
此阶段要解决的核心问题是“What to do”
设计阶段主要解决以下问题
---- 如何解决具体的业务问题
---- 引入系统工作所需的支持元素
---- 定义系统的实现策略
此阶段要解决的核心问题是“How to do”
OOP的主要特征
抽象(Abstract)
封装(Encapsulation)
继承(Inheritance)
多态(Polymorphism)
聚合(Aggression)
内聚与耦合(Cohesion & Coupling)
面向对象的编程语言很多,如Java、C++、C#等,虽然第一种语言都有其自己的语法,但所有的面向对象的编程语言都有一些共同的特点,如最基本的封装、继承、多态,除此还有抽象、关联、内聚、耦合等特征。以下将逐一讨论。
抽象:
忽略掉一个对象或实体的细节而只关注其本质特征的过程
简化功能与格式
帮助用户与对象交互
抽象指忽略掉一个对象或实体的细节而只关注其本质特征的过程,如从一级对象中抽象出其类模板,或者从一组类中抽象出公共特征得到父类或父接口,通过抽象可以简化用户与对象交互的过程与格式,并且使系统保留一定的灵活性,为将来系统的扩展留有余地。
封装
隐藏数据和实现
提供公共方法供用户调用功能。
对象的两种视图
--- 外部视图:对象能做的工作
--- 内部视图:对象如何完成工作
电视机:调节音量