第10章 面向对象设计

合集下载

ch10面向对象的设计方法

ch10面向对象的设计方法

《边界》 命令窗口
34
命令窗口
2020/11/17
10章 面向对象的设计方法
《控制》
⑶控制类(设计阶段) 用例管理
用例管理
➢控制类:在边界类和实体类中间起协调作用的类, 在域层和可视层之间起开关控制的作用(它包含 了事件的应用逻辑或业务规则)。
➢它负责从边界类对象获取信息,然后发送到适当 的实体类对象,就像是域层和可视层之间的一个 开关或控制器。
➢如果参与者是一个类,也 execute Query( ) 可给其添加属性和操作。 get Connection( )
参与者及其操作
28
2020/11/17
10章 面向对象的设计方法
构造型用《》符号描述
➢域模型展现用户工作环境下的情况及它们间的联 系,类不是特指软件类。创建设计类图,则要定 义软件类。
➢基于一个已存在的模型元素定义一种新的 模型元素。
➢可应用于所有的模型元素(类、节点、组 件、关系、包、操作)
27
2020/11/17
10章 面向对象的设计方法
例:参与者的三种表示形式
Actor
Icon形式
Actor
Label形式
Actor
Decoration形式
➢参与者可用构造型表示。
《Actor》 Bill System
⑴创建设计类图的基础版本,或初步模型:包含 属性名称等基本信息,以便用来设计交互图。
⑵开发交互图,即为每一个用例产生一个交互图: 其决定哪些对象一起工作,及怎样协同工作。 (系统设计的核心)。
⑶根据开发交互图时得到的信息,返回设计类图 并开发方法名称(可视化和特征信息是在设计类 图的迭代中被修改的)。
4

第10章 面向对象分析

第10章 面向对象分析
软件工程
第10章 面向对象分析
第10章 面向对象分析
• 面向对象软件开发技术
– 面向对象分析(OOA) – 面向对象设计(OOD) – 面向对象实现(OOP)
面向对象技术是一个有全新概念 的开发模式,其特点是:
(1)方法是对软件开发过程所有阶段进 行综合考虑而得到的; (2)从生存期的一个阶段到下一个阶段 所使用的方法与技术具有高度的连 续性;
取消交易
顾客可在按下选择键前任何一个时刻,拉动退币杆取 消交易收回硬币。
自动售货系统系统
-端1 * -端2
自动售货系统::售货
*
顾客
-端2
-端1 *
自动售货系统::供货
*
供货人
-端1 * -端2
自动售货系统::取货款
*
收银员
自动售货系统系统
-端1 *
-端2
售货
*
<<extends>>
售散装饮料
顾客
• 业务中的执行者扮演什么角色?这些角色可以 看作类,如客户、操作员等。
(2)筛选对象类,确定最终对象类 我们可以用以下选择特征来确定最终的对象: 1) 保留的信息:仅当必须记住有关潜在对象的 信息,系统才能运作时,则该潜在对象在分 析阶段是有用的; 2) 需要的服务:潜在对象必须拥有一组可标识 的操作,它们可以按某种方式修改对象属性 的值; 3) 多个属性:在分析阶段,关注点应该是“较 大的”信息(仅具有单个属性的对象在设计 时可能有用,但在分析阶段,最好把它表示 为另一对象的属性);
定义服务
• 对象=属性+操作(服务) • 因为在动态模型和功能模型中更明确地描 述了每个类中应该提供哪些服务,所以在 建立了这两个模型后才能最终确定类中应 有的服务。 • 事实上,在确定类中应有的服务时,既要 考虑该类实体的常规行为,又要考虑在本 系统中特殊需要的服务。

软件工程-第十章面向对象的设计方法

软件工程-第十章面向对象的设计方法

