编程范式(二):面向对象编程

简介: 编程范式(二):面向对象编程

背景介绍


上一篇文章我们一起粗略了解了三种编程范式,并一起学习了结构化编程,这一篇文章我们就一起学习面向对象编程吧~


《架构整洁之道》系列:



面向对象编程


网络异常,图片无法展示
|


什么是面向对象编程?


有些人在回答这个问题的时候,往往会搬出一些神秘的词语,譬如封装继承多态。其隐含意思就是说面向对象编程是这三顶的有机组合,或者任何一种支持面向对象的编程语言必须支持这三个特性。


那么接下来逐个分析这三个特性~


封装


由于面向对象编程语言为我们方便而有效地封装数据和函数提供了有力的支持,导致封装这个概念经常被引用为面向对象编程定义的一部分。通过采用封装特性,我们可以把一组相关联的数据和函数圈起来,使圈外面的代码只能看见部分函数,数据则完全不可见。譬如,在实际应用中,类(class)中的公共函数和私有成员变量就是这样。


这个特性其实并不是面向对象编程所独有的。其实,C 语言也支持完整的封装。比如在头文件中进行数据结构以及函数定义的前置声明(forward declare),然后在程序文件中具体实现。程序文件中的具体实现细节对使用者来说是不可见的。


面向对象编程在应用上确实会要求程序员尽量避免破坏数据的封装性。但实际情况是,那些声称自己提供面向对象编程支持的编程语言,相对于 C 这种完美封装的语言而言,其封装性都被削弱了,而不是加强了。


继承


继承的主要作用是让我们可以在某个作用域内对外部定义的某一组变量与函数进行覆盖


但是,早在面向对象编程语言被发明之前,对继承性的支持就己经存在很久了,但是并不像如今的继承这样便利易用。


面向对象编程在继承性方面并没有开创出新,但是的确在数据结构的伪装性上提供了相当程度的便利性。


面向对象编程在封装性上得 0 分,在继承性上勉强可以得 0.5 分(满分为 1)。


多态


归根结底,多态其实不过就是函数指针的一种应用。自从 20 世纪 40 年代末期冯·诺依曼架构诞生那天起,程序员们就一直在使用函数指针模拟多态了。也就是说,面向对象编程在多态方面没有提出任何新概念。


所以,面向对象的三个特性没有一个是它独创的。


当然了,面向对象编程语言虽然在多态上并没有理论创新,但它们也确实让多态变得更安全、更便于使用了。用函数指针显式实现多态的问题就在于函数指针的危险性。毕竟,函数指针的调用依赖于一系列需要人为遵守的约定。程序员必须严格按照固定约定来初始化函数指针,并同样严格地按照约定来调用这些指针。只要有一个程序员没有遵守这些约定,整个程序就会产生极其难以跟踪和消除的 Bug。


面向对象编程语言为我们消除了人工遵守这些约定的必要,也就等于消除了这方面的危险性。采用面向对象编程语言让多态实现变得非常简单,让一个传统 C 程序员可以去做以前不敢想的事情。 综上所述,我们认为面向对象编程其实是对程序间接控制权的转移进行了约束。


结束语


网络异常,图片无法展示
|


面向对象编程到底是什么?业界在这个问题上存在着很多不同的说法和意见。


然而对一个软件架构师来说,其含义应该是非常明确的:面向对象编程就是以多态为手段来对源代码中的依赖关系进行控制的能力,这种能力让软件架构师可以构建出某种插件式架构,让高层策略性组件与底层实现性组件相分离,底层组件可以被编译成插件,实现独立于高层组件的开发和部署。


《架构整洁之道》中的面向对象编程讲的部分内容不理解,后续面向对象将参考更多文献进行输出


最后


✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

少年向来不识天高地厚
放眼处皆自负才高八斗
虽是自命风流
倒也坦诚无忧
我爱这样的少年
谦和而狂妄
骄傲又坦然☀️

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

相关文章
|
负载均衡 算法 应用服务中间件
Nginx入门 -- 理解 Nginx 的请求处理流程
Nginx入门 -- 理解 Nginx 的请求处理流程
790 1
|
XML JavaScript 前端开发
JavaWeb基础4——HTML,JavaScript&CSS
HTML,JavaScript&CSS、元素、标签、css 选择器、属性、JavaScript基础语法、JavaScript对象、BOM浏览器对象模型、DOM文档对象模型、事件监听、正则对象RegExp/ES6
JavaWeb基础4——HTML,JavaScript&CSS
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
Java 中间件 Serverless
Serverless 应用引擎操作报错合集之在阿里函数计算中,云函数怎么一直报错Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'php server.php '.如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
356 2
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
233 1
|
网络安全 Docker 容器
modelscope-funasr部署后,但是无法通过html链接,是为什么呀?
在虚拟机上成功部署了Docker化的modelscope-funasr服务,日志显示初始化正常。防火墙已关闭,但尝试通过HTML页面访问时连接失败。
|
SQL 存储 数据可视化
sql学习数据库
SQL(Structured Query Language)是用于管理关系型数据库的标准编程语言。学习SQL数据库涉及理解数据库的基本概念、SQL语言的组成以及如何使用SQL进行数据的查询、操作和处理
1584 0
|
安全 编译器 程序员
【C++ 11 模板和泛型编程的应用以及限制】C++11 模板与泛型深度解析:从基础到未来展望
【C++ 11 模板和泛型编程的应用以及限制】C++11 模板与泛型深度解析:从基础到未来展望
312 1