实验 1 UML 类图实验

实验内容(作图工具:PowerDesigner)

1. 绘制以下类图并生成源代码(语言不限):

 2. 根据以下描述绘制类图,再正向工程生成 Java 源代码(也可生成其他面 2 向对象语言的源代码,如 C++或 C#等): 图形(Shape)可分为圆形(Circle)、矩形(Rectangle)、椭圆形(Ellipse)等具体图 形,在 Shape 类中提供了一个抽象的 draw()方法用于绘制图形,而在具体的图 形类中实现该抽象 draw()方法。 提供一个图形工厂类(ShapeFactory),该类提供一个静态方法 createShape(char type),其返回类型为 Shape,参数 type 为所需绘制图形对应的 代码,例如“c”表示圆形,“r”表示矩形,“e”表示椭圆形等,在 createShape()方法中,可以使用条件语句来判断所需绘制图形的类型,并根据参 数的不同返回不同的具体形状对象。【注:“创建关系”是一种特殊的“依赖关 系”】

3. 根据以下描述绘制类图: 某商场会员管理系统包含一个会员类(Member),会员的基本信息包括会员 编号、会员姓名、联系电话、电子邮箱、地址等,会员可分为金卡会员 (GoldMember)和银卡会员(SilverMember)两种,不同类型的会员在购物时可以享 受不同的折扣;每个会员可以拥有一个或多个订单(Order),每一个订单又可以 包含至少一条商品销售信息(ProductItem),商品销售信息包括订单编号、商品 编号、商品数量、商品单价和折扣等;每一条商品销售信息对应一类商品 (Product),商品信息包括商品编号、商品名称、商品单价、商品库存量、商品 产地等。

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

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

违反了单一职责原则,重构后的类图如下:

java代码如下:

import java.util.*;

/** @pdOid 3a8b000e-97a6-4e10-a371-311e22b2b046 */
public class Employee {
   /** @pdOid 8f7110ef-6e13-4fff-a63f-0537c2bd5f6a */
   private String ID;
   /** @pdOid 180b8511-6a75-46b3-adb8-3a23a5548341 */
   private String name;
   /** @pdOid a14728a4-ac5f-45c9-b8f6-2f0286af5882 */
   private int age;
   /** @pdOid 4d63e312-8811-48f9-b973-c45552cf7527 */
   private String gender;
   /** @pdOid de389409-62aa-4123-91ec-342167a6648d */
   private double slary;
   
   /** @pdOid 4167f30d-4365-4ffe-964c-54c4511a89c6 */
   public double displaySlary() {
      // TODO: implement
      return 0;
   }

}
import java.util.*;

/** @pdOid e5f28637-e594-47b9-b223-0319e18386ae */
public class PartTime extends Employee {
   /** @pdOid 6d867cd5-ac26-4417-b5bc-633c0dd40742 */
   private int workHoursPerMonth;
   
   /** @pdOid 9ad430e2-155e-495e-82d4-ced6da8fbc23 */
   public double calculateSalaryByHours() {
      // TODO: implement
      return 0;
   }

}
import java.util.*;

/** @pdOid 223dfa37-6dc3-4873-ab60-6c16f56af773 */
public class FullTime extends Employee {
   /** @pdOid f091b456-9c55-4271-8bcc-a16016db66d1 */
   private int leaveDaysPerMonth;
   
   /** @pdOid c1d0a2c6-ff6b-4c01-a9e1-1c6598282b1c */
   public double calculateSalaryByDays() {
      // TODO: implement
      return 0;
   }

}

补充:如何添加标题框?


合成复用原则


合成复用原则定义:
合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP)
合成复用原则:优先使用对象组合,而不是继承来达到复用的目的。Composite Reuse Principle (CRP): Favor composition of objects over inheritance as a reuse mechanism.
合成复用原则分析:
合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分新对象通过委派调用已有对象的方法达到复用功能的目的
复用时要尽量使用组合/聚合关系(关联关系),少用继承。
 

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君临๑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值