zoukankan      html  css  js  c++  java
  • 第二组第二次作业

    第一章

    单一职责原则

    1.1 编写类或接口执行单一职责原则,定义是有且仅有一个原因引起类的变更。我对于它的理解是:把实现的每个功能归称一个大类,在每个功能大类中编写对应的类或接口。

    1.2 单一职责的好处:

    1类的复杂性降低,实现什么职责都有清晰明确的定义。

    2可读性提高,复杂性降低。

    3可维护性提高。 

    4变更引起的风险降低。

    单一职责的量化标准:用“职责”或“变化原因”来衡量接口或设计得是否优良,这两个衡量标准因项目,环境而已。

    1.3 方法也要单一职责,不能贪心一个方法完成一个笼统的功能。

    1.4 由于写类时需要考虑很多外部因素,所以很难做到单一职责,但接口要做到单一职责,类的设计尽量知道只有一个原因引起变化。

    第二章

    里氏替换原则

    2.1 继承的优点:

    1子类共享父类代码。

    2提高代码重用性。 

    3提高代码的可扩展性。 

    4提高产品或项目的开放性。 

    继承的缺点:

    1继承中父类相当于侵入子类。 

    2降低子类代码灵活性。 

    3增强子类与父类的耦合性,不易于修改。

    里氏替换原则:父类能出现的地方子类也可以出现并能替换成子类,反之不能。

    2.2 子类必须完全实现父类的方法,可以有自己独有的方法。子类的输入参数宽于或等于父类的输入参数,子类的方法才不会被调用。

    第三章

    依赖倒置原则

    3.1原则含义:高层模块不依赖底层模块,两者应依赖其抽象(接口或抽象类)。

    细节(实现类)应依赖抽象,反之不能。细节之间不发生直接的依赖关系,依赖关系是通过抽象产生的。

    3.2 依赖倒置原则的优点:

    1减少内间的耦合性。 

    2提高系统的稳定性。 

    3降低并行开发引起的风险。 

    4提高代码的可读性和可维护性(并行开发的风险是一段程序的错误和异常毁了整个项目 )。

    一个变量可以有两种类型,表面类型(定义时赋予的类型)和实际类型(对象的类型 )。

    独立运行单元测试的小工具:JMock工具 ,可以根据抽象虚拟一个对象进行测试。

    3.3 依赖的三种写法

    1构造函数传递依赖对象

    2 setter方法传递依赖对象

    3接口声明依赖对象

    3.4 依赖倒置原则的本质是通过抽象使各个类或模块实现彼此独立,不相互影响,实现模块之间的松耦合。具体是指:

    1每个类尽量都有接口或抽象类,变量的表面类型尽量是接口或抽象类,任何类都不能从具体类派生,尽量不要复写基类的方法,因为可能会对依赖的稳定性产生影响。 2结合里氏替换原则使用,依赖倒置原则比较适合中大型项目中,实现开闭原则的前提是实现依赖倒置原则。

    第四章

    接口隔离原则

    4.1接口隔离原则的定义:首先接口分为实例接口和类接口(用Interface定义的接口 ),类接口是指在Java中声明一个类 ,再new产生一个实例,这个类就是对类型的事物的描述,这是实例接口。

    接口尽量细化,里面的方法尽量少。它与单一职责的不同是:单一职责注重的是职责,是业务逻辑上的划分。接口隔离原则要求接口的方法尽量少,不需要为了满足多个模块就建立臃肿的接口。

    4.2 为了便于程序的扩展,不能过度封装,也应使用接口隔离原则。

    4.3 根据接口隔离原则拆分接口时要先满足单一职责原则。

    注意:

    1接口要高内聚。高内聚是提高接口类模块的处理能力,减少对外的交互,具体到接口隔离原则就是在接口中少使用public。

    2定制服务 指只提供访问者需要的方法。

    3越拆分接口系统会越灵活,但同时结构越复杂,越难维护,所以要注意适度。

    4.4 1一个接口只服务一个子模块或业务逻辑。

    2少量使用public,根据需求进行拆分接口,不能生搬硬套。

    第五章

    迪米特法则

    5.1 迪米特法则含义:一个类应该对自己需要耦合或调用的类知道的最少。

    5.2 方法是类的一个行为,这个方法只能与本类产生依赖关系,不允许与其他类产生依赖关系,不同类之间的关系是建立在类间,不是方法间,这样就会降低系统间的耦合,提高系统的健壮性。

    但是同个类中的方法也要注意保持距离,减少公开的属性或方法 (这样修改时候,设计面和风险会更大),尽量使用private、package、protected等访问权限。

    假如一个方法可以放在不同的类中,但这个方法要优先放在不增加类间关系,也不对类产生负面影响的类。

    5.3 迪米特法则的核心观念就是类间解耦,弱耦合,但是要尽量少产生中转或跳转类(量不要超过两次 ),因为跳转的越多,维护就越困难 。

    第六章

    开闭原则

    6.1 定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。(通过扩展实现变化,而不是通过修改已有代码实现。)

    6.2 但对修改关闭不是绝对不修改的,如果合适可以适当的修改,修改可以归纳为:

    1只对某个逻辑进行变化。 

    2子模块的修改。 

    3可见试图的变化尽量通过扩展完成。

    完成项目应经过:

    1项目开发。

    2重构(指对原有设计和代码修改)。

    3测试。

    4投产。

    5运维(避免修改原有代码)。

    6.3 开闭原则相比前五个原则重要

    开闭原则的重要性:

    1测试要保证业务逻辑,边界条件,异常要测试到。单元测试是对类的测试,类中的方法耦合是允许的,所以尽量不要修改方法,因为如果牵扯到这个方法有复杂的逻辑,在整个测试类中的方法就会被修改的面目全非,要通过扩展来实现业务逻辑的变化。

    2提高复用性,便于维护。因为通过扩展来实现业务逻辑的变化,所以这个逻辑粒度是很小的,不用读懂原有代码中的逻辑关系,直接扩展一个类。

    6.4 怎样使用开闭原则?

    1通过接口或抽象类约束扩展,只能在现有的基础上进行扩展 。参数类型、引用对象尽量使用抽象类或者接口。抽象层一旦确定就不允许修改 。实现对扩展开放的前提条件就是抽象约束。

    2元数据(用来描述环境和数据的数据 )控制模块行为。

    3制定项目章程。

    4封装变化(封装可能发生的变化 )相同的变化封装到一个接口或抽象类中 。

    6.5 封装变化依赖的六大原则: 

    1单一职责原则。

    2 开闭原则。

    3里氏替换原则。

    4迪米特法则。

    5接口隔离原则。

    6依赖倒置原则。

    但是封装变化并不局限于这六大设计原则, 尽量采用最好。其中类必须做到高内聚、低耦合,以此来避免一些不可预料的事故。封装变化前也要做好项目规章制度,预知变化

    UML概述

     

    定义:统一建模语言UML是一种直观化、明确化、构建和文档化软件系统产物的通用可视化建模语言。

    支持大多数面向对象的开发过程,也可用于迭代的开发过程。

    UML不是编程语言,是通用性的建模语言,是离散的建模语言,是对诸如软件、硬件或数字逻辑的离散系统建模的通用语言。

    静态结构:分为类、属性、操作。多个类可以使用概括共享通用的结构,元素之间的一些关系可以用依赖来分组,包括抽象层次的转移,模块参数的绑定,许可的授予和元素对其他元素的使用。

    这些元素包括接口、数据类型、用例和信号。合并在一起成为分类。

    动态行为:建模动态行为有两种方式:

    1通过与外界交互的对象的生命史。

    2使用一系列对象的通信模式。这些相互连接的对象交互实现行为。

    被隔离的对象视图是状态机,对象依照当前状态对事件响应,执行动作,迁移至新状态。

    依赖上下文的对象和互相之间链的视图是协作。

    UML预览 静态视图 用例视图 

  • 相关阅读:
    Java 获取本机IP
    IDEA2017.3.1破解激活
    java访问https绕过证书信任
    windows版nginx+ftp实现图片服务器的搭建
    json转字符串,json转list,json转pojo的工具类
    文件上传到ftp服务工具类
    一个servlet处理多个功能
    一二级栏目的查询
    后台接收URL地址的参数
    SSH邮箱验证与激活
  • 原文地址:https://www.cnblogs.com/jinpai/p/14344434.html
Copyright © 2011-2022 走看看