OO U4 博客

文章目录

  • 正向建模与开发
  • 单元架构设计与追踪关系
    • 单元架构设计
    • 追踪关系
  • 架构设计思维进化
  • 测试思维演进
  • 课程收获

正向建模与开发

在本单元中,我学习了UML这一建模工具。UML具备相当多种类的图,通过先设计UML图再进行开发,能够避免架构的重大调整,提前察觉当前设计存在的问题。

  • 通过状态图,可以清晰地捕捉和表达系统需求,确保我们在开发的时候充分理解需求。
  • 类图有助于系统的详细设计,提供了系统结构的清晰视图,有助于设计模式的应用。
  • 通过顺序图,可以提前设计每个类的生命周期,进一步验证整体设计是否有问题。

在完成UML建模后,便可以进行开发了。通过实现UML图中设计好的各种关系,开发时能够规避大量的设计问题。

单元架构设计与追踪关系

单元架构设计

在本单元中,我为每个书籍可能存在的位置都单独设计了一个类。

  • 借还处:负责处理借还
  • 预约处:处理预约
  • 书架:图书的存储位置
  • 用户:该类存放所有用户的基本信息,每个用户的信息为了方便管理另设一个类,在用户类中实例化来存储数据。
  • 漂流角:处理图书漂流

同时,为了方便每个类之间相互通信,以上所有类均采用单例模式,这样每个类想要调用别的类的方法,只需要获取唯一实例即可。

在具体流程上,我假设每天只有早上会整理图书,在每日早上调用各个类的整理方法,令其整理完毕自身拥有的书籍。因为该方法会在输入结束后不再整理最后剩下的图书,因此需要在程序结束前再次调用每个类的整理方法。

追踪关系

  • 类图与代码设计:在我的代码中,每个类及其属性、方法的设置直接对应类图中类、属性、方法的设置。同时,各个类之间的关系也依照类图设计的关系
  • 顺序图与方法调用:代码中的重要的方法调用和方法执行顺序聚能直接对应到顺序图中对象之间的消息传递和调用顺序。
  • 状态图与状态转换:代码中不同状态之间的转换均能在状态图中找到相对应的内容。

架构设计思维进化

在第一单元中,我虽然对面向对象有一定了解,但是在具体的代码设计中依旧难免落入面向过程的思维。最终,在作业3结束后,我的代码已经膨胀成了一个难以名状之物,打包的jar大小大约是别人的两倍左右。到了作业3的设计,完全就是按倒葫芦起来瓢、程序能跑不要动的状态。

在第二单元中,这次我痛定思痛,采用了一些设计模式来保证架构的合理性。在本单元中,除了影子电梯相关导致代码量暴涨,剩下部分的代码结构在三次作业中依然保有相当的可读性和合理性。

在第三单元中,由于JML的设计,本单元三次作业代码均“循规蹈矩”,在架构上没有什么大的违背JML的改变。也因此,第三单元的架构一直维持良好的可读性。

在第四单元中,得益于UML的正向建模,本单元架构虽然为自行设计,但是保持了较好的可读性。

从第一单元的不可名状,到最后一个单元有较好的可读性,我在四个单元的学习中逐渐磨砺自己的架构设计能力,也掌握了更多的架构设计技巧。

测试思维演进

在第一第二单元中,我采用了设计各种评测机的方法发来完成测试。虽然评测机功能更强,但是更难实现,更容易出bug,往往调试评测机就要消耗相当久的时间。

而在第三第四单元中,我更倾向于使用Junit来完成测试。Junit扎根于Java项目本身,测试起来有更好的灵活度,更容易发现自身的bug。

课程收获

在面向对象课程的学习中,我有诸多收获。首先是工具上,oo让我:

  • 掌握了Java语言
  • 掌握了UML及其建模工具
  • 掌握了git等工具链

其次是思想上,我从OO中学到了:

  • 面向对象的设计思想(当然啦)
  • 代码架构的设计原则
  • 测试的原则

最后,是心理上。从OO中,我学会了按兵不动有些情况下是一种智慧。

