zoukankan      html  css  js  c++  java
  • UML类图与面向对象设计原则

    1. 引言

        从大一开始学习编程,到如今也已经有两年了。从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具。学习过程中也无意识的了解了一些所谓的设计模式,如今打算系统的学习。学习以书《设计模式的艺术——软件开发人员内功修炼之道/刘伟著》为主。  

        所谓设计模式,即是前人对某类相似问题的抽象给出的解决方案。书中给出了23(Gof)+1(简单工厂模式)种设计模式。每种模式的学习将关注以下几点:名称(Name),问题(Problem解决方案(Solution效果(Consequence

    2. UML

    (1) 概述

        先从UML学起。

        从它的全称Unified Modeling Language就可以看出,它是一种分析设计语言(建模语言)。

        主要有视图(View),(Diagram),模型元素(Model Element),通讯机制(General Mechanism)几个部分。

    (2) 类图

        类的属性和方法表示方式分别如下:

    可见性 属性名:类型 [ = 默认值]

    可见性 方法名(参数列表) [ :返回值类型]

    例子如下:

    image

    (3) 类之间的关系

    ① 关联关系

        1)双向关联。例子如下:

    image

        2)单向关联。例子如下:

    image

        3)自关联。例子如下:

    image

        4)多重性关联。例子如下:

    image

    image

       5) 聚合关系。例子如下:

    image

        6)组合关系。与聚合关系类似,不同之处在于,组合关系更强调一种依附(寄生)关系。例子如下:

    image

    ② 依赖关系。例子如下:

    image

    View(视图)类的draw方法依赖于Canvas(画布)类的传入。

    ③ 泛化关系(继承关系)。例子如下:

    image

    ④ 接口与实现关系。例子如下:

    image

    3. 面向对象设计原则

    ① 单一职责原则

    一个类只负责一个功能领域中的相应职责。或者说,就一个类而言,应该只有一个引起它变化的原因。

        单一职责原则的目的是实现高内聚、低耦合,其核心思想是一个类不能太“累”。在软件系统中,一个类的职责越多,它被复用的机会便越小。

        如下面这个例子:image     CustomDataChart类承担了太多的责任:既要负责连接数据库,又负责获取查询客户,还有显示图表的方法。合理的做法是分为3个类:

    1)DBUtil:包含连接数据库方法getConnection();

    2)CustomDao:包含查找Customs方法findCustoms()方法;

    3)CustomDataChart:包含显示图表的方法displayChart();

    重构后的结构图如下:

    image

        重构的好处是显而易见的:我们将不同职责的方法划分在不同的类中,便于阅读理解;当某个职责发生变化时,如更换了数据库,我们只需要修改DBUtil中的getConnection()方法,而其他的代码都不变。

    ② 开闭原则

    一个软件实体应当对扩展开放,对修改关闭。即软件实体应做到在不修改原有代码的情况下进行扩展。

        任何软件都面临一个很重要的问题,即需求会随着时间的变化而变化。但面临新的需求时,软件应尽量保证原有系统的稳定,在不修改原有系统代码的情况加入新的扩展模块。

    ③ 里氏代换原则

        它的严格定义如下:

    一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换为o2时,程序P的行为没有变化,那么类型S是类型T的子类型。

        它的通俗版定义是:

    所有应用基类(父类)的地方必须能被替换为其子类。

    即我们在编程时,应面向接口编程

     ④ 依赖倒转原则

    抽象不应依赖于细节,细节应当依赖于抽象。换言之,应面向接口编程,而不是针对实现编程。

       当我们在面向抽象层编程时,要将具体类的对象通过依赖注入的方式注入。常用的注入方式有:构造注入、设值注入和接口注入。

     ⑤ 接口隔离原则 

    要尽量使用多个专门的接口,而不要使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

     ⑥ 合成复用原则

    要尽量使用对象的组合,而不是继承来达到复用的目的。

     ⑦ 迪米特法则

    一个软件实体应尽量少的与其他软件实体发生关系。

  • 相关阅读:
    可以
    全链路压测方案
    PyTestReport使用
    查看mysql的版本号
    Centos7 下的SVN安装与配置
    confluence中org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed的解决方法
    CentOS7安装部署zabbix3.4操作记录
    Aasible中cryptography兼容性报错解决办法
    windows10中git-bash闪退的解决办法
    jira发送邮件报错
  • 原文地址:https://www.cnblogs.com/dongkuo/p/4882281.html
Copyright © 2011-2022 走看看