https://www.w3cschool.cn/uml_tutorial/

就不做特殊说明了啊:

一 UML

1 简介

类注释:

下面的图表示的 UML 类,该图被分为四个部分。

  • 顶端部分被用来命名类。
  • 第二个是用来显示类的属性。
  • 第三部分是用来描述由类执行的操作。
  • 第四部分是可选的显示附加组件。

类是用来表示对象,对象可以是任何性质和职责。

对象表示法:

该对象表示以同样的方式作为类。唯一的区别是有下划线的名称,如下图所示。

由于对象是实际执行的一类被称为类的实例。因此,它具有相同的使用作为类。

接口表示法:

接口是用圆来表示,如下所示。它有一个名称,一般写成下面的圆圈。

接口是用来描述的功能,而不执行。界面就像一个模板,定义不同的功能不执行。当一个类实现了接口,也按要求实现的功能。

协作表示法:

协作表示由 eclipse 虚线如下所示。它有一个名字,里面写 eclipse。

用例表示法:

用例表示它里面的一个名字作为 eclipse。它可能包含更多的责任。

用例是用来捕捉系统的高层次功能。

角色表示法:

某些内部或外部的与系统进行交互的实体,可以被定义为一个角色。

角色是在描述用例图内部或外部实体。

初始状态表示法:

初始状态被定义,以显示开始的一个过程。这个符号在几乎所有的图。

初始状态的表示法的用法是显示的一个过程的起点。

最终状态表示法:

最终状态是用来显示的一个过程的结束。这种表示法也可以用来在大部分的图中描述的目的。

最终状态表示法的用法是显示一个过程的终止点。

活动类表示法:

活动类类似于一类具有扎实的边界,活动类一般是用来描述一个系统的并发行为。

活动类是用来表示在一个系统的并发性。

元件表示法:

UML中的一个组件,如下图所示名称里面。在必要时,可以添加额外的元素。

元器件是用来表示系统的任何部分的 UML 图。

节点表示法:

UML 中的一个节点表示的一个方盒子,如下图所示,同一个名字。一个节点表示一个物理的系统组件。

节点用来表示物理系统的一部分,如服务器,网络等。

行为事物:

动态部分是 UML 中最重要的元素之一。

UML 有一个强大的功能集,代表软件和非软件系统的动态部分。这些功能包括交互和状态机。

相互作用可分为两种类型:

  • 顺序(序列图)
  • 协作(协作图)

交互表示法:

交互基本上是两个 UML 组件之间的信息交换。下图表示交互中使用不同的符号。

交互是用来表示一个系统的组件之间的通信。

状态机表示法:

状态机描述的组件在其生命周期的不同状态。在下面的图中描述的符号。

状态机是用来描述一个系统组件的不同状态。状态可以是活动,空闲或任何其他根据情况。

分组事物:

组织的 UML 模型设计的最重要的方面之一。 UML 中只有一个元件即可用于分组,也就是包。

包表示法:

包装信息书写方式如下表所示,这是用来包装系统组成部分的。

注释事物:

任一图表中说明的不同的元素和它们的功能是非常重要的。因此,UML 符号注释,以支持这一要求。

注释表示法:

这种表示法如下所示,它们被用来提供一个系统的必要的信息。

UML 关系

模型是不完整的,正确的描述,除非元素之间的关系。关系给出了一个 UML 模型的意思。

以下是 UML 中提供的不同类型的关系:

  • Dependency
  • Association
  • Generalization
  • Extensibility

依赖表示法:

依赖是UML元素的一个重要方面。它描述了相关的元素和方向上依赖关系。

依赖关系的虚线箭头表示,如下所示。箭头代表的独立元素,另一端的依赖元素。

依赖关系是用来表示一个系统的两个元素之间的依赖。

协作表示法:

协作介绍 UML 图中的元素相关联。简单的一句话,它介绍了多少个元素参与互动。

