UML之深入浅出类图


-
1.综合N多高效、公司类图讲义; 2.研究生课堂使用效果极佳。
第四章 建立基本模型一一类图 按照面向对象的封裝和信息隐蔽原则,一个对象的属性和操作时紧密结合的,对黎的属性应该只由这 个对象的操作存取 (2)类是对具有相同属性、操作、关系和语义的对象集合的描述,也就是说它为属于该类的全邰对象 提供∫统一的抽象措述。对象是类的实例 个类的所有对象具有相同的属性,是指所有对象的属性的个数、名称、数据类型都相同,但各个对 象的属性值可以互不相同,并且随着程序的执行而变化。操作对」一个类的所有对象都是一样的,即所有 的对象共同使用他们类的定义中给出的操作方法 (3)类和对象的关系 类是一组对象,这些对象具有共同的属性和共同的行为 类是创建对象的模板 类可捕获对象的本质 类是对象的抽象,而对象则是类的实例,或者说是类的具体表现形式 如同个模具与用这个模具铸造出来的铸件之间关系。根据实际需要,通过对具有相同性质的事物的 抽象,构造岀模具,再用模具生产出具有这样性质的铸件。 类 实例 @70 图42类和对象的关系 在面向对象方法中,通过对具有相同性质的对象的抽象,构造出类,进而使用类构造出系统模型;在 系统运行时,又由类创建出对象。正是所创建的这些对象在计算机中的运行,完成了用户所要求的功能 4.1.5类的种类 1.抽象类 在进行类设计时,如果一些具体类具有相同的方法或属性,我们可以把这些相同的方法或属性从这些 具体类中抽取出来,把它们封装到一个抽象类中,然后,通过扩展抽象类,重新定义这些具体类。 抽象类是一种不能直接实例化的类,也就是说不能用抽象类创建对象。 在UML中,抽象类和抽象方法的表小是将其名字用斜体表小。但是由于斜体字在草图中不容易表现, 因此推荐用《 abstract》构造型来表示。图4-7中列出这两种不同的表示方法 Shape abstract, Shape ◆义 abstract》 drawin: Graphics) getBoundingAreat): in abstract》 geaRed:irt getBoundingAreai; int Square Cire quare Circle ◆:×g:Gi:hEs! Drew,g: GraphIcs 鲁 getAe彐):int treal: Ir UML标准表示法(用于蓝图 构造型表示法(适用于草图) 图4-7抽象类的2种表示方法 第3页共22页 第四章 建立基本模型一一类图 抽象类 shape(图肜)中定乂三个方法, drewO、 geared()是抽象方法, getboundingarea(是具体 方法。在 squre(正方形)和 circle(圆形)两个子类中,没有定义 getboundingarea(),确定义了drew( 和 getarea()方法 抽象类 shape定义的draw()和 setaria()是抽象操作,在不同的子类中,其实现方法是不同的 即,在 square和 circle类中,对上面两个抽象方法,有不同的实现。 2主动类 从运行的角度来看,还有一种特殊的类一主动类,主动类的实例称为主动对象,一个主动对象拥有 个控制线程并且能够控制线程的活动,具有独的控制权。 例如,命令处理程序就是一个主动类的例子,它从外面接受命令对象,然后在自身的控制线程内执行 命令。在第二章中,曾经说明UML1.0中主动类的表示方法(普通类的基础上加上粗边界),但是在UM2.0 中修改了主动类的表示法(在类的两边加上垂直线)。 3.模版类 在注入c十这样语言中,提供了一种叫做参数化类( parameterized class)的机倒,或叫做模版 〔 template)。例如,我们需要一些能过处理整型、浮点型、字符串的数组,普通的做法是为它们各创建 个类,这三个类除了数据类型不同之外,其他的都是相同,但是仍然要定义三次。 模版就是用来解决这个问题,可以根据占位符或者参数来定乂类,而不用说明属性、方法返回值和方 法参数的实际类型。通过实际值代替占位符即可创建新类。这样,就可以采用如图4-8所小的设计方案。 elements 20]: int <<bind>>add Element(e: int):void tElement(i: int): int Omnip oten ceArray Relements(size]:T ≤<hind>> String Array add Element(e: T): void string. 30) Element[30]:sting ° getElement(:int:T eLement(e: string void ≤<bind> getElement(: int): string (1oat,10) elements 10]: float CaddElemento getElemento 图4-8樸板类 4嵌套类 在诸如Java的语言中,允许你将一个类的定义放在另一个类定义的内部,这就是嵌套类,在Java中 也称为内层类。嵌套类是声明在它的外层类中的,因此只能够通过外层类或外层类的对象对它进行访问 在UML中,可以采用个描图标来衣示这种关系,如图4-9所示。 A 锚图标 图4-9嵌套类表示法 4.2属性与操作 UL中,表示一个类,主要是标识它的名称、属性和操作。如图4-3所示,类由一个矩形表示,它包 含3栏,在每栏中分别写入类的名称、类的属性和类的操作。 第4页共 第四章 建立基本模型一一类图 Order- 类名 borderDale 属性 desta"e彐 可见性 匙prce 属性 &pay ment tvpe 擐作 ispatch 可见性 close( 操作 图4-30rder类 用一个水平线划分成三个分栏的实线矩形表示类。在最上面的那个分栏放类名,中的分栏放属性列表, 最下面的分栏放操作列衣,每个属性和操作都各占·行,下图(a)给出的是衣示般类的符号。由于对象 是类得实例,一个炎的各个对象所拥有的操作都是相同的,因此对于对象只需描述对象名和其属性,下图 (b)给出的是表示对象的符号。 类名 对象名:类名 属性列表 属性 操作列表 图(a) 图(b 1.名称 锊个类都必须有一个有别于其他类的名称,类名部分是不能省略的,其他组成部分可以省略。名称 (Name)是一个文本串,表示方法有两种: (1)简单名:如图4-3中的0rder(订单),它就只是一个单独的名称 (2)全名:也称为路径名,就是在类名前面加上包的名称,例如java::awt:: Rectangel、 businessrule:: order等。 对于类的命名规范要求,由字符、数字、下划线组成的惟一的字符串即可。但在实际应用中,有一个 普遍采用的命名原则:采用 Came l case格式(大写字母廾头、混合大小写,每个单词以大写开始,邐免使 用特殊符号),尽可能避免使用缩写 2.属性 属性描述了类的静态特征,在面向对象编程中,把属性表示为成员变量。例如,在图4-3所示的 Order 类中,列出了 orderDate(下订单时间)、 destarea(送货区域)、 price(订单总价格)、 paymentType(支 付类型)四个属性,它们是用来描述每个具体的订单对象的。 在属性的前面有一个修饰,用来表示属性的可见性,属性的可见性一般都是 private,这样才符合面 向对象的“封裝”思想。通常属性名的第·个字母是小写的 3操作 操作是类所提供的服务,是对象被要求执行的服务。通俗地说,操作就是定义了对象所能做的事情。 在面向对象编程语言中,它通常表示为成员方法。对」操作的图示,有以卜儿点需要说明: ()操作名的命名规范也未硬性规定的,人家习惯采用和属性名相同的命名规则。 对于操作,也经常会提供可见性修饰,只是通常应该声明为pub1ic,否则它难以向其他类提供服务 (2操作在表示时可以只写出操作名,乜可以将操作拥有的参数也写出来,即写成员方法的完整签名 (3)属性和架作名之前可附加的可见性修的符: 第5页共22页 第四章 建立基本模型一一类图 加号(+)表示pub1C(共有的); 减号(-)表示 private(私有的); #号表示p0 tected(受保护的); 号表小包范国的 省略这些修饰符表示具有 package(包)级别的可见性。如果属性或操作名具有下划线,则说明它 是静态的。 4职责 职责指类承担的责任和义务。在矩形框中最后一栏中写明类的职责。如图4-4所示。 Str f nur ber of nations 手frd created Resporsiilty 图4-4职责的表示 5约束 约束指定」类所要满足的一个或多个规则。在UML中,约束是用花括号括起来的自由文本。如图3-4 所 Title bn st burbot of reception 图4-5约束的表示 举例如下 Class clock public: old seEme〔 int New: int ne则, int News} v0 id showtime〕 private int hour-Minute- second } vUi山Cuuk;ˉ SuLTIIH〔inL硎,⊥nLw,inLw3 { Hour=NewH Minute=NewM Second=news void clock : ShowTime(y cout<<Hour<<:<<inute<<.<<second<<endl } 其对应的类操 作、实例操作的表示法为 第6页共22页 第四章 建立基本模型一一类图 属性名 属性类型 类名 Clock hour int Minute. ir 访问模式 Sccond int 属性 SetTime(in NewH: int, in NewM: int, in News: int): void Show Time(: void 方法名称 参数名 参数类型 图4-6类图表示示例 4.3类图中的关系 类不是孤立存在的,因此,类与类之问创建了一种关系。按照关系的性质,把关系分为4种,它们是 泛化关系、关联关系、聚合关系、依赖关系。 关联 泛化 接凵和实现 类关系 依赖 组合 聚合 图4-10类关系 下面分别说明其语义 4.3.1泛化关系 定义:如果类A具有类B得全部属性和全部操作,而且还具有自己特有的一些属性或者操作,则A卬 做B的特殊类,B叫做A的一般类,A与B之间的关系称为继承关系。 继承关系又叫做一般一特姝关系,在UML中把继承关系称为泛化关系。 是从特殊元素到一般元素的分类关系称为泛化关系。模型元素可以是类、用例以及其他。表示法:继 承可衣示为从特殊类到般类的·条实线,在般类的那端有个空心三角。如图4-11所示 超类或父类 子类 泛化 图4-11泛化关系 继承是一种使用户得以在一个类的基础上建立新的类的技术。新的类自动继承旧类的属性和行为特 征,并可具备某些附加的特征或某些限制。新类称作旧类的子类,旧类称作新类的超类 继承的优点:能有效地支持软件构件的重用,使得当需要在系统中增加新的特征时,所需新代码最少 继承机制的强有丿之处还在于它允许稈序设计人员可重用一个未必完全符合要求的类,允许对该类进行修 改而不至于在该类的其它部分引起有害的副作用。继承性是 面向对象程序设计语言不同于其它语言的最主要特点是其它语言所没有的。 第7页共22页 第四章 建立基本模型一一类图 结构 说明 语法 泛 化 泛化 它是较一般类和较具体类之间的分类关系 标识 各个 类之间的共同性。 ⑨指明特化类(子类)的对象可取代泛化类(父类)的对象 是 关系 详解泛化关系如下图所示: 由象类 形状 父类 泛化关系 子类 圆圈 PrinteR ColorPrinter BlacktwhitePrinter t br It 图4-12泛化关系(打印机) 4.32关联关系 1.基本概念 定义:如果·个类的对象与另·个类的对象之间有语义连接关系,那么这两个类之间的语义关系就是 关联。 表示法:把∵元关联表示成连接两个类符号的实线。在关联的实线上,可以给出关联的名称,可以在 关联的端点上给出关联的一些性质。关联可以有方向,如果耍限制关联的访问方向,就要在关联上加上 个表示方向的箭头 如图所示 人 汽车 关联是类之间的一种关系,在类实例化后,这种关系将落实到每一组具有这种关系的对象之间。例如, 类“教师”和类“学生“之间存在着关系“指导毕业论文”这种关系所表达的信息是:类“教师”和类 第8页共22页 第四章 建立基本模型一一类图 “学生”之间存在着关系“指导毕业论文”,这种关系所表达的信息是:类“教师”的对象和类“学生” 的对象之间存在一种联系,其语义是表明某个(些)教师为某个(些)学生指导毕业论文。至于谁给谁指 导毕业论文,要到实现时才能确定,甚至要到系统交付使用后由用户指定。把类之间的这种静态关系称为 关联 把二元关联( binary association)表示成连接两个符号的实线。为了避免与其他图符号交叉,可 以把实线划成折线。表示关联的实现的两个端点可以连接到相同的类或不同的类,但是端点是不同的,因 此要在各个端点的实线上可以给出关联的名称。 如果没有对关联指定方向,从关联的任意一段都可以访问另一端,即通过关联的访问是双向的。如果 要限制关联上的访问方向,就要在关联上加上一个表小方向的箭头。如下图所小: 用户1 *口令 单向关联的表示法示例 如上图所示,给定一个用户就能找到他可能拥有的口令,但反过来给定一个口令就不需要去找响应的 用户。这种导向是单项性,就是通过“冂令”类的那端在关联线上加个箭头来说明的。 匚职员* 公司 2.多重性 如下图所小: 学生*拥有1.*[成绩单 通常在关联的两端写有表小数量约束的数字或符号,把他们称为关联的多重性( multiplicity)。关 联的另一端上的多重性是指,本段的一个对象所可能需要的另一端对象的个数。 上图所示含义:·名学生拥有份或多份成绩单,份成绩单只能被·名学生所拥有 个多重性描述的数量范围可由一系列的正整数区间来指明,各区间由逗号分开。区间的格式为 下限..上限 其中的卜限和上限均可为上整数值,下限也可为0,上限也可为*。如果多重性由单个的“*”构成, 那么它表明的范围为任意的正整数范围,它等价于0.*。 示例:假设左类为A,给定A的个对象a,右侧关联类为B 1表示a恰好与类B的一个对象关联; 0.1表示a最多与类B的一个对象关联 1..*表示a与类B的一个或多个对象关联; 0.*表示a与类B的零个或多个对象关联。 如下图: 关张角色 「教师1任系主任0.1□系 说明:一名教师可以是一个系的系主任,也可以不是任何系的系主任;一个系只有一名教师作为其系 主任。 第9页共22页 第四章 建立基本模型一一类图 3关联角色 在关联的每一个端点上可以有一个名字,用以表示与该关联的端点相连接的类所扮演的角色,把这个 名字称为关联角色名。 通常用名词为关联的角色命名。如上图红色标记的关联角色为“任系主任”。使用关联角色有助于理 解关联。 4关联类 在应用当中,我们发现两个类之间具有多对多的关系,并且有些属性不属于关联两端任何一个类,例 如,在某个应系统中有两个类: person(人)和 institute(协会),显然 person可以属于多个 institute, 而每个 institute肯定会吸纳很多 person。因此它们之间很显然就是一个多对多的关系 如果要记录每个 person在所属的 institute所担任的职务,应该把这个职务属性放在哪个类中呢? 这个属性既不属于 person,也不属于 insti tute。显然,这个属性应该放在关联类中(Role),如图4-12 所 Personn n institute Role Depart place 图4-12关联类R 实际上关联类既是关联又是类,它不仅象关联那样连接两个类,而且可以定义一组属」关联木身的特 注意:只有关联每一端的对象是1:1对应时,才能创建关联类。 结构 说明 语法 ( association)是类之间的种连接。是对象 关联 之间的长期关系。通常是双向的 ①识别类之后,需要识别关联 2)如果类与类之间的联系是单向的,则称为单向关联(导航关联) ③多重性( multiplicity)定义有多少对象参与了某个关系 小例如下: 雇员 部门 公司 示例:“雇员为公司工作” Can Person 0.1+g0( star tEngine ( 图4-13单向关系 关联关系是比较抽象的髙层次关系,为了对关联进一步具体化,我们需要了解关联的属性。关联的属 第10页共22页

用rational rose画类图,类图里面的加减号在哪里设置?_course
2019-12-10如题,默认是没有这些类图符号的,求帮助
18.75MB
C++程序设计
2017-05-19C++学习资源的完整版,是所有编程语言的基础,讲述清晰,有系统的知识体系
Python基础入门
2020-06-05【为什么学Python?】 Python 是当今非常热门的语言之一,2020年的 TIOBE 编程语言排行榜中 ,Python名列第一,并且其流行度依然处在上升势头。 借此机会,裴老师联合CSDN推出了本课程,希望能影响更多的人走进Python,踏入编程的大门。 【你将收获什么?】 · 本课程就是为开发者抓住“新基建”这个历史机遇而设置的。认真地学完了本课程,你就有了一把钥匙,所谓“时势造英雄”,Python语言就是未来成长的垫脚石。 · 从核心基础概念到常见第三方模块,包括数据结构、逻辑运算、常见语句、函数、类及第三方模块,丰富的案例帮助学员快速入门Python。 · “授人以鱼”和“授人以渔”并重是本课程的特色。通过在本课程的学习,学员能够以Python语言为载体,掌握研习高级编程语言的一般方法,为后续个人发展奠定基础。 [知识脉络图]
Java学习指南(Java入门与进阶)
2017-08-09这是Java学习指南系列课程的第1篇,介绍Java语言的入门语法,引领希望学习Java语言编程的初学者进入Java大门。 本课程不需要其他语言作为基础,可以直接学习。 课程从Java开发平台的下载和安装开始,从浅到深、从易到难,循序渐进地进行语法讲解。 为了让学员更好的掌握Java语言,本课程配套在线的Java题库及答案解析。 相比于其他语言,Java语言更科学、更容易掌握,快来和大家一起学习Java吧。
JAVA入门精品课程
2018-12-20课程目标: 1、让初学者从小白开始,善于运用知识点,解脱学习的苦恼 2、能够学习更多的工作中使用技巧,成为编程高手
Java系列技术之JavaWeb入门
2018-09-18JavaWeb里的基础核心技术
人脸识别项目实战特训营
2020-07-06人脸识别的技术及业务已经广泛应用于各行各业,如住宅安全管理、电子身份证护照、公安、司法和刑侦、自助服务、信息安全等。本训练营连续4天的时间,通过Opencv来采集需要识别的人脸数据库,并建立相关的ID信息标签,利用开源数据集,通过MTCNN模型、FaceNet模型的学习,编写人脸识别程序,并实现整个项目。
276KB
支付宝即时到账系统java程序开发包
2009-03-03支付宝即时到账系统java程序开发包 Date Now_Date=new Date(); String paygateway = "https://www.alipay.com/cooperate/g
Mysql数据库基础入门视频教程
2018-10-24Mysql数据库基础入门视频课程:属于零基础Mysql数据库教程,从数据库的基本专业术语介绍到数据库软件的下载使用 一步一步带你安装MySql。SQL阶段你将学会如果使用数据定义语言DDL,数据操作语言DML,数据查询语言DQL 在学会各中查询语句之后,会带你学习数据的完整性, 掌握如果正确的向数据库中添加数据 以上掌握技能之后,将会带你学习如何进行多表操作,关系的建立,各种连接查询等. 常用函数,事务的学习,您将学到什么是事务的提交,回滚,并发操作及脏读,幻读. 最后视图,存储过程,索引的学习,将会带你掌握更高级的数据库技术.
反编译Android应用
2015-01-26学习技术的渠道多种多样,而通过反编译一些经典应用来学习是一种比较好的途径,在Android领域,有比较好的反编译工具,本课程将会教大家如何反编译Android应用。
4KB
京东抢购商品秒杀脚本.txt
2019-11-29这是一篇关于京东秒杀的脚本,复制在控制台即可使用,操作简单,只需要修改两处的时间,精确到秒,回车即可
6.41MB
美赛2019年C题优秀论文原文和中文翻译
2020-03-02内含6片MCM2019年C题优秀论文原文和保留原格式的中文翻译 例 近年来,过量服用已成为美国意外死亡的主要原因,处方类阿片和海洛因是该 类别中最重的违法者。尽管许多人需要阿片类药物来控制其慢性和严重
717KB
Python从菜鸟到大神的100道经典练习题
2018-03-03说到好用简洁的大数据技术,除了Hadoop、R等等,Python也是其中熠熠生辉的一员,因而广受企业和商家的青睐。求职季,不少应聘者在面试相关职业时都被要求掌握Python的用法。以下,大圣众包威客平
Java小白修炼手册
2019-12-28Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 课程讲从零开始讲解Java 语言,小白快速入门学习的必修课!
高性能MySQL实战课
2020-05-21限时福利1:原价 129 元,最后2天仅需 69 元!后天涨价至98元 限时福利2:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利3:购课添加助教领取价值 800 元的编程大礼包 为什么需要掌握高性能的MySQL实战? 由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。 为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了「高性能 MySQL 知识框架图」,帮你梳理学习重点,建议收藏! 【课程设计】 课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。 一、性能优化篇: 主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。 二、MySQL 8.0新特性篇: 主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。 三、高性能架构篇: 主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。 四、面试篇: 程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。
-
博客
集合的案例-List集合存储学生对象三种方式遍历
集合的案例-List集合存储学生对象三种方式遍历
-
下载
aurora.exe
aurora.exe
-
学院
数据类型转换、运算符、方法入门
数据类型转换、运算符、方法入门
-
博客
LinkedList容器学习笔记
LinkedList容器学习笔记
-
下载
tq提取文字excel.VLX
tq提取文字excel.VLX
-
博客
我的人工智能破冰之路:向量化的意义
我的人工智能破冰之路:向量化的意义
-
学院
【数据分析-随到随学】量化交易策略模型
【数据分析-随到随学】量化交易策略模型
-
博客
洛谷 P4113 [HEOI2012]采花(树状数组)
洛谷 P4113 [HEOI2012]采花(树状数组)
-
学院
Qt项目实战之基于Redis的网络聊天室
Qt项目实战之基于Redis的网络聊天室
-
学院
第1章 Java入门基础及环境搭建【java编程进阶】
第1章 Java入门基础及环境搭建【java编程进阶】
-
下载
IEEE Signal Processing November 2020
IEEE Signal Processing November 2020
-
下载
基于BackTrader量化回测程序-Python
基于BackTrader量化回测程序-Python
-
学院
【数据分析-随到随学】Python语法强化与数据处理
【数据分析-随到随学】Python语法强化与数据处理
-
下载
datatables_demo.zip
datatables_demo.zip
-
学院
2021最新Kubernetes(k8s)集群实战精讲
2021最新Kubernetes(k8s)集群实战精讲
-
博客
【路径规划】人工蜂群算法之路径规划【Matlab 037期】
【路径规划】人工蜂群算法之路径规划【Matlab 037期】
-
下载
axure元件.zip
axure元件.zip
-
学院
Appium自动化测试套餐
Appium自动化测试套餐
-
博客
mysql 数据库排序规则
mysql 数据库排序规则
-
博客
堆实现O(1)时间复杂度查询中位数
堆实现O(1)时间复杂度查询中位数
-
博客
以太坊矿机芯动A11(2100M算力)
以太坊矿机芯动A11(2100M算力)
-
下载
ABP vNext 商业版
ABP vNext 商业版
-
学院
Laya 2.0 开发3D小游戏 入门教学
Laya 2.0 开发3D小游戏 入门教学
-
下载
office常用快捷键.docx
office常用快捷键.docx
-
学院
SQL Server 2016 高可用灾备技术合集
SQL Server 2016 高可用灾备技术合集
-
博客
第二章
第二章
-
博客
LeetCode刷题(每日一题) --674. 最长连续递增序列(动态规划)
LeetCode刷题(每日一题) --674. 最长连续递增序列(动态规划)
-
学院
【数据分析-随到随学】Spark理论及实战
【数据分析-随到随学】Spark理论及实战
-
学院
性能测试面面观
性能测试面面观
-
博客
kafka各版本偏移量监控总结
kafka各版本偏移量监控总结