无论怎么说,面向对象的课程虽然结束了,但是这16个周的学习经历给我留下了深深的印象。在我将来进入工作以后,或许依然会记得大二下那个被JML折磨的下午。也许那个时候的自己会感谢现在的自己?谁知道呢。面向对象课程到此便告一段落吧。

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

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

相关文章

django学习入门系列之第二点《浏览器能识别的标签4》

文章目录 input类型下拉框多行文本往期回顾 input类型 1&#xff1a;打出后可以在里面编写内容 <!-- 自闭合标签 --> <!-- 默认行内标签 --> <input type"text">placeholder 显示背景 <input type"text" id"txtUser" p…

如何在Spring Boot中实现图片上传至本地和阿里云OSS

在开发Web应用时&#xff0c;处理文件上传是常见的需求之一&#xff0c;尤其是在涉及到图片、视频等多媒体数据时。本文将详细介绍如何使用Spring Boot实现图片上传至本地服务器以及阿里云OSS存储服务&#xff0c;并提供完整的代码示例。 一、上传图片至本地 首先&#xff0c…

逻辑这回事(五)---- 资源优化

基础篇 Memory 避免细碎的RAM。将大的RAM拆分成多个小RAM&#xff0c;并根据地址关断可以优化功耗&#xff0c;但把多个小RAM合成大RAM可以优化面积。Block RAM和分布式RAM合理选择。根据存储容量&#xff0c;对Block RAM和分布式RAM的实现面积和功耗进行评估&#xff0c;选择…

文章MSM_metagenomics(三):Alpha多样性分析

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 本教程使用基于R的函数来估计微生物群落的香农指数和丰富度&#xff0c;使用MetaPhlAn prof…

签约喜报 | Smartbi朋友圈又添新朋友啦~

近期&#xff0c;一系列业界翘楚如国际精密集团、惠达卫浴、华天科技、中国人寿等新老朋友纷纷携手Smartbi&#xff0c;共同探索数据驱动业务的新路径、新思路。 Smartbi数10年专注于商业智能BI与大数据分析软件与服务&#xff0c;为各行各业提供提供一站式商业智能平台&#x…

视频转换器在线哪个好?让视频播放不受格式限制

在日常的视频观看中&#xff0c;我们可能会遇到视频格式与设备不兼容的问题&#xff0c;导致无法顺畅播放。这就像是缺少了播放的钥匙&#xff0c;让人无法享受视频内容。 面对视频格式不兼容的挑战&#xff0c;选择合适的转换工具至关重要。但不用担心&#xff0c;本文将分享…

通义千问2(Qwen2)大语言模型在PAI-QuickStart的微调、评测与部署实践

Qwen2&#xff08;通义千问2&#xff09;是阿里云最近推出的开源大型语言模型系列&#xff0c;相比2月推出的Qwen1.5&#xff0c;Qwen2实现了整体性能的代际飞跃&#xff0c;大幅提升了代码、数学、推理、指令遵循、多语言理解等能力。其中&#xff0c;Qwen2系列包含5个尺寸的预…

LeetCode:2779. 数组的最大美丽值(滑动窗口 Java)

目录 2779. 数组的最大美丽值 题目描述&#xff1a; 实现代码与解析&#xff1a; 滑动窗口 原理思路&#xff1a; 2779. 数组的最大美丽值 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操作中&#xff0c;你可以执行下述指令…

使用 Python 进行测试(2)前进到pytest

总结 pytest一个宝藏框架&#xff0c;减少了我们对测试蔬菜的抗拒&#xff0c;并让测试更有效率。 将上一节的使用unittest编写的测试使用pytest重写&#xff1a; import pytest from the_code_to_test import addpytest.fixture() def setup_and_tear_down():print(This is …

IDEA启动正常debug启动报错

项目场景&#xff1a; 很奇怪的一个问题,项目运行正常,debug启动直接报错,运行不起来 Exception in thread "main" java.lang.ClassNotFoundException: kotlinx.coroutines.debug.AgentPremainat java.net.URLClassLoader.findClass(URLClassLoader.java:382)at ja…

