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

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

背景介绍


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


《架构整洁之道》系列:



面向对象编程


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


什么是面向对象编程?


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


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


封装


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


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


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


继承


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


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


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


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


多态


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


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


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


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


结束语


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


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


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


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


最后


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

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

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

相关文章
|
6月前
|
并行计算 数据处理 UED
探索程序设计范式:面向对象编程与函数式编程之辩
在现代软件开发中,面向对象编程(OOP)和函数式编程(FP)是两种主流的程序设计范式。本文将对它们进行比较和分析,并探讨如何根据项目需求和个人喜好做出选择。无论是OOP的灵活性和可维护性,还是FP的简洁性和并发性,都有其独特的优势。
|
1月前
|
算法 JavaScript 前端开发
程序员需要掌握的 5种编程范式!
本文介绍了编程范式的基本概念及其重要性,详细解析了命令式编程与声明式编程两种主要范式。命令式编程包括面向过程与面向对象编程,强调逐步执行与模块化;声明式编程涵盖函数式、逻辑及响应式编程,注重描述目标而非具体步骤。通过对比各种范式的优缺点及示例代码,帮助读者理解不同场景下的适用性。
25 2
|
1月前
什么叫做 “面向对象” 编程?
本文介绍了面向对象编程(OOP)的概念、核心组件(类和对象)、三大特性(封装、继承和多态)以及六大设计原则,强调了面向对象编程在提高代码的可重用性、模块化、扩展性和维护性方面的优点。
36 1
|
5月前
|
算法 编译器 C语言
C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)
C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)
64 3
|
4月前
|
Java C++ iOS开发
|
6月前
|
大数据 开发者
探索编程范式:面向对象与函数式的抉择
在当今快速发展的软件开发领域,面向对象编程(OOP)和函数式编程(FP)是两种重要的编程范式。本文将深入比较这两种范式的特点、应用场景和优劣势,为读者提供选择时的参考,并探讨如何在实际项目中灵活运用它们。
|
6月前
|
Java 程序员 数据处理
探索编程范式:面向对象编程与函数式编程的比较与取舍
本文将探讨面向对象编程(OOP)和函数式编程(FP)两种主流的编程范式,并比较它们在代码组织、可复用性、并发性和代码风格等方面的特点。通过深入了解它们的优势和不足,读者可以更好地选择适合自己项目需求的编程范式。
247 1
|
6月前
|
关系型数据库
编程思想 - 面向对象编程和面向过程编程的区别理解
编程思想 - 面向对象编程和面向过程编程的区别理解
53 0
|
SQL 存储 安全
程序员必须要知道的编程范式,你掌握了吗?
本文给大家介绍了什么是"编程范式",选择合适的编程范式可以提高代码的可读性、可维护性和可扩展性。
33402 42
面向对象程序设计(OOP)的基本概念
面向对象程序设计(OOP)的基本概念
186 0