实验 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.
合成复用原则分析:
合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分新对象通过委派调用已有对象的方法达到复用功能的目的
复用时要尽量使用组合/聚合关系(关联关系),少用继承。
 

参考资源链接:[兰州理工学生档案管理系统详细设计与实现](https://wenku.csdn.net/doc/3fjbns3prp?utm_source=wenku_answer2doc_content) 构建学生档案管理系统的数据库模型是实现高效信息管理的基础。首先,我们需要确定系统的实体及其属性。对于学生档案管理系统,主要实体可能包括学生、课程、成绩等。每个实体都应有其对应的属性,例如学生实体可以包括学号、姓名、性别、出生日期等。 在设计E-R时,我们会定义实体间的关联关系。例如,学生与课程之间存在选课关系,成绩则是学生与课程的多对多关联关系的体现。E-R中每个实体用矩形表示,属性用椭圆表示,关系用菱形表示。每种关系都会标注其型,如一对一(1:1)、一对多(1:N)或多对多(M:N)。通过E-R,我们可以直观地看到系统的数据结构和实体间的关系。 接下来,我们将E-R转换为对象设计中用来描述系统中的属性、方法和之间关系的静态结构。在中,每个用矩形表示,的属性和方法分别位于两列内。之间的关系如关联、依赖、聚合和组合也会在中表示出来。 例如,学生可能包含获取和设置学号、姓名等方法,同时与课程存在关联关系,这表示为一条从学生指向课程的直线,并在直线上标注“选课”字样。通过,我们不仅能够看出系统的对象结构,还可以理解对象间的交互和职责。 在具体实现时,可以使用UML(统一建模语言)工具来绘制E-R,以便更精确地设计数据库模型。一旦确定了模型,我们就可以根据这些来设计数据库模式和编写Java代码,实现系统的功能需求。 对于想要进一步了解学生档案管理系统设计和实现细节的读者,建议参阅《兰州理工学生档案管理系统详细设计与实现》一书。这份资料能够提供一个完整的案例研究,帮助你从需求分析到详细设计的每个步骤,对于想要深入学习数据库设计、UML绘制Java编程的读者具有很高的实用价值。 参考资源链接:[兰州理工学生档案管理系统详细设计与实现](https://wenku.csdn.net/doc/3fjbns3prp?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

君临๑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值