python设计模式-UML类图中的结构及python实现

本文介绍了如何用Python实现UML类图中的结构,包括抽象类、泛化、实现、关联、依赖、组合和聚合关系。通过示例代码展示了在Python中如何模拟这些关系,同时提到了使用Enterprise Architect工具进行UML建模和代码导出。
摘要由CSDN通过智能技术生成

前言

最近在看设计模式。在学习初期一直有一个问题困扰着我,那就是UML类图
中的各种结构用python代码是如何实现的?这个在初期可以说是深深的困扰着我的设计模式
学习之路。下面我将介绍一下我自己总结的实现,如果有错误也希望各位给指出,不胜感激。

工具介绍

本文的UML图采用Enterprise Architect绘制。
Python版本2.7.12
(在用了Enterprise Architect 后才知道他有从类图导出代码的功能,/捂脸
早知道就用这个学习各种结构的实现了。文末有介绍如何用Enterprise Architect 导出代码。)

类图

类图是由类和类之间的连接关系构成。
类我们这里只介绍类和抽象类。
连接关系我们介绍泛化(generalization)、实现(realize)、聚合(aggregation)、组合(compositon)、关联(assocation)和依赖(dependency)共六种。

抽象类(java中接口)

图示

接口在UML中的图形为
图片描述

可以看到再其上半部分有一个interface的表示。在接口中一般只给出接口的定义
而实现一般放在子类和实现。

代码

在python中本事是没有接口和抽象类这一概念的,但是可以通过abc(Abstract Base Class)这个python库来实现。或者是通过抛出NotImplementedError这个异常来实现。

通过abc模块来实现
from abc import ABCMeta, abstractmethod, abstractproperty

class Drawable:
    __metaclass__ = ABCMeta

    @abstractproperty
    def size(self):
        pass

    @abstractmethod
    def draw(self, x, y, scale=1.0):
        pass


class Cicle(Drawable):
    def size(self):
        print 'Cicle'

    def draw(self, x, y, scale=1.0):
        print str(x*y*scale)

c = Cicle()

如果在子类里面没有实现方法,当实例化子类的时候会报错。abc模块的具体

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值