聚合(Aggregation)关系是用来表示整体与部分关系的关联
- 格式:ppt
- 大小:420.50 KB
- 文档页数:44
继承、实现、依赖、关联、聚合、组合的联系与区别分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在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类图中的关系分为四种:泛化、依赖、关联、实现;关联关系⼜可以细化为聚合和组合。
⼀、泛化(Generalization)泛化是⽗类和⼦类之间的关系,⼦类继承⽗类的所有结构和⾏为。
在⼦类中可以增加新的结构和⾏为,也可以覆写⽗类的⾏为。
⼀般⽤⼀个带空⼼箭头的实线表⽰泛化关系,UML图如下:泛化对应Java中继承关系,即⼦类继承⽗类中出private修饰外的所有东西(变量、⽅法等)。
⽰例代码:public class Animal {}public class Tiger extends Animal {}Tiger继承Animal,因此Tiger与Animal之间是泛化(继承)关系。
这个很好理解。
⼆、依赖(Dependency)依赖关系是⼀种使⽤关系,特定事物的改变有可能会影响到使⽤该事物的事物,反之不成⽴。
在你想显⽰⼀个事物使⽤另⼀个事物时使⽤。
⼀般⽤⼀条指向被依赖事物的虚线表⽰,UML图如下:通常情况下,依赖关系体现在某个类的⽅法使⽤另⼀个类作为参数。
代码⽰例:public class Screwdriver { //螺丝⼑,作为⼈类的⼯具,是⽤来被⼈类使⽤的}public class Person{public void screw(Screwdriver src){ //拧螺丝,需使⽤螺丝⼑}}Person类的screw()⽅法在使⽤时就得传⼊⼀个Screwdriver类型的参数,这样Screwdriver的改变就会影响到Person,因此Person与Screwdriver之间就是依赖关系(Person依赖于Screwdriver)。
三、关联(Association)是⼀种结构关系,说明⼀个事物的对象与另⼀个事物的对象相联系。
给定有关联的两个类,可以从⼀个类的对象得到另⼀个类的对象。
关联有两元关系和多元关系。
两元关系是指⼀种⼀对⼀的关系,多元关系是⼀对多或多对⼀的关系。
继承、实现、依赖、关联、聚合、组合的联系与区别分别介绍这几种关系:继承实现指的是一个class 类实现interface 接口(可以是多个)的功能;实现是类与接口之间最常 见的关系;在Java 中此类关系通过关键字implements 明确标识,在设计时一般没有争 议性;依赖可以简单的理解,就是一个类A 使用到了另一个类B ,而这种使用关系是具有偶然性的、、 临时性的、非常弱的,但是B 类的变化会影响到A ;比如某人要过河,需要借用一条船, 此时人与船之间的关系就是依赖;表现在代码层面,为类B 作为参数被类A 在某个method 方法中使用;Inte rfare指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可 以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java 中此类关系通过关键字extends 明确标识,在设计时一般没有争议性;b lnterface_BQlass_A ClaSs_B关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这 种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而 且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B 以类属性的形式出现在关联类A 中,也可能是关联类A 引用了一个类型为被关联类B 的全 局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a 的关系,此 时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象, 也可以为多个整体对象共享;比如计算机与CPU 、公司与员工的关系等;表现在代码层面, 和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a 的关系,这种关系比聚合更强, 也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生 命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联 关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向 关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区 分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别Cl3ss A 十 depend<Qlass.B classBJ ;:;;VoidClass_B的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联》依赖;聚合跟组合其实都属于关联只不过它们是两种特殊的关联因为本是同根生所以它们之间难 免会有相似之处下面让我们一起来看一下它们之间有何不同聚合与组合的概念相信不用我在此赘述大家就已经了解了下面直接上例子 程老师的《大话》里举大那个大雁的例子很贴切在此我就借用一下大雁喜欢热闹害怕孤独所 以它们一直过着群居的生活这样就有了雁群每一只大雁都有自己的雁群每个雁群都有好多 大雁大雁与雁群的这种关系就可以称之为聚合另外每只大雁都有两只翅膀大雁与雁翅的关 系就叫做组合有此可见聚合的关系明显没有组合紧密大雁不会因为它们的群主将雁群解散 而无法生存而雁翅就无法脱离大雁而单独生存一一组合关系的类具有相同的生命周期聚合关系图:构造函数不同雁群类:[csharp] view plaincopypublic class GooseGroup { public Goose goose; public GooseGroup(Goose goose) { this .goose = goose;} 10. }[csharp] view plaincopy1. 2. 3.4.5. 6.7. 8.9. 组合关系图:从从代码上看这两种关系的区别在于:1.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)而独立存在信息的封装性不同在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
一、名词解释(共6小题,每题4分,共24分)1、多重继承答:指得是一个类可能有多个基类,是从多个类继承得来的2、聚集(Aggregation)答:聚集(Aggregation)是表达主体部分关系的关联,它用在聚合端的菱形符号来表示。
如桌子和桌腿的关系。
3、类图!答:反映类及类之间关系的视图。
4、持久对象答:可通过对象标识来访问的对象因其能够被保存在持久性存储器中,因而被称为持久性对象,其生存周期超出了应用程序的一次性运行时间。
5、关联答:描述链集合的一种结构关系,其中链是对象之间的连接;它是与实例间连接相关的两个或多个类元之间的语义关系。
-6、组成(Composition)答:组成(Composition)是关联的更强的形式,具有管理组成部分的特有责任,如组成部分的分配和释放。
如树和树叶的关系。
另外,离开整体后部分不能独立存在或者失去意义。
1、下图是某个系统的类图表示。
请指出图中用箭头标出的四处位置的含义分别是什么答:1是泛化关系,2是1对多的关联关系,3是1对1的关联关系,4是组成关系。
2、列举使用UML进行建模时用到的静态结构模型答:用例图、对象图、类图、组件图、部署图是静态结构模型、5、分析说明为什么面向对象的开发方法为软件复用技术提供了良好的环境答:面向对象方法之所以特别有利于软件复用,是由于它的主要概念及原则与软件复用的要求十分吻合。
支持复用的OO 概念与原则是:对象与类、抽象、封装、继承与一般——特殊结构、整合与整体——部分结构、粒度控制、多态性。
对象与类:OO 方法用对象描述问题域中的事务,并用类作为同种对象的抽象表示。
类是系统的基本构成单位,它符合可复用构件所应具备的那些特性:完整性、独立性、可标识性、一般性。
抽象、封装:尤其是OO 方法的对象封装性,为软件复用技术提供了良好的条件。
四、综合题(共3小题,每题10分,共30分)1、问题描述为:建立图书信息管理系统。
系统要求实现以下功能:1)用户管理功能,包括读者信息的录入、修改、更新,以及登录等。
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现1.2.3.4.5.6.类与类图1 类(Class封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
2 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。
一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。
3 类的属性即类的数据职责,类的操作即类的行为职责一、依赖关系(Dependence依赖关系(Dependence):假设A类的变化引起了B 类的变化,则说名B类依赖于A类。
• 依赖关系(Dependency 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
• 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
[java] view plaincopyprint?1. public class Driver2. {3. public void drive(Car car4. {5. car.move(;6. }7. ……8. }9. public class Car10. {11. public void move(12. {13. ......14. }15. ……16. }{car.move(;}……}public class Car{public void move({......}……}依赖关系有如下三种情况:1、A类是B类中的(某中方法的)局部变量;2、A类是B类方法当中的一个参数;3、A类向B类发送消息,从而影响B类发生变化;GeneralizationGeneralization A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)• 泛化关系(Generalization也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。
什么是面向对象设计面向对象设计是把分析阶段得到的需求转变成符合成本和质量要求的、抽象的系统实现方案的过程。
从面向对象分析到面向对象设计,是一个逐渐扩充模型的过程。
面向对象设计是模仿现实生活处理问题的思维和方式来解决软件开发问题,首先根据需要解决的问题和功能进行抽象把他看作是一个具体的事物同时给他添加相应的属性和行为服务,这样就可以像日常生活里遇到问题一样按照自己的思维方式来解决并把这些思维方式直接映射到代码里。
面向对象系统的特点封装性封装是指将一组数据和与这组数据有关的操作放在一起,形成一个能动的实体——对象。
封装是一种通过定义严格的外部接口在单独编写的模块之间减少相互依赖的技术。
一个对象要具有封装性,应具备如下几个条件:1. 具有一个清楚的边界。
2. 具有一个接口。
3. 对象内部的属性和实现代码受到封装壳的保护。
面向对象系统的封装性是一种信息隐藏技术,它使系统设计员能够清楚地表明他们所提供的服务界面,用户和应用程序员则只能看见对象所提供的服务,而看不到其中的数据和操作代码细节。
对象的封装机制的目的在于将对象的使用者和设计者分开。
除了对象的封装以外,类概念本身也具有一种封装意义,它将数据和与这个数据有关的操作集合封装在一起。
继承性继承是一个对象可以获得另一个对象的特性的机制,它支持层次分类的概念。
将被继承的对象称为基类或父类,而继承的对象称为派生类或子类。
如果父类中的某些行为不适用于子类,则只需对这些操作的实现部分加以修改和重写,以满足子类的要求。
父类可以继承其它的类,子类也可以被别的类所继承,从而形成类的继承层次关系,也称为类层次。
若一个类只有一个父类,则称为单继承,这样建立起来的类类层次形成了一个树。
当一个类有多于一个基类时,则称为多重继承。
采用继承性的语言具有如下的优点:1. 提高了软件的重用性。
2. 符合逐步求精的软件工程原则。
3. 便于实现多态性。
4. 便于系统的扩展。
5. 类层次反映了现实世界中普遍存在的一般与特殊的关系,也反映了人类认识世界的演绎方法。
abstract class 抽象类,提供一组子类共有行为的类,但它本身并不具有实例。
抽象类表示一个概念,从中派生的类代表对这一概念的实施。
Abstraction 抽象,对视图或模型的创建,其中忽略了不必要的细节,以便专注于一组特定的相关细节。
access modifier存取权限,对类、方法或属性进行访问控制的关键字。
Java 中的存取权限可以是公有、私有、保护和包装(默认)。
accessor methods存取器方法,由对象提供的、用于定义连接该对象实例变量的方法。
用来返回实例变量值的存取器方法被称为获取方法;用来为实例变量指定值的存取器方法被称为设置方法。
acceptance验收,客户接受软件产品(作为部分或完整履行合同的结果)所有权的操作。
action动作,对构成计算过程抽象的可执行语句的规范。
动作通常会导致系统状态发生变化,这是通过向一个对象发送消息或是更改链接或属性值来实现。
action sequence动作序列,解析为一系列先后发生的动作的表达式。
action state动作状态,表示不可分动作的执行状态,通常指的是调用一个操作。
activation激活,动作的执行active class主动类,表示系统中控制线程的类。
请参见主动对象。
activity活动,要求角色执行的工作单元。
active object主动对象,拥有线程并可发起控制活动的对象。
主动类的实例。
activity graph活动图,状态机的特例,用于对涉及一个或多个分类器的进程建模。
对比:状态图(statechart diagram)。
同义词:活动图(activity diagram)。
actor主角,系统之外与系统交互的某人或某事物。
actor class主角类,定义一组主角实例,其中每个主角实例相对于系统而言都担任着同样的角色。
在与用例交互时这些用例的用户所担任的一组紧密相关的角色。
主角为每个要与其通信的用例都准备了一个角色。
面向对象程序设计中的聚合与组合关系面向对象程序设计(Object-Oriented Programming,OOP)是一种广泛应用的程序设计范式,它以对象作为程序的基本单元,将相关数据和方法封装在一起。
在OOP中,对象之间的关系通常可以分为聚合和组合两类。
本文将对这两种关系进行详细讲解。
一、聚合(Aggregation)聚合是指一个对象包含另一个对象,且被包含对象可以独立存在。
例如,一个图书馆包含多个书籍,但是这些书籍可以独立存在,也可以属于其他图书馆。
在UML类图中,聚合关系通常用空心的菱形箭头表示。
聚合关系的特点是:1. 被聚合对象与聚合对象之间是“整体-部分”的关系。
2. 被聚合对象可以独立存在,即该对象的生命周期不会受到聚合对象的生命周期的影响。
3. 一个聚合对象可以包含多个被聚合对象,但一个被聚合对象只能属于一个聚合对象。
4. 聚合关系通常是动态变化的,即一个对象可以在多个聚合对象之间移动。
例如,下面是一个简单的图书馆类:```javapublic class Library {private String name;private List<Book> books;public Library(String name) { = name;books = new ArrayList<>();}public void addBook(Book book) {books.add(book);}public void removeBook(Book book) {books.remove(book);}}```这个类中包含一个书籍列表,即聚合了多个Book对象。
但是,每个书籍可以独立存在,不受图书馆的限制。
二、组合(Composition)组合是指一个对象包含另一个对象,且被包含对象不能独立存在,它们是“整体-部分”的关系。
例如,一个汽车包含多个轮子,但是一个轮子不能独立存在。
UML类图中的符号解释在UML的定义中,描述类和对象之间的关系,包括以下⼏种⽅式:依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(Composition)、泛化(Generalization)和实现(Realization)。
现分别说明如下:1. 依赖(Dependency)在uml中,“依赖”表⽰为带箭头的虚线,箭头指向被依赖的元素。
是类与类之间的连接,表⽰为⼀个类依赖于另⼀个类的定义,其中⼀个类的变化将影响另⼀个类。
依赖总是单向的,不应该存在双向依赖,这⼀点要特别注意。
更具体的说,依赖可以理解为:⼀个类(A)对不在其实例作⽤域内的另⼀个类或对象(B)的任何类型的引⽤。
⼤致包含以下⼏种情况:(1)局部变量;(2)⽅法的参数;(3)静态⽅法的调⽤;下⾯是依赖关系的uml⽰意图:2. 关联(Association)在uml中,关联表⽰为带箭头的实线。
关联可以是单向的,也可以是双向的。
如果是双向关联,则可以表⽰为双向箭头,或者没有箭头。
⼀般来说,系统设计应表现为单向关联,这样利于维护。
⼀个关联可以附加“多重性”的修饰符,表⽰两个类之间的数量关系。
关联可以理解为:⼀个类(A)持有另⼀个类或对象(B)。
具体表现为:(1)成员变量下⾯是关联关系的uml⽰例图:上⾯的关联表⽰,⼀个Employee持有(has)0个或多个TimeCard。
3. 聚合(Aggregation)在uml中,聚合关系表⽰为空⼼的菱形箭头线。
聚合关系是关联关系的⼀种,表⽰⼀种“强”关联关系。
对⽐与关联关系,两个类是处于同⼀个层次的。
⽽聚合关系,两个类处于不同的层次,强调了⼀个整体/局部的关系。
例如⼀辆汽车有⼀个引擎,4个轮胎。
在聚合关系中,体现了⼀种“弱拥有”的概念。
也就是说,对象A拥有对象B,但B并不是A的组成部分。
更具体的表现为,如果A由B聚合⽽成,则A包含B的全局对象,但B对象可以不在A对象创建时创建。
信息系统项目管理师考试辅导教程(第3版)第4章面向对象方法第4章面向对象方法结构化分析和设计方法在一定葙度上缓解了“软件危机”。
但随着人们对软件提出的要求越来越高,结构化方法己经无法承担快速高效开发复杂软件系统的重任。
2 0世纪80年代逐渐成熟的面向对象方法学,使软件开发者对软件的分析、设计和编程等方面都有了全新的认识。
由于“对象”概念的引入,将数据和方法封装在一起,提高了模块的聚合度,降低了模块的耦合度,更大程度上支持了软件重用,从而十分有效地降低了软件的复杂度,提高了软件开发的生产率。
目前,面向对象方法学已成为软件开发者的第一选择。
根据考试大纲,本章要求考生掌握以下知识点:面向对象的基本概念;统一建模语言UML;可视化建模;面向对象系统分析;面向对象系统设计。
4.1面向对象的基本概念为了讨论面向对象(Object-Oriented,0 0)的技术和方法,必须首先明确什么是“面向对象”?为什么要讨论面向对象的方法?什么是对象?对于这些问题,有许多不同的看法。
其中Booch、Coad/Y ourdon和Jacobson的方法在面向对象软件开发界得到了广泛的认可。
特别值得一提的是统一建模语言(UML,Unified Modeling Language),该方法结合了Booch、OMT和Jacobson方法的优点,统一了符号体系,并从其他的方法和工程实践中吸收了许多经过实践检验的概念和技术。
Peter Coad和Edward Y ourdon曾提出了下列等式:面向对象=对象(Objects)+类(Classes)+继承(Inheritance)+消息通信(Communication with Messages)4.1.1对象与封装对象(Object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。
面向对象的软件系统是由对象组成的,复杂的对象由比较简单的对象组合而成。
也就是说,面向对象方法学使用对象分解取代了传统方法的功能分解。
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;UML-泛化、关联、聚合、组合、依赖一、泛化关系(generalization)1.说明表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
自考 UML的名词解释UML(Unified Modeling Language)是一种用于软件开发的标准建模语言。
它提供了一种统一的方法来描述、构建和使用软件系统的结构和行为。
UML通过使用一组一致的图形符号和文本注释,帮助开发人员更好地理解和沟通软件系统的设计和实现。
在UML中,有许多重要的名词和概念,它们为我们建立起了共同的视觉语言,使得软件系统的设计变得更加直观和易于理解。
本文将对其中的一些重要名词进行解释和阐述。
类(Class)是UML中最基本的概念之一。
类是对具有相同属性、方法、关系和行为的对象的抽象表示。
一个类可以有多个对象的实例,每个实例都具有相同的属性和行为,但其属性的具体值可能不同。
类之间可以通过关联(Association)建立联系,表示不同类之间的关联关系。
对象(Object)是类的实例化表现形式。
一个对象可以拥有其所属类的特定属性和方法。
对象可以相互交互,通过消息(Message)进行沟通,以完成某个具体的任务。
消息是对象之间传递的请求,可以触发对象的方法执行,并在对象之间传递数据。
关联(Association)是描述类之间的关系的重要概念。
关联用于表示一个类与另一个类之间的联系,可以是单向的或双向的,可以是一对一、一对多或多对多的关系。
关联可以帮助我们理解系统中的对象之间的依赖关系和通信模式。
继承(Inheritance)是面向对象编程中的重要概念之一,也是UML中的重要名词。
继承允许一个类继承另一个类的属性和方法,从而减少代码的重复性和冗余性。
通过继承,子类可以拥有父类的所有特性,并且可以在此基础上进行扩展和定制。
泛化(Generalization)是继承的一种特殊形式。
泛化描述了一个更泛化的概念与一个更具体的概念之间的关系。
在UML中,泛化关系通过箭头表示,箭头指向更泛化的类,表示子类继承了父类的特性。
接口(Interface)是一种定义系统中可用功能和服务的约定。
3. 实例(instance)实例就是由某个特定的类所描述的一个具体的对象。
4. 消息(message)消息就是对象之间进行通信的构造。
简言之,消息就是向对象发出的操作请求。
通常,一个消息由下述3部分组成:接收消息的对象;消息名;零个或多个变元及返回值类型。
例如:MyCircle 是Circle 类的对象,当要求它用绿色在屏幕上显示时,应向它发出一下消息:MyCircle · Show (Green) : String9. 多态性(polymorphism)同一消息发给不同对象可产生不同结果。
(或相同的操作应用到不同类中,可以有不同表现形式)在C++语言中,多态性是通过虚函数来实现的。
其中:Use Case View表示系统的功能需求;Logical View表示系统的概念设计和子程序结构;Implementation View表示系统的代码结构;Process View表示系统的并发执行和同步状况;Deployment View表示系统的硬件结构和物理结构。
1) 用例是从使用角度来描述系统中的信息。
即站在系统外来观察系统可见功能的;2)Use Case图不是系统的全部需求,它是系统的功能需求;3)Use case(用例)驱动是:通过Use Case把需求分析、系统设计、测试和实现等捆绑在一起。
用例分析的结果也为预测系统的开发时间和成本提供依据,保证项目顺利进行。
4)不能把actor 简单定义成人。
它可以是设备或外系统。
即使是人,在不同场合也扮演不同角色。
5)一个参与者可以关联多个Use Case 反之,一个Use Case可以关联多个参与者。
1.脚本是用例的实例。
即使用脚本来描述用例。
2.每个用例都对应一系列脚本,其中包括一个主脚本和多个次要(分支)脚本。
.泛化关系(含义是:子用例继承了父用例的行为和含义)例如2.包含关系当多个用例有重复行为,或一个用例内部有重复步骤时。
为了避免重复,把重复行为单独抽出来作为一个用例,形成《include》关系。
UML术语表UML(统一建模语言)是一种用于软件系统设计和开发的图形化建模语言。
它提供了一组丰富的符号和标记,用于描述软件系统的结构、行为和交互。
为了更好地理解UML术语,下面是一个详细的UML术语表。
1. 类图(Class Diagram)类图是UML中最常用的图之一,用于描述系统中的类、接口、关系和依赖关系等。
它显示了类之间的静态结构,包括属性、方法和关联关系等。
2. 对象图(Object Diagram)对象图是类图的实例化表示,它展示了系统中特定时间点上对象之间的静态关系。
对象图可以帮助开发人员更好地理解类之间的实例化关系。
3. 顺序图(Sequence Diagram)顺序图描述了对象之间按照时间顺序进行交互的动态行为。
它展示了消息在对象之间传递时的顺序,并显示了每个对象在交互过程中执行的操作。
4. 活动图(Activity Diagram)活动图描述了系统中各个活动(或操作)之间流转控制的过程。
它展示了活动之间的依赖关系和并发执行等情况,帮助开发人员更好地理解系统的行为。
5. 状态图(Statechart Diagram)状态图描述了系统中对象的生命周期和状态转换。
它展示了对象在不同状态之间的转换条件和动作,帮助开发人员更好地理解系统的状态变化。
6. 用例图(Use Case Diagram)用例图描述了系统中的各个用例和参与者之间的关系。
它展示了系统的功能需求和用户角色,帮助开发人员更好地理解系统的功能范围。
7. 包图(Package Diagram)包图描述了系统中各个包(或命名空间)之间的关系和依赖关系。
它展示了包之间的层次结构和引用关系,帮助开发人员更好地组织代码结构。
8. 组件图(Component Diagram)组件图描述了系统中各个组件之间的关系和依赖关系。
它展示了组件之间的接口、依赖和协作等,帮助开发人员更好地设计和实现模块化的软件系统。
9. 部署图(Deployment Diagram)部署图描述了系统中各个节点之间的物理部署关系。
关联、聚合、组合和依赖之间区别⼀、关联(Association)指类与类之间的关系,它使得⼀个类知道另⼀个类的属性和⽅法。
关联可以是双向的,也可以是单向的。
在Java语⾔中,关联关系⼀般使⽤成员变量来实现。
采⽤实线箭头表⽰例如,企鹅只存在在南极,与⽓候有关系,⽤代码表⽰如下:public class Bird {private Climate climate;}⼆、聚合(Aggregation)关联关系的⼀种,表⽰⼀种弱的“拥有”关系,体现的是A对象可以包含B对象,但是B对象不是A对象的⼀部分。
采⽤空⼼菱形箭头表⽰例如,⼤雁是群居动物,每只⼤雁都属于⼀个雁群,⼀个雁群可以有多只⼤雁,⽤代码表⽰如下:public class WideGooseAggregate {//private WideGoose[] wideGooses;private List<WideGoose> wideGooses;}三、组合(Composition)关联关系的⼀种,表⽰⼀种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的⽣命周期⼀样。
采⽤实⼼菱形箭头表⽰例如,每只鸟都有翅膀,⽤代码表⽰如下:public class Bird {private Wing wing;public Bird() {wing = new Wing();}}四、依赖(Dependency)指类与类之间的联接,依赖关系表⽰⼀个类依赖于另⼀个类的定义。
⼀般⽽⾔,依赖关系在Java语⾔中体现为局域变量、⽅法的形参,或者对静态⽅法的调⽤。
采⽤虚线箭头表⽰例如,程序员⼯作需要⽤到电脑,代码表⽰如下:public class Programmer{public void work(Computer computer) {}}。
UML基础知识⼀:UML定义了5类,10种模型图UML提供的基本模型图包括:(1)、⽤例图:展⽰系统外部的各类执⾏者与系统提供的各种⽤例之间的关系(2)、类图:展⽰系统中类的静态结构(类是指具有相同属性和⾏为的对象,类图⽤来描述系统中各种类之间的静态结构)(3)、对象图:是类图的⼀种实例化图(对象图是对类图的⼀种实例化)(4)、包图:是⼀种分组机制。
在UML1.1版本中,包图不再看作⼀种独⽴的模型图)(5)、状态图:描述⼀类对象具有的所有可能的状态及其转移关系(它展⽰对象所具有的所有可能的状态以及特定事件发⽣时状态的转移情况)(6)、顺序图:展⽰对象之间的⼀种动态协作关系(⼀组对象组成,随时间推移对象之间交换消息的过程,突出时间关系)(7)、合作图:从另⼀个⾓度展⽰对象之间的动态协作关系(对象间动态协作关系,突出消息收发关系)(8)、活动图:展⽰系统中各种活动的执⾏流程(各种活动的执⾏顺序、执⾏流程)(9)、构件图:展⽰程序代码的物理结构(描述程序代码的组织结构,各种构件之间的依赖关系)(10)、配置图:展⽰软件在硬件环境中(特别是在分布式及⽹络环境中)的配置关系(系统中硬件和软件的物理配置情况和系统体系结构)建模过程⾸先:描述需求次之:根据需求建⽴系统的静态模型,以构造系统的结构第三:描述系统的⾏为其中第⼀步与第⼆步中所建⽴的模型都是静态的,包括⽤例图、类图(包括包图)、对象图、构件图和配置图等六种图。
这些图构成了标凖建模语⾔UML的静态建模机制。
第三步中所建⽴的模型或者可吧执⾏或者表⽰执⾏时的时序状态或交互关系,它包括状态图、活动图、顺序图和合作图等四种图。
这些图构成了标准建模语⾔UML的动态建模机制。
可⽤以下常⽤视⾓来描述⼀个系统:(1)、系统的使⽤实例:从系统外部的操作者的解度描述系统的功能(2)、系统的逻辑结构:描述系统内部的静态结构和动态⾏为,即从内部描述如何设计实现系统功能(3)、系统的构成:描述系统由哪些程序构件所组成(4)、系统的并发性:描述系统的并发性,强调并发系统中存在的各种通信和同步问题(5)、系统的配置:描述系统的软件和各种硬件设备之间的配置关系⼆:软件开发过程(RUP概述):迭代开发过程:由四个阶段构成,每个阶段都包含软件开发的每个过程:分析、设计、实现和测试阶段四个阶段:初始阶段、细化阶段、构造阶段、移交阶段通常在移交阶段后进⾏总体测试、性能测试、⽤户培训等1. 初始阶段:项⽬的总体需求、可⾏性分析等,并确认是否启动该项⽬2. 细化阶段:(1/5周期)启动该项⽬后,(1)、实际要做什么?(2)、如何做?(3)、将采⽤什么技术?风险分析和风险管理(1)、需求风险:不能偏离⽤户需要,要充分了解⽤户需求及各需求的相对优化程度处理需求风险:⽤例分析技术。