基本概念
功能驱动的设计方法
面向对象程序设计过程
问题分解与类初步设计
类详细设计与实现
示例
一、基本概念
对象与对象类型:在设计阶段,对象常用来指现实世界问题域中的实体,对象类型有时也称为对象,用来描述信息世界的概念
类与对象:在面向对象程序中,类用来描述具有相似行为的一组对象,类一般由行为和状态来构成
一个类的单个代表体称为实例或对象
面向对象程序的架构:
类可以根据承担的职责分为不同类型,各种类型的类就构成了程序的基本架构
模型-外部接口-数据管理的程序架构模式
模型(Model):指负责实现系统业务功能的类和对象。
外部接口(External interface):指负责系统外部接口(例如实现用户交互)的类和对象。
数据管理(Data management):指负责保存和维护系统数据的对象。这些对象负责对存储在文件或数据库中的数据进行存取访问
二、功能驱动的设计方法
1、功能驱动的系统架构设计方法
系统设计以系统行为或功能为出发点,使用分治原理,将系统功能(或称为问题)迭代地进行分解,直到得到一组描述清晰且相对简单易解的子问题。
将子问题中的每个行为都分配到确定的对象上,即每个行为都有特定的对象负责完成。对象所承担的行为就是对象的功能。
程序就被分解为一系列彼此交互的类和对象,它们的全体就构成了系统的架构。
2、功能驱动的类设计方法
管理程序复杂性最有效的方法是抽象,而最有效的抽象方法是封装,设计阶段可以最有效地提升程序的封装性
采用Client/Server对象交互模型实现封装性,进行类的设计
Client/Server模型
模型描述了两个实体间的交互:Client请求Server进行某些操作,而Server在接收到请求后提供相应的服务
Client与Server的交互内容由Server提供的协议来描述,Client和Server都必须遵守这个协议
Client和Server都是类或对象,任何对象在任何时候都可以作为Client或Server
Client/Server模型的优点
C/S模型只关注Server能为Client提供什么功能(What),而不关注Server如何实现这些功能(How),Server的实现细节都被封装起来。
使程序具有很好的易测试性、可维护性、可重用性以及可扩展性
类职责的划分
程序中的各个对象分担特定任务,共同完成系统的功能
类的职责可以分为信息共享以及完成特定任务,具体可以分为两类:查询(query)和命令(command)
查询类操作,使对象提供特定的数据或状态信息。例如,查询一个学生对象的姓名
命令类操作,使对象进行某种操作。操作可能导致对象的数据发生变化,改变对象的状态
设计中提升封装性的原则:低耦合高内聚,以及信息隐藏
低耦合高内聚
内聚是指单个类各项职责的整体性,高内聚指类的各项职责或操作以某种方式高度相关
耦合描述的是类之间的关系。耦合增加了程序开发和维护的难度,并限制了重用。一般要尽量减少耦合。
设计中提升封装性的原则:低耦合高内聚,以及信息隐藏
信息隐藏
将接口的实现细节对外部屏蔽称为信息隐藏。将接口与实现分开,并将接口公开而将实现隐藏是实现封装的有效机制。
信息隐藏对于有多人参与开发的系统具有重要意义,有时被称为面向接口的开发,是目前很多大规模面向对象系统设计开发中所采用的方法。
3、面向对象程序设计和开发的阶段
程序设计和开发的阶段
需求分析阶段:明确问题,给出程序功能的详细描述
设计阶段:确定系统中的类,描述各种类、方法以及数据的细节信息
实现阶段:用Java语言进行实际编程
测试阶段:对程序的功能进行测试,以确保其正确性
系统设计的任务主要在上述需求分析阶段和设计阶段完成。
4、面向对象程序设计和开发的过程
问题描述:对问题描述进行分解和细化
问题分解与详细说明:以系统的功能为主线进行分解,给出各个子问题或子功能的详细描述。
类的初步设计:针对每个子问题的描述初步确定类,包括类在系统中的角色、需要完成的操作以及需要保存的数据等
类的详细设计:给出各个类的详细规范说明
类的编码实现
系统的测试、调试与修改完善
三、问题分解描述与类的初步设计
从系统行为或功能的角度细化系统的需求,撰写系统的需求规格说明
类的初步设计:
采用迭代求精的方法,即按照功能驱动的思路初步确定一组类,赋予每个类具体的行为或职责,然后初步验证当前设计是否能够满足系统需求,并在验证过程中不断调整类的设计
四、类详细设计与实现
1、类的初步设计—名词抽取法
阅读系统的详细需求描述,画出其中的名词和动词
名词——可能作为类或类中属性
动词——可能是对象的行为
2、类的详细设计
根据类初步设计的结果,确定每个类中应包含的数据以及提供的操作
类的对象在程序中承担什么职责
类的对象需要完成的每项操作是什么
类的对象在完成职责时需要什么数据或信息
类的对象需要对外提供哪些接口,需要隐藏什么信息
3、类的规格说明
用文字给出每个类数据和操作的规格说明,确定类需要对外公开的接口,以及需要隐藏的部分,确定类中数据的类型以及操作的实现算法。规格说明包括:
类名(Class name)
角色或职责(Role )
属性(Attributes):给出属性的名称和含义
行为(Behaviors):用方法来表示。表示出接口和需要隐藏的方法或属性,描述方法的实现算法。
4、类设计的正确性验证
基于类的规格说明,构造对象相互驱动完成系统功能的完整流程,验证设计的正确性。
可以采用系统业务流程图或UML时序图等方法
5、类的实现
定义类中数据的表示结构并编写方法的代码
采用单元测试到集成测试的方法完成整个系统的开发