软件构造4-5章

章节内容
4可理解性,可读性
5可复用性

4.1可理解性-可读性(内部指标)

在这里插入图片描述
相关注释规范见4-1,28.

4.2Coding conventions 编码规范

编码规范:定义了一系列的规则,按这些规则进行编码,有助于提升代码可读性
例如:
命名:包名小写,类,接口单词首字母大写,方法变量start as lower case (Camel Case),常量全大写
代码布局/缩进:空白行,方法大括号前的空格,缩进,一行放不下换行
数据声明方式
文件组织方式
checkstyle

4.3Reusability可复用性

面向复用编程:开发出可复用的软件
基于复用编程:利用已有的可复用软件搭建应用系统
可复用性层次:
在这里插入图片描述
库:开发者构造可运行软件实体,其中涉及到对可复用库的调用
框架:Framework作为主程序加以执行,执行过程中调用开发者所写的程序
白盒框架,黑盒框架:
在这里插入图片描述
可复用性形态:
类型可变(泛型):适应不同的类型,且满足LSP
实现可变:ADT有多种不同的实现
提供完备的细粒度操作,保证功能的完整性,不同场景下复用不同的操作(及其组合)
表示独立性、信息隐藏:内部实现可能会经常变化,但客户端不应受到影响
将共同的行为(共性)抽象出来,形成可复用实体
可复用性技术:
1.设计可复用的类
2.4讲过的
– Inheritance and overriding 继承与重写
– Overloading 重载
– Parametric polymorphism and generic programming 参数多态与泛型编程

4.4LSP

– Behavioral subtyping and Liskov Substitution Principle (LSP) 行为子类型与Liskov替换原则
在这里插入图片描述
在这里插入图片描述
Covariance (协变):
父类型到子类型:越来越具体specific
返回值类型,异常的类型不变或变得更具体
Contravariance (反协变、逆变):
父类型到子类型:越来越具体specific
参数类型:要相反的变化,要不变或越来越抽象
因为参数类型改变,目前Java中遇到这种情况,当作overload看待
在这里插入图片描述
1.数组是协变的
在这里插入图片描述
2.泛型是类型不变的,非协变的
泛型经过类型擦除
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通配符
在这里插入图片描述
– Composition and delegation 组合与委托
如果你的ADT需要比较大小,或者要放入Collections或Arrays进行排序

  1. 可实现Comparator接口并override compare()函数。
    在这里插入图片描述
  2. 实现Comparable接口,然后override compareTo() 方法
    在这里插入图片描述
    委派/委托:一个对象请求另一个对象的功能,实现动态绑定
    一个类不需要继承另一个类的全部方法,通过委托机制调用部分方法
    “委托”发生在object层面,而“继承”发生在class层面
    核心问题:每个Employee对象的奖金计算方法都不同,在object层面而非class层面。
    类型:
    (1) Dependency: 临时性的delegation use_a 在方法内部调用另一个的方法
    (2) Association: 永久性的delegation has_a 对象做rep
    (3) Composition: 更强的delegation is_part_of = has_a + 方法
    (4) Aggregation:聚合 构造a的对象传给b中关于a的rep
    2.Designing system-level reusable libraries and frameworks 设计可复用库与框架
    白盒框架和黑盒框架
    Whitebox frameworks use subclassing/subtyping —继承
    Blackbox frameworks use composition – 委派/组合

4.5设计模式

设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大
Creational patterns 创建型模式
– Concern the process of object creation
Structural patterns 结构型模式多个类之间的组合
(1) Adapter适配器模式
作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能。
例子:让MP3播放MP4
(2) Decorator装饰器模式
允许向一个现有的对象添加新的功能,同时又不改变其结构,作为现有的类的一个包装。
例子:矩形加边框颜色
(3) Facade外观模式
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
例子:打印两种数据库的两种格式的报告,把原来的方法做了封装,变成一个接口
Behavioral patterns 行为类模式描述类或对象交互和分配职责的方式。
(1) Strategy策略模式:一个类的行为或其算法可以在运行时更改
例子:不同运算符继承运算符类,实现不同的运算
(2) Template Method模板模式:一个抽象类公开定义了执行它的方法的方式/模板。
它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
例子:不同游戏都需要重写初始化,开始,结束三个抽象方法,但是玩所有游戏都是第三个方法依次执行
(3) Iterator迭代器模式:
让自己的集合类实现Iterable接口,并实现自己的独特Iterator迭代器(hasNext, next, remove),允许客户端利用这个迭代器进行显式或隐式的迭代遍历:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值