【设计】OOA、OOD、OOP

news2025/1/19 23:10:26

这三者都是 OO(Object-Oriented)领域的思想。
一般我们我们接到产品经理的需求后,开发阶段分这样几个步骤:

  1. 可行性预研阶段,此阶段评估需求是否合理,能否实现;
  2. OOA阶段,此阶段分析用例,定义领域模型;
  3. OOD阶段,此阶段定义类图,类之间的交互图(时序图等);
  4. OOP阶段,根据OOD设计的类图,类之间的交互图输出代码。

那么除了可行性预研阶段,其他三个阶段都是需求开发的重要步骤。
1669638514559-af822c23-b9db-4d80-8696-f32b865f1494.png

OOA

OOA,Object-Oriented Analysis,面向对象分析。此过程是把现实的需求转义为领域模型(Domain Model)问题,以及输出领域模型(Domain Model)。
OOA 的主要流程也有既定的一些步骤:

  1. 根据需求输出用例,用例为所有的使用场景,主要为用户与应用的交互
  2. 根据用例输出领域模型(Domian Model),领域模型(Domain Model)也就是常说的业务逻辑。这时候会输出概念类,概念类的交互关系,这些概念类一般是系统的直接映射。

在 OOA 中,考验的是程序员的分析能力。拥有 OOA 能力的人,能抽象出更全面,更能准确复用的系统设计。

OOD

OOD 全拼为 Object-Oriented Design,面向对象设计。
此过程是把我们的领域模型转为逻辑架构,类图,类之间的关系。 如何分层,如何分包,如何保证高内聚低耦合都是这部分要考虑的问题。这个阶段输出类图,时序图,模块图等。

OOP

OOP 全程为 Object-Oriented Programming,面向对象编程。是将 OOD 的设计结果转为面向对象编码的过程。
在这一个步骤中,我们要非常注重 OOP 的思想。
OOP 思想指的是面向对象编程,面向对象强调对象的抽象,还有“封装”、“继承”、“多态”,相比面向过程该思想专注于通过对象的一些方法去解决问题,不同的功能可能由不同的对象来负责解决。
面向对象思想中,主要需要注意下面这些原则:

  • **开闭原则(Open Close Principle)**开闭原则的意思是:对扩展开放,对修改关闭。
  • **里氏代换原则(Liskov Substitution Principle)**任何基类可以出现的地方,子类一定可以出现。
  • **依赖倒转原则(Dependence Inversion Principle)**针对接口编程,依赖于抽象而不依赖于具体。
  • **接口隔离原则(Interface Segregation Principle)**使用多个隔离的接口,比使用单个接口要好。
  • **迪米特法则,又称最少知道原则(Demeter Principle)**一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
  • **合成复用原则(Composite Reuse Principle)**尽量使用合成/聚合的方式,而不是使用继承。

总结

OOA,OOD,OOP 是针对现实的需求最终输出产品过程。在现实中 OOA,OOD 并没有显著的区分。OOA,OOD,OOP 有时是不断的交替进行。
对于现在的软件开发中,大部分迅速敏捷至极的项目,基本上是不会输出相关的开发设计图资源的,而是直接进入到 OOP 的阶段。直接进入 OOP 阶段,缺乏足够的 OOA 以及 OOD 过程,那么就会对 OOP 阶段的代码质量造成影响。
这里也并不是说有了 OOA 和 OOD,系统的质量就一定好;而是有了 OOA 和 OOD,可以输出更符合标注和规范的 OOP 代码,完成更出色的系统设计。

参考文档:

https://juejin.cn/post/6890063876163911693

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

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

相关文章

【Lilishop商城】No2-5.确定软件架构搭建四(本篇包括消息中间件RocketMQ)

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇只介绍重点架构逻辑,具体编写看源代码就行,读起来也不复杂~ 谨慎&#xff…

Python:如何在 CentOS 8 服务器上运行 Selenium 代码?

前言 因项目需求,需要在 CentOS 8 服务器上运行 Python-Selenium 代码,那么该如何操作呢? 运行环境 CentOS Stream 8Python 3.9.13selenium4.6.0Google Chrome 107.0.5304.121 操作步骤 安装 Google Chrome 下载 Linux 版本的 Chrome 将下…

怎么合并视频?快把这些方法收好

小伙伴们平时会在通过网课来提高自己的技能吗?我经常会在网上保存一系列的视频进行学习,可是当保存的网课视频数量多起来后,每次想要找对应的视频,都得花上不少的时间。其实我们可以通过将相同系列的视频合并起来的方法&#xff0…

java word,excel,ppt转pdf

准备工作 1.下载 jacob.jar 链接:https://pan.baidu.com/s/1TWIGyX9A3xQ6AG9Y3mVlVg 提取码:abcd 2.下载安装wpsWPS Office-支持多人在线编辑多种文档格式_WPS官方网站 3.添加 jar到项目和ddl文件放在jdk的jre/bin目录下,记得自己系统是…

13_cgi

知识点1【cgi实现计算器案例】 2、GET的同步方式&#xff1a; index.html <html><head><title>table</title><meta charset"UTF-8"><!--这是描述 js中的函数来之哪个js文件--><script type"text/javascript" sr…

Kafka基础与核心概念

