2019-01-19 20:58:38 budding0828 阅读数 485
  • 软件工程--实践者的研究方法

    软件工程专业以计算机科学与技术学科为基础,强调软件开发的工程性,该课程使学生在掌握计算机科学与技术方面知识和技能的基础上熟练掌握从事软件需求分析、软件设计、软件测试、软件维护等工作所必需的基础知识、基本方法和基本技能。

    3708 人正在学习 去看看 刘安战

第三章:类图

概念
  • 类图的概念:类图是描述类、接口以及它们之间关系的图,它显示了系统中各个类的静态结构,是一种静态模型。
  • 分类可以有效地使复杂问题简化。建立类模型的过程,是把现实世界中与问题有关的各种对象及其相互关系进行抽象和分类的过程。
类图的组成

2类元素(接口、类),4种关系
在这里插入图片描述

  • 对象:是人们对某个事物的一种抽象描述。对象的基本特征可以归纳为对象的属性和行为两类。

  • 类:类是指对一组具有相同特征的对象的抽象描述;任何对象都是某个类的实例。

  • 关联关系:

  1. 概念:关联用来表示来表示两个(或多个)类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的引用。
  2. 表示:用一条无向线段表示,是一种双向关系。例如客户和订单的关联:从客户看,订单是他提交的;从订单看,它有一个客户。用一条有向线段表示,是一种单向关系。
    在这里插入图片描述
  3. 名称:关联的名称表达了关联的内容,一般使用动宾结构短语。关联的名称仅有语义作用,不转换为代码
    在这里插入图片描述
  4. 可见性:用可见性修饰角色名称,以说明该角色名称可以在哪些范围内被访问。
  • 泛化关系:
  1. 概念:泛化关系(继承关系)定义类和包之间的一般元素和特殊元素之间的分类关系。泛化也称之为继承或派生。
    在这里插入图片描述
  2. 区别:
    泛化(Generalization): 抽象化
    特化(Specialization): 实例化
  • 依赖关系:
  1. 概念:依赖表示一个类以某种形式依赖于其他类。当两个类处于依赖关系中时,其中一个类的改变可能会影响另一个类。
  2. 在程序代码中,依赖关系意味着一个类的对象出现在另一个类的操作当中。常见的有两种情况:一个类将另一个类的对象作为自己某个操作的参数(形参),或者是操作的局部变量。
    区别:
  • 依赖关系VS关联关系
  1. 从符号上
    在这里插入图片描述
  2. 从语义上:
    当一个类的实例与另一个类的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系。
    “我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。
  • 实现关系:

  • 聚合与组合:

  1. 概念:
    对于聚合:
    聚合表示类之间的整体与部分的关系。聚合意味着一个类拥有但共享另一个类的对象。
    当整体类不存在时,部分类仍可能存在。部分类被销毁时,整体类也将能够存在。
    对于组合:
    组合是一种特殊形式的聚合。与聚合相比,它有两个特点:
    一个部分类最多只能属于一个整体类
    当整体类不存在时,部分类将同时被销毁。
    在这里插入图片描述
  2. 区别
  • 关联VS聚合(组合)
    关联关系所涉及的两个类是处在同一个层次上的。比如学生和课程就是一种关联关系,而不是聚合关系,因为学生不是由课程组成的。聚合关系涉及的两个类处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和显示器、键盘、主板、内存就是聚合关系,因为主板等是电脑的组成部分。
  • 聚合VS组合
    组合:整体类端的重数必须是1,部分类的重数是任意的
    聚合:整体类端的重数可以大于1,部分类的重数是任意的
  1. 画图:
    聚合也是表示类和类之间的“整体-部分”关系,用空心菱形表示。
    组合是聚合的一种特殊情形,用实心菱形表示
    在这里插入图片描述
  • 约束规则
  1. 概念:
    在画类图的过程中,关联、属性和操作等基本要素都要为模型加注约束条件。
    约束规则的语法:将约束条件放在括号{ }中,用自然语言或其他常见的设计语言来描述,其描述要简洁准确。
    在理想的情况下,在所使用的程序设计语言中,规则应该作为断言来实现,并在调试代码时调用它。
    在这里插入图片描述
  • 对象图
    在这里插入图片描述
三个层次的观点
  • 概念层:描述应用域中的概念,是对现实世界的直接描述,与实现它们的类有关,但与实现方案和实现语言无关。
  • 说明层:描述软件的接口,而不是软件的实现。一个类型描述一个接口,但可能有多种实现。
  • 实现层:从实现的角度定义类及其实现,揭示了软件实现体的构成情况。
