本节参考《UML2.0基础与RSA建模实例教程》曹衍龙、汪杰
有的人认为UML已经过时了,学UML纯粹是为了应付考试。
如果你也这么想,那就跟我想到一块儿了。不过这一节还是有一些概念是有用的。
比如,类的可见性。
类的可见性包括公有(Public)、私有(Private)、受保护(Protected)和包内公有(Package)
虽然本人并未使用过java语言,但是如果想对编程有更深层次的了解,我们需要知道这个知识点。
这篇博客介绍了python类的私有、公有
需要补充的是,python中的私有并不是很严格。
所谓私有属性和方法只不过是在属性和方法名称的前面加了双下划线。
参照这篇文献可知,前置双下划线在Python中会触发“名称修饰”
class Woman():
name = "Juckes" #类的公有属性
job = "Teacher"
__ages = 30 #类的私有属性
__weight = 60
def disp_nj_info(self): #类的(公有)方法
print("Name:{}, Job:{}".format(self.name,self.job)) #类的内部调用公有属性
def __disp_aw_info(self): #类的私有方法
print("Age:{}, Weight:{}".format(self.__ages, self.__weight)) #类的内部调用私有属性
def dis_all_info(self):
self.disp_nj_info() #类的内部调用公有方法
self.__disp_aw_info() #类的内部调用私有方法
以这段代码为例,虽然我们不能直接调出私有属性
即:
但是我们在私有属性前加上类名称即可调用:
下面进入正题
1. 类之间的关系,UML图和Python实现
1. 泛化关系
用UML图实现一个简单的例子。
用Python实现即为:
当子类定义的方法名和父类冲突时,可以使用super方法获取父类中的功能。
2.实现关系
实现关系在两种关系下适用。
- 接口与实现该接口的类之间
- 用例以及实现该用例的协作之间
Python中接口的概念可以看这篇文章
简单说,接口就是一个大类,其中定义了很多函数,但是并没有实现这些函数。
需要创建新类,继承接口这个大类,然后在新类里实现接口中未实现的方法。
Python中抽象类的概念可以看这篇文章
StarUML中,实现是 虚线+空心箭头,但是画出来没有箭头…
3.依赖关系
依赖关系可以简单理解为,箭头出发者依赖于箭头指向者。
在专业的UML书籍中,依赖被赋予了使用、调用、参数、发送、实例化、跟踪、精化、派生、访问、导入、友元和绑定等含义。
但是个人认为没必要记这么多。
4. 关联关系
关联关系表示两类之间有特定的关系。
如上图所示,读者和账户之间是拥有和被拥有的关系。
拥有这个词就写在关联关系线的上方。
同样的,所有 A 动词 B的形式都可以写成关联的形式。
线两侧下方有数字。含义是 最小值…最大值
所以左边是1到无穷大,右边是0到1
5. 聚合关系和组合关系
聚合关系描述了“has a”的关系
比如,班级 拥有 学生
组合关系就是
B、C组合形成了A
有关类图的其他例子可以参考这篇文章