好像也没那么失望!SD3玩起来,Stable Diffusion 3工作流商业及广告设计(附安装包)

今天基于SD3 base 工作流来尝试进行下广告设计&#xff0c;这要是一配上设计文案&#xff0c;视觉感就出来了。下面来看看一些效果展示~ SD3 Medium模型及ComfyUI工作流下载地址&#xff1a;文末领取&#xff01; 1.清凉夏日——西瓜音乐会 提示词&#xff1a; a guitar wi…

协程库——测试、优化

Ubuntu: 2核4G 1 单线程 1.1 原生epoll ab -n 200000 -c 1000 http://192.168.253.138:12345/ Server Software: Server Hostname: 192.168.253.138 Server Port: 12345 Document Path: / Document Length: 496 bytes Concurrenc…

停止游戏中的循环扣血显示

停止游戏中循环扣血并显示的具体实现方式会依赖于你的代码结构和游戏的逻辑。通常情况下&#xff0c;你可以通过以下方式来实现停止循环扣血和显示&#xff1a; 1、问题背景 在使用 Python 代码为游戏开发一个生命值条时&#xff0c;遇到了一个问题。代码使用了循环来减少生命…

Studio One软件最新版下载及详细安装教程

Studio One 6是一款功能丰富、专业级的音乐制作软件&#xff0c;它具备灵活的工作流程和高效的团队协作能力&#xff0c;能帮助用户实现高质量的音乐创作和制作。 智能模板更快的启动&#xff0c;全新的智能模板为你手头的任务提供了必要的工具集&#xff0c;包括基本录制、混音…

【前端】HTML5基础

目录 0 参考1 网页1.1 什么是网页1.2 什么是HTML1.3 网页的形成 2 浏览器2.1 常用的浏览器2.2 浏览器内核 3 Web标准3.1 为什么需要Web标准3.2 Web标准的构成 4 HTML 标签4.1 HTML语法规范4.1.1 基本语法概述4.1.2 标签关系4.1.2.1 包含关系4.1.2.2 并列关系 4.2 HTML基本结构标…

03.VisionMaster 机器视觉 位置修正 工具

VisionMaster 机器视觉 位置修正 工具 官方解释&#xff1a;位置修正是一个辅助定位、修正目标运动偏移、辅助精准定位的工具。可以根据模板匹配结果中的匹配点和匹配框角度建立位置偏移的基准&#xff0c;然后再根据特征匹配结果中的运行点和基准点的相对位置偏移实现ROI检测…

远程医疗服务包含哪些服务内容?

在当今数字化时代&#xff0c;远程医疗服务正在迅速崛起&#xff0c;成为医疗保健领域的一项重要创新。通过远程医疗服务&#xff0c;患者可以足不出户就能获得医疗服务。那么远程医疗究竟能提供哪些服务呢?下面我们就来看看。 1. 远程咨询 远程咨询是远程医疗服务的基础&…

Leetcode 2786. 访问数组中的位置使分数最大(DP 优化)

Leetcode 2786. 访问数组中的位置使分数最大 DP 以每个位置为结尾的序列的分数取决于前方的分数&#xff0c;根据奇偶性计算&#xff0c;取最大值 超时 class Solution {public long maxScore(int[] nums, int x) {int n nums.length;long dp[] new long[n];Arrays.fill(dp…

SQL题——连续问题

目录 1.连续问题的统一思路2.相关题目1285 找到连续区间的开始和结束数字2173 最多连胜的次数1454 活跃用户1225 报告系统状态的连续日期2292 连续两年有3个及以上订单的产品2752 在连续天数上进行了最多交易次数的顾客2474 购买量严格增加的客户3140 连续空余座位II 1.连续问题…

内网安全【2】-域防火墙

1.判断什么时候用代理 2.判断什么时候用隧道 3.判断出网和不出网协议 4.如何使用代理建立节点并连接 5.如何使用隧道技术封装协议上线 6.判断哪些代理或隧道情况选择放弃 代理技术&#xff1a;解决网络通讯不通的问题(利用跳板机建立节点后续操作)&#xff08;网络设置导…