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) 类图

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

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

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

例子如下:

(3) 类之间的关系

① 关联关系

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

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

    3)自关联。例子如下:

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

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

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

② 依赖关系。例子如下:

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

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

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

3. 面向对象设计原则

① 单一职责原则

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

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

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

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

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

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

重构后的结构图如下:

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

② 开闭原则

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

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

③ 里氏代换原则

    它的严格定义如下:

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

    它的通俗版定义是:

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

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

 ④ 依赖倒转原则

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

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

 ⑤ 接口隔离原则 

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

 ⑥ 合成复用原则

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

 ⑦ 迪米特法则

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

UML类图与面向对象设计原则的更多相关文章

  1. 设计模式学习(二):面向对象设计原则与UML类图

    一.UML类图和面向对象设计原则简介 在学习设计模式之前,需要找我一些预备知识,主要包括UML类图和面向对象设计原则. UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设 ...

  2. 【软件设计】UML类图怎么看

    前言 无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一. 今天小黑把 ...

  3. 设计模式学习笔记(详细) - 七大原则、UML类图、23种设计模式

    目录 设计模式七大原则 UML类图 设计模式分类 单例模式 工厂设计模式 简单工厂模式 工厂方法模式(使用抽象类,多个is-a) 抽象工厂模式(使用接口,多个like-a) 原型模式 建造者模式 适配 ...

  4. UML类图的补充及软件设计原则

    UML类图的补充及软件设计原则 UML 从目标系统的不同角度出发,定义了用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等 9 种图. 1.uml补充 统一建模语言(Unified ...

  5. (转)面向对象——UML类图设计

    背景:一直以来,对UMl类图的画法不甚理解,但是随着学习的深入,发现熟练掌握UML类图,能够更好理解代码间的逻辑性,而这也是程序设计的基础所在,所以很有必要把UML好好掌握. UML类图新手入门级介绍 ...

  6. 18、面向对象基本原则及UML类图简介

    18.1.面向对象基本原则 18.1.1.面向抽象原则 抽象类特点: a.抽象类中可以有abstract方法,也可以有非abstract方法. b.抽象类不能用new运算符创建对象. c.如果一个非抽 ...

  7. 设计模式学习笔记(二):UML与面向对象设计原则

    1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...

  8. [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图

    [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...

  9. webpack环境搭建开发环境,JavaScript面向对象的详解,UML类图的使用

    PS:因为所有的设计模式都是基于面向对象来完成的,所以在讲解设计模式之前先来过一下面向对象都有哪些知识点 搭建开发环境 初始化npm环境 下载安装nodejs安装即可,nodejs自带npm管理包,然 ...

随机推荐

  1. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  2. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  3. 漫扯:从polling到Websocket

    Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...

  4. SASS教程sass超详细教程

    SASS安装及使用(sass教程.详细教程) 采用SASS开发CSS,可以提高开发效率. SASS建立在Ruby的基础之上,所以得先安装Ruby. Ruby的安装: 安装 rubyinstaller- ...

  5. hash表长度优化证明

    hash表冲突的解决方法一般有两个方向: 一个是倾向于空间换时间,使用向量加链表可以最大程度的在节省空间的前提下解决冲突. 另外一个倾向于时间换空间,下面是关于这种思路的一种合适表长度的证明过程: 这 ...

  6. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  7. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  8. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  9. C#中将DataTable导出为HTML的方法

    今天我要向大家分享一种将DataTable导出为到HTML格式的方法.有时我们需要HTML格式的输出数据, 以下代码就可以帮助我们达到目的,. 首先,我们要绑定DataTable和 DataGridV ...

  10. Http请求

    HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 请求报文 一个HTTP请求报文由请求行(request line ...