我还是有点不理解面向对象比面向过程的可维护性强,强在哪
儿了。用面向过程,在service里做一些操作。面向对象,在对象里做操作,然后在领域服务里在调用对象的各种操作。要是需求变了,面向过程就是在
service里改,面向对象就要改对象里的操作。看不出强在哪儿了。谁能解释解释……
-------------------------------------------------------------------------------------------------------------------------------
对象将需求用类一个个隔开,就象用储物箱把东西一个个封装
起来一样,需求变了,分几种情况,最严重的是大变,那么每个储物箱都要打开改,这种方法就不见得有好处;但是这种情况发生概率比较小,大部分需求变化都是
局限在一两个储物柜中,那么我们只要打开这两个储物柜修改就可以,不会影响其他储物柜了。
而面向过程是把所有东西都放在一个大储物柜中,修改某个部分以后,会引起其他部分不稳定,一个BUG修复,引发新的无数BUG,最后程序员陷入焦头烂额,如日本东京电力公司员工处理核危机一样,心力交瘁啊。
所以,我们不能粗粒度看需求变,认为需求变了,就是大范围变,万事万物都有边界,老子说,无欲观其缴,什么事物都要观察其边界,虽然需求可以用“需求”这个名词表达,谈到需求变了,不都意味着最大边界范围的变化,这样看问题容易走极端。
-----------------------------------------------------------------------------------------------------------------------------------
其实就是就地画圈圈——边界。我们小时候写作文分老三段也是同样道理,各自职责明确,划分边界明确,通过过渡句实现承上启下——接口。为什么组织需要分不同部门,同样是边界思维。画圈圈容易,但如何画才难,所以OO
中思维非常重要。
需求变化所引起的变化是有边界,若果变化的边界等于整个领域,那么已经是完全不同的项目了。要掌握边界,是需要大量的领域知识的。否则,走进银行连业务职责都分不清的,如何画圈圈呢?
面
向过程是无边界一词的(就算有也只是最大的边界),它没有要求各自独立,它可以横跨边界进行调用,这就是容易引起BUG的原因,引起BUG不一定是技术错
误,更多的是逻辑错误。分别封装就是画圈圈了,所有边界都以接口实现。不用改或者小改接口,都不会牵一发动全身。若果面向过程中考虑边界,那么也就已经上
升到OO
思维,即使用的不是对象语言,但对象已经隐含其中。
----------------------------------------------------------------------------------------------------------------------------------
面向对象的实质就是边界划分,封装,不但对需求变化能够量化,缩小影响面;因为边界划分也会限制出错的影响范围,所以OO
对软件后期BUG等出错也有好处。
软件世界永远都有BUG,BUG是清除不干净的,就像人类世界永远都存在不完美和阴暗面,问题关键是:上帝用空间和时间的边界把人类世界痛苦灾难等不完美局限在一个范围内;而软件世界如果你不采取OO
等方法进行边界划分的话,一旦出错,追查起来情况会有多糟呢?
软件世界其实类似人类现实世界,有时出问题了,探究原因一看,原来是两个看上去毫无联系的因素导致的,古人只好经常求神拜佛,我们程序员在自己的软件上线运行时,大概心里也在求神拜佛别出大纰漏,如果我们的软件采取OO
封装,我们就会坦然些,肯定会出错,但是我们已经预先划定好边界,所以,不会产生严重后果,甚至也不会出现难以追查的魔鬼BUG。
--------------------------------------------------------------------------------------------------------------------------------
分享到:
相关推荐
《VC面向对象开发分析与设计实例解析》 面向对象编程(OOP)是现代软件开发的核心思想,它以对象为中心,通过封装、继承和多态等机制,提高了代码的复用性和可维护性。在VC++环境下,利用面向对象的方法进行开发,...
载人电梯都是微机控制的智能化、自动化设备,不需要专门的人员来操作驾驶,普通乘客只要按下列程序乘坐和操作电梯即可。 i) 在乘梯楼层电梯入口处,根据自己上行或下行的需要,按向上或向下的箭头按钮,只要按钮上的...
这个系统包含了对可租车辆和已租车辆的管理,同时也利用了面向对象编程的特性来提高代码的可维护性和可扩展性。面向对象编程的三大特征——封装、继承和多态,在此系统中得到了广泛应用。 首先,我们要理解什么是...
2. 组件化设计:利用C++的面向对象特性,可以将系统划分为多个独立组件,如视频采集类、存储管理类、网络通信类等,便于维护和扩展。 3. 系统集成:C++可以与其他语言(如C、Python等)无缝对接,方便整合第三方库或...
CAPL是一种面向对象的编程语言,允许用户自定义测试序列、数据处理逻辑和事件响应,从而实现对车载总线的全面测试。通过CAPL,可以创建复杂的测试场景,模拟真实的行车环境,包括多ECU交互、错误帧检测、网络管理等...
C++因为其高效性、面向对象特性以及丰富的库支持,常被用于车载系统的开发。它可以方便地实现复杂的数据结构和算法,同时保证程序的运行效率。 总之,这个“GPS--data.zip_gps 编码_车载”项目涵盖了GPS数据的解析...
开发者可以利用VC++的MFC框架设计出直观易用的用户界面,同时结合C++的面向对象特性,编写出高效且可维护的业务逻辑代码。 其次,数据库管理是仓库系统的核心。本系统选择了SQL Server作为后端数据库,这是一款由...
- **JAVA**: 是一种广泛使用的面向对象编程语言,因其平台无关性和强大的功能,在企业级应用开发中占据重要地位。 - **UNI-APP**: 是一种使用Vue.js开发所有前端应用的框架,支持一次开发,多端部署,能够显著提高...
在该方案中,作者使用随机几何理论计算卸载节点的覆盖概率,从而实现车辆节点与卸载对象的预配对。随机几何理论是分析无线通信覆盖概率的一个有力工具,可以用于预测信号覆盖范围和概率,进而影响车辆与卸载节点之间...
针对C++语言绑定,AUTOSAR元模型接口描述中定义的服务提供了面向对象的映射。生成器会生成C++类,这些类包含了每个服务的字段、事件和方法的类型安全表示。服务实现端的生成类被命名为服务提供者骨架,而在客户端,...
通过此项目,我们可以强化对Java编程语言的理解,尤其是面向对象设计、多线程、事件驱动编程以及数据结构与算法的应用。 首先,我们需要定义电梯类(Elevator),它将包含电梯的状态(如当前楼层、目标楼层、运行...
源码中可能会包含多个模块,如连接管理、数据传输、UI渲染等,每个模块都有明确的职责划分,遵循面向对象的设计原则。 2. **连接管理**:这部分代码处理设备之间的连接,可能是通过蓝牙或USB。它负责识别CarPlay...
在C++中,面向对象编程(OOP)为我们提供了类和对象的概念,可以更好地组织和管理代码。"frighten6od"可能是这个库的一个特定模块或组件,它可能包含了实现动态装卸载的关键算法和逻辑。在VC(Visual C++)环境下,...
程序的核心在于VB6编程环境,这是一个经典的面向对象的编程工具,它提供了丰富的API调用来与Windows系统进行交互。在“googlePYclean.exe”中,开发者可能使用了如`FindWindow`、`EnumWindows`和`ShowWindow`等API...
- Local proxy使用:在面向对象设计中,代理模式是一种常用的软件设计模式,用于提供对象的替代或代理。文档可能描述了如何在本地环境下使用代理以解决特定的设计问题。 6. 版权与免责声明: 文档中提到了版权声明...
* Qt 是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt 很容易扩展,并且允许真正地组件编程。 知识点五: 基于 Python 和 Qt 的车载客信息系统设备状态检测平台的设计和实现 * 该检测平台使用多线程网络...
C#支持面向对象编程,拥有丰富的类库,能快速实现功能模块的构建。 2. **嵌入式开发**:WinCe作为嵌入式系统,开发者需要关注内存管理、硬件驱动开发和系统优化。在铁路列尾测试中,可能涉及到与特定硬件设备的交互...
2. **C#编程**:C#是Microsoft公司推出的一种面向对象的编程语言,具有类型安全、性能高效、跨平台等特点。在本系统中,C#用于编写应用程序的主逻辑,包括RFID数据的读取、处理和响应,以及用户界面的交互设计。...
- **教学目的**:本课程设计旨在让学生综合运用所学过的C++知识进行实际程序设计实践,加深对面向对象编程的理解与掌握。 - **教学要求**: - 使用C++编写简单程序,确保算法正确性以及良好的容错能力。 - 完成从...
描述中的"一个简单的C#写的can工具"表明,该工具是用C#语言编写的,这是一种面向对象的、现代的编程语言,特别适合于开发Windows平台的应用程序。由于C#拥有丰富的类库和强大的性能,因此它成为开发CAN工具的理想...