《面向对象系统分析与设计》三级项目

文章目录

  • 一、项目总体要求
    • <设计模式应用>
    • 第一次文档要求
    • 第二次文档要求
  • 二、示例
    • 第一次文档 - 设计原则应用
      • 1、题目描述
      • 2、设计:
        • (1)优化理由陈述
        • (2)类图
        • (3)实现代码
    • 第二次文档 - 设计模式应用
      • 1、题目描述
      • 2、设计:
        • (1) 优化理由陈述
        • (2)类图
        • (3)实现代码
  • 三、源码获取:


在这里插入图片描述

一、项目总体要求

分为两次完成。第一次为基本原则的应用,第二次为设计模式的应用。

第一次为文档撰写和代码实现,针对一个问题应用3种以上(包括3种)的面向对象设计基本原则进行优化。

1、优化项目业务介绍
目前手中待优化项目主要解决哪方面的业务问题。将实现的功能做以简单介绍。

2、初始方案
(1)、原有方案类的设计(类图)
(2)、初始代码

3、优化方案
(1)优化理由陈述
请说明原有程序存在的问题,根据什么原则对此问题进行的改进。此处可以借助类图进行说明

(2)类图
将程序优化后的类图粘贴到此处,最好能够在图中标明使用设计原则的部分及名称

(3)优化后的代码
可以将代码拷贝到这里,并对优化后部分的代码进行加粗显示。

<设计模式应用>

第二次为文档撰写和代码实现,题目自拟,针对一个问题应用2种以上(包括2种)的面向对象设计模式进行优化。

  1. 优化案例业务介绍
    目前手中待优化程序主要解决哪方面的业务问题。将实现的功能做以简单介绍。

  2. 初始方案
    (1)、原有方案类的设计(类图)
    (2)、初始代码
    可以将代码拷贝到这里,也可以将代码文件进行编号,在这里进行引用。

  3. 优化方案
    (1)优化理由陈述
    请说明原有程序存在的问题,根据什么模式对此问题进行的改进。此处可以借助类图进行说明。

(2)类图
将程序优化后的类图粘贴到此处,最好能够在图中标明使用设计模式的部分及名称。

(3)化后的代码
可以将代码拷贝到这里,并对优化后部分的代码进行加粗显示。

第一次文档要求

1、题目描述

2、设计:

(1)优化理由陈述,说明原有程序存在的问题,根据什么原则对此问题进行的改进。

(2)类图(针对一个项目运用多个原则画在一个类图上)

(3)实现代码

3、评分标准如下

(1)原则选择的合理性
是否能够指出代码中存在的不合理性,并能够选择合理的设计原则进行优化。

(2)代码实现的合理性
代码对设计原则的切实实施,将设计原则真正落实到代码上。

第二次文档要求

1、题目描述

2、设计

(1) 优化理由陈述,分别介绍在哪里应用了哪些设计模式,并说明理由。

(2)类图(针对一个项目运用多个模式画在一个类图上)

(3)实现代码

3、评分标准如下

(1)2个以上模式

设计模式应用个数应在2——6之间,鼓励多运用设计模式。

(2)模式合理性

模式应用的合理性指的是确实运用得很巧妙地解决问题为非常优秀,解决了实际问题为很好,模式得到应用为合格,如果用得太牵强则需要改进。

(3)类图的合理性
类图的正确性是指在当前业务背景下,类图是否准确地表达了设计模式的意图。

(4)代码实现规范
代码的规范性是指源代码的编写是否遵守了编码规范。

二、示例

下面会提供一个示例性的框架来指导的文档撰写和代码实现

这里仅提供一个概念性的描述以及伪代码示例。

第一次文档 - 设计原则应用

1、题目描述

假设我们要开发一个订单处理系统,该系统用于处理来自客户的订单请求,包括创建订单、支付订单以及取消订单等功能。

2、设计:

(1)优化理由陈述

原有系统的问题在于:

  • 类职责过于集中,单一类承担了过多的责任,违反了单一职责原则(SRP)。
  • 类之间耦合度高,修改一处可能影响其他多处,违反了开闭原则(OCP)。
  • 难以扩展新功能,如增加新的支付方式,这体现了里氏替换原则(LSP)没有得到良好遵循。
(2)类图

【这里应该插入一个类图,展示原始设计以及优化后的设计。原始设计中可能会有一个Order类负责所有操作,而优化后的设计中会有多个类,如Order, OrderService, PaymentService等,每个类负责一部分功能。】

(3)实现代码

原始代码:

public class Order {public void createOrder() { ... }public void payOrder() { ... }public void cancelOrder() { ... }
}

优化后的代码:

