惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
博客园_首页
B
Blog RSS Feed
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
宝玉的分享
宝玉的分享

博客园 - 风的传说

使用Entity Framework时要注意的一些性能问题 软件项目的需求分析 MVC Models定义验证属性 增加asp.net应用程序性能的19种方法 - 风的传说 - 博客园 entity framework进行一对多的联合查询 Entity Framework 批量删除 WPF 事件快速参考 [导入]非常不错的WCF入门文章,来自Artech [导入]Microsoft Expression Studio 2 简体中文正式版 [导入]C#开源持久层框架 [导入]Sql Server2005简单分页 [导入]提高C#编程水平的50个要点 [导入]New ASP.NET Charting Control: <asp:chart runat="server"/> [导入]asp.net 里的HttpHandler隐藏图片 [导入]c# oop思想 [导入]Pro ASP.NET 3.5 in C# 2008 [导入].Net3.5扩展方法实现对象JSON序列化 [导入]26句实用的英语 [导入]微软将 jQuery IntelliSense整合到Visual Studio [导入]08年最流行的十大SaaS术语 [导入]asp.net(c#)怎样将图片存入数据库? [导入]linq与xml
UML类图
风的传说 · 2011-05-16 · via 博客园 - 风的传说

模型元素之间的连接关系有:关联Association、概化Generalization、依赖Dependency、实现Realization、聚合Aggregation、组合Combination。其中,聚合和组合是关联的一种特殊形式
(1)关联Association:用于描述模型元素之间的连接,只要两个模型元素之间存在相互通信的关系,它们之间就存在关联关系。
关联关系可以是单向的,但一般为双向的。
(2)概化Generalization:又称继承,指一个模型元素的所有信息能被另一个模型元素继承。
继承了其它模型元素的模型元素中不仅可以拥有属于自己的信息,而且还拥有了被继承模型元素中的信息。
(3)依赖Dependency:描述两个模型元素之间语义上的连接关系,其中一个模型元素是独立的。另一个是非独立的。
在这种联系中,改变独立元素将影响到非独立元素的语义。
(4)如果模型元素之间的关系具有“整体与部分”的特点,则这种关联称为聚合或组合。
聚合关系用Has a句型表示,组合关系用Be a part of句型表示。
(5)实现Realization:用于表示同一事务的两种描述之间的关系

  • 如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。

    如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。

    类间的关系

    网上关于此类的讨论非常多,发现对于该问题的理解各有各的说法,而各个说法中又相去甚远。通过浏览这些讨论以及对《O'Reilly - UML 2.0 In A Nutshell (2007)》的参考,发表一下自己的看法

    类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。

    纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。

    横向关系较为微妙,按照UML的建议大体上可以分为四种:

    1. 依赖    (Dependency)
    2. 关联    (Association)
    3. 聚合    (Aggregation)
    4. 组合    (Composition)

    它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合

    然而它们四个之间的差别却又不那么好拿捏,需要好好体会。

    1. 依赖 (Dependency)
      • UML表示法:虚线 + 箭头 
      • 关系:"A uses a B"
      • 编程语言中体现为局部变量、方法的参数或者对静态方法的调用。
      • 此关系最为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。
      • 典型的例子很多,比如:
        class Human
        {
            public void breath()
            {
                Air freshAir = new Air();
                freshAir.releasePower();
            }
            public static void main()
            {
                Human me = new Human();
                while(true)
                {
                    me.breath();
                }
            }
        }

        class Air
        {
            public void releasePower()
            {
                //do sth.
            }
        }
         

      • 释义:一个人自创生就需要不停的呼吸,而人的呼吸功能之所以能维持生命就在于吸进来的气体发挥了作用,所以说空气只不过是人类的一个工具,而人并不持有对它的引用。
    2. 关联 (Association ):
  • 聚合(Aggreation:  
  • 组合(composition