2
面向对象的设计方法
第十章 面向对象的设计方法
本章采用基于UML的面向对象设计方法将分析模 型转换为设计模型。
面向对象的分析模型主要由顶层架构图、用例与用 例图、领域概念模型构成。
设计模型则包含以包图表示的软件体系结构图,以 交互图表示的用例实现图,完整、精确的类图,以 及针对复杂对象的状态图、用以描述流程化处理过 程的活动图等。
协作图的布局规则
控制类位于中心
主动执行者和作为用户界面的边界类位于左上方
作为外部接口和环境隔离层的边界类位于右上方
辅助类和实体类分别位于控制类的左下、右下方。
2021/3/27
国防科技大学计算机学院
11
协作图
10.1设计用例实现方案
虽然协作图不强调消息传递的时间序,但借助于 序列号可以表达时间序,序列号较大的消息发生较 晚。
消息序列号可以采用线性编号,但采用适当的多 级编号会使消息之间的结构关系更清晰。
如果一个对象在消息的交互过程中被创建,则可 在对象名称之后标以{new}。类似地,如果一个对象 在交互期间被删除,则可在对象名称之后标以 {destroy}。
2021/3/27
国防科技大学计算机学院
3
面向对象的设计方法
第十章 面向对象的设计方法
处理转换过程的任务
(1) 针对分析模型用例,设计用UML交互图表示的实 现方案。
(2) 设计技术支撑设施。在大型软件项目中,往往需 要一些技术支撑设施来帮助业务需求层面的类或子 系统完成其功能。这些设施本身并非业务需求的一 部分,但却为多种业务需求的实现提供公共服务, 例如,数据的持久存储服务、安全控制服务、远程 访问服务等。在面向对象设计中,需要研究这些技 术支撑设施的实现方式以及它们与业务需求层面的 类及子系统之间的关系。

《面向对象设计》PPT课件

《面向对象设计》PPT课件
在设计阶段我们往往关注类、接口和包,在实现阶段关注 构件,而在部署阶段则关注构件的部署,也就是将构件部 署在哪些结点上。
类及其依赖性
1. 类
在面向对象的程序设计中,类和接口是程序的基本组成单 元。 一个典型程序需要界面类专门负责表示用户界面信息, 需要数据库类负责与数据库进行交互,需要有业务逻辑类 负责算法计算等。 在计算机程序中,要设计和实现的所有类都具有唯一的 名字,在不同的阶段或从不同的角度可以将它们称为设计 类、实现类、系统类、应用类等。
类及其依赖性
2.继承依赖性
依赖性管理中最棘手的问题是由于继承所引起的依赖 性。继承是一种在父类和子类之间共享属性和行为的方式, 所以运行时可以用一个子类对象代替其父类对象。程序中凡 是使用父类对象的地方,都可以用子类对象来代替。一个子 类对象是一种特殊的父类对象,它继承父类的所有特征,同 时它又可以覆盖父类的方法,从而改变从父类继承的一些特 征,并可以在子类中增加一些新的功能。这样,从客户的角 度看,在继承树中为请求提供服务的特定对象不同,系统的 运行行为可能会有所不同。
类及其依赖性
(1)多态继承 根据为请求提供服务的对象不同可以得到不同的行为,这
种现象称为多态。在运行时对类进行实例化,并调用与实例 化对象相应的方法,称为动态绑定、后期绑定或运行时绑 定。相应地,如果方法的调用是在编译时确定的,则称为是 静态绑定、前期绑定或编译时绑定。
多态并不是伴随着继承而出现。如果在子类中不覆盖父类 中的任何方法,就不会产生多态行为。
二是如果确实需要创建新类,则在设计这些新类的协议时, 应该考虑将来的可重复使用性。
10.2 体系结构模块及依赖性
体系结构设计描述了建立计算机系统所需的数据结构和程 序构件。一个好的体系结构设计要求软件模块的分层及编 程标准的执行。

第10章-面向对象设计PPT课件

第10章-面向对象设计PPT课件