// Order类专注于订单数据
public class Order {private String orderId;// 其他属性...
}// OrderService类处理订单逻辑
public class OrderService {public void createOrder(Order order) { ... }public void cancelOrder(Order order) { ... }
}// PaymentService类处理支付逻辑
public class PaymentService {public void payOrder(Order order) { ... }
}

第二次文档 - 设计模式应用

1、题目描述

继续上面的订单处理系统,我们希望进一步优化代码结构,使得系统更加灵活和易于维护。

2、设计:

(1) 优化理由陈述

现有系统的问题在于:

  • 当添加新的支付方式时,需要修改PaymentService类,违反了开闭原则(OCP)。
  • 创建订单时需要一系列复杂的初始化步骤,这使得createOrder方法变得庞大且难以管理。

我们考虑引入工厂模式(Factory Pattern)来创建不同类型的Order实例,以及策略模式(Strategy Pattern)来处理不同的支付策略。

(2)类图

【这里应该插入一个类图,展示优化后的设计。例如OrderFactory类用于创建Order实例,PaymentStrategy接口定义支付策略,ConcretePaymentStrategy类实现具体的支付策略】

(3)实现代码
// OrderFactory类
public class OrderFactory {public Order createOrder(OrderType type) { ... }
}// PaymentStrategy接口
public interface PaymentStrategy {void pay(Order order);
}// ConcretePaymentStrategy类
public class CreditCardPayment implements PaymentStrategy {public void pay(Order order) { ... }
}public class PayPalPayment implements PaymentStrategy {public void pay(Order order) { ... }
}// OrderService类使用策略模式
public class OrderService {private PaymentStrategy paymentStrategy;public void setPaymentStrategy(PaymentStrategy strategy) {this.paymentStrategy = strategy;}public void processOrder(Order order) {// 使用策略模式处理支付paymentStrategy.pay(order);}
}

可以根据上述指导来完成具体实现,并确保遵循标准中的各项要求。也可以点击下方链接获取更多

三、源码获取:

主页私信:面向对象、三级项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/883234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础之循环语句

在Python的编程世界里&#xff0c;循环结构犹如一把神奇的钥匙&#xff0c;开启高效处理数据和重复执行任务的大门。它赋予程序员强大的力量&#xff0c;让代码充满活力。Python主要有两种类型的循环语句&#xff1a;for循环和while循环。 一、for循环 for循环通常用于遍历一个…

Redis学习文档(常见面试题)

什么是Redis&#xff1f; Redis本质上是一个Key-Value类型的内存数据库&#xff0c;很像memcached&#xff0c;整个数据库统统加 载在内存当中进行操作&#xff0c;定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是 纯内存操作&#xff0c;Redis的性能非常出色&…

深入探讨 Linux 命令行中的筛选方法与技巧

深入探讨 Linux 命令行中的筛选方法与技巧 1. 筛选命令概述2. 结合筛选的基本方法awk 筛选方法grep 筛选方法find 筛选方法 3. awk、grep 和 find 筛选参数解析4. awk、grep 和 find 的实用场景5. 如何将筛选逻辑应用到其他命令5. 高级组合技巧 在 Linux/Unix 系统中&#xff0…

【虚幻引擎UE】UE5 音频共振特效制作

UE5 音频共振特效制作 一、基础准备1.插件准备2.音源准备 二、创建共感NRT解析器和设置1.解析器选择依据2. 创建解析器3. 创建解析器设置&#xff08;和2匹配&#xff09;4.共感NRT解析器设置参数调整5.为共感NRT解析器关联要解析的音频和相应设置 三、蓝图控制1.创建Actor及静…

短剧AI突围战,百度跑偏了

“ 百度短剧的Agent对话功能并不属于颠覆性创新&#xff0c;只是新插件&#xff0c;对短剧行业市场格局影响不大&#xff0c;最多只能算用户痒点。 ” 转载&#xff1a;科技新知 原创 作者丨晓伊 编辑丨蕨影 你是否有过这样的体验&#xff1f; 刷短剧时&#xff0c;因剧情曲…

解决运行jar错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序

报错 众所周知jdk8以上都没有Javafx java -jar target/myyscan-1.0-SNAPSHOT.jar 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序解决 https://gluonhq.com/products/javafx/ 去下载/javafx/到本地&#xff0c;选择自己的型号 然后记得指定路径 java --m…

TPLCM柔性屏自动化贴合应用

在当前的显示屏制造领域&#xff0c;TP&LCM贴合技术是推动产品升级和满足市场需求的关键环节。随着技术的不断进步&#xff0c;全贴合技术因其卓越的显示效果和用户体验&#xff0c;逐渐成为中高端产品的标配。然而&#xff0c;这一技术的高精度要求和复杂工艺也带来了诸多…

【C++ 算法进阶】算法提升七

目录 正数数组中那两个数&结果最大 &#xff08;贪心&#xff09;题目题目分析代码详解 最小相机覆盖问题 &#xff08;二叉树递归套路&#xff09;题目题目分析代码详解 拼接字符串 &#xff08;动态规划 前缀树&#xff09;题目题目分析代码详解 正数数组中那两个数&…

SpringBoot实现 License 认证(只校验有效期)

文章目录 一、License介绍二、授权者生成密钥对三、授权者生成license.lic证书3.1、 配置pom.xml3.2 、License生成类3.3 、License生成类需要的参数类3.4、自定义KeyStoreParam3.5、main方法生成license.lic注意事项 四、使用者配置4.1、配置pom.xml4.2、License校验类4.3、Li…

室内地图制作-电子地图管理系统源代码公开-室内地图 开源-SDK调用指南(二)

一、室内外电子地图可视化制图项目需求 室内外地图开发需满足开发者可以在Android、iOs、web应用中加入地图相关的功能&#xff0c;包括&#xff1a;地图展示、地图交互、在地图上绘制路线、POI点、搜索、AR导航、蓝牙点位、离线地图等功能。 在开源室内地图编辑-电子地图管理…

Docker安装Mysql5.7,解决无法访问DockerHub问题

Docker安装Mysql5.7&#xff0c;解决无法访问DockerHub问题 简介 Docker Hub 无法访问&#xff0c;应用安装失败&#xff0c;镜像拉取超时的解决方案。 摘要 &#xff1a; 当 Docker Hub 无法访问时&#xff0c;可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的…

Apple Vision Pro市场表现分析:IDC最新数据揭示的真相

随着AR/VR技术逐渐成熟并被更多消费者接受,2024年第二季度(Q2)成为这一领域的一个重要转折点。根据国际数据公司(IDC)发布的最新报告,整个AR/VR市场在本季度经历了显著的增长。接下来,我们将深入探讨Apple Vision Pro在这股增长浪潮中的具体表现。 市场背景 2024年Q2,…

第五届光学与图像处理国际学术会议(ICOIP 2025)征稿中版面有限!

第五届光学与图像处理国际学术会议&#xff08;ICOIP 2025&#xff09; 2025 5th International Conference on Optics and Image Processing (ICOIP 2025&#xff09; 重要信息 时间地点&#xff1a;2025年4月25-27日丨中国西安 截稿日期&#xff1a;2024年12月16日23:59 …

k8s和ipvs、lvs、ipvsadm,iptables,底层梳理,具体是如何实现的

计算节点的功能&#xff1a; 提供容器运行的环境 kube-proxy的主要功能&#xff1a; 术业有专攻&#xff0c; kube-proxy的主要功能可以概括为4个字 网络规则 那么kube-proxy自己其实是个daemonset控制器跑的 每个节点上都有个的pod 它负责网络规则 其实呢 它还是个小…

vue3中watch的用法以及使用场景以及与watchEffect的使用对比

在 Vue 3 中&#xff0c;watch 和 watchEffect 是响应式系统的重要工具&#xff0c;帮助开发者监听数据变化并执行副作用操作。为了让你更好地理解 watch 和 watchEffect 的用法及其区别&#xff0c;这里将详细解释它们的使用方式、适用场景以及它们在基本类型和引用类型上的监…

maven本地打jar包依赖

本地工程的pom文件中引入了mysql依赖&#xff0c;但是在maven库中没有拉下来&#xff0c;可以到mysql官网下载jar包&#xff0c;使用maven手动打包到本地仓库中&#xff1a; 官网地址&#xff1a;MySQL :: Download MySQL Connector/J (Archived Versions) 在jar包所在位置的路…

06_Linux 文件权限与管理命令

系列文章导航&#xff1a;01_Linux基础操作CentOS7学习笔记-CSDN博客 文章目录 Linux 文件权限与管理命令一、Linux 文件类型二、用户/组管理用户相关文件用户信息解析用户密码管理&#xff1a;shadow 阴影文件解析用户管理命令1. **useradd**&#xff1a;添加新用户2. **user…

揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器

目录 &#x1f680;0.前言 &#x1f688;1.string 构造函数 &#x1f69d;1.1string构造函数 &#x1f69d;1.2string拷贝构造函数 &#x1f688;2.string类的使用 &#x1f69d;2.1.查询元素个数或空间 返回字符串中有效字符的个数&#xff1a;size lenth 返回字符串目…

JavaScript 中如何实现函数缓存

在JavaScript中&#xff0c;函数缓存是一种优化技术&#xff0c;它通过将函数的计算结果存储起来&#xff0c;以避免在后续调用中重复计算相同的值。这特别适用于那些计算成本高昂且输入参数有限的函数。以下是实现函数缓存的几种常见方法&#xff1a; 1. 使用对象作为缓存 这…

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面&#xff0c;成为Science、Nature论文的…