UML学习——简述类以及类之间的关系
- 格式:docx
- 大小:486.70 KB
- 文档页数:3
:UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字 implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;1 A D AC A B DA6 D CA CB BA C11 C A CD D DB16 DA B D B B21 CA B A BD C26 D B CA C A31 BD BA D DA C36 C C CD A B41 D C BA A D46 D A D C C51 B D C B57 A B A B B62 BD CA BA CB C67 B D A C71 B DC AD DA DB。
请简述uml中四种基本关系的含义和作用UML中四种基本关系原本是指依赖(Dependency),关联(Association),泛化(Generalization),和实现(Realization)。
然而,现在有些教材和文献将依赖关系与关联关系合并为一种关系,称为关系(Relationship)。
因此,按照目前通用的分类方式,对于UML中的关系,可以分为三种基本关系,即关联关系,继承关系,和实现关系。
下面将对每种关系的含义和作用进行详细描述。
继承关系(Inheritance)是面向对象编程中最重要的一种关系之一、它用来表示类与类之间的继承关系。
继承关系是一种"父类与子类"之间的关系,子类可以继承父类的属性和方法,并且可以在此基础上进行修改或者扩展。
继承关系提供了代码复用的功能,可以减少重复编码,提高代码的可维护性、可扩展性和可复用性。
继承关系还可以支持多态特性,使得不同的子类对象可以以父类对象的方式进行使用,从而提高了系统的灵活性和可扩展性。
例如,在一个学校管理系统中,可以定义一个"人"的基类,在这个基类中定义了姓名、性别、年龄等基本属性和方法,然后派生出"学生"和"教师"两个子类,学生和教师分别继承了"人"类的属性和方法。
在实际的UML建模中,既可以使用关联关系、继承关系、实现关系来直接表达类与类之间的关系,也可以使用类图中的关联连接线、继承连接线、实现连接线等来表示关系。
连接线是类图中的基本元素,可以通过箭头、修饰符和文本等来表示关系的类型、方向和细节。
关系在UML中起到了描述和规范系统结构和行为的作用,它们是UML建模的基础。
请简述uml中四种基本关系的含义和作用UML(Unified Modeling Language)是一种用于软件系统建模的标准语言。
在UML中,有四种基本关系,分别为依赖关系、关联关系、聚合关系和组合关系。
下面将对每种关系的含义和作用进行详细的解释。
1.依赖关系:依赖关系表示一个类的改变会引起另一个类的改变,但是两个类之间的关系不是强依赖的。
在依赖关系中,一个类需要另一个类的一些功能或资源才能完成自己的任务。
依赖关系通常体现在方法参数、方法返回值、方法中的局部变量或静态方法的调用等方面。
作用:-解耦:依赖关系可以降低类之间的依赖程度,提高系统的灵活性和可维护性。
-重用:通过依赖关系,一个类可以复用另一个类的功能,提高代码的重用性。
-扩展:通过依赖关系,一个类可以使用另一个类的功能,使得系统可以更方便地进行扩展和演化。
2.关联关系:关联关系表示类与类之间的连接,用于描述类之间的结构性的、静态的关系。
在关联关系中,一个类对象可以通过引用来使用另一个类对象的功能和资源。
关联关系一般是双向的,可以是单向的、双向的或自反的。
作用:-数据共享:通过关联关系,类可以共享另一个类的数据,实现数据的共享和交流。
-在系统的结构设计中起到桥梁作用:关联关系可以用于描述系统的结构,帮助开发人员对系统进行设计和实现。
3.聚合关系:聚合关系表示整体与部分之间的关系,它是一种弱的关联关系。
在聚合关系中,整体对象可以包含部分对象,但是部分对象的生命周期可以独立于整体对象而存在。
作用:-描述整体与部分之间的关系:聚合关系可以用于描述整体与部分之间的关系,帮助开发人员更好地理解系统的结构。
-组织和结构化数据:通过聚合关系,可以将对象进行组织和结构化,使得数据的管理更加便捷。
4.组合关系:组合关系也表示整体与部分之间的关系,但是它是一种强的关联关系。
在组合关系中,整体对象包含了部分对象,同时部分对象的生命周期与整体对象的生命周期相同。
UML类图及类与类之间的关系原⽂地址:类图⽤于描述系统中所包含的类以及它们之间的相互关系,帮助⼈们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
1. 类类(Class)封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
在系统中,每个类都具有⼀定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。
⼀个类可以有多种职责,设计得好的类⼀般只有⼀种职责。
在定义类的时候,将类的职责分解成为类的属性和操作(即⽅法)。
类的属性即类的数据职责,类的操作即类的⾏为职责。
设计类是⾯向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
在软件系统运⾏时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。
类图(Class Diagram)使⽤出现在系统中的不同类来描述系统的静态结构,它⽤来描述不同的类以及它们之间的关系。
在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下⾯对这三种类加以简要说明:(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,⼀般使⽤数据库表或⽂件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
实体类来源于需求说明中的名词,如学⽣、商品等。
(2) 控制类:控制类⽤于体现应⽤程序的执⾏逻辑,提供相应的业务操作,将控制类抽象出来可以降低界⾯和数据库之间的耦合度。
控制类⼀般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有⼀个商品增加类,注册对应有⼀个⽤户注册类等(3) 边界类:边界类⽤于对外部⽤户与系统之间的交互对象进⾏抽象,主要包括界⾯类,如对话框、窗⼝、菜单等。
在⾯向对象分析和设计的初级阶段,通常⾸先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。
在U M L类图中,常见的有以下几种关系:泛化(G e n e r a l i z a t i o n),实现(R e a l i z a t i o n),关联(A s s o c i a t i o n),聚合(A g g r e g a t i o n),组合(C o m p o s i t i o n),依赖(D e p e n d e n c y)1.泛化(G e n e r a l i z a t i o n)【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类2.实现(R e a l i z a t i o n)【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.【箭头指向】:带三角箭头的虚线,箭头指向接口3.关联(A s s o c i a t i o n)【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量【箭头及指向】:带普通箭头的实心线,指向被拥有者上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。
但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
下图为自身关联:4.聚合(A g g r e g a t i o n)【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量【箭头及指向】:带空心菱形的实心线,菱形指向整体5.组合(C o m p o s i t i o n)【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。
uml类模型知识点总结UML类模型是软件工程中一种重要的建模工具,它用于描述系统中的对象、类、属性和方法等元素,以及它们之间的关系。
下面是对UML 类模型的详细总结。
1. 类和对象在UML类模型中,类是一个抽象的概念,用于描述一组具有相同属性和行为的对象。
而对象则是类的实例化结果,它拥有类定义的所有属性和方法。
2. 属性属性是指一个类或对象所拥有的数据元素,用于描述该类或对象的特征。
在UML类模型中,属性通常包括名称、类型、可见性(public、private、protected)、默认值等信息。
3. 方法方法是指一个类或对象所具有的行为或操作,用于描述该类或对象可以执行哪些操作。
在UML类模型中,方法通常包括名称、参数列表、返回值类型、可见性等信息。
4. 继承继承是指一个子类从父类继承其所有属性和方法,并且可以添加自己独有的属性和方法。
在UML类模型中,继承关系通常用带箭头直线表示。
5. 关联关联是指两个或多个不同的对象之间存在某种联系,并且这种联系可以被表示为一个成员变量。
在UML类模型中,关联关系通常用带箭头直线表示,箭头指向被关联的类。
6. 聚合聚合是指两个或多个不同的对象之间存在一种弱关联,其中一个对象可以包含另一个对象,但它们之间的生命周期并不相互依赖。
在UML 类模型中,聚合关系通常用带空心菱形的直线表示。
7. 组合组合是指两个或多个不同的对象之间存在一种强关联,其中一个对象是另一个对象的组成部分,并且它们之间的生命周期相互依赖。
在UML类模型中,组合关系通常用带实心菱形的直线表示。
8. 接口接口是指一组方法定义,但没有具体实现。
在UML类模型中,接口通常用带虚线框和斜体字表示。
一个类可以实现多个接口,并且必须实现接口中定义的所有方法。
9. 泛化泛化是指一种特殊类型的继承关系,在泛化中子类会继承父类所有属性和方法,并且可以添加自己独有的属性和方法。
在UML类模型中,泛化关系通常用带空心三角形和实心箭头表示。
UML有关类图知识及类间关系1. 类的含义 类图(Class diagram)显⽰了系统的静态结构,⽽系统的静态结构构成了系统的概念基础。
类图,就是⽤于对系统中的各种概念进⾏建模,并描绘出它们之间关系的图。
在⼤多数的 UML 模型中,我们可以将这些概念的类型概括为以下四种,分别是: (1) 类 (2) 接⼝ (3) 数据类型 (4) 构件 在类图中,具体来讲它⼀共包含了以下⼏种模型元素,分别是:类、接⼝、依赖关系、泛化关系、关联关系以及实现关系。
类图可以创建约束、注释和包等。
2. 类图在项⽬开发中的作⽤ 类图的作⽤是对系统的静态视图进⾏建模。
当对系统的静态视图进⾏建模时,通常是以以下三种⽅式来使⽤类图。
(1)为系统的词汇建模。
(2)模型化简单的协作。
(3)模型化逻辑数据库模式。
在设计数据库时,通常将数据库模式看作为数据库概念设计的蓝图,在很多领域中,都需要在关系数据库或⾯向数据库中存储永久信息。
系统分析者可以使⽤类图来对这些数据库进⾏模式建模。
3. 类图组成1. 类 类是⾯向对象系统组织结构的核⼼。
类是对⼀组具有相同属性、操作、关系和语义的事物的抽象。
在UML的图形表⽰中,类的表⽰法是⼀个矩形,这个矩形由三个部分构成,分别是:类的名称(Name)、类的属性(Attribute)和类的操作(Operation)。
类的名称是每个类的图形中所必须拥有的元素,⽤于同其它类进⾏区分。
类的名称通常来⾃于系统的问题域,并且尽可能地明确表达要描述的事物,不会造成类的语义冲突。
属性是类的⼀个特性,也是类的⼀个组成部分,描述了在软件系统中所代表的对象具备的静态部分的公共特征抽象,这些特性是这些的对象所共有的。
在UML中,类的属性的表⽰语法为([ ]内的内容是可选的): [可见性] 属性名称 [:属性类型] [=初始值] [{属性字符串}] 类的操作指的是类的所能执⾏的操作,也是类的⼀个重要组成部分,描述了在软件系统中所代表的对象具备的动态部分的公共特征抽象。
UML中类之间的关系UML(The Unified Modeling Language)就是统一建模语言,不论它是怎么发展来的,也不论最新的官方Specification或工业标准是哪个版本,我想总结一下工作中最常用的一些知识:用UML语言描述类的关系。
1,关联关系(Association)关联关系是类(也可以说是对象)之间特定的对应关系。
按照对象的数量对比,可以分为:A 一对一比如公民和公民身份卡之间的对应关系。
B 一对多一个部门对应0或者多位员工,一般而言一位员工只能属于某一个部门。
C 多对多用户和服务是多对多的关系,一个用户可以注册0个或多个服务,一个服务则可以被0个或者多个用户复用。
比如Windows Live用户可以激活邮件服务、Space服务等,而这些服务不是被一个用户所专有的。
关联的实质从A类型到B类型的关联是指在A类型中定义了B类型作为属性。
如下列代码:package uml;public class Citizen {private CitizenshipCard card;//其他属性public CitizenshipCard getCard() {return card;}public void setCard(CitizenshipCard card) {this.card = card;}}上述代码演示了从Citizen 到CitizenshipCard 的关联。
注意下图箭头方向:同样可以建立CitizenshipCard 到Citizen 的关联:代码表示为:package uml;public class CitizenshipCard {private Citizen citizen;//其他属性public Citizen getCitizen() {return citizen;}public void setCitizen(Citizen citizen) {this.citizen = citizen;}}如果仅仅建立从Citizen 到CitizenshipCard 的关联或者仅仅建立CitizenshipCar d 到Citizen 的关联,都属于单向关联,如果两个方向的关联都建立,就是双向关联:是否建立双向关联要在实际项目中酌情而定。
类与类之间的关系图(ClassDiagram,UML图)展开全文一、简介二、类的构成三、类之间的关系(Relationship)1、单向关联2、双向关联3、自身关联4、多维关联(N-ary Association)5、泛化(Generalization)6、依赖(Dependency)7、聚合(Aggregation)8、组合(Composite)四、总结一、简介类是对象的集合,展示了对象的结构以及与系统的交互行为。
类主要有属性(Attribute)和方法(Method)构成,属性代表对象的状态,如果属性被保存到数据库,此称之为“持久化”;方法代表对象的操作行为,类具有继承关系,可以继承于父类,也可以与其他的Class进行交互。
类图展示了系统的逻辑结构,类和接口的关系。
二、类的构成类主要有属性和方法构成。
比如商品属性有:名称、价格、高度、宽度等;商品的方法有:计算税率,获得商品的评价等等。
如下图三、类之间的关系(Relationship)关联(Association)两个相对独立的对象,当一个对象的实例与另外一个对象的特定实例存在固定关系时,这两个对象之间就存在关联关系。
1、单向关联A1->A2: 表示A1认识A2,A1知道A2的存在,A1可以调用A2中的方法和属性场景:订单和商品,订单中包括商品,但是商品并不了解订单的存在。
类与类之间的单向关联图:C#代码:Public class Order{Public List<Product> order;Public void AddOrder(Product product ){order.Add(product);}}Public Class Product{}代码表现为:Order(A1)中有Product(A2)的变量或者引用2、双向关联B1-B2: 表示B1认识B2,B1知道B2的存在,B1可以调用B2中的方法和属性;同样B2也知道B1的存在,B2也可以调用B1的方法和属性。
UML类图几种关系的总结在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)1. 泛化(Generalization)【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。
例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类2. 实现(Realization)【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.【箭头指向】:带三角箭头的虚线,箭头指向接口3. 关联(Association)【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量【箭头及指向】:带普通箭头的实心线,指向被拥有者上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。
但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
下图为自身关联:4. 聚合(Aggregation)【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。
如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量【箭头及指向】:带空心菱形的实心线,菱形指向整体5. 组合(Composition)【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。
如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
类与类之间的关系对于理解面向对象具有很重要的作用,下面进行总结!一、类与类之间存在以下关系:UML图与应用代码例子:1. 泛化(Gen eralizatio n)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[简单理解]是一个is a 的关系。
如老虎是一个动物[具体表现]父类父类实例二new子类()[UML 图](图 1.1)Animal/Tiger Dug图1.1 Animal类与Tiger类,Dog类的泛化关系[代码表现]1. class Ani mal{2.2. }3. class Tiger exte nds An imal {5.4. }5. public class Test6. {7. public void test()8. {9. An imal a=new Tiger();13. }10. } 13. }8. }2. 依赖(Depe nde ncy)[依赖]对于两个相对独立的对象,当一个对象负责构造另一个对象的实例, 或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[具体表现]依赖关系表现在 局部变量,方法的参数,以及对静态方法的调用[简单理解]一个类使用了另外一个类作为局部变量和方法参数。
是一个 use a 关系! [现实例子]比如说你要去拧螺丝,你是不是要借助 (也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作[UML 表现](图 1.2)有时在uml 图中不出现箭头只是虚线图1.2 Person 类与Screwdriver 类的依赖关系 理解:指Person 类可能要用到 Screwdriver 的一些方法,也可以这样说,要完成 Person 里的所有功 能,一定要有 Screwdriver 的方法协助才行。
Person 依赖于Screwdriver 的定义。
浅谈UML中类之间的五种关系及其在代码中的表现形式什么是类?将某类东西归纳在一起,可以成为一个类。
类有很多种提炼角度,需要根据系统地目标、业务的场景,选取合适的角度对事物进行归纳。
什么是类图?类图可能是UML中使用的最多的一种图。
和其他图一样,类图的基本语法并不复杂,可能一两天就能掌握,但是真正做到灵活的使用类图,可能需呀多年的功力。
类图是锻炼OOA(OO Analysis)和OOD(OO Design)思想的重要工具,有助于OOA、OOD思想的提升。
本篇博文,重点讲述类图中类与类之间的关系以及这种关系在代码中的实现形式。
写作本文的原因是:网上关于UML类图的语法规则等的资料很多,但是涉及到关系在代码中实现形式的文章却很少。
这是很容易理解的:UML语法规范什么的各种书上导出都是,网页上的也很多都是对各种语法规范的Copy;而类之间的关系反应到代码层面需要加入个人的理解。
两者的区别是一个不需要动脑子,Copy过来就行,而另一个需要动脑子。
类与类之间的关系类与类之间的关系可以根据关系的强度依次分为以下五种:依赖关系(Dependency)---关联关系(Association)---聚合(Aggregation)---组合(Composition)---泛化(Generalization)1.依赖关系(Dependency)依赖关系使用虚线加箭头表示,如下图所示:这个例子可能不太好(Animal体内有Water,),换一个:解释以下:Person 和 Computer之间是没有关系的,但是由于偶尔的需要,Person需要使用Computer,这时Person就依赖于Computer.依赖关系是五种关系中耦合最小的一种关系。
UML类图与类间六种关系表⽰UML类图与类间六种关系表⽰1.类与类图类封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性,操作,关系的对象集合的总称.类图是使⽤频率最⾼的UML图之⼀.类图⽤于描述系统中所包含的类以及它们之间的相互关系,帮助开发⼈员理解系统,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.2.类的UML表⽰⽅法在UML类图中,类使⽤包含类名,属性和⽅法且带有分隔线的长⽅形来表⽰.(1) 属性及⽅法表⽰形式: 可见性名称 : 类型 [=缺省值](2) ⽅法表⽰形式为: 可见性⽅法名([参数名 : 参数类型]): 返回值类型⽅法的多个参数间⽤逗号隔开,⽆返回值时,其类型为void.(3) 属性及⽅法可见性: public +, private -, protected #, package ~(4) 接⼝的表⽰形式与类类似,区别在于接⼝名须以尖括号包裹,同时接⼝⽆属性框,可见性只可能为public,这是由接⼝本⾝的特性决定的.3.依赖关系假设A类的变化引起了B类的变化,则说名B类依赖于A类.依赖关系是⼀种使⽤关系,特定事物的改变有可能会影响到使⽤该事物的其他事物,在需要表⽰⼀个事物使⽤另⼀个事物时使⽤依赖关系.⼤多数情况下,依赖关系体现在某个类的⽅法使⽤另⼀个类的对象作为参数.在UML中,依赖关系⽤带箭头的虚线表⽰,由依赖的⼀⽅指向被依赖的⼀⽅.依赖关系有如下三种情况:(1) A类是B类中的(某中⽅法的)局部变量;(2) A类是B类⽅法当中的⼀个参数;(3) A类向B类发送消息,从⽽影响B类发⽣变化;class Car{public:void move() {}};class Driver{public:void drive(Car* car){car->move();}};4.泛化关系泛化关系:A是B和C的⽗类,B,C具有公共类(⽗类)A,说明A是B,C的⼀般化(概括,也称泛化).泛化关系也就是继承关系,也称为“is-a-kind-of”关系,泛化关系⽤于描述⽗类与⼦类之间的关系,⽗类⼜称作基类或超类,⼦类⼜称作派⽣类。
继承、实现、依赖、关联、聚合、组合的联系与区别分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java 中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method 方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B 以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;聚合跟组合其实都属于关联只不过它们是两种特殊的关联因为本是同根生所以它们之间难免会有相似之处下面让我们一起来看一下它们之间有何不同聚合与组合的概念相信不用我在此赘述大家就已经了解了下面直接上例子程老师的《大话》里举大那个大雁的例子很贴切在此我就借用一下大雁喜欢热闹害怕孤独所以它们一直过着群居的生活这样就有了雁群每一只大雁都有自己的雁群每个雁群都有好多大雁大雁与雁群的这种关系就可以称之为聚合另外每只大雁都有两只翅膀大雁与雁翅的关系就叫做组合有此可见聚合的关系明显没有组合紧密大雁不会因为它们的群主将雁群解散而无法生存而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期聚合关系图:组合关系图:从从代码上看这两种关系的区别在于:构造函数不同雁群类:[csharp]view plaincopy1.public class GooseGroup2.{3.public Goose goose;4.5.6.public GooseGroup(Goose goose)7.{8.this.goose = goose;9.}10.}[csharp]view plaincopy1.public class GooseGroup2.{3.public Goose goose;4.5.6.public GooseGroup(Goose goose)7.{8.this.goose = goose;9.}10.}大雁类:[csharp]view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6.{7.wings=new Wings();8.}9.}[csharp]view plaincopy1.public class Goose2.{3.public Wings wings;4.5.public Goose()6.{7.wings=new Wings();8.}9.}聚合关系的类里含有另一个类作为参数雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来大雁类(Goose)可以脱离雁群类而独立存在组合关系的类里含有另一个类的实例化大雁类(Goose)在实例化之前一定要先实例化翅膀类(Wings)两个类紧密耦合在一起它们有相同的生命周期翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在信息的封装性不同在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
UML学习——简述类以及类之间的关系
计算机所实现的各种程序,本身就是对现实世界的一种真实性模拟,无论是小程序,还是大程序,都不可避免地依照现实世界尽可能模拟甚至通过模拟超越现实。
真实世界是由各式各样的事物所组成,每种事物都有它特有的结构和行为,而且在联系起不同事物之后,还能够展现出丰富多元的能力;在面相对象的编程思想中,将事物以类的形式定义,类和类之间的关系就是不同事物的联系,由类和类之间的关系将真实世界以计算机程序来模拟真实世界。
面向对象概念是UML的基础,在学习使用UML的同时,也就是在应用面向对象概念;头脑里装有面向对象的概念,才能将需求文件内容以UML图的形式表述出来,UML与面向对象概念两者互为表里。
类是面向对象的基础,包括属性和方法两部分,属性表述类的特征,方法表证了类的行为;不同类之间的关系共同模拟了复杂的真实世界,实现了计算机程序对现实世界的真实模拟。
在面向对象和UML的概念中,类和类之间的关系,主要有:泛化关系、依赖关系、关联关系、聚合关系、组合关系。
1、泛化关系(Generalization)表现为继承或实现关系(is a),具体形式为类和类
之间的继承关系、接口和接口之间的继承关系、类和接口之间的实现关系。
2、依赖关系(Dependency)表现为函数中的参数(use a);是类和类之间的连接,
表示一个类依赖另一个类的定义,其中一个类的变化将影响另外一个类,如果
A类依赖于B类,则B类体现为局部变量,方法的参数、或静态方法的调用。
3、关联关系(Association)表现为变量(has a);类和类之间的联接,它使一个类
知道另一个类的属性和方法,如果A关联于B,则B体现为A的全局变量,即作为A的属性。
4、聚合关系(Aggregation)是关联关系的一种,是强的关联关系,强调整体与个
体的关系;普通关联关系的两个类处于同一个层次上,而聚合关系的两个类处于不同的层次,一个是整体(Whole),一个是部分(Part),是一种弱的“拥有”
关系。
体现的是A对象可以包含B对象,但B对象不是A对象的组成部分,即A和B的生命周期不一样;具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建,A和B拥有不同的生命周期。
5、组合关系(Composition)是关联关系的一种,是比聚合关系强的关系,是一种
强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。
如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建,A和B拥有相同的生命周期,二者一毁俱毁。
6、类和类之间关系的小总结:
泛化关系:表现为类和类之间、接口和接口之间的继承,类和接口的实现关系依赖关系:A依赖于B,则B作为A方法的参数或者静态方法对B的调用
关联关系:A关联于B,则B作为A的全局属性出现,但A和B属于同一层次聚合关系:A由B聚合,则B作为A的全局变量出现,强调B是A的部分,A 和B的生命周期不相同
组合关系:A由B组合,则A包含有B的全局对象,B对象在A创建的时刻创建,A和B拥有相同的生命周期,强调A全然拥有B,多为内部类。