第10章 面向对象设计
3
教学重点
⒈架构设计的概念和原则; ⒉常用的架构摸式; ⒊详细设计原则和设计内容; ⒋设计模式。
教学难点
⒈架构设计的概念; ⒉常用的架构摸式; 3.详细设计原则和设计内容。
目录 首页 上页 下页 末页
第10章 面向对象设计
4
10.1 架构设计
一、软件架构与框架
(1)什么是软件架构 软件架构是一种思想,一个系统蓝图,对软件结构组
目录 首页 上页 下页 末页
第10章 面向对象设计
15
10.1 架构设计
四、常用的架构模式
2.黑板模式
黑板模式的思想是,有一系列独立的模块,或者说是 方案,这些方案能解决部分问题的一部分,这些方案进行 协作,使得问题问题能够最终解决。这就像一群人在一 块 黑板前,共同解决一个问题,根据当前问题解决的程度 和状态,不同的人上前到黑板上解决他所能解决的部分, 这样经过多人的协作,最终能够将问题解决。这就是 黑板 模式这个名字的来历。黑板模式的实现分为三个主要的组 件:黑板(Blackboard),知识源(Knowledge Source)和控制 (Control)。。如图下所示。
目录 首页 上页 下页 末页
第10章 面向对象设计
19
• 这种构架具有以下优点:
• 可以创建具有良好隐蔽性和高内聚、低耦合的构件。
• 设计者可以将整个系统的输入/输出行为看成是多个过 滤器行为的简单合成。
第10章 面向对象设计
1
第10章 面向对象设计
10.1 架构设计 10.2 详细设计 10.3 设计模式
目录 首页 上页 下页 末页
第10章 面向对象设计
2
教学目的与要求

面向对象设计

面向对象设计

面向对象设计面向对象设计是一种软件开发方法,它将现实世界中的事物抽象为对象,并通过定义对象的属性和方法来描述其特征和行为。

面向对象设计的核心思想是将系统组织为一系列相互协作的对象,每个对象都有自己的状态和行为,并且可以通过消息传递来与其他对象进行交互。

面向对象设计具有以下优点:1. 模块性:面向对象设计将系统分解为多个独立的对象,每个对象负责一部分功能。

这种模块化的设计使得系统易于维护和扩展。

2. 可重用性:面向对象设计鼓励通过继承和多态来实现代码的重用。

通过定义通用的父类和子类的特殊化实现,可以在不改变现有代码的情况下添加新功能。

3. 灵活性:面向对象设计可以应对需求的变化。

由于每个对象都相对独立,因此可以更容易地修改或替换单个对象,而不会影响到整个系统。

4. 可理解性:面向对象设计使用自顶向下的抽象思维模型,将现实世界的复杂性抽象为简单的对象和类的关系,使得系统的结构更加清晰可理解。

为了更好地应用面向对象设计,我们需要遵循一些基本原则和模式:1. 单一职责原则(SRP):一个类应该只有一个引起它变化的原因。

每个类都应该有一个清晰而独立的责任范围,这样可以提高代码的可维护性。

