OO2分析3-类图
OO概述
类图
特征字符串 property-string:
明确地指明该属性可能的候选值,如{红,黄,绿}
定义为类属性(static attibute),用下划线指明
Job 类属性 实例属性 类操作 实例操作 maxCount:Integer=0 jobID:Integer create(){jobID=maxCount++} schedule()
用例
message
交互
Com1
Com2
Com3ClassAClassA-D *
ClassD
Com4 Iface
ClassB
ClassC
ClassB
ClassC
分析类
设计类
类图与用例图的关系
类图的角色——外观和机理
教学目标
掌握类图的表示方式 掌握类间关系的表示方式 学习类图的构建过程 构建在线拍卖系统的类图
12
面向对象的基本概念
类(Class)
• 一个对象类描述的是具有相似性质(属性)的 一组对象,这组对象具有一般行为(操作), 一般的关系(对象之间)及一般语义。 • 类是对象类的缩写,类中的对象有着相同的属 性、行为模式。
13
面向对象的基本概念
类(Class)
结构化程序设计
处理方法 (函数)
18
面向对象的基本概念
封装的定义为: (1)一个限定所有对象内部软件的一个清楚界面; (2)一个描述这个对象和其它对象之间相互作用的接口 (3)受保护的内部实现,这个实现给出了由软件对象提 供的功能细节,实现细节不能在定义这个对象的类的 外面访问 方法 存储结构
协
一个对象
公有 消息 私有 消息
OO思想
多态机制
类关系与类图
类之间的四种基本关系(约束)
关联(association) 泛化(generalization) 实现(realization) 依赖(dependence)
类图(Class diagram)是最常用的UML图,显示出类、接口以及它们之间的 静态结构和关系;它用于描述系统的结构化设计。 类图以一种更一般的方式指定了系统的任何合法状态都必须满足的特性 对象图是类图的一个实例,对象图中的链接满足类图中定义的各种约束 对象图是对象与链接的集合,显示系统的一个特定状态
2
OO的基本概念
类 对象 封装 继承 重载 多态
3
类
是对具有相同数据和相同操作的一组相似对象的 抽象定义 理解
是对具有相同属性(不同值)和行为的一组对象的描述 是支持继承的抽象数据类型,是对象实例化的模版 一个对象就是类的一个实例 类定义了对象的特征,分为属性和操作 属性,定义类实例存储的数据,是对客观实体所具 有共同性质的抽象,类实例化的每个对象都有自己 特有的属性值 操作:也称方法,定义类实例的动态行为(算法)
两种重载
public
重载机制
提高OO程序灵活性和可读性
12
多态(Polymorphism)
描述:
通过重写(override)父类的同名操作,使子类对象和父类 对象接受同一消息,却提供不同服务 不同层次的类共享一个行为(函数名、参数和返回值类型 都相同),但行为实现却不同
动态联编(dynamic binding),也称滞后联编(late binging) 运行时,消息发送对象不知道谁将接收消息,依赖接 收对象以一种恰当的方式解释消息,根据消息接收对象所 属的类,决定实现什么样的行为,享受什么样的服务 增强OO系统的灵活性,减少信息冗余,提高软件的可重 用性和可扩充性
tanhuobin_uml05[1].Use-Case+Analysis
行为都是由相应的类来完成的 因此这些行为必须被分配到类中
分析阶段就是对这个过程的第一次尝试 这是一个从“无”到“有”的跨越
用例分析:对于每个用例实现
查找分析类
为分析类分配职责
构造参与类类图
-38-
分析类:达成目标的第一步
用例分析
-39-
什么是分析类
分析类代表了“系统中必须具备职责
用例分析流程
-20-
构架分析
构架分析的过程就是定义系统高层组
织结构和核心构架机制的过程
1.定义系统高层组织结构—备选构架
2.确定系统通用构架机制—分析机制
-21-
1.定义备选构架
RUP中的“定义备选构架”
创建系统
构架的初始草图 初步定义一组在构架方面具有重要意义的元素,
层之间建立依赖关系
-28-
2.构架机制
构架机制是对通用问题的决策、方针
和实践
构架机制描述了针对一个经常发生的问
题的一种通用解决方案 作为系统构架的一部分,构架机制常常 集中和定位在系统的非功能需求上
三类构架机制
分析机制(概念) 设计机制(具体) 实现机制(实际)
-29-
为什么使用分析机制
删除多余候选 删除不清楚的候选 删除执行者(系统外) 删除实现构造 删除属性 删除操作
-47-
示例:候选实体类
“学生选课”用例基本路径中的候选
实体类
-48-
示例:总结:分析类
-49-
总结:从用例中查找分析类
-50-
实例-旅店预订系统中查找分析类
-51-
2.2将用例行为分配给类
-26-
MVC备选构架示意图B-C-E
UML类图解析
UML类图解析1. 类类(Class)封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
在系统中,每个类都具有⼀定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。
⼀个类可以有多种职责,设计得好的类⼀般只有⼀种职责。
在定义类的时候,将类的职责分解成为类的属性和操作(即⽅法)。
类的属性即类的数据职责,类的操作即类的⾏为职责。
设计类是⾯向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
类图(Class Diagram)使⽤出现在系统中的不同类来描述系统的静态结构,它⽤来描述不同的类以及它们之间的关系。
在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下⾯对这三种类加以简要说明:(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,⼀般使⽤数据库表或⽂件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
实体类来源于需求说明中的名词,如学⽣、商品等。
(2) 控制类:控制类⽤于体现应⽤程序的执⾏逻辑,提供相应的业务操作,将控制类抽象出来可以降低界⾯和数据库之间的耦合度。
控制类⼀般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有⼀个商品增加类,注册对应有⼀个⽤户注册类等。
(3) 边界类:边界类⽤于对外部⽤户与系统之间的交互对象进⾏抽象,主要包括界⾯类,如对话框、窗⼝、菜单等。
在⾯向对象分析和设计的初级阶段,通常⾸先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。
2. 类的UML图⽰在UML中,类使⽤包含类名、属性和操作且带有分隔线的长⽅形来表⽰,如定义⼀个Employee类,它包含属性name、age和email,以及操作modifyInfo(),在UML类图中该类如图所⽰:1class Employee {2private String name;3private int age;4private String email;56public void modifyInfo() {7 ......在类图2中,操作method1的可见性为public(+),带⼊了⼀个Object类型的参数par,返回值为空(void);操作method2的可见性为protected(#),⽆参数,返回值为String类型;操作method3的可见性为private(-),包含两个参数,其中⼀个参数为int类型,另⼀个为int[]类型,返回值为int类型。
第三章 类图
3.1 类图的概念
图3-1电子商务网站的对象模型
3.1 类图的概念
2、类图的作用 类图常用来描述业务或软件系统的组成、结构和关系。
3、类图的组成元素 类 接口 协作 关系 注释 约束 包
3.2 UML中的类
1、类的表示 (1)类的定义
类是具有相似结构、行为和关系的一组对象的描述 符。 (2)类的表示
关于聚合与组合
2、泛化-Generalization
表示两个类元间“一般”与“特殊”的关系。 对应面向对象编程语言中类与类之间的继承关系。 “is a kind of”关系,XX是一种XX
Athlete
SwimmerBiblioteka Golfer3、实现-Realization
表达一种说明元素与实现元素之间的关系; 类和接口之间的关系是实现关系,表示类实现接口提供的
3.2 UML中的类
(7)类的约束 约束指定了类所要满足的一个或多个规则。 在UML中,约
束是用花括号括起来的自由文本。
Washing Machine
Brand name Model name Serial number Capacity Add clothes( ) Add detergent( ) Remove clothes( )
表示客户与提供者之间用不同的方法表现同一个概念, 通常一个概念更抽象,一个概念更具体。包括:
① 跟踪<<trace>>--声明不同模型中的元素之间存在一些 连接但不如映射精确。
② 精化<<refine>>--声明具有两个不同语义层次上的元 素之间的映射。
③ 派生<<derive>>--声明一个实例可以从另一个实例导 出。
UML类图详细教程ppt课件
Teacher
view,maintains
Grades
view
view
contains
student
Administrator generates
精选ppt课件R2e02p1ortCard
41
进一步创建类的关联: 增添WebSite类和Logon类
Teacher
view,maintains
contains
模型表达意义: •每个Person对象能够为很 多Company对象工作。 •每个Company对象能够雇佣很多Person对象
精选ppt课件2021
30
然而,当每个Person与雇佣它的Company间存在薪水属性时会发 生什么呢?薪水记录在何处呢?记录在Person类中还是在 Company类中?
21
关联的多重精选性ppt课件2021
22
角色 类关系还可以通过添加角色来进一步丰富。在类图中使用角色
可以帮助读者理解第一个类对于第二个类的作用。角色与多重性 显示在相同的位置,在指示类之间关系线的上面或者下面,如下 图所示。
精选ppt课件2021
23
下图显示了player类和Team类在关联中分别扮演两个角色。
答案是薪水实际上是关联本身的特性,对于Person对象和 Company对象之间的每个雇佣链接都存在特定雇佣的特定薪 水。
UML允许你使用关联类来建模这种情况,如下图所示。
精选ppt课件2021
31
2)依赖关系
依赖关系是指一个类的元素使用了另一个类。依赖关系描述类 之间的引用关系。
精选ppt课件2021
类的图精形选p表pt课示件和202示1 例
4
在类图中,根据建模的不同景象,类图标中不一定列出全部的 内容。如在建立分析模型或设计模型时,甚至可以只列出类名, 在图中着重表达的是类与类之间的联系;在建立实现 模型时,则应当在类图标中详细给出类的属性和方法等细节。
UML复习资料(完整)
2011UML复习题纲一、选择、判断、填空第一章UML与面向对象1、UML(Unified Modeling Language,统一建模语言)是软件和系统开发的标准建模语言,它主要以图形的方式对系统进行分析、设计。
2、UML是在多种面向对象分析与设计方法相互融合的基础上形成的,是一种专用于系统建模的语言。
它为开发人员与客户之间,以及开发人员之间的沟通与理解架起了“桥梁”。
3、UML不是开发工具,只是建模语言。
4、OOA三种基本模型:功能模型、对象模型、动态模型。
5、软件是程序、数据和相关文档的完整集合。
6、软件开发过程分为如下几个阶段:需求分析、总体设计、详细设计、编程与测试、维护。
7、面向对象的软件工程方法包括面向对易用的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)。
8、软件方法学包含3个要素:方法、工具和过程。
9、对象是现实世界中一个实际存在的事物,它可以是看得见摸得着的东西。
10、类是一组具有相同属性的操作的对象集合,它为所有属于该类的对象提供了统一的描述。
11、封装是指将对象属性和操作结合在一起,构成一个独立的对象。
封装使得对象属性和操作紧密结合在一起,这反映了事物的状态特性与动作是事物不可分割的特征。
12、继承是指子类可以拥有父类的全部属性和操作,继承是OO方法的一个重要的概念,并且是OO技术可以提高软件开发效率的一个重要原因。
13、多态性是指在父类中定义的属性和操作被子类继承后,可以具有不同的数据类型或表现出不同的行为。
14、OO开发中的三层设计:问题域类、GUI类和数据访问类。
15、面向对象设计准则:模块化、抽象、信息隐藏、低耦合、高内聚。
16、UML的构成:元元模型层、元模型层、模型层、用户模型层。
17、UML的核心是由视图、图、模型元素、通用机制组成。
18、UML中的视图细分:(1)用例视图(用例视图强调从系统的外部参与者角度需要的功能,描述系统应该具有的功能);(2)逻辑视图(逻辑视图的使用者主要是设计人员和开发人员,描述用例视图提出的系统功能的实现);(3)并发视图(并发视图的使用者主要是开发人员和系统集成人员,它主要考虑资源的有效利用、代码的并行执行以及系统环境中异步事件的处理);(4)组件视图(组件是不同类型的代码模块,它是构造应用的软件单元。
UML-3-类图
Account * 1 Owner
Company
Person
图6-14 用泛化表示xor关联
(2)泛化(Generalization)
类之间存在相似性和差异性,通过泛化,子类共享 定义在一个或多个父类(Parent class)里的结构或行 为 泛化有时被称作“is a kind of”关系 泛化是指父类与其一个或多个子类之间的关系 父类拥有公共属性、方法和关联,子类除了具有父 类的属性、方法和关联之外,还具有自己特征 每个子类继承(Inherit)其父类的特征
1 OilPump
oilPumNumber getOilPumNumber()
1 Engine
engineNumber getEngineNumber()
图6-9 组合和聚合
0..1
Radio panelNumber getPanelNumber()
(1)关联(Association)
6) 自关联
(2)类的属性
3)属性名
属性的命名应该用首字母小写的名词为属 性命名 如果属性名中包括多个单词,除了第一个 单词外,应该把其余单词的第一个字母大 写 4) 属性的类型 用冒号分隔属性名和属性的类型
(1) 关联(Association)
关联(Association)表示一个对象拥有另一个 对象 关联指两个类之间的“has a”的关系。关联 描述了有着共同的结构和语义的一组对象之 间的连接
2 类图
类图 (Class Diagram) 类图用于建立类、类的内部结构(类的属性和 方法)以及类与类相互之间的各种关系模型 类图是我们编程的最重要的模型依据 此外领域类图也可以充当数据模型(类似ER 模型)
管理信息系统第九章 面向对象的分析与设计
一、对象的基本概念 -2
对象、类和消ห้องสมุดไป่ตู้传递
二、类的继承 -1
类的层次
实际应用中,事物分类很难一蹴而就,往往要先进行粗分 类,再进一步细分,最终使分类相互联系而形成完整系统结构.继 承是类之间的重要关系,依赖继承机制,可由类产生对象,或由已 知类定义其它类.
继承是指一个类(即称子类)因承袭而具有另一个类 (或称父类)的能力和特征的机制或关系。
称为OOPL)。50年代后期,在用FORTRAN 语言编写大型程序时,常出现变量名在程序不 同部分发生冲突的问题。鉴于此,ALGOL语 言的设计者在ALGOL60中采用了以 "Begin……End"为标识的程序块,使块内变 量名是局部的,以避免它们与程序中块外的同 名变量相冲突。这是编程语言中首次提供封装 (保护)的尝试。此后程序块结构广泛用于高 级语言如Pascal 、Ada、C之中。
有继承关系的类之间应具有如下特性: 类间具有共享特征(包括数据和程序代码的共享); 类间具有细微的差别或新增部分(包括非共享程序代码 和数据); 类间具有层次结构。
二、类的继承 -2
类的层次
例如,飞机和交通工具都是类,它们之间的关系是“is a”关系,飞机是 一种特殊的交通工具。
通常,越上层的类越具有一般性和共性,越下层的类越特殊、越具体。
OOD是把系统所要求解的问题分解为一些对象及对象间传 递消息的过程;
UML中的类图详解及其应用场景
UML中的类图详解及其应用场景在软件开发过程中,UML(统一建模语言)被广泛应用于需求分析、系统设计和软件开发等各个阶段。
其中,类图作为UML的核心图表之一,用于描述系统中的类、对象以及它们之间的关系。
本文将详细介绍UML中的类图,并探讨其在实际应用中的场景。
一、类图的基本概念类图是一种静态结构图,用于表示系统中的类、接口、关联、继承、依赖等元素及其之间的关系。
在类图中,类用矩形表示,类名位于矩形顶部,类的属性位于矩形中部,类的操作(方法)位于矩形底部。
类之间的关系通过连线表示,如关联关系用实线箭头表示,继承关系用空心三角箭头表示,依赖关系用虚线箭头表示等。
二、类图的元素及其关系1. 类(Class):类是对象的抽象表示,用于描述具有相同属性和行为的一组对象。
类图中的类用矩形表示,类名位于矩形顶部。
2. 接口(Interface):接口是一组方法的集合,用于描述类的行为。
接口在类图中用带有<<interface>>标记的矩形表示。
3. 属性(Attribute):属性是类的特征,描述了类的状态。
属性在类图中用名称:类型的形式表示,例如“name:String”。
4. 操作(Operation):操作是类的行为,描述了类的方法。
操作在类图中用名称(参数列表):返回类型的形式表示,例如“getName():String”。
5. 关联关系(Association):关联关系描述了类之间的连接,表示一个类与另一个类之间的关联。
关联关系在类图中用实线箭头表示。
6. 继承关系(Inheritance):继承关系描述了类之间的继承关系,表示一个类继承自另一个类。
继承关系在类图中用空心三角箭头表示。
7. 依赖关系(Dependency):依赖关系描述了类之间的依赖关系,表示一个类依赖于另一个类。
依赖关系在类图中用虚线箭头表示。
三、类图的应用场景1. 系统设计:类图是系统设计的重要工具之一。
类图实例和习题要点
图书基本信息
图书类别信息 读者借阅图书信息
9
10 11 12
BorrowType
Store Reserve Fine
读者借阅类型信息
图书在图书馆中的存放位置信息 读者预订图书信息 读者罚款信息
系统的用户接口可以作为系统的边界类:
(如果采用页面形式表示用户接口,可把页面看成边界类)
Login(登录)、Main(主界面)、 SystemManage(系统管理)、 ReadrManage(读者管理)、 BookManage(图书管理)、 BorrowManage(借阅管理)、 FineManage(罚款管理)等窗体
2.每个HouseKeeper都有一个Manager负责,有的 Manager可能负责多个HouseKeeper,有的Manager 可能一个HouseKeeper都没有,下面哪幅图适合描述 类HouseKeeper和类Manager的关系? A
HouseKeeper
0..n 1
Manager
B
HouseKeeper
Librarian Manage Book
Borrow-Lend
Reader
顶层用例图
administrator delete user add user
update user
query user
系统管理员Manage User 子用例图
Librarian Set ReaderCard Query ReaderInfo
1.
(3)根据MVC模式寻找 根据用例图找出边界类;在用例图中找出控制类; 数据库设计完毕后,可以根据数据表获得实体类。 (4)有些类无法通过上述方法找到,可能还需要 从后面的动态模型(如时序图和协作图)中通过 分析对象来确定。
第章面向对象分析与设计类图和对象图
学校工作总结本学期,我校工作在全体师生的大力支持下,按照学校工作计划及行事历工作安排,紧紧围绕提高教育教学质量的工作思路,不断强化学校内部管理,着力推进教师队伍建设,进一步提高学校办学水平,提升学校办学品位,取得了显著的成绩。
现将我校一学期来的工作总结如下:一、德育工作本学期我校德育工作围绕学校工作中心,精心安排了“文明守纪”、“良好习惯养成”、“光辉的旗帜”、“争先创优”等主题教育月活动,从培养学生的行为规范,狠抓养成教育入手,注重务实,探索途径,加强针对性、实效性和全面性,真正把德育工作落到实处。
1.强化学生养成教育,培养学生良好习惯。
本学期,我校德育工作十分注重学生的常规管理,尤其重视对学生的养成教育。
一是利用班队会、红领巾广播站、国旗下演讲对学生进行品德熏陶。
二是以文明监督岗为阵地,继续强化了“文明班集体”的创建评比活动,通过卫生、纪律、两操等各项常规的评比,增强了学生的竞争意识,同时也规范了学生的行为。
三是继续加大值周检查的力度,要求值周领导、教师、学生按时到岗,在校门口检查、督促学生有秩序出入校园,从而使学生的行为规范时时有人抓,处处有人管,形成了良好的局面。
2.抓好班主任队伍建设,营造全员育人氛围。
班主任是学校德育工作最重要的力量,为了抓好班主任队伍建设,提高班主任素质水平,学校在第十二周组织开展了班主任工作讲座,在学期末举行了班主任工作交流,在活动中探索行之有效的工作方法,总结经验,交流心得,使班级管理工作更上新台阶。
3.充分发挥主题班队会的教育功能。
主题班队会,是对学生进行德育教育的一种特殊而卓见成效的方式之一。
为了充分发挥主题班队会的教育意义,第十三周,四(3)中队举行了“祖国美,家乡好”主题队会观摩活动,有效规范了我校主题中队会程序,强化了主题队会对学生的思想教育作用。
二、学校管理工作1.建立健全规章制度。
学期初,学校制定了出明确的目标计划及管理措施,做到了目标明确、工作具体,有效地增强了全体教师参与学校管理的主人翁意识,充分调动了全体教师的工作积极性,保障了教育教学工作的顺利开展。
Python设计模式-UML-类图(ClassDiagram)
Python设计模式-UML-类图(ClassDiagram)简介类图是⾯向对象分析和设计的核⼼,⽤来描述系统各个模块中类与类之间、接⼝与接⼝之间、类与接⼝之间的关系,以及每个类的属性、操作等特性,⼀般在详细设计过程中实施。
类图本⾝就是现实世界的抽象,是对系统中各种概念进⾏建模,并描绘出它们之间的关系,所以类图关注的对象就是元素及元素之间的关系。
类图建模步骤 - 抽象出类实体 - 识别出类的主要属性 - 画出类之间的关系 - 对各个类进⾏分析、梳理、设计类图的元素类图中包含以下⼏种模型元素:类、接⼝、关系、协作、注释、约束、包。
类 在UML的图形表⽰中,类的表⽰法是⼀个矩形,有三格组成,分别是类名、类属性、类操作。
抽象类中的类名及抽象⽅法都⽤斜体表⽰。
- 类名:⾸字母⼤写 - 类属性:格式为可见性属性名:类型 =默认值,如-name: String 可见性包括四种: + public - private # protected * package 属性名:单字属性名⼩写;多字属性名出第⼀个单词外其余单词的⾸字母⼤写 - 类操作:格式为可见性操作名(参数):返回值类型,如+getName(): String接⼝ 在UML的图形表⽰中,接⼝的表⽰法是分为两种:圆形表⽰法和构造型表⽰法。
接⼝由两栏组成,第⼀栏顶端是接⼝名称,第⼆栏是接⼝⽅法。
接⼝⽆属性只包含操作,且没有对外可见的关联。
- 圆形表⽰法 - 构造型表⽰法关系类图中类与类之间有泛化、依赖、关联、聚合、组合关系;接⼝与接⼝之间有继承关系;类与接⼝之间有实现关系。
这些关系本⾝就是类图中的元素,⽤不同的连线表⽰。
- 泛化关系 - 依赖关系 - 关联关系 - 聚合关系 - 组合关系 - 实现关系 类图中的关系较为复杂,以下分别详述。
协作 协作是指⼀些类、接⼝、关系等元素提供的交互⾏为,能够协助其他元素执⾏活动、实现功能的辅助类。
注释 对某些类和接⼝进⾏注释。
OO系统分析
1引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (3)2系统结构模型 (3)2.1初始对象表 (3)2.2初始类图 (4)2.3细化类图 (5)2.3.1属性的识别 (5)2.3.2 操作的识别 (7)2.4三层精化类图 (9)3系统行为模型 (12)3.1交互模型 (12)3.2状态模型 (16)概要设计说明书1引言1.1编写目的编写本说明书的目的是说明系统的静态结构及动态结构,包括初始的类模型、细化的类、动态交互模型,为进一步的设计和开发提供依据。
预期读者为:软件开发的人员,项目评审人员,及软件测试人员。
1.2背景说明:a.待开发软件系统的名称:聊天室系统;b.本项目的任务提出者:李伟,陈梓初,戴思远,让涛,王梦君;c.本项目的任务开发者:李伟,陈梓初,戴思远,让涛,王梦君;d.用户及实现该软件的计算中心或计算机网络:个人电脑;e.该软件系统同其他系统或其他机构的基本的相互来往关系:本系统可作为日常生活或办公中的即时聊天工具。
1.3定义用户输入:用户输入的用户名及密码用户名及口令与用户分类信息:存放在一个数据库表中,用以判断该用户是普通用户还是管理员用户;公告系统:公布一些系统的最新信息,应用。
用户管理:用户可以查找,添加好友,以及对好友进行分组,设置好友对自己的访问权限等管理,用户的级别越高,拥有的权限就越多。
聊天管理:用户可进行一对一的私人聊天,也可在拥有一定权限后建一聊天室或被别人邀请进入聊天室进行多人聊天,聊天时可选择相同的背景音乐。
文件管理:用户可以上传一些文件,如音乐,图片等,拥有权限的好友可以进行使用,下载等操作,但上传的文件不能拥有不和谐的内容,否则管理员将对其进行删除。
1.4参考资料1. 孙涌等编,现代软件工程,北京希望电子出版社2002年2. 齐治昌等,软件工程(第二版),高等教育出版社,20043. Pressman R S. Software Engineering: A Practitioner’s Approach. 3rd4. 郑人杰等,实用软件工程(第二版),清华大学出版社,19972系统结构模型2.1初始对象表通过对需求的分析,提炼出可能的对象/类,这是面向对象系统分析设计的关键,也是难点所在。
软件工程的23种设计模式的UML类图
软件工程的23种设计模式的UML类图0 引言谈到设计模式,绝对应该一起来说说重构。
重构给我们带来了什么?除了作为对遗留代码的改进的方法,另一大意义在于,能够让我们在写程序的时候能够不需事先考虑太多的代码组织问题,当然这其中也包含了应用模式的问题。
尽管大多数开发者都已经养成了写代码前先从设计开始的习惯,但是,这种程度的设计,涉及到到大局、到总体架构、到要紧的模块划分我觉得就够了。
换句话说,这时就能写代码了。
这就得益于重构的思想了。
假如没有重构的思想,有希望获得非常高质量的代码,我们就不得不在开始写代码前考虑更多事实上并非非常稳固的代码组织及设计模式的应用问题,那开发效率当然就大打折扣了。
在重构与设计模式的合理应用之下,我们能够相对较早的开始写代码,并在功能尽早实现的同时,不断地通过重构与模式来改善我们的代码质量。
因此,下面的章节中,在谈模式的同时,我也会谈谈关于常用的这些模式的重构成本的懂得。
重构成本越高意味着,在遇到类似的问题情形的时候,我们更应该提早考虑应用对应的设计模式,而重构成本比较低则说明,类似的情形下,完全能够先怎么方便,怎么快怎么写,哪怕代码不是很优雅也没关系,回头再重构也很容易。
1 创建型1.1FactoryMethod思想:Factory Method的要紧思想是使一个类的实例化延迟到其子类。
场景:典型的应用场景如:在某个系统开发的较早阶段,有某些类的实例化过程,实例化方式可能还不是很确定,或者者实际实例化的对象(可能是需要对象的某个子类中的一个)不确定,或者者比较容易变化。
如今,假如直接将实例化过程写在某个函数中,那么通常就是if-else或者select-case代码。
假如,候选项的数目较少、类型基本确定,那么这样的if-else还是能够同意的,一旦情形变得复杂、不确定性增加,更甚至包含这个构造过程的函数所在的类包含几个甚至更多类似的函数时,这样的if-else代码就会变得比较不那么容易保护了。
领域模型
LineItem
quantity
... ...
需求
概念类、术语、概念、 属性、关联
经历状态变化的领域对象、 属性和关联
领域模型中某 些术语的细化
Process Sale
1. Customer arrives ... 2. ... 3. Cashier enters item identifier. 4....
• 确定一组概念类是OO分析的核心。(每次 早期迭代不超过几个小时的时间来完成这 项工作)
• 领域模型的范围限定于当前迭代所开发的 用例场景,通过迭代不断演进。
• 领域模型与其它制品的关系见图9-1 • 领域模型的示例见图9-2
3
业务建模
Sale
date ...
UP制品关系示例 域模型
1
1..*
Sales
11
动机:降低与OO建模之间的表示差异
领域模型中的Payment是概念, 但在设计模型中的Payment是软 件类。它们不是一回事,但前 者对后者的名称和定义有启发 作用。
这减少了表示差异
这是对象技术的主要思想之一
UP领域模型 涉众对领域内重要概念的看法
Payment amount
1 Pays-for 1 date
因此,涉众所设想的领域与其在软件的表示之间的表示差异被 降低
图9-6 OO建模减小了表示差异
12
如何创建领域模型
1. 寻找概念类 2. 将其绘制为UML类图中的类 3. 添加关联和属性
13
如何找到概念类
• 找到概念类的三条策略
– 重用和修改现有模型。
• 在许多常见领域中都存在已发布的,绘制精细的领 域模型和数据模型
– 使用分类列表(见P104表9-1) – 确定名词短语。将对领域的文本描述中的名词
实战OO:鲁棒分析
实战OO:鲁棒分析徐锋/ 文引言曾经有人指出结构化分析技术存在一个致命的弱点,其在分析模型和系统的设计模型之间,存在着一个本质性的断层。
这个断层导致系统构想与实现在设计时产生了分离。
而在面向对象系统中,是否也存在这个现象呢?从理论上说,OO技术是可以将系统中几乎独立的各个方面链接成一个语义上的整体。
但在许多OO的实践中,却也感受到了这种分析与设计的鸿沟,当完成了用例建模之后,要开始绘制顺序图或协作图,至而演化成为设计类图,总是感到有些力不从心。
其实存在着一个方法,它可以有效地填补这个鸿沟,那就是Ivar Jacobson在1991年引入的OO世界的Robustness分析,中文译做鲁棒分析、健壮性分析。
虽然“Robustness 分析”这一名字中带有分析一词,但准确地说它有着很多与设计类似的工作,只是它并不能够算是正式的设计,因此被归到分析阶段中。
也许是由于简单易用,也许是由于它通常不被文档化保存,只是绘制成草图的形式,现在在RUP中、在很多OO技术书籍中,好像越来越少看到它的出现。
但是希望这一切不要让你与这个强大的工具擦肩而过,学会它吧,它将成为你强大的秘密武器。
什么是鲁棒分析在和大家一起运用鲁棒分析技术继续完成我们的任务之前,还是一起来了解一下什么是鲁棒分析?有了一些基本的概念和认识,才能够有效地应用它。
1 鲁棒性分析的作用鲁棒性分析具体来说有什么用呢?它是如何帮助大家跨越分析与设计之间的鸿沟呢?在OO分析与设计中,它能够完成以下几个关键任务:1)正确性检查:鲁棒分析将通过比顺序图更简单、更有效的图形来描绘用例中的传递过程,从而确保用例是正确的,而且没有指定对于特定对象来说不合理、不可能的系统行为。
而且,熟练掌握鲁棒分析,甚至可以成为编写用例描述时结合使用的一种有效方法。
2)完整性检查:通过鲁棒分析,你可以很容易地找到用例描述中所有必须的扩展路径。
3)持续发现对象:在做鲁棒分析时,你将开始思考具体的细节,从而很容易发现在域建模时遗失的对象,而这些对象在绘制顺序图时不容易被重新找到,而只会让你感觉根本无法绘制出相应的顺序图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在尚未确定是不是主动对象之前,暂时用普通对象的类符号表示。
2019/9/19
15
类的命名
适合该类及其特殊类的全部对象实例*
汽车加摩托车->机动车;还有马车->车辆
反映个体而不是群体*
书-书籍;船-船舶*
使用名词,或带有定语的名词 ,避免无意义的符号
如线装书
考虑使用适当种类的语言文字对类命名。
它代表属于该类的全部对象实例。
类名 属性 操作
对象名:类名
普通类
对象
识别对象与类
在识别对象与类时,问题域和系统责任仍是 工作的基础。因为二者从不同的角度告诉分 析员应该设立哪些对象。
研究问题域
侧重于客观存在的事物与系统中对象的映射。 可以启发分析员发现对象的因素包括:人员、组 织机构、物品、设备、事件(如索赔、上访、交易) 、表格、日志、报告和结构等。 其中的结构可能是多种多样的,例如,在概念类 别上,汽车之上有车辆,之下可细分为客车和轿车, 左右有摩托车和拖拉机,之内有发动机。它还可作成 车队的一个成分。
人员
设备
外系统
从不同的角 度考虑人员 和设备
考虑系统责任
对照系统责任所要求的每一项功能,查看是否可以由现有的对 象完成这些功能。这可启发我们发现问题域中某些遗漏的对象。
如果已经建立了用况模型,考虑执行下列的附加步骤: ■ 使用用例产生场景。 ■ 使用场景寻找已错过的类。
名词技术
从名词到对象或类通常有一对一的映射。运用名词、代词和名
划线的方式,表示类范围的属性,否则属性 是实例范围的。
属性1 ······ 属性n
操作1 ······ 操作m
普通类
识别属性
按常识这个对象应该有哪些属性? 在当前的问题域中,对象应该有哪些属性? 根据系统责任,这个对象应具有哪些属性*?
如信用卡的使用 建立这个对象是为了保存和管理哪些信息? 对象为了完成其功能,需要增设哪些属性? 对象是否需要通过专设的属性区别其状态*?
在中国:可用中、英文双重命名*
建立类图的对象层
用类符号表示每个对象类 填写类描述模板 若发现新的属性与操作、关系,可以随时加到类符号中。
第四章 建立基本模型—类图
2 定义属性与操作
2019/9/19
17
17
定义属性
属性是用来描述对象静态特征的一个数据项 。 注意:属性是与问题高度相关的。 从技术观点上,属性是一些变量(数据项或状态信息), 包含它的每一个对象(实例)都具有自己的值。 按照面向对象方法的封装原则,一个对象的属性和操作是 紧密结合的,对象的属性只能由这个对象的操作存取。
在类描述模板中,写出:
说明操作的职责
操作原型(消息的格式)
消息发送(指出在这个操作执行时,需要请求哪些别的 对象操作,即接收消息的对象类名以及执行这个消息的 操作名)
约束条件:如果该操作的执行有前置条件、后置条件, 以及执行时间的要求等其它需要说明的事项,则在这里 加以说明。
实现操作的方法(文字、活动图或流程图)。
类是对一组具有相同属性和操作的一组对象的抽象描述。 一个类的所有对象具有相同的属性。 各个对象的属性值则可以互不相同,并且随着程序的执行而 变化。 操作,对于一个类的所有对象都是一样的。 由一个类生成的一个对象可以扮演不同的角色。 一个类的一个角色是在特定的语境下该类的对象所呈现的行 为。
表示法:在模型中用类符号来表示一个类,
在OOA中,只对识别那些必须由对象提供的、在算法上复杂 的业务操作(如要进行某些计算或监控操作 )感兴趣。
定义操作的策略与启发
(1)考虑系统责任 有哪些功能要求在本对象提供*?
(2)考虑问题域 对象在问题域对应的事物有哪些行为* ?
(3)分析对象状态 在每种状态下对象可能发生什么行为?对象状态的转换,是 由哪些操作引起的?--状态图讲述
如属性必须是整个实体的特征,而不是其成分的特征*
是否可通过继承得到? 可以从其他属性直接导出的属性; 与实现有关的因素,推迟到OOD考虑(规范化、对象标识、性 能问题)
属性的命名和定位
命名:原则与类的命名相同 定位:针对所描述的对象,适合全部对象实例。
属性的详细说明
把每个属性都填写到相应的类符号中去,并在相应的类 描述模板中进行详细说明。
(1)舍弃无用的对象 通过属性判断: 是否通过属性记录了某些有用的信息? 通过操作判断: 是否通过操作提供了某些有用的功能*? 二者都不是——无用 但是,也存在这样的对象,没有属性仅提供操作,或有属
性无操作的情况。
(2)对象的精简 只有一个属性的对象
班级 …… 1 ……
班主任
1
姓名
只有一个操作的对象
是不是高内聚的 一个操作应该只完成一项单一的、相对完整的功 能
调整——拆分 或 合并
2019/9/19
27
27
操作的命名和定位
命名:动词或动宾结构
定位: 与实际事物一致 例:售货员——售货*,商品——售出* 在泛化中的位置 ——适合类的全部对象实例
描述操作
把每个对象的操作都填写到相应的类符号中。
例如人的通信地址,包括国家、省、城市、街道、门牌号码等内容,但这些内容在通信地址 这个概念上是不可分的。在定义“人员”对象的属性时,应该使用一个属性“通信地址”,而不 应把有关通信地址的各项内容拆散开用多个属性来描述。
若一个对象与另一个对象有关系,其属性必须捕获该对象的性 质,而不是关系或关系中的其他对象的性质;
(4)追踪操作的执行路线 模拟操作的执行,并在整个系统中跟踪* 。
(5)用动词识别操作 (6)查看每一个属性,因为要用对象的操作来对其进行操纵
审查与调整
审查对象的每个操作 是否真正有用 是否直接提供系统责任所要求的某项功能? 或者 响应其它操作的请求,间接地完成某种功能的某 些局部操作? 调整——取消无用的操作
认识对象的主动行为并识别主动对象
主动对象是具有主动行为的对象,在设计阶段是拥有线 程或进程并能够启动控制活动的对象。主动类是其实例 为主动对象的类。 识别主动对象的策略: (1)考虑问题域
哪些对象需呈现主动行为*?--按定义
(2)考虑系统责任
根据系统责任观察系统功能的构成层次,重点考虑完成最外层 功能的对象是否应定义为主动对象。
词短语识别对象和类(寻找“现实世界”的对象和类)。
用单个的专有名词或代词(Jim、他、她、雇员号5、我的工作 站、我的家)以及直接引用的名词(第六个参赛者、第一百万次购 买)识别对象。
用复数名词(人们、顾客们、开发商们、用户们)以及普通名
词(人、顾客、雇员、工作站)来识别类。
2019/9/19
8
审查与筛选
(即捕获不同的概念),就需要把这样的概念作为不同的对象。
2019/9/19
12
抽象出类
对象分类 先使用问题域知识从对象中识别出类。
对类进行调整 (1)类的属性或操作不适合该类的全部对象 例:“汽车”类的“乘客限量”属性,不适合于吊车、铲车 问题:分类不够详细——进一步划分特殊类 (2)属性及操作相同的类 ——考虑能否合并为一个类,如计算机与吸尘器 (3)属性及操作相似的类 ——考虑能否提升出一个一般类,或形成整体部分结构。 例:轿车、货车,抽象出汽车;机床与鼓风机用电机做成分. (4)同一事物的重复描述 例:“职员”和“工作证” ——取消其中一个
[可见性] 属性名[‘:’类型][‘ =’初始值]
可见性分为+(公有的)、#(受保护的)或 -(私有的) 、 ~(包,只有在同一包中声明的类能够使用这一属性)。
在对象/类中,必须给每一个属性一个唯一的名字。 属性的类型可以是常见的基本数据类型,也可以是自己定 义的类型。
OO方法中有“实例属性”和“类属性”的概念之分。上
第四章 建立基本模型—类图
1 定义对象与类 2 定义属性与操作 3 定义关系 4 定义接口
2019/9/19
1
1
第四章 建立基本模型—类图
1 定义对象与类
2019/9/19
2
2
概念与表示法
对象是具有明确语义边界并封装了状态和行为的实体,由一 组属性和作用在这组属性上的一组操作构成,是构成系统的一 个基本单位,它用于描述客观事物。
如果想要在OOA阶段记录方法的详细文字描述或算法,则把 它们放在类描述模板中,如有必要也可放在注释中。该项工作应 该在OOD阶段完成。
识别操作
诸如创建(创建并初始化一个新对象)、连接(将一个对象 与另一个对象连接)、访问(得到或设置属性值)、断开连接( 将一个对象与另一个对象的连接断开)和删除一个对象之类的操 作都属于在算法上是简单的操作,在OOA不予以考虑。
操作
对象行为分类
(1)系统行为 例:创建、删除、复制、转存
(2)对象自身的行为——算法简单的操作 例:读、写属性值
(3)对象自身的行为——算法复杂的操作 计算或监控
2019/9/19
23
23
概念与表示法
操作是类的对象被要求执行的服务。
[可见性] 操作名[‘(‘参数列表’)’][‘:’返回类型]
可见性:+(公有的)、#(受保护的) 、-(私有的)或~(包) 。 内部操作和外部操作, 特征标记 类范围操作(静态操作)是用来创造实例或者操纵静态属性的 操作。 例如C++中的前面冠以static的成员函数,就是类范围操作。 表示法 类范围的操作用带下划线的名字和类型表达式串表示。实例 范围操作是默认的,对其不用标记。
问题域中的某些事物实际上是另一种事物的附属品和一定意 义上的抽象。例如,工作证对职员、车辆执照对车辆、图书索引 卡片对图书都是这样的关系。
有些时候,用相同的名词捕获两个不同的概念;这就必须产 生一个新词(补充对象),以确保每一个词捕获一个概念或“事 物”。