中南大学软件体系结构实验6行为型设计模式实验

合集下载

中南大学软件体系结构实验报二

中南大学软件体系结构实验报二

实验2 UML实验(2)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1. 学习类图的绘制;2. 学习从系统需求中识别类,并构建相应的面向对象模型;3. 学习使用顺序图描述对象之间的交互;4. 学习使用活动图为业务流程建模;5. 学习使用PowerDesigner实现正向工程和逆向工程。

二、实验内容1. 根据以下描述绘制类图,再正向工程生成Java源代码(也可生成其他面向对象语言的源代码,如C++或C#等):图形(Shape)可分为圆形(Circle)、矩形(Rectangle)、椭圆形(Ellipse)等具体图形,在Shape 类中提供了一个抽象的draw()方法用于绘制图形,而在具体的图形类中实现该抽象draw()方法。

提供一个图形工厂类(ShapeFactory),该类提供一个静态方法createShape(char type),其返回类型为Shape,参数type为所需绘制图形对应的代码,例如“c”表示圆形,“r”表示矩形,“e”表示椭圆形等,在createShape()方法中,可以使用条件语句来判断所需绘制图形的类型,并根据参数的不同返回不同的具体形状对象。

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

UML-软件体系结构-实验2-中南大学-软件学院

UML-软件体系结构-实验2-中南大学-软件学院

实验2 UML实验(2)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1. 学习类图的绘制;2. 学习从系统需求中识别类,并构建相应的面向对象模型;3. 学习使用顺序图描述对象之间的交互;4. 学习使用活动图为业务流程建模;5. 学习使用PowerDesigner实现正向工程和逆向工程。

二、实验内容1. 根据以下描述绘制类图,再正向工程生成Java源代码(也可生成其他面向对象语言的源代码,如C++或C#等):图形(Shape)可分为圆形(Circle)、矩形(Rectangle)、椭圆形(Ellipse)等具体图形,在Shape 类中提供了一个抽象的draw()方法用于绘制图形,而在具体的图形类中实现该抽象draw()方法。

提供一个图形工厂类(ShapeFactory),该类提供一个静态方法createShape(char type),其返回类型为Shape,参数type为所需绘制图形对应的代码,例如“c”表示圆形,“r”表示矩形,“e”表示椭圆形等,在createShape()方法中,可以使用条件语句来判断所需绘制图形的类型,并根据参数的不同返回不同的具体形状对象。

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

设计模式实验报告总结(3篇)

设计模式实验报告总结(3篇)

第1篇一、实验背景随着软件工程的不断发展,设计模式作为一种解决软件开发中常见问题的有效方法,越来越受到广泛关注。

本次实验旨在通过学习设计模式,提高编程能力,掌握解决实际问题的方法,并加深对设计模式的理解。

二、实验目的1. 理解设计模式的基本概念和分类;2. 掌握常见设计模式的原理和应用;3. 提高编程能力,学会运用设计模式解决实际问题;4. 培养团队协作精神,提高项目开发效率。

三、实验内容本次实验主要涉及以下设计模式:1. 创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式;2. 结构型模式:适配器模式、装饰者模式、桥接模式、组合模式、外观模式;3. 行为型模式:策略模式、模板方法模式、观察者模式、责任链模式、命令模式。

四、实验过程1. 阅读相关资料,了解设计模式的基本概念和分类;2. 分析每种设计模式的原理和应用场景;3. 编写代码实现常见设计模式,并进行分析比较;4. 将设计模式应用于实际项目中,解决实际问题;5. 总结实验经验,撰写实验报告。

五、实验结果与分析1. 创建型模式(1)单例模式:通过控制对象的实例化,确保一个类只有一个实例,并提供一个访问它的全局访问点。

实验中,我们实现了单例模式,成功避免了资源浪费和同步问题。

(2)工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

实验中,我们使用工厂模式创建不同类型的交通工具,提高了代码的可扩展性和可维护性。

(3)抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。

实验中,我们使用抽象工厂模式创建不同类型的计算机,实现了代码的复用和扩展。

(4)建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实验中,我们使用建造者模式构建不同配置的房屋,提高了代码的可读性和可维护性。

2. 结构型模式(1)适配器模式:将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。

中南大学 计算机体系结构实验报告

中南大学 计算机体系结构实验报告

计算机体系结构课程设计学院:信息科学与工程学院专业班级:指导老师:学号:姓名:目录实验 1 对指令操作码进行霍夫曼编码 (3)一、实验目的 (3)二、实验内容 (3)三、设计思路 (4)四、关键代码 (4)五、实验截图 (5)六、源代码 (5)实验 2 使用LRU 方法更新Cache (8)一、实验目的 (8)二、实验内容 (8)三、设计思路 (9)四、程序截图 (9)五、实验代码 (9)实验总结 (16)参考文献 (16)实验1 对指令操作码进行霍夫曼编码一、实验目的了解和掌握指令编码的基本要求和基本原理二、实验内容1. 使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。

与扩展操作码和等长编码进行比较。

2. 问题描述以及问题分析举例说明此问题,例如:P1P2P3P4P5P6P70.450.300.150.050.030.010.01下表所示:对此组指令进行HUFFMAN 编码正如下图所示:最后得到的HUFFMAN 编码如下表所示:P1P2P3P4P5P6P7 010110111011110111110111111最短编码长度为:H=0.45*1+0.30*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95.要对指令的操作码进行HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN 树再进行HUFFAM 编码。

此过程的难点构造HUFFMAN 树,进行HUFFAM 编码只要对你所生成的HUFFMAN 树进行中序遍历即可完成编码工作。

三、设计思路观察上图,不难看出构造HUFFMAN 树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。

2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。

3、在对链表进行排序,链表是否只有一个节点,是则HUFFAN 树构造完毕,否则继续做 2 的操作。

中南大学软件工程复习题及参考答案

中南大学软件工程复习题及参考答案

中南大学复习题及参考答案软件工程一、选择题:1.下面哪些UML图描述系统行为( A )A.用例图B.类图C.对象图2.属于概要设计活动的是( A )A.软件结构设计B.数据结构设计C.算法设计3.属行为型设计模式的是(C)A.组合模式B.工厂方法模式C.观察者模式4.下列说法正确的是( B )A.UML是软件开发方法B.UML是系统描述语言C.UML是软件开发过程5. 根据程序流程图划分的模块通常是( B )A. 信息内聚的模块B. 过程内聚的模块C.逻辑内聚的模块6.如果某程序中的比较个数是m,则其McCabe环形复杂度为( C )A.m-1B.mC.m+17.按ISO9000-3的说明,下列属软件配置项的是( C )A.软件开发方法B.软件开发组织管理制度C.软件开发合同8. 软件测试的目的是( C )A.证明软件无错B.发现软件中的所有错误C.尽可能发现软件系统中的错误9.软件重构关注的是( B )A. 软件体系结构B. 模块细节C.软件性能10.软件项目开发计划的内容有( B )A. 数据分析B.风险分析C.功能分析11.在UML的类图中,描述整体与部分关系的有( B )A.泛化关系B.聚合关系C.依赖关系12.软件过程能力成熟度模型CMM用以评价(A)A.软件过程能力B.组织能力C.学习能力13. 因计算机硬件和软件环境的变化而作出的修改软件的过程称为( C )A. 完善性维护B. 改正性维护C.适应性维护14. 对项目软件而言,软件功能需求信息主要由谁提供( A )A.软件用户B.软件开发人员C.软件项目管理人员15. IDEF0图反映不出(C)A.系统做什么B.系统功能由谁做C.系统如何做16. 原型模型是一种什么开发过程模型(B)A.自顶向上B. 由外至内C.增量式17. 系统流程图描述(A)A.物理系统B.逻辑系统C.软件体系结构18.需求规格说明书的内容不应该包括( C )A.软件确认准则B.软件的性能描述C.算法过程的详细描述19.适合需求模糊或需求不确定系统开发的软件开发模型有( C )A. 瀑布模型B. RAD模型C.原型模型20.UML图中描述系统结构的有( A )A. 组件图B. 顺序图C.状态图21.面向对象方法是一种什么软件开发方法( B )A.层次化B.迭代增量式C.逐步求精22.不可以用来衡量软件可维护性的有()A.可靠性B.可用性C.可行性23. 系统分析员在需求分析最后负责编写()A.用户手册B. 概要设计说明书C.可行性研究报告24.为了提高软件的可靠性、可维护性等而对软件的修改称为()A.改正性维护B.适应性维护C.预防性维护25.在结构化方法中,为使需求改变对软件影响较小,应该使软件结构()A. 与问题结构对应B. 与问题结构独立C.与用户界面对应26.单元测试的计划应该在什么阶段完成()A. 需求分析B. 概要设计C.详细设计27. 下列属面向对象软件开发方法的有()A. LCP方法B. OMT方法C.IDEF0方法28.强调信息隐藏的软件工程设计方法有()A.Jackson方法B.Parnas方法C.SA/SD方法29.描述系统动态行为的模型有()A.包图B.软件结构图C.状态图30.考虑输入条件组合的测试用例设计方法有()A.等价分类法B.语句覆盖法C. 因果图法31. 下列能减少支援性维护活动的有()A.利用软件包B.进行配置管理C.对用户进行适当培训32. 只支持单重继承的程序设计语言有()A.C++B.DelphiC. C33. IDEF0图的顶层图是()A. A0图B.A-0图C.A-1图34. 在UML的用例图中,扩展关系是一种()A. 泛化关系B.依赖关系C.关联关系35.独立测试小组开始介入测试是在()A.模块测试阶段B.集成测试阶段C.确认测试阶段36. 在成本估计中容易低估局部问题的方法是()A. 基于经验模型的估计B. 自底向上估计C. 自顶向下估计37.在IDEF1X图中,如果子实体与父实体存在联系,则子实体将继承父实体的()A.全部属性B.主关键字属性C.非主关键字属性38. 结构化分析方法使用的工具有()A. 数据流图B.类图C.软件结构图39. 白盒测试设计用例的方法是()A. 等价分类法B.基本路径覆盖法C.因果图法40. 在衡量软件质量时,最重要的标准是()A. 可维护性好B. 可用性好C. 满足用户功能需求41. 瀑布模型是一种()A. 演化模型B. 顺序模型C. 增量模型42. 模块的独立程度可以由什么定性标准度量()A. 耦合度B. 复杂度C.可靠性43.以下选项中,不属于对象的特点有()A. 继承B. 多态C. 封闭44. 面向数据结构的设计方法有()A.Parnas方法B.Jackson方法C. IDEF0方法45. 与UML配合最好的软件开发方法是()A.RUP方法B.Coad/Yourdon方法C.IDEF4方法二、填空题:1.统一建模语言UML提供了两种描述整体/部分关系的方法,分别是和。

中南大学软件体系结构UML实验

中南大学软件体系结构UML实验

实验1 UML实验实验学时: 4每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1. 学会安装和使用建模工具PowerDesigner,熟练使用PowerDesigner绘制常用的UML 图形,熟悉常用的UML符号;2. 构建用例模型来描述软件需求,包括绘制用例图,撰写用例文档并制作用例检查矩阵;3. 学习使用状态图描述对象的状态及转换;4. 学习使用活动图为业务流程建模;5. 学习使用顺序图描述对象之间的交互;6. 学习类图的绘制;7. 学习从系统需求中识别类,并构建相应的面向对象模型;8. 学习使用PowerDesigner实现正向工程和逆向工程。

二、实验内容1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。

绘制该酒店订房系统的用例图。

2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。

该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。

中南大学软件体系结构实验3-创建型设计模式实验

中南大学软件体系结构实验3-创建型设计模式实验

实验3 创建型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的1.熟练使用面向对象设计原则对系统进行重构;2.熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的创建型设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式和单例模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容1.在某图形库API中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的显示图形,图形库设计人员设计的初始类图如下所示:Circle+ + + + +init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidTriangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidRectangle+++++init ()setColor ()fill ()setSize ()display ()...: void: void: void: void: voidClient在该图形库中,每个图形类(如Circle、Triangle等)的init()方法用于初始化所创建的图形, setColor()方法用于给图形设置边框颜色,fill()方法用于给图形设置填充颜色,setSize()方法用于设置图形的大小,display()方法用于显示图形。

客户类(Client)在使用该图形库时发现存在如下问题:①由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要修改客户类源代码;②在图形库中增加并使用新的图形时需要修改客户类源代码;③客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为复杂,导致客户类代码冗长且难以维护。

中南大学软件体系结构实验报告一

中南大学软件体系结构实验报告一

实验1 UML实验(1)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1.学会安装和使用建模工具PowerDesigner,熟练使用PowerDesigner绘制常用的UML 图形,熟悉常用的UML符号;2.构建用例模型来描述软件需求,包括绘制用例图,撰写用例文档并制作用例检查矩阵;3. 绘制状态图描述对象的状态及转换。

二、实验内容1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。

绘制该酒店订房系统的用例图。

2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。

该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。

软件体系结构的实验报告

软件体系结构的实验报告

软件架构实验一实验名称:UML实践专业班级:xxx学号:xxx姓名:xxx一、实验目的熟悉体系结构架构工具PowerDesigner的安装和使用,使用PowerDesigner绘制用例图,构造系统的需求模型;使用PowerDesigner绘制类图和对象图,构造系统的静态模型。

二、实验内容1. 使用PowerDesigner根据实际场景构造需求模型,了解需求建模的步骤并绘制用例图,撰写用例描述文档,进行模型检查。

某酒店订房系统描述如下:(1)顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2)前台服务员可以利用系统直接在前台预订房间;(3)不管采用哪种预订方式,都需要在预订时交相应订金;(4)前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5)利用信用卡进行支付时需要和信用卡系统进行通信;(6)客房部经理可以随时查看客房预订情况和每日收款情况。