2. 开放封闭原则(OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。

通过利用接口、抽象类和多态,可以在不改变现有代码的情况下添加新功能。

3. 里氏替换原则(LSP):子类对象可以替换父类对象,并且其行为不会改变。

这个原则确保继承关系的正确性,避免了代码的混乱和错误。

4. 接口隔离原则(ISP):客户端不应该依赖于它不需要的接口。

接口应该尽可能小,具体到客户端的需求,避免了不必要的代码依赖。

5. 依赖倒置原则(DIP):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

抽象类和接口在面向对象设计中起到了关键的作用,通过它们来定义高层模块和低层模块之间的关系。

除了以上原则,还有一些常用的面向对象设计模式,例如单例模式、工厂模式、观察者模式等。

第10章 C++语言的输入与输出-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社

第10章 C++语言的输入与输出-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社

设置状态标志flags 清楚状态标志,并返回前状态标志 测试状态标志 设置标志flags, 并返回前状态标志 返回当前的宽度设置值 设置域宽w,返回以前的设置 设置小数位数p,返回以前的小数位数 返回当前的填充字符 设置填充字符ch,返回当前的填充字符
13
下面分别介绍这些成员函数的使用方法;
(1)设置状态标志:
cout<<”x_width=”<<cout.width( )<<endl; cout<<”x_fill=”<<cout.fill ( )<<endl; cout<<”x_precision=”<<cout.precision( )<<endl; cout<<123<<” ”<<123.45678<<endl; cout<<”______________________________\n”; cout<<”*** x_width=10,x_fill=, x_precision=4 ***\n”; cout.width(10); cout.precision(4); cout<<123<<” ”<<123.45678<<” ”<<234.567<<endl;
1. C++的流概述 ❖ 在C++中,输入输出流被定义为类,称为流类。 ❖ I/O 系 统 仍 然 是 以 字 节 流 的 形 式 实 现 的 , 流
(Stream)实际上就是一个字节序列,流总是 与某一设备相联系的,它既可以从输入设备 (如键盘、磁盘等)流向计算机内存,亦可以 从计算机内存流向输出设备(如显示器、打印 机、磁盘等)。 ❖ 输入输出的字节可以是ASCII字符、内部格式 的原始数据、图形图像、数字音频、视频等。

面向对象设计

面向对象设计

面向对象设计面向对象程序由对象组成,对象包括数据和对数据进行操作的过程(通常称为方法)。

面向对象设计最困难的部分是将系统分解成对象集合。

因为要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、扩展、复用等等,并且这些因素通常还是互相冲突的。

那么科学地对实体进行分解,合理地设计类与类、对象与对象之间的依赖关系的是至关重要的。

1. 面向对象七大设计原则•单一职责原则:设计目单一的类;•开闭原则(OCP):对扩展开放(对提供方),对修改封闭(对使用方)。

用抽象构建框架,用实现扩展细节。

o当软件需要变化时,尽量通过扩展来实现,而不是通过修改原有的方法。

•里氏替换原则:子类可以对父类进行扩展,但不能改变父类原有功能;o子类尽可能不重写父类的非抽象方法,继承实际是让两个类的耦合性增强了。

运用里氏替换原则可以将父类设计为抽象方法或者接口,让子类继承父类或实现接口,并实现父类中的抽象方法,尽量不要重写父类的非抽象方法。

•依赖倒置原则:要依赖于抽象,而不是具体的实现;针对接口编程;o依赖倒置的三种方式:构造器、接口、set方法;•接口隔离原则:使用多个专门的接口比使用单一的总接口要好;(接口的单一职责,尽量使用最小接口)o即接口的定义要尽量实现单一职责,子类不应实现自己不需要的方法。

同时也要注意接口的粒度,接口不能过小,过小会导致接口泛滥,不利于代码维护。

•组合重用原则:要尽量使用组合/聚合,而不是继承来达到重用的目的;•迪米特法则(最少知识法则):一个对象应当对其他对象尽可能少的了解;2. 设计模式(一)设计模式的基本概念设计模式:是对软件设计中普遍存在的(反复出现)的问题,所提出的解决方案。

主要关注软件系统的设计,与具体实现语言无关;•架构模式:软件设计中的高层决策(如C/S架构就属于架构模式);•惯用法:与语言相关,是最底层的模式,关注软件系统的设计与实现,实现时通过特定的编程语言来描述构件与构件之间的关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第10章面向对象设计
10.1 软件模块之间的依赖性可以从哪些角度和抽象层次进行分析?
在面向对象软件中,常见的软件模块有类、接口、包、构件。

因此,分析软件模块之间的依赖性就可以从类、接口、包和构件的角度和层次进行分析。

10.2 消除包之间循环依赖性的方法是什么?
本质上,两个包之间的依赖性来自于两个包中类之间的依赖性。

类之间的循环依赖性是个特别棘手的问题,好在大多数情况下可以通过重新设计避免循环依赖性。

具体方法是增加新包。

举例说明如下:
在下图中,包A依赖于包B,反过来包B又依赖包A,构成了循环依赖。

具体解决办法是:将包B依赖的包A中的元素从包A中分离出来,组成包C,使得包B不再依赖包A,而是依赖包C。

10.3 请给出构件的一般性定义,然后给出传统的软件工程环境及面向对象的软件工程环境中构件的定义,最后选择你熟悉的编程语言说明怎样定义一个构件。

软件构件是一种组装单元,它具有规范的接口规格说明和显式的语境依赖。

软件构件可以被独立部署,并由第三方任意组装。

OMG UML规范中将构件定义为“系统中某一定型化的、可配置的和可替换的部件,该部件封装了实现并暴露一系列接口”。

在传统的软件工程环境中,一个构件就是程序的一个功能要素,程序由处理逻辑和实现处理逻辑所需的内部数据结构以及能够保证构件被调用和实现数据传递的接口构成。

传统的构件也称为模块,是软件体系结构的一部分。

在面向对象的软件工程环境中,面向对象技术已达到了类级复用,而构件级复用则是比类级复用更高一级的复用,它是对一组类的组合进行封装(当然,在某些情况下,一个构件可能只包含一个单独的类),并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。

一个构件可以是一个编译的类,可以是一组编译的类,也可以是其他独立的部署单元,如一个文本文件、一个图片、一个数据文件、一个脚本等。

选择你熟悉的编程语言说明怎样定义一个构件。

(略)
10.4 典型的面向对象设计模型在逻辑上由哪几部分组成?对每一部分进行设计时所包含的主要内容是什么?
典型的面向对象设计模型在逻辑上将系统划分为4个部分,分别是问题域部分、人机交互部分、任务管理部分及数据管理部分。

1)问题域部分的设计
在面向对象设计过程中,可能要对面向对象分析所得出的问题域模型进行补充或调整。