本文&#xff0c;我们将试图回答什么是apache kafka。 kafka是一个分布式流平台或者分布式消息提交日志 分布式 Kafka 由一个或多个节点组成的工作集群&#xff0c;这些节点可以位于不同的数据中心&#xff0c;我们可以在 Kafka 集群的不同节点之间分布数据/负载&#xff0c;并…

【学习笔记47】开关变量和拖拽效果

一、开关案例 <button>点击获取验证码</button>&#xff08;一&#xff09;基本功能的实现 // 获取标签对象const oBtn document.querySelector(button);// 给按钮添加点击事件oBtn.addEventListener(click, function () {// 定义变量 用于获取验证码let count 5…

javaSE- 方法的使用

一、方法的基本用法 方法就是一个代码片段. 类似于 C 语言中的 “函数”. 方法存在的意义(不要背, 重在体会): 是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置使用.让代码更好理解更简单.直接调用现有方法开发, 不必重复造轮…

04_SpringBoot整合Mybatis

文章目录SpringBoot整合Mybatis0x01_创建项目导入依赖0x02_编写配置文件0x03_编写功能代码SpringBoot整合Mybatis 欢迎关注公众号“小东方不败” 0x01_创建项目导入依赖 创建项目&#xff1a; 目前稳定的最新版本是2.7.5,勾选两个依赖&#xff1a;Lombok和Spring Web 然后需…

Nodejs -- Express 路由原理及设置模块化路由

文章目录1. 路由的概念1.1 什么是路由1.2 显示生活中的路由1.3 Express中的路由1.4 Express中路由的例子1.5 路由的匹配过程2 路由的使用2.1 最简单的用法2.2 模块化路由2.3 为路由模块添加统一前缀1. 路由的概念 1.1 什么是路由 广义上来讲&#xff0c;路由就是映射关系 1.…

yarn : 无法加载文件 C:\Users\sunlight\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。

问题&#xff1a; yarn安装好了&#xff0c;vscode报错 报错问题&#xff1a;yarn 无法加载文件 C:\Users\sunlight\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本。 具体问题&#xff1a;cmd&#xff08;管理员运行&#xff09;中安装好了yarn &…

Angular使用管道和指令进行多语言切换

工作中经常遇到需要进行多种语言切换的项目。本文记录了一种在Angular页面中通过使用管道和自定义指令实现的语言切换方案。 1、实现效果 页面显示文字根据选择的语言自动进行翻译切换&#xff0c;如下图所示&#xff1a; 此时&#xff0c;页面模板的字符串全部按照管道格式书…

2023年IB生物有什么变化?

今天我们详细了解下2023年IBDP生物新课程内容、考试评估、内容、技能发展、科学本质等详细内容。IBDP生物新课程概述 IBDP新生物课程将于2023年2月开课&#xff0c;2023年8月首次授课&#xff0c;2025年5月进行首次考试。新课程反映社会变革&#xff0c;更加关注技能和概念、背…

【iMessage苹果推群发】苹果相册推archive到appstore开发证书(Development certificate)

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

DCHP通讯协议

从通讯TCP/IP的构成传输&#xff0c;到IP地址的分类&#xff0c;再到局域网与广域网的设置。 通讯协议的构成概述IPDHCP-设定动态IPDNS数据的流动广域网 网关局域网 交换机NAT桥接模式实操概述 前景知识&#xff1a;虚拟机与工艺库管理 扩展&#xff1a;NAT模式的实操。 1、T…

yolov5量化注意事项

&#xff08;1&#xff09;使用onnxsim 0.4.1版本、ort版本1.13.1 否则使用--dynamic True时所生成的onnx就会乱掉。 &#xff08;2&#xff09;利用trtexec生成engine 所使用的命令如下&#xff1a; trtexec.exe --onnxyolov5n_ptq_detect_dynamic.onnx --saveEngineptq_int…

小白学流程引擎-FLowable(二) — 从零搭建自己的FLowable服务 — 搭建流程服务-FLowable的新手指南

一、介绍 纵览Gitee搜索Flowable开源项目&#xff0c;大多都是已开发好的项目&#xff0c;而笔者从零开始搭建属于自己的Flowable引擎&#xff0c;并且是可以拿到生产上使用的。 二、软件架构 Springboot Flowable modeler idm Mysql SrpingBoot version&#xff1a;2.7…

牛客网verilog刷题知识点盘点(75道题的版本)

牛客网verilog刷题知识点盘点(75道题的版本) 还有几个坑没填 任务和函数 1.任务和函数必须在模块内定义&#xff0c;其作用范围仅适用于该模块&#xff0c;可以在模块内多次调用。 2.任务和函数中可以声明局部变量&#xff0c;如寄存器&#xff0c;时间&#xff0c;整数&…

企业云工如何高效居家协同办公?试试这个方法

近日的疫情反扑让全国各地的防疫压力增加&#xff0c;并且甚至很多地方不知道的啥时候就要被居家隔离&#xff0c;所以在新的防疫背景下&#xff0c;居家就顺理成章地成为一种常态化的学习和工作方式。 现在越来越多公司也将日常业务搬到了线上&#xff0c;以保证疫情期间公司的…

基于ssm的旅游网站的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…