联合会(无)两侧的箭头的虚线表示。两端代表两个相关联的元素,如下所示。在两端(1,*等)的多样性也提到多少对象相关。

协作是用来表示一个系统的两个元素之间的关系。

泛化表示法:

泛化介绍了面向对象世界的继承关系。这是父与子的关系。

泛化为代表的空心箭头,如下图所示箭头的一端表示的父元素而另一端表示子元素。

泛化是用来描述一个系统的两个元素的亲子关系。

可扩展性表示法:

所有的语言(编程或模型)有某种机制来扩展与其功能类似的语法,语义等。 UML 具有以下机制来提供可扩展性功能。

  • 定型观念(代表新元素)
  • 标记值 (代表新的属性)
  • 约束 (代表界限)

可扩展标记基本上是用来表示一些额外的系统行为的附加元素。这些额外的行为,不包括可用的标准符号。

二 Python中的UML

1 类

图示

类的图示如下

可以看到整个图形分为三部分:上面为类名,中间为类属性,下面为类方法。
其中可以看到有- + 和# 三种符号,其分别代表私有、公有、保护。其中保护变量在python中是不存在的。
公有变量可以在类外被直接访问。且可以被子类继承,私有变量只能再此类中被访问且不可以被子类继承。

代码

class Flower(object):
def __init__(self, floral=None, leaf=None):
self.floral = floral
self.__leaf = leaf def flowing(self):
print 'flower' def __grow(self):
print 'grow grow'

  

其中以两条下划线开头的变量为私有变量,方法为私有方法。
其实在python中也不是在类外面无法访问到私有变量或方法。只是在生成python字节码的时候在编译器自动再含有__
开头的属性或变量前加上了 _{classname}了你可以在类外通过 _Flower__leaf
访问到__leaf属性,当然这并没有什么意义。

2 类的继承

泛化(generalization)

图示

首先我们来看一下泛化关系的UML结构图。

连接器的是由一条直线和一个三角组成的,连接的两端都是类。在代码中的结构就是继承非抽象类。

代码

class Car(object):
def __init__(self):
self.wheel = ['11', '12', '21', '22']
self.body = 'car body' def run(self):
print self.wheel
print self.body def horn(self):
print 'bbbbbbb' class SUV(Car):
def run(self):
print 'suv'
super(SUV, self).run() class Jeep(Car):
def run(self):
print 'jeep'
super(Jeep, self).run() jeep = Jeep()
jeep.run()
jeep.horn()

 

我们可以看到Jeep和SUV继承了Car这个非抽象类

3 类的实例化

4 复写被继承类的方法

图示

从图中可以看出实现关系为一个三角箭头加一段虚线构成。箭头指向抽象类。
在代码中表现为继承抽象类。

代码

class Vehicle(object):
def run(self):
raise NotImplementedError class Car(Vehicle):
def run(self):
print 'car run run' class Bicycle(Vehicle):
def run(self):
print 'bicycle run run'

  

代码中Car和Bicycle继承了Vehicle这个抽象类。

https://segmentfault.com/a/1190000011722686

