Python中的ULM类图

        学会写类并不能说明你已经学会了面向对象的思想方法,因为还没能做到类与类之间的关联,也就是无法准确描绘现实世界。类图本身就是对现实世界的抽象,是一种编写程序的逻辑结构。以下是对类图知识点的梳理,以期能够深刻体会面向对象的含义并能灵活运用类图。

UML类图的图示:

可见性:

from __funture__ import print_functiopn
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')

##在属性或方法前面加上两个下划线__,就可以把其变为私有。
##此处__leaf是私有变量,__grow是私有方法。

类与类之间的关系

 

 

1.泛化关系

泛化关系表现为继承非抽象类。eg.Car现实中存在的,它有两个子类 Suv和Jeep。

from __future__ import print_function

class Car(object):
    def __init(self):
        self.wheel = ['17']
        self.body = 'Independent Suspension'

    def run(self):
        #get the car started
    def horn(self):
        print('car is coming')

class Suv(Car):
    def horn(self):
        print('Suv is coming')

class Jeep(Car):
    def horn(self):
        print('Jeep is coming')
##类之间的继承:用父类名称代替子类的object,子类可以继承父类的属性和方法。

## Suv和Jeep都是Car的子类。

2.实现关系

实现关系表现为继承抽象类。Vehicle 作为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(Car、Bicycle)才可以用来定义对象。

from __future__ import print_function

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')

#在 Python 中本身是没有接口或是抽象类这种概念的,但是可以通过抛出 NotImplementedError 这个异常来实现.

3.关联关系

关联关系通常用来定义对象之间静态、天然的结构。被关联类以类的属性形式出现在关联类中。

class B(object):
    pass

class A(object):
    def __init__(self):
        self.b = B()

#关联对象通常是以成员变量的形式实现的。即被关联类以类的属性形式出现在关联类中。
#此为强调方向的关联关系,A指向B,表示 A 知道 B,B 不知道 A。

自关联:

单向关联:

双向关联:

 多重性关联:

4.聚合关系

聚合关系表示整体由部分构成,但是当整体不存在时部分还是可以存在的。

 聚合关系由一个空的菱形箭头表示,菱形箭头指向整体。当公司不存在时,人还是存在的。

class Company(object):
    def __init__(self):
        self.__employees = []

    def add_employee(self, people):
        self.__employees.append(people)

class People(object):
    def __init__(self, name):
        self.name = name

def main():
    company = Company()
    p1 = People('Mike')
    p2 = People('Jack')
    company.add_employee(p1)
    company.add_employee(p2)

if __name__ = '__main__':
    main()



5.组合关系

组合关系表示整体由部分构成,但是当整体不存在是部分也不存在,是一种强依赖关系。

组合关系是由一个实心的菱形箭头表示,菱形箭头指向整体,公司有部门组成,当公司不存在了,部门也不存在了。 

class Company(object):
    def __init__(self):
        self.__departments = []

    def build_department(self, department):
        self.__departments.append(department)

class Department(object):
    def __init__(self, title):
        self.title = title

def main():
    company = Company()
    company.build_department(Department('Back End Development'))
    company.build_department(Department('Front End Development'))

if __name__ = '__main__':
    main()

6.依赖关系

依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是 "使用" 对方的方法和属性。

依赖关系的表现形式

  • B类的实例作为A类方法的参数
  • B类的实例作为A类方法的局部变量
  • A类调用B类的静态方法

 

from __future__ import print_function

class People(object):
    def __init__(self):
        pass

    def drive(self, vehicle):
        vehicle.run()

class Vehicle(object):
    def __init__(self):
        pass

    def run():
        raise NotImplementedError

class Car(Vehicle):
    def __init__(self):
        pass

    def run():
        print('car start')

class Bicycle(Vehicle):
    def __init__(self):
        pass

    def run():
        print('bicycle start')

def main():
    car = Car()
    bicycle = Bicycle()

    caleb = People()
    caleb.drive(car)
    caleb.drive(bicycle)

if __name__ == '__main__':
    main()

参考内容:

UML 类图中的结构及 python 实现

python设计模式

UML(一) 类图详解

  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python UML是一种用于分析Python代码并提取UML类图和包依赖关系的工具。它可以帮助开发者分析代码的类属性、类方法、类之间的继承关系、类之间的关联关系以及异常和接口的表示。 在UML类图,每个方框代表一个对象类,方框从上到下分为三部分:对象类名称、类的属性和类的函数。这样的类图可以帮助开发者更好地理解、设计和组织Python代码。 学会编写类只是面向对象的一部分,对类与类之间的关联也需要深入理解。类图本身是对现实世界的抽象,它能够准确描绘现实世界的逻辑结构,并帮助开发者更好地理解程序的设计和实现。通过深入学习和灵活运用类图,开发者能够更好地理解面向对象的思想和方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python自动绘制UML类图、函数调用图(Call Graph)](https://blog.csdn.net/Bit_Coders/article/details/120722430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [PythonULM类图](https://blog.csdn.net/weixin_55118952/article/details/124473325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值