第 2 章 面向对象设计原则

  1. B A C D D C

  2. C

  3. D

  4. D

  5. “封装变化点”可对应“开闭原则”,“对接口进行编程”可对应“依赖倒转原则”,“多使用组合,
    而不是继承”可对应“合成复用原则”。

  6. 类的粒度需满足单一职责原则,接口的粒度需满足接口隔离原则。

  7. 在面向对象设计中,正方形不能作为长方形的子类,具体分析过程如下:

class Rectangle //长方形
{private double width;
private double height;
public Rectangle(double width,double height)
{this.width=width;
this.height=height;
}
public double getHeight()
{return height;
}
public void setHeight(double height)
{this.height = height;
}
public double getWidth()
{return width;
}
public void setWidth(double width)
{this.width = width;
5
}
}
class Square extends Rectangle //正方形
{public Square(double size)
{super(size,size);
}
public void setHeight(double height)
{super.setHeight(height);
super.setWidth(height);
}
public void setWidth(double width)
{super.setHeight(width);
super.setWidth(width);
}
}
class Client
{public static void main(String args[])
{Rectangle r;
r = new Square(0.0);
r.setWidth(5.0);
r.setWidth(10.00);
double area = calculateArea(r);
if(50.00==area)
{System.out.println("这是长方形或长方形的子类!");
}
else
{System.out.println("这不是长方形!");
}
}
public static double calculateArea(Rectangle r)
{return r.getHeight() * r.getWidth();
}
}

由代码输出可以得知,我们在客户端代码中使用长方形类来定义正方形对象,将输出“这
不是长方形!”,即将正方形作为长方形的子类,在使用正方形替换长方形之后正方形已经
不再是长方形,接受基类对象的地方接受子类对象时出现问题,违反了里氏代换原则,因此
从面向对象的角度分析,正方形不是长方形的子类,它们都可以作为四边形类的子类。关于
该问题的进一步讨论,大家可以参考其他相关资料,如 Bertrand Meyer 的基于契约设计
(Design By Contract),在长方形的契约(Contract)中,长方形的长和宽是可以独立变化的,但是正方形破坏了该契约。

  1. 重构方案如下所示:

在本重构方案中,将笔的大小和颜色设计为两个继承结构,两者可以独立变化,根据依
赖倒转原则,建立一个抽象的关联关系,将颜色对象注入到画笔中;再根据合成复用原则,
画笔在保持原有方法的同时还可以调用颜色类的方法,保持原有性质不变。如果需要增加一
种新的画笔或增加一种新的颜色,只需对应增加一个具体类即可,且客户端可以针对高层类
Pen 和 Color 编程,在运行时再注入具体的子类对象,系统具有良好的可扩展性,满足开闭
原则。(注:本重构方案即为 桥接模式)