阅读和设计源码利器UML的更多相关文章

  1. 如何阅读Android系统源码-收藏必备

    对于任何一个对Android开发感兴趣的人而言,对于android系统的学习必不可少.而学习系统最佳的方法就如linus所言:"RTFSC"(Read The Fucking So ...

  2. 教你阅读 Cpython 的源码(二)

    第二部分:Python解释器进程 在上节教你阅读 Cpython 的源码(一)中,我们从编写Python到执行代码的过程中看到Python语法和其内存管理机制. 在本节,我们将从代码层面去讨论 ,Py ...

  3. android新闻项目、饮食助手、下拉刷新、自定义View进度条、ReactNative阅读器等源码

    Android精选源码 Android仿照36Kr官方新闻项目课程源码 一个优雅美观的下拉刷新布局,众多样式可选 安卓版本的VegaScroll滚动布局 android物流详情的弹框 健身饮食记录助手 ...

  4. 新手阅读 Nebula Graph 源码的姿势

    摘要:在本文中,我们将通过数据流快速学习 Nebula Graph,以用户在客户端输入一条 nGQL 语句 SHOW SPACES 为例,使用 GDB 追踪语句输入时 Nebula Graph 是怎么 ...

  5. Android动画设计源码地址

    Android动画设计源码地址 http://blog.csdn.net/shanghaibao123/article/details/45223825

  6. daily news新闻阅读客户端应用源码(兼容iPhone和iPad)

    daily news新闻阅读客户端应用源码(兼容iPhone和iPad),也是一款兼容性较好的应用,可以支iphone和ipad的阅读阅读器源码,设计风格和排列效果很不错,现在做新闻资讯客户端的朋友可 ...

  7. Java开源生鲜电商平台-用户表的设计(源码可下载)

    Java开源生鲜电商平台-用户表的设计(源码可下载) 说明:由于该系统属于B2B平台,不设计到B2C的架构. 角色分析:买家与卖家. 由于买家与卖家所填写的资料都不一样,需要建立两站表进行维护,比如: ...

  8. Java开源生鲜电商平台-商品表的设计(源码可下载)

    Java开源生鲜电商平台-商品表的设计(源码可下载) 任何一个电商,无论是B2C还是B2B的电商,商品表的设计关系到整个系统架构的核心. 1. 商品基本信息表:用单词:goods做为商品表 2. 商品 ...

  9. Java开源生鲜电商平台-订单表的设计(源码可下载)

    Java开源生鲜电商平台-订单表的设计(源码可下载) 场景分析说明: 买家(餐馆)用户,通过APP进行选菜,放入购物车,然后下单,最终支付的流程,我们称为下单过程. 买家可以在张三家买茄子,李四家买萝 ...

随机推荐

  1. php基础:面向对象

    一.public.private.protected访问修饰符 public:任何都可以访问(本类.子类.外部都可以访问) protected:本类.子类都可以访问(本类.子类均可访问) privat ...

  2. django后台获取相同name名的数据

    django后台获取相同name名的post数据html: <form method="post"> <input type="text" n ...

  3. JSP学习(第一课)

    JSP页面组成: 比如: 打开网页,右键查看源代码: 打开网页: 注意: <%!%>里面定义的属性是成员属性,相当于类的属性,方法相当于是全局的方法,相当于是类里面的方法.但是它是不可以进 ...

  4. mysql索引详解(转)

    什么是索引 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的 ...

  5. POJ1845:Sumdiv(求因子和+逆元+质因子分解)好题

    题目链接:http://poj.org/problem?id=1845 定义: 满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元. 为什么要有乘法逆元呢? 当我们要求(a/b) mod p的 ...

  6. samba文件共享服务配置(multiuser机制)二 (共两节)

    smb客户端的multiuser挂载技术 --管理员只需要作一次挂载 --客户端在访问挂载点时,若需要不同权限,可临时切换新的共享用户[无需重新挂载] 实现方式 --挂载smb共享时启用multius ...

  7. Django之MTV

    一.MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的 ...

  8. 内置函数——format

    说明: 1. 函数功能将一个数值进行格式化显示. 2. 如果参数format_spec未提供,则和调用str(value)效果相同,转换成字符串格式化. >>> format(3.1 ...

  9. hdu5009

    这题说的是给了一个  长度为n(n<=50000)的数列,数列表示的是给每个珍珠涂的颜色,任务是将一窜长度为n的珍珠涂成他所要的颜色.然后你可以操至多n次, 每次画只能画连续的区间,每次操作是的 ...

  10. Hopper Disassembler v4 ( The macOS Disassembler, Decompiler and Debugger)

    Hopper Disassembler v4 ( The macOS Disassembler, Decompiler and Debugger) Reveal13 (UI) 两个好东西..不知道的自 ...