类图建模分析步骤

(1)寻找出需求中的名词(候选对象)。
(2)合并含义相同的名词,排除范围以外的名词,并寻找隐含的名词。
(3)去掉只能作为类属性的名词。
(4)剩下的名词就是要找的分析类(候选类)。
(5)根据常识、问题域、系统责任确定该类有那些属性。
(6)补充该类动态属性,如状态、对象间联系(如聚合、关联)等属性。
(7)从需求中的动词、功能或系统责任中寻找类的操作(候选操作)。
(8)从状态转换,流程跟踪、系统管理等方面补充类的操作。
(9)对所寻找的操作进行合并、筛选。
(10)对所寻找的操作在类间进行合理分配(职责分配),形成每个类候选操作。
(11)补充每个类的的分析文档,为类的进一步设计打下基础。

小结:
  1. 类和对象的表示法
    (1)名称;(2)属性;(3)行为;
  2. 类之间的各种关系
    (1)继承:子类继承了超类的所有属性和行为;
    (2)关联:两个不同类之间关联,可以单向或双向;
    (3)聚合:强关联关系,整体与部分的生命周期分开;
    (4)组合:强聚合,整体与部分的生命周期相同;
  3. 三个概念层次
    (1)概念层;(2)说明层;(3)实现层
2019-05-27 10:00:29 qq_43390235 阅读数 7727
  • 软件工程--实践者的研究方法

    软件工程专业以计算机科学与技术学科为基础,强调软件开发的工程性,该课程使学生在掌握计算机科学与技术方面知识和技能的基础上熟练掌握从事软件需求分析、软件设计、软件测试、软件维护等工作所必需的基础知识、基本方法和基本技能。

    3708 人正在学习 去看看 刘安战

emmmmmmmmmmmm
软件工程概论:一堂快乐听讲(玩游戏)、快乐(熬夜)画图、开心查实验的课
快考试了
记录一下快乐学习2小时速成大法之UML类图与类的关系

在这里插入图片描述

虚线箭头指向依赖;

实线箭头指向关联;

虚线三角指向接口;

实线三角指向父类;

空心菱形能分离而独立存在,是聚合;

实心菱形精密关联不可分,是组合;

在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化、实现、依赖和关联。其中关联又分为一般关联关系和聚合关系,合成关系。下面我们结合实例理解这些关系。

基本概念

类图: 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

类图的3个基本组件:类名、属性、方法。
类图
泛化:表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。直接使用语言中的继承表达。在类图中使用带三角箭头的实线表示,箭头从子类指向父类。
泛化
实现:在类图中就是接口和实现的关系。在类图中使用带三角箭头的虚线表示,箭头从实现类指向接口。
在这里插入图片描述

依赖:对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。在类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。
在这里插入图片描述

关联: 对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。关联又分为一般关联、聚合关联与组合关联。后两种在后面分析。在类图使用带箭头的实线表示,箭头从使用类指向被关联的类。可以是单向和双向。
在这里插入图片描述

聚合 : 表示has-a的关系,是一种不稳定的包含关系。较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。在类图使用空心的菱形表示,菱形从局部指向整体。
在这里插入图片描述

组合 : 表示contains-a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。是一种更强的聚合关系。部分不能脱离整体存在。如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;订单和订单选项的关系。在类图使用实心的菱形表示,菱形从局部指向整体。

在这里插入图片描述

多重性: 通常在关联、聚合、组合中使用。就是代表有多少个关联对象存在。使用数字…星号(数字)表示。如下图,一个割接通知可以关联0个到N个故障单。

在这里插入图片描述
聚合和组合的区别
这两个比较难理解,重点说一下。聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

2017-10-04 16:58:00 weixin_30299709 阅读数 15
  • 软件工程--实践者的研究方法

    软件工程专业以计算机科学与技术学科为基础,强调软件开发的工程性,该课程使学生在掌握计算机科学与技术方面知识和技能的基础上熟练掌握从事软件需求分析、软件设计、软件测试、软件维护等工作所必需的基础知识、基本方法和基本技能。

    3708 人正在学习 去看看 刘安战

转载于:https://www.cnblogs.com/dzhou/p/7625821.html

2019-01-19 21:00:41 budding0828 阅读数 148
  • 软件工程--实践者的研究方法

    软件工程专业以计算机科学与技术学科为基础,强调软件开发的工程性,该课程使学生在掌握计算机科学与技术方面知识和技能的基础上熟练掌握从事软件需求分析、软件设计、软件测试、软件维护等工作所必需的基础知识、基本方法和基本技能。

    3708 人正在学习 去看看 刘安战