java设计模式 课后习题参考答案 第 2 章 面向对象设计原则 清华出版社 刘伟相关推荐

  1. 《计算机网络》学习笔记----第七版课后习题参考答案 第四章

    1.网络层向上提供的服务有哪两种?是比较其优缺点.网络层向运输层提供 "面向连接"虚电路(Virtual Circuit)服务或"无连接"数据报服务前者预约了双 ...

  2. 试从微型计算机的硬件组成角度谈谈单片机,单片机原理及应用课后习题参考答案1~6章...

    <单片机原理及应用>习题答案 第一章计算机基础知识 1-1 微型计算机主要由哪几部分组成?各部分有何功能? 答:一台微型计算机由中央处理单元(CPU).存储器.I/O接口及I/O设备等组成 ...

  3. 《计算机网络》学习笔记----第七版课后习题参考答案 第六章

    6-01  因特网的域名结构是怎么样的?它与目前的电话网的号码结构有何异同之处?答:(1)域名的结构由标号序列组成,各标号之间用点隔开: - . 三级域名 . 二级域名 . 顶级域名 各标号分别代表不 ...

  4. 《计算机网络》学习笔记----第七版课后习题参考答案 第三章

    3-01  数据链路(即逻辑链路)与链路(即物理链路)有何区别? "电路接通了"与"数据链路接通了"的区别何在? 答:数据链路与链路的区别在于数据链路出链路外, ...

  5. 计算机科学基础第二版答案,浙江大学计算机科学基础课后习题参考答案new-PXY.doc...

    浙江大学计算机科学基础课后习题参考答案new-PXY 第一章课后习题参考答案 一.填空题 处理.处理 黑盒.程序 输入设备.运算器.存储器.控制器.输出设备 运算器.控制器.中央处理器 存储器.数据 ...

  6. 量纲对回归结果的影响_应用回归分析-第3章课后习题参考 答案.doc

    应用回归分析-第3章课后习题参考 答案 第3章 多元线性回归 思考与练习参考答案 3.1 见教材P64-65 3.2 讨论样本容量n与自变量个数p的关系,它们对模型的参数估计有何影响? 答:在多元线性 ...

  7. java顺序查找法 监视器_计算机教材课后习题参考答案_new_new重点分析.docx

    <大学计算机基础与计算思维>课后习题参考答案 PAGE 31 <大学计算机基础与计算思维>课后习题参考答案 目 录 TOC \o "1-3" \h \z \ ...

  8. 排除网络故障课后习题参考答案

    排除网络故障课后习题参考答案 (自己整理仅供参考) 1. 常见的操作系统主要有(Windows操作系统.UNIX操作系统.Linux操作系统.苹果操作系统) 2. 局域网故障诊断的方法主要有(连通性故 ...

  9. MITxPro平台 Base SPOC-MachineLearning, Modeling, and Simulation Principles 课后习题参考答案

    提供该课程的课后习题参考答案,保证最终得分在95%以上,

最新文章

  1. CSS滤镜实现火狐、IE兼容
  2. SCOI2010 股票交易
  3. linux 链接 文件,聊聊 Linux 里的文件链接
  4. 2021芜湖高考成绩查询,2021芜湖市地区高考成绩排名查询,芜湖市高考各高中成绩喜报榜单...
  5. 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]...
  6. mysql例题_mysql 练习题
  7. HttpClientUtil 工具类
  8. ffmpeg之libx264编译安装方法及一键shell脚本
  9. KY RD9700_USB网卡驱动
  10. AT2401C功放PA完美替代RFX2401C
  11. 1.Direct2D 捕鱼游戏开发-流程介绍
  12. IOS开发使用@IBInspectable给控件添加额外属性
  13. linux沙盒程序,沙盒应用程序如何?
  14. h264基本编码参数
  15. php 生成bing词典能导入的xml(有道词典-bing词典)
  16. 京东数科,走不一样的路,看不一样的风景
  17. linux中su与su -命令的区别
  18. wsus可以打mysql中间件补丁_配置WSUS3.0服务器给客户机分发补丁
  19. Python-100-days学习笔记(一)
  20. 一键关闭防火墙_更省心的IoT时代网络生活:360家庭防火墙5S体验

热门文章

  1. 《Python核心编程》第7章 习题
  2. Epplus 使用的简单介绍
  3. 树莓派用python处理mpu6500数据
  4. 两年净亏超22亿元!高新兴能否靠车联网走出业绩低谷?
  5. 微型计算机点火系统有分电器,汽车发动机点火系统,微机控制点火系统的类型与组织,你知道多少...
  6. [IC卡类型]带你认识 M1、UID、CUID、FUID、UFUID
  7. java记忆纸牌 计分功能,怎样用数字编码记忆法记忆扑克牌
  8. 河北2021年9月计算机四级考试成绩查询入口
  9. 面向集团客户云计算运营平台的运营开通技术方案及应用架构——之云计算运营平台方案(三)
  10. JavaScript中的构造函数、原型和实例