2. Sunny College软件学院的图书管理系统的部分需求如下:(1) 图书馆会员有两类:学生和教师,学生可以借五本书,教师可以借十本书;(2) 学生会员借书期限为两个月,教师会员借书期限为三个月;(3) 书籍分为图书和期刊;(4) 图书管理系统应记录借出和归还的书籍信息;(5) 系统应该能添加新会员,当图书管理员添加新会员时,系统创建新记录;(6) 图书管理员可以删除会员记录。

现根据以上需求对系统进行静态建模,绘制类图,并假设一个名为“张三”的学生借一本名为《设计模式》的书,创建相应的对象图。

3. 根据NewWorld Bank银行系统项目需求,构建系统的需求模型和静态模型。

三、实验要求1. 熟练安装PowerDesigner11,熟练使用PowerDesigner11绘制用例图、类图和对象图;2. 严格按照需求建模和静态建模的步骤;3. 使用UML2.0中用例图的标准图符;4. 绘制标准的用例图并撰写规范的用例文档,绘制标准的类图和对象图;5. 最终需求模型需要进行检查,确保模型与需求的一致性。

软件设计模式与体系结构实验报告

软件设计模式与体系结构实验报告

实验七、文件共享器11. 实验目的:①学习C/S软件设计思想;②了解C/S方式的简单实现;③掌握C/S方式的核心思想,认识其优缺点。

