04面向对象篇(D5_Thinking(D1_Thinking - 思考))

news/2024/12/15 23:29:45/

目录

一、为什么要谈论OOA、OOD、OOP?

二、你知道OOA、OOD、OOD对软件工程师的重要性?

三、DDD、OOA、OOD、OOP和OOT到底有什么区别和联系?


一、为什么要谈论OOA、OOD、OOP?

OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程),这3个概念,对于我们JAVA程序员来

讲,或多或少应该都有所了解,或者说至少都听说过。但是要谈到对其理解,可能对于多数入行不深的从业者来

说,确实不是那么容易做到。

特别是对于绝大多数的3年以内的低中级软件工程师而言。

因为他们的工作更多是需要按照项目经理分配的任务来编写功能代码,很少有多余的时间去阅读或者思考一些概

念性的东西。说起这个问题,我也在网络上也搜索过很多的资料,大多摘录至书籍,比较官方化。让初学者无从

理解。

为了广大的新从业者或者应聘者,在这里,我们需要以一种实例的方式来对这3个概念进行重新的阐述:

  • OOA面向对象分析(Object-Oriented Analysis)
  • OOD面向对象设计(Object-Oriented Design)
  • OOP面向对象编程(Object Oriented Programming)

二、你知道OOA、OOD、OOD对软件工程师的重要性?

OOA,OOD,OOP是针对现实的需求最终输出产品过程。

在现实中OOA,OOD并没有显著的区分。OOA,OOD,OOP有时是不断的交替进行。

较为好理解的是,面向对象分析的结果可以作为开始面向对象设计的模型,面向对象的设计结果可以作为

蓝图,利用面向对象编程方法最终实现一个系统。

三、DDD、OOA、OOD、OOP和OOT到底有什么区别和联系?

其实很简单。

带OO的是相对更传统的系统设计方法论,可简称:面向对象设计方法论;

DDD是相对来说目前更加流行的方法论,可称为:领域驱动设计方法论。

OO

OO是面向对象,这个不解释。OOA是面向对象分析,主要指将问题域的现实中对象进行分析建模;OOD

是面向对象设计,主要是将OOA的结果做进一步规范和整理、细化,便于OOP接受;OOP是面向对象编

程,用面向对象的语言来实现OOD;OOT是面向对象测试,进行以对象为中心的软件测试。

有人会将OOA+OOD和DDD做比较,有人会将OOA+OOD+OOP与DDD做比较,我这里又加上了OOT,

原因是DDD没有明确规定所属的阶段,所以与哪些阶段比较都问题不大,主要是OO方法论与DDD方法论

的比较。

拿金融领域的三户模型来举个例子。

三户模型是“客户、用户、账户”的简称。

这种思想围绕着“以客户为中心”来展开:围绕客户建立用户和账户,三者相互关联。

这是一种OOA的表达和思考方式:先有对象,面向对象建模。

向上图一样,初步细化展开的过程是OOD设计过程。

而DDD思维是怎样一个过程呢?

客户描述的是社会域,客户之间要建立联系社交、娱乐等活动;用户描述的业务域,用户要账号注册、使

用A产品、B产品;账户描述的是资金域,资金域又有账号、权限这些子域。

用OO的思想,更注重对象和属性来展开,DDD更偏重领域划分和他们之间的动态关系,同时也偏重行

为。这就是如果一个从互联网公司的一个年轻人,要和传统银行等行业的老人,技术上可能会有点难沟

通。老人可能会更偏重OO视角,年轻人更偏重DDD视角。

在工具选用上,OOD喜欢使用UML工具,用例图、类图、对象图、时序图;DDD喜欢从架构图开始。


http://www.ppmy.cn/news/1555435.html

相关文章

如何在RTTHREAD 的master上获得干净的vscode-clangd体验

在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区 文章目录 在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区简介操作步骤第一步 安装clangd第二步 生成compile_compand.json 文件第三步 执行scons --targetvsc第四步 打开stm32f10…

【Linux-ubuntu通过USB传输程序点亮LED灯】

Linux-ubuntu通过USB传输程序点亮LED灯 一,初始化GPIO配置1.使能时钟2.其他寄存器配置 二,程序编译三,USB传输程序 一,初始化GPIO配置 1.使能时钟 使能就是一个控制信号,用于决定时钟信号是否能够有效的传递或者被使用,就像一个…

EXCEL 数据透视表基础操作

目录 1 选择数据,插入数据透视表 2 选择数据透视表生成位置 3 出现了数据透视表的面板 4 数据透视表的基本结构认识 4.1 交叉表/列联表 4.2 row, column, cell 一个新增的筛选器,就这么简单 4.3 可以只添加 rowcell/值 ,也可以colu…

Github----提交人不是自己

账号用户名都设置对的,但是提交人不是自己 解决 发现是用户名和账号都夹了"号导致 git config --global user.name "Your Name" git config --global user.email "your.emailexample.com"不用引号 git config --global user.name Your Name git …

Ajax编程的五个步骤

Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个页面的情况下与服务器交换数据并更新部分网页的技术。使用Ajax进行编程通常包括以下五个步骤: 1. **创建 XMLHttpRequest 对象**: - 这是进行Ajax请求的基础。…

基于回溯法解决八皇后问题+以位运算方法优化n皇后问题(算法与数据结构期末设计)

文章目录 基于回溯法解决八皇后问题以位运算方法优化n皇后问题1. 八皇后问题问题描述2.回溯法求八皇后(n皇后)问题①由四皇后问题引入②皇后的占位问题③皇后的放置过程④放置过程中的问题⑤回溯算法核心⑥回溯算法的求解过程⑦验证算法和代码实现LeetCo…

AI开源南京分享会回顾录

AI 开源南京分享会,已于2024年11月30日下午在国浩律师(南京)事务所5楼会议厅成功举办。此次活动由 KCC南京、PowerData、RISC-Verse 联合主办,国浩律师(南京)事务所协办。 活动以“开源视角的 AI 对话”为主…

控制反转IoC

什么是控制反转? 控制反转:IoC(Inversion of Control),是一种编程思想。或者叫做一种新型的设计模式。由于出现的比较新,没有被纳入GoF23种设计模式范围内。 反转是什么呢? 反转的是两件事&a…