Python中的ULM类图

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

UML类图的图示:

Python中的ULM类图_第1张图片

可见性:

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是私有方法。

类与类之间的关系

Python中的ULM类图_第2张图片 

 

1.泛化关系

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

Python中的ULM类图_第3张图片

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)才可以用来定义对象。

Python中的ULM类图_第4张图片

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.关联关系

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

Python中的ULM类图_第5张图片

class B(object):
    pass

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

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

Python中的ULM类图_第6张图片

Python中的ULM类图_第7张图片

自关联:

Python中的ULM类图_第8张图片

单向关联:

Python中的ULM类图_第9张图片

双向关联:

Python中的ULM类图_第10张图片

 多重性关联:

Python中的ULM类图_第11张图片

4.聚合关系

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

Python中的ULM类图_第12张图片

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

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.组合关系

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

Python中的ULM类图_第13张图片

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

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类的静态方法

Python中的ULM类图_第14张图片

 

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(一) 类图详解

你可能感兴趣的:(python知识补充,python)