史铁生:
余华和莫言扛着我上火车,
推着走打雪仗,
还带我偷西瓜,
被人发现后他们拔腿就跑,
却忘了我还在西瓜地里。
一、实验目的:
1、熟悉类图的构件事物。
2、熟悉类之间的泛化、依赖、聚合和组合关系
3、熟悉类图中抽象类、类的静态成员和抽象成员
4、绘制类图,进行系统过的静态建模
二、实验环境:
window7 | 10 | 11 + EA15
三、实验内容:
根据下面的描述,绘制类图:
1、图形(Shape)可分为圆形(Circle)、 矩形(Rectangle)、 椭圆形(Ellipse)等具体图形, 在 Shape
类中提供了一个抽象的 draw()方法用于绘制图形, 而在具体的图形类中实现该抽象 draw()方法。
提供一个图形工厂类(ShapeFactory), 该类提供一个静态方法 createShape(char type), 其
返回类型为 Shape, 参数 type 为所需绘制图形对应的代码, 例如“c” 表示圆形, “r” 表示矩形,“e” 表示椭圆形等, 在 createShape()方法中, 可以使用条件语句来判断所需绘制图形的类型, 并根据参数的不同返回不同的具体形状对象。【注:“创建关系” 是一种特殊的“依赖关系”】;
2、某商场会员管理系统包含一个会员类(Member), 会员的基本信息包括会员编号、 会员姓名、 联系电话、 电子邮箱、 地址等, 会员可分为金卡会员(GoldMember)和银卡会员(SilverMember)两种, 不同类型的会员在购物时可以享受不同的折扣; 每个会员可以拥有一个或多个订单(Order), 每一个订单又可以包含至少一条商品销售信息(ProductItem), 商品销售信息包括订单编号、 商品编号、 商品数量、 商品单价和折扣等; 每一条商品销售信息对应一类商品(Product), 商品信息包括商品编号、 商品名称、 商品单价、 商品库存量、 商品产地等。
四、实验步骤:
第一题:
1、分析有几个类以及它们的关系:
图形类(shape) 抽象类
圆形类(circle)具体图形类
矩形(Rectangle)具体图形类
椭圆形类(Ellipse)具体图形类
图形工厂类(ShapeFactory)
2、补充各个类之间的属性和方法
图形类(shape): angle(角度,图形角度不一)、type(绘制图形对应的代码)、draw(抽象方法 绘制图形)
圆形类(circle):实现draw()
矩形(Rectangle):实现draw()
椭圆形类(Ellipse):实现draw()
图形工厂类(ShapeFactory):CreateShape(创建图形方法接收字符类型),Shape(返回特定对象类型),根据字符类型决定返回哪个形状实例
3、确定各个类之间的关系
第二题:
1、分析有几个类以及它们的关系:
Member(会员类)
GoldMember(金卡会员类)
SilverMember(银卡会员类)
Order(订单类)
ProductItem(产品信息类)
Product(产品类)
2、填充各个类之间的属性和方法
Member(会员类):id(会员编号)、name(会员姓名)、phone(联系电话)、email(电子邮箱)、address(地址)、discount(折扣方法)、order(订单)
GoldMember(金卡会员类):discount(方法)
SilverMember(银卡会员类):discount(方法)
Order(订单类):order id(订单编号)、order number(订单数量)、member(关联的会员)、addProduct(添加产品信息)
ProductItem(产品信息类):order id(订单编号)、product id(商品编号)、product number(商品数量)、product price(商品单价)、discount(折扣)
Product(产品类):id(商品编号)、name(商品名称)、price(商品单价)、number(商品库存)、address(商品产地)
3、确定各个类之间的关系
五、实验结果:
第一题:
第二题:
六、实验心得:
这次实验重点回顾了如何识别并表示类、聚合和关联(类之间的依赖关系),让我对类图的绘制更加得心应手,也加深了我对各个类之间关系的梳理。
1.继承
表示子类可以从父类继承属性和操作。在UML中,继承用一条带空心三角形的实现表示,箭头指向父类。
2.依赖
表示一个类的变化必然会影响到另一个类(反之则未然)。在UML中,依赖用一条带箭头的虚线表示,箭头指向被依赖的类
3.聚集:表示部分与整体的关系。部分可以独立于整体而存在,聚集用带空心菱形的实线表示,菱形指向整体。
4.组合:表示部分与整体的关系,两者相依相存,存在相同的生命周期。组合用带实心菱形的实线表示,菱形指向整体。
5.接口:类A定义了某些属性和操作,但它的有些功能实际上是类B实现的,A只是描述了这些规范,那么A就是B的接口,A和B的关系用一条带空心三角形箭头的虚线来表示,箭头指向A接口
通过实际操作,学会了如何组织类图的层次结构,如何合理的分解复杂系统,以及如何使用泛型和多态来增强模型的灵活性。
这次实验让我认识到良好的类图对于理解和交流系统架构的重要性,同时也可以指出需要进一步提高的地方。