2. 实验内容:设计一个文件共享系统,分为服务器和客户端。

服务器需要的功能有:添加共享文件(或目录);删除共享文件(或目录);打开一个端口可以供客户端连接/选择文件/下载文件;接受客户端共享的文件(传文件给服务器)并保存在服务器,供客户端下载。

客户端的功能有:连接服务器;从服务器获取文件列表;从服务器下载指定文件;上传文件给服务器。

3.c/s设计思想:C/S结构,即Client/Server(客户机/服务器)结构,(Client/Server或客户/服务器模式):Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。

传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。

由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。

而且代价高,效率低。

4.c/s工作模式:C/S 结构的基本原则是将计算机应用任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布”原则。

客户端完成数据处理,数据表示以及用户接口功能;服务器端完成DBMS(数据库管理系统)的核心功能。

这种客户请求服务、服务器提供服务的处理方式是一种新型的计算机应用模式。

5.优缺点:优点:1,数据安全性比较。

由于C/S结构软件的数据分布特性,客户端所发生的火灾、盗抢、地震、病毒、黑客等都成了可怕的数据杀手。

中南大学刘伟《设计模式》实验参考答案介绍

中南大学刘伟《设计模式》实验参考答案介绍

1
Creator + init () : void + create ()ห้องสมุดไป่ตู้: Shape
CircleCreator + init () : void + create () : Shape Client
TriangleCreator + init () : void + create () : Shape
JpgReaderFactory GifReader + createImageReader () : ImageReader + readImage () : void
<<create>>
JpgReader + readImage () : void
GifReaderFactory + createImageReader () : ImageReader
Shape + + + + setColor () fill () setSize () display () : void : void : void : void
2.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形 (Rectangle)和三角形(Triangle)等的绘图工具类, 每个几何图形均具有绘制 draw()和擦除 erase() 两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常, 绘制类图并编程模拟实现。 参考答案:
Triangle init () setColor () fill () setSize () display () : void : void : void : void : void + + + + +