例如,调整需求、复用已有的类、把问题域类组合在一起、增添泛化类以建立类间的协议、调整继承的支持级别、改进性能等。

2)人机交互部分的设计
人机交互界面的设计质量直接影响到用户对软件的使用。

在设计阶段,必须根据需求把交互细节加入到用户界面设计中,包括人机交互所必需的实际显示和输入。

3)任务管理部分的设计
任务管理主要包括任务的选择和调整。

常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务和协调任务等。

设计任务管理子系统时,需要确定各类任务,并将任务分配给适当的硬件或软件去执行。

4)数据管理的设计
在采用面向对象方法进行软件开发时,数据的存储还是普遍使用关系数据库。

在面向对象设计中,可以将UML类图看作是数据库的概念模型,一个类可以映射为一个表或多个表,此外,还要考虑类之间的关联关系、继承关系的映射。

10.5 用面向对象方法设计网上购书系统的软件结构,网上购书系统的业务如下:
某书店为方便客户通过Internet购买相关图书,开发一个“网上购书系统”,客户可以通过Web页面注册并登录“网上购书系统”,通过Web页面查看、选择图书,系统根据用户选择的图书单价、数量,系统自动生成订单,并计算总价格。

客户在提交订单之前,必须填写关于寄送地址和发票及付款方式等细节,一旦订单被提交,系统显示确认信息,并附上订单的详细信息。

客户可以在线查询订单的状态。

系统管理人员查看客户的订单,验证客户的信用和付款方式,向仓库请求所购图书,打印发票并发货。

答:本系统从逻辑结构上分为三层,Web页面层,业务逻辑层和数据库层。

Web页面层负责接收用户的请求,业务逻辑层在获知用户请求后,执行相应的业务逻辑,向数据库层发出数据请求,获得所需要的数据后,通知Web页面层将数据呈现给用户。

10.6 对10.5中的网上购书系统设计其问题域的类图。

问题域类包括客户类、系统管理员类、购物车类、订单类、图书类和发票类。

用户分为客户和系统管理员两种,所以是泛化关系。

客户和系统管理员都要对订单进行操作,所以和订单的关系是依赖关系。

购物车中存放的是用户选购的图书,是聚集关系。

具体见下图:
10.7 一所大学下设多个系,每个系包含多个教研室和多个学生班级。

每位教师只能归属于一个教研室。

学生分为本科生和研究生两种。

每位教师可以承担多门课程的教学任务,每个学生可以选修多门课程。

请根据以上问题描述画出类图。

从问题描述中,可得到大学、系、教研室、学生班级、教师、学生、教学任务、课程、本科生和研究生这10个类。

大学与系、系与教研室、学生班级、教研室与教师、学生班级与学生都是聚集关系,也可以看做关联关系。

学生同本科生、研究生之间是泛化关系。

具体见下图:
10.8 如何将含有继承关系的类图映射为关系数据库?针对10.6中设计的类图设计关系数据库。

通常使用以下两种方法来映射继承关系:
1)将基类映射到一张表,每个子类映射到一张表。

在基类对应的表中定义主键,而在子类对应的表中定义外键。

2)将每个子类映射到一张表,没有基类表。

在每个子类的表中包括基类的所有属性。

这种方法适用于子类的个数不多,基类属性比较少的情况。

在10.6题的类图中,共有7个类。

其中,用户同客户和系统管理员类是泛化关系,可映射为两个表——客户信息表和系统管理员信息表;如果客户类和系统管理员类二者的属性基本相同,也可以映射为一个表,只需在表中添加一个新属性来区分客户和系统管理员即可。

购物车、图书、订单和发票可分别映射得到一个表。

相关文档
最新文档