++第一篇:UML基础程序员
++UML简述算法
++++UML(Unified Modeling Language)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的全部阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。数据库
++++UML规范用来描述建模的概念有:类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协做,以及状态。编程
++UML主要内容设计模式
++++统一建模语言(UML,Unified Modeling Language)是面向对象软件的标准化建模语言。数组
++++UML因其简单、统一的特色,并且能表达软件设计中的动态和静态信息,目前已成为可视化建模语言的工业标准。网络
++++UML由3个要素构成:UML的基本构造快、支持这些构造块如何放置在一块儿的规则和运用于整个语言的公用机制。架构
++++UML有3种基本的构造块:事物、关系和图。框架
++++事物是对模型中最具备表明性的成分的抽象,包括:结构事物、行为事物、分组事物和注释事物。编程语言
--结构事物,如类(Class)、接口(Interface)、协做(Collaboration)、用例(UseCase)、主动类(ActiveClass)、组件(Component)和节点(Node);
--行为事物,如交互(Interaction)、状态机(Statemachine);
--分组事物,包(Package);
--注释事物,注释(Note)。
++++关系用来把事物结合在一块儿,包括依赖、关联、泛化和实现关系。
++UML定义的9种图
++++UML从考虑系统的不一样角度出发,定义了用例图、类图、对象图、状态图、活动图、序列图、协做图、构件图、部署图等9种图。
++++这些图从不一样的侧面对系统进行描述。
++++系统模型将这些不一样的侧面综合成一致的总体,便于系统的分析和构造。
++UML特色
++++UML统一了各类方法对不一样类型的系统、不一样开发阶段以及不一样内部概念的不一样观点,从而有效的消除了各类建模语言之间没必要要的差别。它其实是一种通用的建模语言,能够为许多面向对象建模方法的用户普遍使用。
++++UML建模能力比其它面向对象建模方法更强。它不只适合于通常系统的开发,并且对并行、分布式系统的建模尤其适宜。
++++UML是一种建模语言,而不是一个开发过程。
++UML应用
++++UML已成功应用于电信、金融、政府、电子、国防、航天航空、制造与工业自动化、医疗、交通、电子商务等领域中。
++++在这些领域中,UML的建模包括大型、复杂、实时、分布式、集中式数据或者计算,以及嵌入式系统等,并且还用于软件再生工程、质量管理、过程管理、配置管理的各方面。
#第二篇:UML在设计模式中的应用
++2.1、单例模式
++++单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
++2.2、工厂方法模式
++++工厂方法模式(Factory Method):定义一个用于建立对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
++2.3、抽象工厂模式
++++抽象工厂模式(Abstract Factory):提供一个建立一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
++2.4、建造者模式
++++建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。
++2.5、原型模式
++++原型模式(Prototype):用原型实例指定建立对象的种类,而且经过拷贝这些原型建立新的对象。
++2.6、适配器模式
++++适配器模式(Adapter):将一个类的接口转换成客户但愿的另一个接口。Adapter模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做。
++2.7、装饰模式
++++装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增长功能来讲,装饰模式比生成子类更为灵活。
++2.8、桥接模式
++++桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们均可以独立地改变。
++2.9、组合模式
++++组合模式(Composite):将对象组合成树形结构以表示“部分-总体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具备一致性。
++2.10、享元模式
++++享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。
++2.11、代理模式
++++代理模式(Proxy):为其余对象提供一种代理以控制对这个对象的访问。
++2.12、外观模式
++++外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
++2.13、观察者模式
++++观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知全部观察者对象,使它们可以自动更新本身。
++2.14、模板方法
++++模板方法(Template Method):定义一个操做中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类能够不改变一个算法的结构便可重定义该算法的某些特定步骤。
++2.15、命令模式
++++命令模式(Command):将一个请求封装为一个对象,从而使咱们可用不一样的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操做。
++2.16、状态模式
++++状态模式(State):当一个对象的内在状态改变时容许改变其行为,这个对象看起来像是改变了其类。
++2.17、职责链模式
++++职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
++2.18、解释器模式
++++解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
++2.19、中介者模式
++++中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不须要显式地相互引用,从而使其耦合松散,并且能够独立地改变它们之间的交互。
++2.20、访问者模式
++++访问者模式(Visitor):表示一个做用于某对象结构中的各元素的操做。它使咱们能够在不改变各元素的类的前提下定义做用于这些元素的新操做。
++2.21、策略模式
++++策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间能够相互替换,此模式让算法的变化,不会影响到使用算法的客户。
++2.22、备忘录模式
++++备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象以外保存这个状态。这样之后就可将该对象恢复到原先保存的状态。
++2.23、迭代器模式
++++迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
#第三篇:UML拓展
+++++此部分是立钻哥哥从不一样角度和领域分析拓展UML类图。
++++3.1、详解UML图之类图
++++3.2、UML类图中类与类之间的关系
++++3.3、类图以及类与类之间的关系
++++3.4、UML类图设计
++++3.5、读懂UML类图
++++3.6、UML类图简单介绍
++++3.7、深刻浅出UML类图
++++3.8、UML类图详解
++3.1、详解UML图之类图
++++产品经理的必备技能之一是画UML图。
++++使用工具:Visio或者Processon在线做图。
++类图中模型元素
++++在类图中一共包含的模型元素:类(Class)、接口(Interface)以及类之间的关系。
++++类(Class):
--在面向对象(OO)编程中,类是对现实世界中一组具备相同特征的物体的抽象。
++++接口(Interface):
--接口是一种特殊的类,具备类的结构但不可被实例化,只能够被实现(继承)。在UML中,接口使用一个带有名称的小圆圈来表示。
++++类图中关系(relation):
--在UML类图中,常见的关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
++类图中关系(relation)
++++1、泛化(Generalization)关系:是一种继承关系,表示通常与特殊的关系,它指定了子类如何特化父类的全部特征和行为。(箭头指向:带三角箭头的实线,箭头指向父类。)
++++2、实现(Realization)关系:是一种类与接口的关系,表示类是接口全部特征和行为的实现。(箭头指向:带三角箭头的虚线,箭头指向接口。)
++++3、关联(Association)关系:是一种拥有的关系,它使一个类知道另外一个类的属性和方法。双向的关联能够有两个箭头或者没有箭头,单向的关联有一个箭头。(代码体现:成员变量。)(箭头及指向:带普通箭头的实心线,指向被拥有者。)
++++4、聚合(Aggregation)关系:总体与部分的关系,且部分能够离开总体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上没法区分,必须考察具体的逻辑关系。(例如:车和轮胎是总体和部分的关系,轮胎离开车仍然能够存在。)(代码体现:成员变量。)(箭头及指向:带空心菱形的实心线,菱形指向总体。)
++++5、组合(Composition)关系:是总体与部分的关系,但部分不能离开总体而单独存在。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中表明总体的对象负责表明部分的对象的生命周期。(好比:嘴巴属于头部,嘴巴离开头,不能独立存在。)(代码体现:成员变量。)(箭头及指向:带实心菱形的实线,菱形指向总体。)
++++6、依赖(Dependency)关系:是一种使用的关系,即一个类的实现须要另外一个类的协助,因此要尽可能不使用双向的相互依赖。(代码表现:局部变量、方法的参数或者对静态方法的调用。)(箭头及指向:带箭头的虚线,指向被使用者。)
++++各类关系的强弱顺序:泛化=实现>组合>聚合>关联>依赖。
++UML实践总结:
++++软件分析与设计是编码前的两个阶段,其中分析仅与业务有关,而与技术无关。设计以分析为基础,主要与具体技术有关。
++++分析阶段由分析师绘制领域UML类图,设计阶段由设计师绘制实现UML类图。
++++领域UML类图表示系统的静态领域结构,其中的类不与最终程序中的类对应;设计UML类图表示系统的技术架构,是程序员的编码依据,其中的类与系统中的类对应。
++++领域UML类图中类的属性与操做仅关注与业务有关的部分,实现UML类图中的属性与操做要包括最终须要实现的所有方法和操做。
++3.2、UML类图中类与类之间的关系
++++UML类图中的关系:依赖关系(Dependency)、关联关系(Association)、聚合关系(Aggregation)、组合关系(Composition)、继承关系(Inheritance)。
++3.2.1、依赖关系(Dependency)
++++单向,表示一个类依赖于另外一个类的定义,其中一个类的变化将影响另一个类,是一种“use a”关系。(若是A依赖于B,则B表现为A的局部变量,方法参数,静态方法调用等。)
++++代码参考(Zuanzuan依赖于Love,则Love表现为Zuanzuan的局部变量,方法参数,静态方法调用等。):
public class Zuanzuan{
string name = Love:getName(); //静态方法调用
public void Lovezuanzuan(){
Love mylove = new Love(); //局部变量
}
//方法参数
public void ToLoveMe(Love myLove){
}
}
++3.2.2、关联关系(Association)
++++单向或双向(一般咱们须要避免使用双向关联关系),是一种“has a”关系,若是A单向关联B,则能够说“A has a B”,一般表现为全局变量。
++3.2.3、聚合关系(Aggregation)
++++单向,关联关系的一种,与关联关系之间的区别是语义上的,关联的两个对象一般是平等的,聚合则通常不平等,有一种总体和局部的感受,实现上区别不大。
++3.2.4、组合关系(Composition)
++++单向,是一种强依赖的特殊聚合关系。
++++若是总体不存在了,部分也将消亡。
++++代码示例(Head、Body、Arm和Leg组合成People,其生命周期相同):
public class Person{
public Head head;
public Body body;
public Arm arm;
public Leg leg;
public Person(){
head = new Head();
body = new Body();
arm = new Arm();
leg = new Leg();
}
}
++3.2.5、继承关系(Inheritance)
++++类实现接口,类继承抽象类,类继承父类都属于这种关系。可分为:实现和泛化。
++++实现(Realization):类实现接口属于这种关系。
++++泛化(Generalization):即“is a”关系,类继承抽象类,类继承父类都属于这种关系。
++3.3、类图以及类与类之间的关系
++++设计模式在程序设计上有着很重要的做用,使用设计模式可使得代码更容易被理解,使得代码,真正实现工程化。
++++类与类之间主要有6种关系:依赖,关联,聚合,组合,继承,实现。
++3.3.0、用UML表示一个类
++++类图通常是三行的结构:
--第一行:类名称
--第二行:属性:格式(可见性 名称:类型[=缺省值])
--第三行:方法:格式(可见性 名称(参数列表)[返回值类型])
++3.3.1、依赖(Dependency)
++++依赖主要体现了一种使用关系,两个相对独立的对象,当一个对象负责构造另外一个对象的实例,或者依赖另外一个对象的服务时,主要体现为依赖关系。
++++依赖关系主要有3种表现形式(以类A中使用了类B为例):
--第一种:类B是做为类A的方法参数。
--第二种:类B是类A的方法中的局部变量。
--第三种:在类A中调用类B的静态方法。
++++在依赖中使用的是“虚线+箭头”。
++3.3.2、关联(Association)
++++关联主要体现的是一种对应关系,两个相对独立的对象,当一个对象的实例与另外一个对象的实例存在固定的对应关系时,这两个对象之间为关联关系。一般是将一个类的对象做为另外一个类的成员变量。
++++关联关系的分类:单向关联、双向关联。
++3.3.3、聚合(Aggregation)
++++聚合是关联关系的一种,表现了一种弱的“拥有”关系,关联关系的对象之间是相互独立的,可是聚合关系的对象之间存在着一种包容关系,体现的是A对象能够包容B对象,可是B对象不是A对象的一部分。它们之间是“总体-个体”的关系。
++++成员对象一般做为构造方法、Setter方法或业务方法的参数注入到总体对象中。
++++代码举例:
public class People{
private Student student;
private Worker worker;
private Farmer farmer;
public People(Student student, Worker worker, Farmer farmer){
this.student = student;
this.worker = worker;
this.farmer = farmer;
}
}
++3.3.4、组合(Composition)
++++组合是一种强的“拥有”关系,组合中的类之间是“总体-部分”的关系,“总体”负责“部分”的生命周期,“部分”和“总体”的生命周期是同样的,“部分”单独存在是没有任何意义的。一般在总体类的构造方法中直接实例化成员类。
++++代码示例(鸟Bird,翅膀Wing):
public class Bird{
private Wing wing;
public Bird(){
wing = new Wing();
}
}
++3.3.5、继承(Inheritance)
++++继承表示的是类与类之间或者接口与接口之间的父子关系。
++3.3.6、实现(Implementation)
++++实现表示的是一个类实现一个或多个接口。
++3.4、UML类图设计
++3.4.1、类
++++“动物”矩形框,它表明一个类。
++++该类图分为三层:
--第一层:显示类的名称,若是是抽象类就要用斜体显示。
--第二层:类的特性,一般就是字段和属性。
--第三层:类的操做,一般是方法和行为。
++++“+”表示public。
++++“-”表示private。
++++“#”表示protected。
++3.4.2、接口
++++“飞翔”矩形框表示一个接口图,它与类图的区别主要是顶端有《interface》显示。
++++第一行是接口名称,第二行是接口方法。
++++接口还有另外一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了“讲人话”的接口。
++3.4.3、继承关系
++++动物,鸟,鸭,唐老鸭它们之间都是继承的关系,继承关系用空心三角形+实现来表示。
++3.4.4、实现接口
++++“大雁”实现了“飞翔”接口。
++++实现接口用:空心三角形+虚线来表示。
++3.4.5、关联关系
++++企鹅与气候有很大的关系,企鹅须要“知道”气候的变化,须要“了解”气候规律。
++++当一个类“知道”另外一个类时,能够用关联(association)关系。
++++关联关系用实线箭头来表示。
++++代码示例:
class Penguin : Bird{
//在企鹅Penguin中,引用到气候Climate对象
private Climate climate;
}
++3.4.6、聚合关系
++++“大雁”和“雁群”这两个类。
++++大雁是群居动物,每只大雁都属于一个雁群,一个雁群能够有多只大雁。因此它们之间就知足聚合(Aggregation)关系。
++++聚合表示一种弱的“拥有”关系,体现的是A对象能够包含B对象,但B对象不是A对象的一部分。
++++聚合关系用:空心的菱形 + 实线箭头表示。
++++代码示例:
class WideGooseAggregate{
//在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose
private WideGoose[] arrayWideGoose;
}
++3.4.7、组合关系
++++“鸟”和“翅膀”这两个类。
++++鸟和翅膀是总体和部分的关系,而且翅膀和鸟的生命周期是相同的,在这里鸟和其翅膀就是组合关系。组合(composition)是一种强的“拥有”关系,体现了严格的部分和总体的关系,部分和总体的生命周期同样。
++++组合关系用:实心的菱形+实线箭头来表示。
++++组合关系的连线两端还有一个数字“1”和数字“2”,这被称为基数。代表这一端的类能够有几个实例,很显然,一只鸟应该有两只翅膀。(若是一个类可能有无数个实例,则就用“n”来表示。)
++++说明:关联关系和聚合关系也能够有基数的。
++++代码示例:
class Bird{
private Wing wing;
public Bird(){
//在鸟Bird类中,初始化时,实例化翅膀Wing,它们之间同时生成
wing = new Wing();
}
}
++3.4.8、依赖关系
++++“动物”、“氧气”和“水”之间。
++++动物有几大特征,好比有新陈代谢,能繁殖。
++++而动物要有生命,须要氧气,水以及食物等。
++++也就是说动物依赖于氧气和水。
++++它们之间是依赖关系(Dependency),用虚线箭头来表示。
++++代码示例:
abstract class Animal{
public Metabolism(Oxygen oxygen, Water water){
}
}
++3.5、读懂UML类图
++++设计应用架构时常常会使用UML类图。
++++在UML类图中,类使用包含类名、属性(field)和方法(method)且带有分割线的矩形来表示。
++++属性的完整表示方式: 可见性 名称 :类型[ = 缺省值]
++++方法的完整表示方式: 可见性 名称(参数列表)[: 返回类型]
++++【+】:表示public
++++【-】:表示private
++++【#】:表示protected
++++类与类之间的表示方式:关联关系、聚合关系、组合关系、依赖关系、继承关系、接口实现关系。
++3.5.1、关联关系
++++关联关系又可进一步分为单向关联、双向关联和自关联。
++++单向关联:在UML类图中单向关联用一个带箭头的直线表示。
++++双向关联:就是双方各自持有对方类型的成员变量。在UML类图中,双向关联用一个不带箭头的直线表示。
+++自关联:在UML类图中用一个带有箭头且指向自身的直线表示。
++3.5.2、聚合关系
++++UML中聚合关系用带空心菱形和箭头的直线表示。
++++聚合关系强调是“总体”包含“部分”,可是“部分”能够脱离“总体”而单独存在。
++3.5.3、组合关系
++++组合关系与聚合关系最大不一样在于:这里的“部分”脱离了“总体”便不复存在。
++++在UML类图中,组合关系用一个带实心菱形和箭头的直线表示。
++3.5.4、依赖关系
++++在UML类图中,依赖关系用一条带有箭头的虚线表示。
++3.5.5、继承关系
++++在UML类图中用带空心三角形的直线表示。
++3.5.6、接口实现关系
++++在UML类图中用带空心三角形的虚线表示。
++3.6、UML类图简单介绍
++++UML(Unified Modeling Language:统一建模语言),是非专利的第三代建模和规约语言。
++++UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
++3.6.1、class UML类图
++++空心箭头实线:表示类A继承于类B。
++++空心箭头虚线:表示小汽车和自行车实现了“车”这个接口。
++++带方向的实线:表示A中具备B这个成员变量。
++++带方向的虚线:表示A中的通常方法须要B做为传入参数。
++++空心菱形实线:表示B中的构造方法(或set方法)须要A做为传入参数。
++++实心菱形实线:表示B中构造函数中将A进行了实例化。
++3.7、深刻浅出UML类图
++++UML(统一建模语言)是当前软件开发中使用最为普遍的建模技术之一,经过使用UML能够构造软件系统的需求模型(用例模型)、静态模型、动态模型和架构模型。
++++UML经过图形和文字符号来描述一个系统,它是绘制软件蓝图的标准语言。
++++熟练掌握UML建模技术是一个优秀的软件从业人员所必备的基本技能之一。
++3.7.1、用例建模
++++在UML中,需求模型又称为用例模型,它主要用于描述系统的功能性需求,即软件能够实现的需求。
++++常规的用例建模通常包括两个组成部分:绘制用例图和编写用例文档。
++++绘制用例图:用例图是UML中比较简单的一种图形,它包含两个主要组成要素,分别是执行者(Actor)和用例(Use Case)。
++++编写用例文档:绘制用例图只是完成了用例建模最基本也是最简单的一步,用例建模的核心在于编写用例文档,用例文档又称为用例规约或用例描述。(用例文档是用于描述用例的文档,每个用例对应于一个用例文档,在用例文档中须要用文字的方式描述用例的执行过程,即执行者与系统的交互过程。)
++3.7.2、UML类图
++++在UML2.0的13种图形中,类图是使用频率最高的UML图之一。
++++类图很重要。
++++类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。
++3.7.3、类
++++类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具备相同属性、操做、关系的对象集合的总称。(在系统中,每一个类都具备必定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。)(一个类能够有多种职责,设计得好的类通常只有一种职责。)(在定义类的时候,将类的职责分解成为类的属性和操做(即方法)。)(类的属性即类的数据职责,类的操做即类的行为职责。)
++++设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分。
++++在软件系统运行时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。
++++类图(Class Diagram)使用出如今系统中的不一样类来描述系统的静态结构,它用来描述不一样的类以及它们之间的关系。
++++在系统分析与设计阶段,类一般能够分为三种:实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class)。
++++实体类(Entity Class):实体类对应系统需求中的每一个实体,它们一般须要保存在永久存储体中,通常使用数据库表或文件来记录,实体类集包括存储和传递数据的类,还包括操做数据的类。
++++控制类(Control Class):控制类用于体现应用程序的执行逻辑,提供相应的业务操做,将控制类抽象出来能够下降界面和数据库之间的耦合度。
++++边界类(Boundary Class):边界类用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类。
++++在面向对象分析和设计的初级阶段,一般首先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。
++3.7.4、类的MUL图示
++++在UML中,类使用包含类名、属性和操做且带有分割线的长方形来表示。
++++在UML类图中,类通常由三部分组成:
--第一部分:类名:每一个类都必须有一个名字,类名是一个字符串。
--第二部分:类的属性(Attributes):属性是指类的性质,即类的成员变量。一个类能够有任意多个属性,也能够没有属性。(表示方式: 可见性 名称:类型[=缺省值])
--第三部分:类的操做(Operations):操做是类的任意一个实例对象均可以使用的行为,是类的成员方法。(表示方式: 可见性 名称(参数列表)[: 返回类型])
++3.7.5、类与类之间的关系
++++在软件系统中,类并非孤立存在的,类与类之间存在各类关系,对于不一样类型的关系,UML提供了不一样的表示方式:关联关系、依赖关系、泛化关系。
++++【关联(Association)关系】:是类与类之间最经常使用的一种关系,它是一种结构化关系,用于表示一类对象与另外一类对象之间有联系。(在UML类图中,用实线链接有关联关系的对象所对应的类。)(在使用编程语言实现关联关系时,一般将一个类的对象做为另外一个类的成员变量。)(在UML中,关联关系一般包含:双向关联、单向关联、自关联、多重性关联、聚合关系、组合关系。)
--双向关联:默认状况下,关联是双向的。(例如:顾客购买商品并拥有商品,反之,卖出的商品总有某个顾客与之相关联。)
--单向关联:类的关联关系也能够是单向的,单向关联用带箭头的实线表示。(例如:顾客拥有地址,则Customer类与Address类具备单向关联关系。)
--自关联:在系统中可能会存在一些类的属性对象类型为该类自己,这种特殊的关联关系称为自关联。(例如:一个节点类(Node)的成员又是节点Node类型的对象。)
--多重性关联:又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性能够直接在关联直线上用一个数字或一个数字范围表示。(例如:一个界面能够拥有零个或多个按钮,可是一个按钮只能属于一个界面。)
--聚合(Aggregation)关系:表示总体与部分的关系。在聚合关系中,成员对象是总体对象的一部分,可是成员对象能够脱离总体对象独立存在。在UML中,聚合关系用带空心菱形的直接表示。(例如:汽车发动机是汽车的组成部分,可是汽车发动机能够独立存在。)(在代码实现聚合关系时,成员对象一般做为构造方法、Setter方法或业务方法的参数注入到总体对象中。)
--组合(Composition)关系:表示类之间总体和部分的关系,可是在组合关系中总体对象能够控制成员对象的生命周期,一旦总体对象不存在,成员对象也将不存在,成员对象与总体对象之间具备同生死的关系。在UML中,组合关系用带实心菱形的直线表示。(例如:人的头与嘴巴,嘴巴是头的组成部分之一,并且若是头没了,嘴巴也就没了,所以头和嘴巴是组合关系。)(在代码实现组合关系时,一般在总体类的构造方法中直接实例化成员类。)
++++【依赖(Dependency)关系】:是一种使用关系,特定事物的改变有可能会影响到使用该事物的其余事物,在须要表示一个事物使用另外一个事物时使用依赖关系。大多数状况下,依赖关系体如今某个类的方法使用另外一个类的对象做为参数。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。(例如:驾驶员开车,在Driver类的drive()方法中将Car类型的对象myCar做为一个参数传递,以便在drive()方法中可以调用myCar的move()方法,且驾驶员的drive()方法依赖车的move()方法,所以类Driver依赖类Car。)
(在系统实施阶段,依赖关系一般经过三种方式来实现:第一种,最经常使用方式,将一个类的对象做为另外一个类中方法的参数;第二种,在一个类的方法中将另外一个类的对象做为其局部变量;第三种,在一个类的方法中调用另外一个类的静态方法。)
++++【泛化(Generalization)关系】:也就是继承关系,用于描述父类与子类之间的关系,父类又称做基类或超类,子类又称做派生类。在UML中,泛化关系用带空心三角形的直线来表示。在代码实现时,咱们使用面向对象的继承机制来实现泛化关系,如在C++/C#中使用冒号“:”来实现。(在Java语言中使用extends关键字。)
++++【接口与实现关系】:在不少面向对象语言中都引入了接口的概念,如Java,C#等。在接口中,一般没有属性,并且全部的操做都是抽象的,只有操做的声明,没有操做的实现。UML中用于类的表示法相似的方式表示接口。接口之间能够有类之间关系相似的继承关系和依赖关系,可是接口和类之间还存在一种实现(Realization)关系,在这种关系中,类实现了接口,类中的操做实现了接口中所声明的操做。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。
++3.7.6、UML发展示状与实际应用
++++UML的应用领域很普遍,实际上除了软件界可使用以外,其余行业也可使用,甚至有用UML的方法绘制的军事战略部署图,固然最主要的仍是应用于计算机领域。它能够用于各类类型的软件开发,不管是制造业、游戏开发、医疗卫生系统、仍是OA、EAI、DSS、ERP、...均可以使用到UML。
++++UML建模语言对于使用面向对象技术开发的系统更加合适,固然在需求分析等阶段对全部的应用系统都实用。像一些流程化很强的系统,或者小型的项目有时候没有必要必定使用UML。像敏捷开发中就提到系统的开发人员应该从技术和工具灵活的选择,找到最合适的工具,像作一个小软件,就不须要用到UML来进行建模。
++++UML主要用于系统的分析和设计阶段,如今大部分的UML case工具都能自动生成一些程序代码,实际上也能够用于一些基本的系统实施阶段,同时从UML分析中能够获得一些测试用例,另外UML对系统的维护与设计也有所帮助,好的UML模型让维护人员在发现问题后能够很快找到问题的根源,在项目开发的全过程当中均可以见到UML,可是主要仍是分析和设计。
++++正确使用UML来分析与设计系统。采用UML做为建模语言是彻底必要的:首先,各类各样的面向对象建模语言都是相互独立的,而UML能够消除一些潜在的没必要要的差别,以避免用户混淆;第二,经过统一语义和符号表示,可以稳定面向对象技术市场,使项目根植于一个成熟的标准建模语言,从而能够大大拓展所研制与开发的软件系统的适用范围,并大大提升其灵活程度。
++3.8、UML类图详解
++++类图(Class Diagrams)是根据系统中的类以及各种之间的关系描述系统的静态视图。类图不只显示系统内信息的结构,还描述系统内这些信息的行为。类图的一个重要目的是为其余图(如顺序图、交互图)定义一个基础。类图由多个类以及这些类之间的关系组成。
++++在系统设计阶段,类图直接引导面向对象的编程语言实现类。类图是生成代码的核心要图。若是类图设计得好,整个系统的代码框架能够由类图自动生成,大大简化了系统编码所耗费的时间。
++3.8.1、类(Class)
++++类是对象的蓝图。
++3.8.2、接口(Interface)
++++接口是一系列操做的集合,它指定了一个类所提供的服务。
++3.8.3、类图关系
++++类图关系:依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(合成)(Composition)、泛化(Generalization)、实现(Realization)等。
++++【依赖(Dependency)】:对于两个相对独立的类,当一个类负责构造另外一个类的实例,或者依赖另外一个类时,这两个类之间主要体现为依赖关系。
++++【关联(Association)】:对于两个相对独立的类,当一个类的实例与另外一个类的实例存在固定的对应关系时,这两个类之间为关联关系。
++++【聚合(Aggregation)】:当系统A被加入到系统B中,成为系统B的组成部分时,系统B和系统A之间为聚合关系。(聚合(Aggregation)关系是关联关系的一种,是强的关联关系。)(聚合是总体和个体之间的关系。例如:大雁类能够脱离雁群类而独立存在。)
++++【组合(Composition)】:组合是聚合的一种特殊形式,暗示“局部”在“总体”内部的生存期职责。(例如:翅膀类不能够脱离大雁类而独立存在。)
++++【泛化(Generalization)】:表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。(泛化表示一个更泛化的元素和一个更具体的元素之间的关系。)
++++【实现(Realization)】:实例关系指向实现接口,箭头指向接口。
++++这几种关系都是语义级别的,从代码层面并不能彻底区分各类关系,其表现的强弱程度: 组合>聚合>关联>依赖。
++++【聚合VS组合】:聚合和组合都是一种结合关系,只是额外具备总体-部分的含义。(生命周期不一样:聚合关系中,整件不会拥有部件的生命周期,因此整件删除时,部件不会被删除,多个整件能够共享同一个部件;组合关系中,整件拥有部件的生命周期,整件删除时,部件必定会跟着删除,多个整件不能够同时共享同一个部件。)(聚合关系是“has-a”关系,组合关系是“Contains-a”关系。)
++++【关联VS聚合】:关联和聚合的区别主要在语义上,关联的两个对象之间通常是平等的。(关联:例如,你是个人朋友。)(关联是一种结构化的关系,指一种对象和另外一种对象有联系。)
++++【关联VS依赖】:关联关系中,体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,好比我和个人朋友。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,通常是长期性的,并且双方的关系通常是平等的。(依赖关系中,就是一个类A使用到了另外一个类B,而这种使用关系是具备偶然性的、临时性的、很是弱的,可是B类的变化会影响到A。)
#立钻哥哥Unity学习空间:https://blog.csdn.net/VRunSoftYanlz/
++立钻哥哥推荐的拓展学习连接(Link_Url):
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++设计模式简单整理:http://www.javashuo.com/article/p-rngqugib-hg.html
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++UML类图:http://www.javashuo.com/article/p-sxberuew-bm.html
++++Unity知识点0001:http://www.javashuo.com/article/p-ryvdxxjr-ep.html
++++U3D_Shader编程(第一篇:快速入门篇):http://www.javashuo.com/article/p-kyppgrac-gz.html
++++U3D_Shader编程(第二篇:基础夯实篇):http://www.javashuo.com/article/p-qkyowtli-hv.html
++++Unity引擎基础:http://www.javashuo.com/article/p-beommoeb-ka.html
++++Unity面向组件开发:http://www.javashuo.com/article/p-eigmuvut-dt.html
++++Unity物理系统:http://www.javashuo.com/article/p-nqvvciwv-kd.html
++++Unity2D平台开发:http://www.javashuo.com/article/p-ycaagdtj-hs.html
++++UGUI基础:http://www.javashuo.com/article/p-rukxwckw-mc.html
++++UGUI进阶:http://www.javashuo.com/article/p-wcatruhq-gt.html
++++UGUI综合:http://www.javashuo.com/article/p-dkccmqii-gg.html
++++Unity动画系统基础:http://www.javashuo.com/article/p-mbrdouxy-dq.html
++++Unity动画系统进阶:http://www.javashuo.com/article/p-aqaqpbkh-bp.html
++++Navigation导航系统:http://www.javashuo.com/article/p-dswwllas-t.html
++++Unity特效渲染:http://www.javashuo.com/article/p-ckojjyfj-bp.html
++++Unity数据存储:http://www.javashuo.com/article/p-bvlzynso-m.html
++++Unity中Sqlite数据库:http://www.javashuo.com/article/p-ejutsbxl-ca.html
++++WWW类和协程:http://www.javashuo.com/article/p-dbwmhsav-cy.html
++++Unity网络:http://www.javashuo.com/article/p-sqrlntgh-dw.html
++++C#事件:http://www.javashuo.com/article/p-zmwruvql-gm.html
++++C#委托:http://www.javashuo.com/article/p-uozpymaf-gh.html
++++C#集合:http://www.javashuo.com/article/p-sfqfdqsf-ex.html
++++C#泛型:http://www.javashuo.com/article/p-xrttqngo-ee.html
++++C#接口:http://www.javashuo.com/article/p-vhlfplgv-dm.html
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:http://www.javashuo.com/article/p-olslkfao-cq.html
++++C#数据类型:http://www.javashuo.com/article/p-hmabbtmc-ba.html
++++Unity3D默认的快捷键:http://www.javashuo.com/article/p-wuwcrclr-s.html
++++游戏相关缩写:http://www.javashuo.com/article/p-mwacxwca-gm.html
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft : lovezuanzuan--_--