zoukankan      html  css  js  c++  java
  • UML

    • UML统一建模语言,是客户需求与实际开发的桥梁。
    • UML主要通过三类图形建立系统模型:用例图、静态结构图(类图、对象图、组件图、配置图)、动态行为图(顺序图、协同图、状态图、活动图)。这三类图是将抽象的客户需求可视化的介质。
    • UML中的模型元素指:类、接口、组件、节点、图等;而将语意相似的模型元素组织在一起就构成了UML的包。
    • UML中主要包含四个包:用户接口包、业务逻辑包、数据持久访问包、通用工具包。
    • 顺序图和协作图适合描述多个对象的协同关系,而状态图适合描述一个对象穿越多个Use Case的行为。状态图和活动图的区别在于,状态图描述的是对象类响应事件的外部行为,而活动图描述的是响应内部处理对象类的行为。
    • UML类间关系 (引自:http://www.cnblogs.com/yyyyy5101/archive/2011/03/11/1981078.html)

      继承

      指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间 最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;

      实现

      指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字 implements明确标识,在设计时一般没有争议性

        继承和实现又可以统称为泛化

      依赖

      可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过 河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

      [具体表现]
      依赖关系表现在局部变量,方法的参数,以及对静态方法的调用

      [现实例子]

      比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作

      [代码表现]

      <strong>public class Person{   <br>    /** 拧螺丝 */  <br>    public void screw(Screwdriver screwdriver){   <br>        screwdriver.screw();   <br>    }   <br>}<br></strong>

      [UML图]


      关联

      他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性 的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联 类A引用了一个类型为被关联类B的全局变量;

      [具体表现]
      关联关系是使用实例变量来实现

      [现实例子]

      比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司

      [代码表现]

      <strong> public class Company{   <br>     private Employee employee;   <br>     public Employee getEmployee(){   <br>         return employee;   <br>     }   <br>     public void setEmployee(Employee employee){   <br>         this.employee=employee;   <br>     }   <br>     //公司运作   <br>     public void run(){   <br>         employee.startWorking();   <br>     }   <br> }  <br></strong>

      [UML图]

      聚合

      聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期, 部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来 区分;

      [具体表现]

      与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。

      [UML图]


      组合

      组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此 时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区 分;

      [UML图]

       

      对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引 用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关 系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖 ;

  • 相关阅读:
    A1066 Root of AVL Tree (25 分)
    A1099 Build A Binary Search Tree (30 分)
    A1043 Is It a Binary Search Tree (25 分) ——PA, 24/25, 先记录思路
    A1079; A1090; A1004:一般树遍历
    A1053 Path of Equal Weight (30 分)
    A1086 Tree Traversals Again (25 分)
    A1020 Tree Traversals (25 分)
    A1091 Acute Stroke (30 分)
    A1103 Integer Factorization (30 分)
    A1032 Sharing (25 分)
  • 原文地址:https://www.cnblogs.com/raysbo/p/796825.html
Copyright © 2011-2022 走看看