第四章:类图中一些复杂的概念

抽象类
  • 定义:
  1. 抽象类是指那些不具有任何对象的类,其作用是为其他的类描述它们的公共属性和行为。
  2. 通常,抽象类具有一组抽象操作。一个拥有至少一个抽象操作的类必定是一个抽象类。
  • 编写原因:
  1. 在我们编写一个类的时候,可能会对一些类的方法进行定义,但是并不具体实现。而是交给该类的子类根据自己的具体情况去实现,这样可以增强类设计的灵活性。
  • 区别没有实现方法和空方法:
public int methodA();是没有实现的方法
public int methodA() { }是空方法体的方法。
接口
  • 定义:接口是一组没有实现的操作的集合。接口只提供操作的声明,不提供任何相应的功能代码。具体的功能代码由使用该接口的类实现,这叫作实现关系。

  • 特性:

  1. 接口中只包含普通函数,不包含构造函数和析构函数
  2. 接口中只能提供方法的格式声明,而不能包含方法的实现。
  3. 接口中的所有函数都被视为公有,不需要添加可见性
  4. 接口只包含操作而不包含属性,并且操作都是公有的(public),不允许使用可见性限定符。
  • 特殊接口
  1. 常量接口:接口一般用来表示一组行为,但有时候也会用来表示静态数据,称为常量接口。
  2. 标识接口:没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,仅表明实现它的类有一个特定的类型。
接口VS抽象类
  1. 抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法。抽象类允许增加一些方法的实现,但接口必须推迟定义所有的方法。
  2. 从语义层面上:抽象类是一种类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象。而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象。
  3. 抽象类表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
其他的各种关联
  • 限定关联:限定关联是一对多或多对多关联的另一种表示,它通过添加限定符来标识在这个关联的一方出现的多个对象中的每一个对象。注意:限定符是关联线的一个附加信息,而不是类的。
    例如,紧贴关联目录类一端的小矩形是一个限定符,它限定目录对象使用文件名来标识属于它的每一个文件。
    在这里插入图片描述
  • 关联类:使用关联类时,在任何两个相关的对象之间只能存在关联类的一个实例。
    在这里插入图片描述

关联类就像一个标准的类,可以用属性,操作以及与其他关联。其作用是为一个链接添加一些附加信息。

  • 反射关联:当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。
    在这里插入图片描述
2018-07-26 09:48:56 YuanMxy 阅读数 353
  • 软件工程--实践者的研究方法

    软件工程专业以计算机科学与技术学科为基础,强调软件开发的工程性,该课程使学生在掌握计算机科学与技术方面知识和技能的基础上熟练掌握从事软件需求分析、软件设计、软件测试、软件维护等工作所必需的基础知识、基本方法和基本技能。

    3708 人正在学习 去看看 刘安战

1.什么是UML

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 
UML规范用来描述建模的概念有,类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。

2.什么是UML类图

UML类图是一种结构图,用于描述一个系统的静态结构。类图以反映类结构和类之间关系为目的,用以描述软件系统的结构,是一种静态建模方法。类图中的类,与面向对象语言中的类的概念是对应的。

在系统设计阶段,类图直接引导面向对象的编程语言实现类。类图是生成代码的核心要图。如果类图设计得好,整个系统的代码框架可以有类图自动生成,大大简化了系统编码所耗费的时间。因此,我们进一步:利用类图,使得代码的编写编程一种自动化工作,而整个信息系统的建设中心都可以集中到分析设计上来。

绘制UML工具

3.类结构

在类的UML图中,使用长方形描述一个类的主要构成,长方形垂直地分为三层,以此放置类的名称属性方法

其中,一般类的类名用正常字体粗体表示,如上图;抽象类名用斜体字粗体,如User;接口则需在上方加上<<interface>>

属性和方法都需要标注可见性符号,+代表public#代表protected(friendly也归入这类),-代表private

另外,还可以用冒号:表明属性的类型和方法的返回类型,如+$name:string+getName():string。

(1)属性的完整表示方式是这样的:

可见性  名称 :类型 [ = 缺省值]

中括号中的内容表示是可选的。

(2)方法的完整表示方式如下:

可见性  名称(参数列表) [ : 返回类型]

同样,中括号中的内容是可选的。

4.类关系