体系结构实验报告

体系结构实验报告

中南大学软件学院软件体系结构设计模式实验报告学生姓名:宋昂所在学院:软件学院学生学号: 3901080115 学生班级:软件0801 指导老师:刘伟完成日期: 2010-12-7一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。

二、实验内容使用PowerDesigner和任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。

(1) 简单工厂模式使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、方形(Rectangle)和三角形(Triangle) 对象,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnsupportedShapeException,绘制类图并编程实现。

(2) 简单工厂模式使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man 对象,如果传入参数“W”,则返回一个Woman对象,使用任意一种面向对象编程语言实现该场景。

现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意女娲的变化。

(3) 工厂方法模式某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。

用代码实现日志记录器实例,如果在系统中增加一个中的日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码,注意增加新日志记录方式过程中原有代码的变化。

中南大学软件学院软件体系结构实验1UML实验参考答案.doc

中南大学软件学院软件体系结构实验1UML实验参考答案.doc

《UML实验》参考答案1. 某酒店订房系统描述如下:(1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订;(2) 前台服务员可以利用系统直接在前台预订房间;(3) 不管采用哪种预订方式,都需要在预订时支付相应订金;(4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付;(5) 利用信用卡进行支付时需要和信用卡系统进行通信;(6) 客房部经理可以随时查看客房预订情况和每日收款情况。

绘制该酒店订房系统的用例图。

参考答案:顾客在线预订房间前台预订房间通过现金支付订金通过信用卡支付订金查看客房预订情况查看每日收款情况2. 根据以下场景绘制用例图:某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。

该系统功能描述如下:(1) 企业的任何员工都可以查看菜单和今日特价;(2) 系统的顾客是注册到系统的员工,可以在线订餐(以下操作均需先登录)、注册工资支付、修改订餐信息和删除订餐信息,在注册工资支付时需要通过工资系统进行身份验证;(3) 餐厅员工是特殊的顾客,可以进行备餐(系统记录备餐信息)、生成付费请求和请求送餐,其中对于注册使用工资支付的顾客生成付费请求并发送给工资系统;(4) 菜单管理员是餐厅员工的一种,可以管理菜单;(5) 送餐员也是餐厅员工的一种,可以打印送餐说明、记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。

参考答案:<<include>>查看菜单查看今日特价在线订餐注册工资支付修改订餐信息删除订餐信息工资系统备餐生成付费请求请求送餐管理菜单打印送餐说明记录送餐信息记录收费注册登录3. 根据以下场景绘制用例图:某公司需开发一个反馈处理系统作为其CRM的一部分。

系统基本功能描述如下:(1) 客户可通过系统发布反馈信息;(2) 公司客户关系(CR)部门员工也可以在系统中记录反馈信息;(3) 业务部门的主管和员工均能看到本部门的反馈信息,但只有CR部门员工拥有修改与删除反馈的权限;(4) 对于部分需要调查以便验证其真实性并需要做相关处理的反馈信息,业务部门主管有权通过系统安排本部门员工调查及处理该反馈;(5) 反馈调查与处理完毕后,负责调查的员工可通过系统输入反馈的详细情况;(6) 公司高层可查看未决反馈统计报表和各业务部门的反馈统计报表;(7) 所有人员进入本系统需先登录。

(完整word)设计模式-软件体系结构-实验6-中南大学-软件学院

(完整word)设计模式-软件体系结构-实验6-中南大学-软件学院

实验6 行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的行为型设计模式,包括观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容1. 某实时在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。

试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。

2. 某公司欲开发一套机房监控系统,如果机房达到某一指定温度,温度传感器(Thermosensor)将自动传递信号给各种响应设备,例如警示灯(CautionLight)将闪烁(flicker())、报警器(Annunciator)将发出警报(alarm())、安全逃生门(SecurityDoor)将自动开启(open())、隔热门(InsulatedDoor)将自动关闭(close())等,每一种响应设备的行为由专门的程序来控制。

为了将来能够方便地引入新类型的响应设备,采用观察者模式和适配器模式设计并模拟实现该系统。

3. 某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票(MovieTicket)打折(Discount)方式,具体打折方案如下:(1)学生凭学生证可享受票价8折优惠;(2)年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);(3)影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。

该系统在将来可能还要根据需要引入新的打折方式。

中南大学软件体系结构实验五解读

中南大学软件体系结构实验五解读

实验5 结构型和行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型和行为型设计模式,包括代理模式、职责链模式和命令模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容1. 在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法method()调用之前输出“方法method()被调用,调用时间为2014-11-5 10:10:10”,调用之后如果没有抛异常则输出“方法method()调用成功”,否则输出“方法method()调用失败”。

在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块的结构,绘制类软图并编程模拟实现。

2. 某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下:(1) 在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统;(2) 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。

该软件公司开发人员已完成了商务信息查询模块的开发任务,现希望能够以一种松耦合的方式向原有系统增加身份验证和日志记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增加新功能之后的商务信息查询模块,而且可能在将来还要在该信息查询模块中增加一些新的功能。

试使用代理模式设计并编程模拟实现该收费商务信息查询系统。

【提示:使用保护代理和智能引用代理】3. 某企业的SCM(Supply Chain Management,供应链管理)系统中包含一个采购审批子系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《软件体系结构》实验报告项目名称行为型设计模式实验专业班级学号姓名实验成绩:批阅教师:年月日实验6 行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的行为型设计模式,包括观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容1. 某实时在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。

试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。

2. 某公司欲开发一套机房监控系统,如果机房达到某一指定温度,温度传感器(Thermosensor)将自动传递信号给各种响应设备,例如警示灯(CautionLight)将闪烁(flicker())、报警器(Annunciator)将发出警报(alarm())、安全逃生门(SecurityDoor)将自动开启(open())、隔热门(InsulatedDoor)将自动关闭(close())等,每一种响应设备的行为由专门的程序来控制。

为了将来能够方便地引入新类型的响应设备,采用观察者模式和适配器模式设计并模拟实现该系统。

3. 某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票(MovieTicket)打折(Discount)方式,具体打折方案如下:(1) 学生凭学生证可享受票价8折优惠;(2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);(3) 影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。

该系统在将来可能还要根据需要引入新的打折方式。

试使用策略模式设计并编程模拟实现该影院售票系统。

4. 某软件公司欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征,需要模拟的飞机种类及其特征如表1所示:表1 飞机种类及特征一览表为将来能够模拟更多种类的飞机,试采用策略模式设计并模拟实现该飞机模拟系统。

三、实验要求1. 结合实例,正确无误地绘制观察者模式和策略模式的模式结构图;2. 使用任意一种面向对象编程语言实现观察者模式和策略模式实例,代码运行正确无误。

四、实验步骤1. 结合实例,使用PowerDesigner绘制观察者模式实例结构图并用面向对象编程语言实现该模式实例;2. 结合实例,使用PowerDesigner绘制观察者模式实例结构图并用面向对象编程语言实现该模式实例;3. 结合实例,使用PowerDesigner绘制策略模式实例结构图并用面向对象编程语言实现该模式实例;4. 结合实例,使用PowerDesigner绘制策略模式实例结构图并用面向对象编程语言实现该模式实例。

五、实验结果1. 类图:实现代码:private double price;ConcreteShares(double newPrice){price = newPrice;}public void setPrice(double newPrice){price = newPrice;}public double getPrice(){return price;}public void change() {// TODO: implementSystem.out.println("变化超过5%");System.out.println("--------------------");for(MyObserver obs:observer){((MyObserver)obs).getChange(price);}}}/************************************************************************ Module: Invester.java* Author: ct* Purpose: Defines the Class Invester***********************************************************************/ import java.util.*;/** @pdOid a295ff58-e079-42a6-a1d9-f741697dae60 */public class Invester implements MyObserver {public String name;Invester(String name){ = name;}public void getChange(double Price) {// TODO: implementSystem.out.println("正在发送信息给用户"+name+",目前该股票价格为"+Price);}}/*********************************************************************** * Module: MyObserver.java* Author: ct* Purpose: Defines the Interface MyObserver***********************************************************************/ import java.util.*;/** @pdOid 995b8e6a-43c4-4fa9-99ca-10b78081beae */public interface MyObserver {/** @pdOid 463b82d3-31e1-4c0a-afae-74595234ab82 */public void getChange(double Price);}/*********************************************************************** * Module: SharesSubject.java* Author: ct* Purpose: Defines the Class SharesSubject***********************************************************************/ import java.util.*;/** @pdOid 23f9decd-a8e4-4e34-9cf2-6abf8fcc3678 */public abstract class SharesSubject {/** @pdOid 06f9c8c6-c557-4a15-8bb9-bc2034891d68 */public ArrayList<MyObserver> observer = new ArrayList();public void addInvester(MyObserver newObserver) {// TODO: implementobserver.add(newObserver);}/** @pdOid 3050e00a-10fc-4cb8-9492-222fcc9964a2 */public void removeInvester(MyObserver oldObserver) {// TODO: implementobserver.remove(oldObserver);}/** @pdOid 7dc77e25-a4ab-4193-96bc-bca75699feaf */public abstract void change();}2. 类图:实现代码:v/*********************************************************************** * Module: Annunciatior.java* Author: ct* Purpose: Defines the Class Annunciatior***********************************************************************/ import java.util.*;/** @pdOid 3510b9e2-117f-483b-8974-09e848391cf1 */public class Annunciator {/** @pdOid a6c25fe7-e2d8-42da-ba61-b75314a19725 */public void alarm() {// TODO: implementSystem.out.println("警报响起");}}/************************************************************************ Module: AnnuciatorObserver.java* Author: ct* Purpose: Defines the Class AnnuciatorObserver***********************************************************************/ import java.util.*;/** @pdOid 30002f48-45d3-4162-94aa-a9d00c4768ec */public class AnnunciatorObserver implements MyObserver {/** @pdOid 7b599933-3f2b-46e5-8f57-96eb28d90d5c */private Annunciator annunciator;AnnunciatorObserver(Annunciator newAnnunciator){this.annunciator = newAnnunciator;}/** @pdOid cc9d6b91-6264-4d80-804d-cb8a933fc46c */public void response() {// TODO: implementannunciator.alarm();}}/*********************************************************************** * Module: CautionLight.java* Author: ct* Purpose: Defines the Class CautionLight***********************************************************************/ import java.util.*;/** @pdOid 5cf7cee6-d049-4109-a349-801aa6589072 */public class CautionLight {/** @pdOid 212c62b0-7f33-44ba-a43e-7e9754286e6a */public void flicker() {// TODO: implementSystem.out.println("应急灯打开");}}/*********************************************************************** * Module: CautionLightObserver.java* Author: ct* Purpose: Defines the Class CautionLightObserver***********************************************************************/ import java.util.*;/** @pdOid 438ef70a-32ca-4bb3-a07e-71d6606642e5 */public class CautionLightObserver implements MyObserver {/** @pdOid 0887aded-cca4-490d-af3c-203073d8356b */private CautionLight cautionLight;CautionLightObserver(CautionLight newCautionLight){this.cautionLight = newCautionLight;}/** @pdOid 6cba0a71-1bc7-4052-8f95-b9ad83e34d2a */public void response() {// TODO: implementcautionLight.flicker();}}public class Client {public static void main(String args[]){MySubject tempreture = new Tempreture();MyObserverannunciatorObserver,cautionLightObserver,insulatedDoorObserver,securityDoo rObserver;Annunciator annunciator = new Annunciator();CautionLight cautionLight = new CautionLight();InsulatedDoor insulatedDoor = new InsulatedDoor();SecurityDoor securityDoor = new SecurityDoor();annunciatorObserver = new AnnunciatorObserver(annunciator);cautionLightObserver = new CautionLightObserver(cautionLight);insulatedDoorObserver = new InsulatedDoorObserver(insulatedDoor);securityDoorObserver = new SecurityDoorObserver(securityDoor);tempreture.add(securityDoorObserver);tempreture.add(insulatedDoorObserver);tempreture.add(cautionLightObserver);tempreture.add(annunciatorObserver);tempreture.change();}}/*********************************************************************** * Module: InsulatedDoor.java* Author: ct* Purpose: Defines the Class InsulatedDoor***********************************************************************/ import java.util.*;/** @pdOid f495d797-be3a-4141-9d50-325742eb46ab */public class InsulatedDoor {/** @pdOid 7540dd3b-1f25-4d54-8828-73222f87e612 */public void close() {// TODO: implementSystem.out.println("隔离门关闭");}}/*********************************************************************** * Module: InsulatedDoorObserver.java* Author: ct* Purpose: Defines the Class InsulatedDoorObserver***********************************************************************/ import java.util.*;/** @pdOid 26920542-c6ee-4b65-b8a4-a55c13119475 */public class InsulatedDoorObserver implements MyObserver {/** @pdOid 9da21a0d-9858-485c-9d9b-5e3fc4e7c652 */private InsulatedDoor insulatedDoor;InsulatedDoorObserver(InsulatedDoor newInsulatedDoor){this.insulatedDoor = newInsulatedDoor;}/** @pdOid 2044ceef-9d41-474b-be4d-8feb1aeb828a */public void response() {// TODO: implementinsulatedDoor.close();}}/*********************************************************************** * Module: MyObserver.java* Author: ct* Purpose: Defines the Interface MyObserver***********************************************************************/ import java.util.*;/** @pdOid 2414fcb6-7a72-4e74-b7e4-ff02a04c2264 */public interface MyObserver {/** @pdOid be86483c-16d5-4f53-a1f1-a12f56fb13c6 */void response();}/*********************************************************************** * Module: MySubject.java* Author: ct* Purpose: Defines the Class MySubject***********************************************************************/ import java.util.*;/** @pdOid 0af97a55-e330-4640-abe4-26dc1dc49144 */public abstract class MySubject {/** @pdOid 60bd7861-80b9-4756-893b-e294a09a9262 */protected ArrayList<MyObserver> observer= new ArrayList();/** @param newobserver* @pdOid 8f093415-73f6-40fd-b6ef-c82034c60bc7 */public void add(MyObserver newobserver) {// TODO: implementobserver.add(newobserver);}/** @param old* @pdOid e1b7ad74-946a-48f7-b813-c55737f4dd96 */public void remove(MyObserver old) {// TODO: implementobserver.remove(old);}/** @pdOid 82c76231-cb91-499b-8749-e5e9fc3fc365 */public abstract void change();}/*********************************************************************** * Module: SecurityDoor.java* Author: ct* Purpose: Defines the Class SecurityDoor***********************************************************************/ import java.util.*;/** @pdOid bc24bd59-23fe-44fd-b1ae-bbbe132f467a */public class SecurityDoor {/** @pdOid 2925ef22-eec2-4758-bf42-1c32d1814060 */public void open() {// TODO: implementSystem.out.println("安全门打开");}}/************************************************************************ Module: SecurityDoorObserver.java* Author: ct* Purpose: Defines the Class SecurityDoorObserver***********************************************************************/ import java.util.*;/** @pdOid 754901d0-b712-40a7-8097-718c2e4000ec */public class SecurityDoorObserver implements MyObserver {/** @pdOid 7f9d61ef-36f4-487d-b290-0ddf20df401f */private SecurityDoor securityDoor;SecurityDoorObserver(SecurityDoor newSecurityDoor){this.securityDoor = newSecurityDoor;}/** @pdOid 78b7cc18-a6b4-416c-aecb-a87580c4c50d */public void response() {// TODO: implementsecurityDoor.open();}}3. 类图:实现代码:/************************************************************************ Module: ChildrenDiscount.java* Author: ct* Purpose: Defines the Class ChildrenDiscount***********************************************************************/ import java.util.*;/** @pdOid 40bf41f9-236d-421e-a4cb-c28e520efd0d */public class ChildrenDiscount implements Discount {/** @pdOid 9832b602-b5e6-4fdf-9eef-b823cfcaafc0 */public void discount() {// TODO: implementSystem.out.println("年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元)");}}public class Client {public static void main(String [] args){MovieTicket movieTicket = new MovieTicket();Discount studentDiscount,vipDiscount,childrenDiscount;studentDiscount = new StudentDiscount();vipDiscount = new VIPDiscount();childrenDiscount = new ChildrenDiscount();movieTicket.setDiscount(studentDiscount);movieTicket.discount();movieTicket.setDiscount(childrenDiscount);movieTicket.discount();}}/*********************************************************************** * Module: Discount.java* Author: ct* Purpose: Defines the Interface Discount***********************************************************************/ import java.util.*;/** @pdOid ab09e5e6-a612-4b8b-8713-b313bee1f1b2 */public interface Discount {/** @pdOid 7cdc2442-371c-4b9b-be7f-d3878eb29b89 */void discount();}/*********************************************************************** * Module: MovieTicket.java* Author: ct* Purpose: Defines the Class MovieTicket***********************************************************************/ import java.util.*;/** @pdOid 28048305-6bd5-4e91-945a-890457a2b17b */public class MovieTicket {/** @pdOid 041754c6-86bd-4a6e-910a-887ec3775bda */private Discount discount;/** @param discoutn* @pdOid b2db074a-345d-4eae-b390-fea81a41ac1d */public void setDiscount(Discount discount) {// TODO: implementthis.discount = discount;}/** @pdOid ef01351f-b74d-4765-af6d-e11813b3b53c */public void discount() {// TODO: implementdiscount.discount();}}/*********************************************************************** * Module: StudentDiscount.java* Author: ct* Purpose: Defines the Class StudentDiscount***********************************************************************/ import java.util.*;/** @pdOid 17d717dd-fcc8-4205-9965-503b708ac510 */public class StudentDiscount implements Discount {/** @pdOid ff1afcce-6145-4516-8a06-e6759f809323 */public void discount() {// TODO: implementSystem.out.println("学生凭学生证可享受票价8折优惠;");}}/************************************************************************ Module: VIPDiscount.java* Author: ct* Purpose: Defines the Class VIPDiscount***********************************************************************/ import java.util.*;/** @pdOid 716e64ca-a980-4447-a5a2-78ff105cb655 */public class VIPDiscount implements Discount {/** @pdOid 06f01557-deff-4917-b797-7b3625ba65a7 */public void discount() {// TODO: implementSystem.out.println("影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。

相关文档
最新文档