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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值