类与类之间的关系主要有六种:继承实现组合聚合关联依赖,这六种关系的箭头表示如下,

41.继承

继承关系也称泛化关系(Generalization),用于描述父类与子类之间的关系。父类又称作基类,子类又称作派生类。

继承关系中,子类继承父类的所有功能,父类所具有的属性、方法,子类应该都有。子类中除了与父类一致的信息以外,还包括额外的信息。

【箭头指向】:带三角箭头的实线,箭头指向父类

例如:公交车、出租车和小轿车都是汽车,他们都有名称,并且都能在路上行驶。

4.2 实现

实现关系(Implementation),主要用来规定接口和实现类的关系

接口(包括抽象类)是方法的集合,在实现关系中,类实现了接口,类中的方法实现了接口声明的所有方法。

【箭头指向】:带三角箭头的虚线,箭头指向接口(还有一种棒棒糖表示法,在下面大话设计模式举例中有)

例如:汽车和轮船都是交通工具,而交通工具只是一个可移动工具的抽象概念,船和车实现了具体移动的功能。
实现关系

4.3 组合关系

组合关系(Composition):整体与部分的关系,但是整体与部分不可以分开

组合关系表示类之间整体与部分的关系,整体和部分有一致的生存期。一旦整体对象不存在,部分对象也将不存在,是同生共死的关系。

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

例如:人由头部和身体组成,两者不可分割,共同存在。

组合关系

4.4 聚合关系

聚合关系(Aggregation):整体和部分的关系,整体与部分可以分开。

聚合关系也表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

例如:公交车司机和工衣、工帽是整体与部分的关系,但是可以分开,工衣、工帽可以穿在别的司机身上,公交司机也可以穿别的工衣、工帽。

4.5 关联关系

关联关系(Association):表示一个类的属性保存了对另一个类的一个实例(或多个实例)的引用

关联关系是类与类之间最常用的一种关系,表示一类对象与另一类对象之间有联系。组合、聚合也属于关联关系,只是关联关系的类间关系比其他两种要弱。

关联关系有四种:双向关联单向关联自关联多重数关联

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者

例如:汽车和司机,一辆汽车对应特定的司机,一个司机也可以开多辆车。

在UML图中,双向的关联可以有两个箭头或者没有箭头,单向的关联或自关联有一个箭头

4.6 依赖关系

依赖关系(Dependence):假设A类的变化引起了B类的变化,则说名B类依赖于A类。

大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数

依赖关系是一种“使用”关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

例如:汽车依赖汽油,如果没有汽油,汽车将无法行驶。

依赖关系

各种关系的强弱顺序:

继承 > 实现 > 组合 > 聚合 > 关联 > 依赖

上述关系的完整类图如下:

最后作为复习,我们借鉴《大话设计模式》一书上举例子来通俗且完整的说明:

首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。前面的符号,表示public表示private表示protected

右下角的飞翔,它表示一个接口图,与类图的区别主要是顶端的<<interface>>显示。第一行是接口名称,第二行是接口方法。

接口还有另一种表示方法,俗称棒棒糖表示法,如下图。唐老鸭是能讲人话的鸭子,实现了讲人话的接口。

接下来的是类与类,类与接口之间的关系了。首先注意动物、鸟、鸭、唐老鸭之间的关系符号。它们都是继承的关系,继承关系用空心三角形 + 实线来表示的。

       上述所列举的几种鸟中,大雁最能飞,让它实现了飞翔接口。实现接口用空心三角形 + 虚线来表示。

       企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。我们不去讨论为什么北极没有企鹅,为什么它们要每年长途跋涉。总之,企鹅需要知道气候的变化,需要了解气候规律。当一个类知道另一个类时,可以用关联(association)。关联关系用实线箭头来表示。

       再来看大雁和雁群这两个类,大雁是群居动物,每只大雁都是属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合(Aggregation)关系。聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形 + 实线箭头来表示。

       组合(Composition)是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。在这里鸟和其翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。组合关系用实习的菱形 + 实线箭头来表示。另外,你会注意到合成关系的连线两端还有一个数字1和数字2,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就是n来表示。关系关系、聚合关系也可以有基数的。

       动物的几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖于氧气和水。他们之间是依赖关系(Dependency),用虚线箭头来表示。

参考,感谢以下大佬的资料:

UML类图几种关系的总结

UML类图详解

UML详解之二——类图

五分钟读懂UML类图

大话设计模式——UML图

软件工程-类图

阅读数 3004

软件工程导论

阅读数 85

没有更多推荐了,返回首页