zoukankan      html  css  js  c++  java
  • Python设计模式

    简介

    包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系。一个包图可以由任何一种UML图组成,可容纳的元素有类、接口、组件、用例和其他包等。包是UML中非常常用的元素,主要作用是分类、容纳其他元素。包与包之间的关系有泛化、细化和依赖,主要取决于包内部成员之间的关系。

     

    包图建模步骤

        - 分析系统的模型元素,运用分层设计把概念、语义和逻辑上相近的元素包含在同一个包中

        - 对于每个包,分析包内每个元素的可访问属性,并标识出该元素的可见性

        - 确定包与包中元素之间的泛化、细化、依赖关系,相应处理重载、多重性及导入等关系

        - 分析包结构,对包进行refine, merge等操作

    包图中的元素

    包图中可以容纳很多元素,如类、接口、组件、注释等,这些元素在相应的UML图中都有涉及,这里主要介绍包元素。

    • 包名的位置:UML中使用文件夹的图标来表示包,包名可以放在第一栏,也可以放在第二栏

            放在第一栏

     

    放在第二栏

       

    • 包名的格式:每个包都有一个字符串格式的包名唯一标识该包,其中包名的格式有两种:

        - 简单包名

        - 带路径包名

    • 可见性

          '+': public:对所有包可见

          '-': private:对本包之外不可见

          '#': protected:对本包的子包可见

    • 传递性:包与包之间的关系和可见性具有具有传递性

          - 关系传递:如果包A和包B之间存在关系,包B和包C之间存在关系,那么包A和包C之间也存在关系          

          - 可见性传递:根据包与包之间依赖关系的不同传递可见性

                - <<import>>因为添加为公有元素的原因所以可见性可以传递

                - <<access>>的可见性由于添加为私有元素的原因可见性不可传递

    • 构造特性:和类的构造性相似,就是在包名关键字旁加入<<xxx>>作为补充说明,UML提供了5种构造型来描述包的特性

          - <<system>>: 表示该包代表一个系统

          - <<subsystem>>: 表示该包代表一个子系统

          - <<facade>>: 表示该包是由其他包构成的一个视图

          - <<stub>>: 表示该包是一个代理包,该代理包为其他包提供公共服务

          - <<framework>>:表示该包代表一个框架

    包图类的关系

    • 泛化:继承关系,跟类之间的泛化关系相似,表明是一个包家族

     

    • 细化:一个包中有另一个包中的所有元素,则第二个包是第一个包的细化

    • 依赖:一个包中引用到了另一个包,箭头从输入方包指向输出方包

         

          <<use>>:一种默认的包依赖关系,表示客户包中的元素以某种方式使用着提供者包中的公共元素

          <<import>>:最普遍的包依赖关系,表示提供者包中的公共元素被添加为客户包中的公共元素

          <<access>>:表示提供者包中的公共元素被添加为客户包中的私有元素

          <<merge>>:表示提供者包中的元素被扩展为客户包中的元素

          <<trace>>:表示一个包的历史版本发展为另一个包的进化版本

     

    包图的高级特性

    • 分层:根据职责分层,目的是为了解耦。双向箭头表示相互依赖。

       

    • 嵌套:包里面是可以有包的。但应尽量避免使用多层嵌套包,2-3层就好

    包图示例

    以书店在线订购系统为例

     

    包图的注意事项

        - 若包被撤销,则其中的元素也会被撤销掉

        - 合理最小化包之间的依赖

        - 合理最小化每个包中public, protected元素的个数及最大化private元素个数

        - 避免包之间的循环依赖

        - 根据类之间的依赖关系对包进行分层、分组、合并、细化

        - 包之间关系遵循高内聚、低耦合的特性

  • 相关阅读:
    SQL必知必会-笔记(五)函数
    软件测试面试题:系统中的图片不显示如何排查原因
    windows用浏览器访问linux目录文件
    记测试工作中一次印象深刻的事
    怎么快速适应新的测试工作?
    xshell如何导出日志文件和上传文件
    jmeter+fiddler高效率整理接口脚本
    python-用requests库处理form-data格式的参数
    软件自动化测试工程师面试题集锦(4)
    shell脚本批量检查某个或多个服务的端口和进程是否正常
  • 原文地址:https://www.cnblogs.com/coolstream/p/9572852.html
Copyright © 2011-2022 走看看