连载:面向对象葵花宝典:思想、技巧与实践(4) - 面向对象是瑞士军刀还是一把锤子?

本文主要是介绍连载:面向对象葵花宝典:思想、技巧与实践(4) - 面向对象是瑞士军刀还是一把锤子?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么要面向对象?

可以说,面向过程和计算机是如影随形的。从计算机诞生之日起,面向过程就是占据着主导地位的思想,即使到了现在,面向过程也是无处不在的,C语言、操作系统、协议栈、驱动系统,都是面向过程的代表。 


那为什么还会有面向对象的诞生并流行呢?当然是面向过程存在某些不足,如果面向过程足够好,谁还费心费力的去搞另外一套呢? 


前面我们提到,面向过程是一种机器的思想,我们以流水线作为类比,那么我们先抛开面向过程,来看看流水线有什么不足。 

举个简单的流水线例子:啤酒生产流水线。啤酒生产流水线分为“洗瓶”,“灌装”,“压盖”,“杀菌”等几个阶段,这些阶段总体上来说对生产一瓶醋是差不多的,但是一条啤酒生产线能够生产醋么?应该是不行的,即使行,估计也要换一些东西,但是换了东西后,又不能生产啤酒了。 

面向过程同样就有流水线的这个缺点,即:流程和原料相对固定,扩展比较麻烦 


对于工业系统来说,流水线的缺点几乎可以微不足道,因为工业化讲究的是效率,而扩展性却不是那么重要,一旦一条生产线建成,至少需要运行几年,甚至运行十几年都有。 

而对于软件系统来说,很难想象一个软件开发完成后,几年都不变,大部分的情况是,软件可能是1年扩展多次,甚至还没有开发完,客户新的需求又来了。 


在软件系统这种环境下,面向过程显得就比较吃力了,每次需求的变更,可能都要将流程的每个步骤、原料、中间产品都进行修改,这样的代价在软件系统中几乎是不可接受的,因为每次修改都需要对全系统改动一次,不但工作量上大大增加,同时风险也是大大增加。 


而面向对象正是为了解决面向过程的这个缺点儿诞生的,因此面向对象其实也不是什么复杂和玄妙的技术,面向对象思想的核心是“可扩展性”! 

注:中文“可扩展性”对应英文有两种解释:extensibility 和 scalability,extensibility指系统需求变化后,能够比较容易的扩展以支持新需求;scalability指系统访问压力增加后,能够通过简单的增加更多硬件设备以支撑访问压力,又翻译为“可伸缩性”。 本文的可扩展性是指extensibility。


面向对象应用范围

能做什么?

既然面向对象思想的核心是“可扩展性”,那么其适用范围就显而易见了:经常变化的地方就是面向对象应用的地方。 

对于软件系统来说,常见的可变的主要集中在客户需求部分,而不变的一般都是属于计算机系统的基础。 

因此,操作系统、数据库、协议(TCP、3GPP等)这些并不适合面向对象大展身手,因为这些基础软件一般都比较稳定(相对稳定,并不是不变)。而对于企业应用、互联网等应用,需求经常变更,功能不断扩展,这正是面向对象大展身手的地方。

 

不能做什么?

下图是一个软件质量属性的全图: 

 

大家可以看到,“可扩展性”只是软件质量属性中很小的一部分,其它的属性都不是面向对象能够解决的。 

明白了面向对象的特点和适用范围,是应用面向对象的关键,经过前面的分析,我们知道,面向对象不是瑞士军刀,而只是一个普通的锤子而已千万不要拿着锤子到处敲!

这篇关于连载:面向对象葵花宝典:思想、技巧与实践(4) - 面向对象是瑞士军刀还是一把锤子?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134969

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

Java 结构化并发Structured Concurrency实践举例

《Java结构化并发StructuredConcurrency实践举例》Java21结构化并发通过作用域和任务句柄统一管理并发生命周期,解决线程泄漏与任务追踪问题,提升代码安全性和可观测性,其核心... 目录一、结构化并发的核心概念与设计目标二、结构化并发的核心组件(一)作用域(Scopes)(二)任务句柄

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

SpringBoot集成WebService(wsdl)实践

《SpringBoot集成WebService(wsdl)实践》文章介绍了SpringBoot项目中通过缓存IWebService接口实现类的泛型入参类型,减少反射调用提升性能的实现方案,包含依赖配置... 目录pom.XML创建入口ApplicationContextUtils.JavaJacksonUt

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4