实验项目一:面向对象设计原则实验

(1)实验目的与原理
①深入理解和掌握面向对象设计原则。
②能运用面向对象设计原则对系统进行重构。
③能绘制系统结构图(类图)

(2)实验内容与步骤
某绘图软件提供了多种大小不同的笔(Pen),并且可以给画笔指定不同颜色,某设计人员针对画笔的结构设计了如图1-1所示的初始类图。

通过仔细分析,设计人员发现该类图存在非严重的问题,如果需要增加一种新的大小或颜色的笔,就需要增加很多子类,例如增加一种绿色的笔,则对应每一种大小的笔都需要增加一支绿色笔,系统中类的个数急剧增加。
试根据依赖倒转原则和合成复用原则对该设计方案进行重构,使得增加新的大小或颜色的笔都较为方便,请绘制重构之后的结构图(类图)。

某公司财务系统的初始设计方案如图1-2所示, Employee类包含员工编号(ID)、姓名(name)、年龄(age)、性别( gender)、薪水( salary)、每月工作时数( work HoursPer Month)、每月请假天数( leaveDaysPerMonth)等属性。该公司的员工包括全职和兼职两类,其中每月工作时数用于存储兼职员工每个月工作的小时数,每月请假天数用于存储全职员工每个月请假的天数。系统中两类员工计算工资的方法也不一样,全职员工按照工作日数计算工资,兼职员工按照工作时数计算工资,因此在 Employee类中提供了两个方法 calculateSalaryByDayst()和 calculateSalary By Hours()分别用于按照天数和时数计算工资,此外,还提供了方法 display Salary()用于显示工资。

试采用所学面向对象设计原则分析图1-2中 Employee类存在的问题并对其进行重构,绘制重构之后的类图。

某图形库API提供了多种矢量图模板,用户可以基于这些矢量图创建不同的图形,图形库设计人员设计的初始类图如图1-3所示。
在该图形库中,每个图形类(例如 Circle、 Triangle等)的init()方法用于初始化所创建的图形,setColor()方法给图形设置边框颜色,fill()方法给图形设置填充颜色,setSize()方法设置图形的大小,display()方法显示图形。用户在客户类( Client)中使用该图形库时发现存在如下问题:
l 由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码。
l 在图形库中增加并使用新的图形时,需要修改客户类源代码。
l 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。
现需要根据面向对象设计原则对该系统进行重构,要求如下:
l 隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图形时无须直接创建图形对象,甚至不需要关心具体图形类类名
l 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开闭原则。
请绘制重构后的结构图(类图)。

(3)实验过程
第一题:

第二题:

第三题:

设计模式之实验一:面向对象设计原则实验相关推荐

  1. 01.面向对象设计原则实验

    面向对象设计原则实验 题目1:某绘图软件提供了多种大小不同的笔(Pen),并且可以给画笔指定不同颜色,某设计人员针对画笔的结构设计了如图1-1所示的初始类图.通过仔细分析,设计人员发现该类图存在非严重 ...

  2. 设计模式(三)——面向对象设计原则

    设计模式需要遵循基本的软件设计原则.可维护性(Maintainability)和可复用性(Reusability)是衡量软件质量的重要的两个属性: 可维护性:软件能够被理解.改正.适应及扩展的难易程度 ...

  3. C++设计模式(2)——面向对象设计原则

    1 重新认识面向对象 理解隔离变化 从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小: 各司其职 从微观层面来看,面向对象的方式更强调各个类的"责任&quo ...

  4. Java设计模式(一)面向对象设计原则

    面向对象设计原则 **注意:**推荐完成JavaEE通关路线再开始学习. 我们在进行软件开发时,不仅仅需要将最基本的业务给完成,还要考虑整个项目的可维护性和可复用性,我们开发的项目不单单需要我们自己来 ...

  5. 设计模式--程序猿必备面向对象设计原则

    23种设计模式+额外常用设计模式汇总 (持续更新) 单一职责原则SRP(Single Responsibility Principle) 就一个类而言,应该仅有一个引起它变化的原因. 开放-关闭原则O ...

  6. 【实验】软件设计原则,迪米特法则与开闭原则

    (一)实验原理 1.迪米特法则:不要和"陌生人"说话.或只与你的直接朋友通信. 我们称出现成员变量.方法参数.方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友. ...

  7. uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则

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

  8. 代码质量评判标准、设计模式、面向对象设计原则速查表

    文章目录 代码质量评判标准 软件腐化的原因 提高系统可复用性的几点原则 可维护性与可复用性并不完全一致 面向对象设计原则 1. 面向对象设计的六大设计原则表 2. 图解面向对象涉及的六大原则 1. 开 ...

  9. 设计模式-合成复用原则-》面向对象设计原则

    合成复用原则是面向对象设计原则的 7 条原则中剩下的最后一条,下面我们将对其进行详细地介绍. 合成复用原则的定义 合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚 ...

最新文章

  1. 网站转化率做不好多半是这三大因素产生干扰
  2. Servlet学习笔记(三)之HttpServletRequest
  3. JDFlipNumberView
  4. Python matplotlib pyplot中title() xlabel() ylabel()无法显示在中文(方框乱码)的解决办法
  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目
  6. go 打印 %v %+v %#v 的区别
  7. java语言特点 字符串不变_面试必问:Java中String类型为什么设计成不可变的?
  8. 每天一个小异常——ssh整合空指针异常
  9. 高效向前“零延迟” 数据中心IT自动化势在必行
  10. c语言碰撞的小球,小球碰撞(完全弹性碰撞)
  11. DHTMLX Suite 7.1.10 Crack
  12. STAP旁瓣干扰抑制与干扰对抗仿真
  13. CentOS 6 修改FTP默认端口号
  14. 浅谈安卓逆向协议(二)- 抖音,皮皮虾
  15. 人工智能/数据科学比赛汇总 2019.9
  16. 如何用计算机自动回复微信,10分钟教你用Python实现微信自动回复功能
  17. nginx根据设备类型进行url重定向
  18. xp sp3关闭PAE(物理内存扩展)
  19. GetLastError的返回值意思
  20. 指针与指针变量的区别(C语言)

热门文章

  1. 结对编程 电梯调度程序
  2. ECE220生存指南[03]MP8: 递归函数实现油漆桶问题,Flood Fill with Recursion
  3. linux 压缩当前文件夹下所有文件
  4. css 边框太粗_9个很棒的CSS边框技巧
  5. 微信小程序 获取nickName为 “微信用户” 而且 头像 为null
  6. gcc关于cpu类型的设定
  7. 《程序员》2012年10期精彩内容:移动互联网 创业•求生
  8. 在河北地区怎么打印网上的资料
  9. python中的 try
  10. php获取cookie过期时间,如何获取cookie的过期时间