面向对象编程(OOP)在今天还有意义吗?

Connect Asia Data learn, and optimize business database management.
Post Reply
Fgjklf
Posts: 316
Joined: Tue Dec 24, 2024 3:19 am

面向对象编程(OOP)在今天还有意义吗?

Post by Fgjklf »

面向对象编程这个术语最初是由Alan Kay创造的。 Kay 是PARC团队的一名成员,该团队开创了图形用户界面,帮助互联网、个人电脑、平板电脑和智能手机变得如此实用,以及我们现在使用的一些面向对象语言。

一旦消除了面向对象编程周围的情感混乱,还剩下什么?面向对象编程仍然是一种有效的软件开发工具吗?还是它只是一种过时的编程时尚?

Alan Kay 对面向对象编程是这样说的:

“对我来说,OOP 只是意味着消息传递、本地 瑞典号码数据 保留和保护以及过程中的状态隐藏,以及所有事物的后期和极端绑定。”

让我们分解一下这句话来了解全貌:

“仅消息传递”:这意味着对象通过消息相互通信。发送给对象的消息是执行某个过程的请求,因此将导致一个或多个对象的状态发生变化或返回一个值。这强调了对象应该通过明确定义的接口进行交互,使用消息来请求操作。
“过程中本地状态的保留、保护和隐藏”:指的是信息的封装和隐藏。封装是将数据与对数据进行操作的方法进行分组,或限制对某些对象组件的直接访问。信息隐藏是一种原则,其中类的实现细节对用户隐藏。该对象仅显示对用户安全且相关的操作。这保护了对象的内部状态,并确保无需了解内部复杂性即可使用该对象。
“万物的极度晚期绑定” 晚期绑定是指在运行时而不是编译时确定具体调用的代码。这允许更灵活和动态的代码行为,其中不同类型的对象如果提供相同的外部接口就可以互换使用,即使它们内部以不同的方式实现操作。后期绑定描述了最大化这种灵活性的系统,允许高度动态和适应性强的组件模型。
Kay 的描述强调通过明确定义的接口实现自主组件之间的交互,保持内部流程和数据的私密性,并允许组件之间交互的方式和时间具有高度的灵活性和动态性。这些原则可以使软件更加模块化、更易于维护、更灵活。

Kay 没有提到的一件事是继承,这个概念困扰了许多面向对象编程的程序员。他的声明明确表示,他不认为继承是面向对象编程的必要条件。

虽然子类化可以提高代码重用和多态性,但它也有一些缺点:

子类与其父类紧密耦合。
继承层次结构会使代码难以理解和遵循。
对基类的改变很容易破坏子类。
覆盖子类中的方法可能会导致对调用该方法的哪个实例产生混淆。
子类通常依赖于有关其父类的实现细节的知识,这会使封装变得困难。
改变超类可能需要对许多子类进行大量修改。
子类引入了额外的状态和行为,可能会使测试复杂化。
尽管在面向对象编程培训中经常被强调,但继承并不是面向对象编程的核心属性(而是某些面向对象语言(如 Java)的特性),并且在组合或聚合是更合适的设计选择时经常使用。

不恰当或过度使用继承会导致不必要的复杂设计,缺乏灵活性,并且更难理解和修改。

面向对象编程在您的项目中意味着什么?
在软件设计、开发、实施和运行维护中,复杂性是成本的主要驱动因素。

软件本质上是复杂的。系统越大或修改越多,它就会变得越复杂。


如表所示,随着组成应用程序的事物数量及其之间的连接增加,应用程序的复杂性急剧增加。

管理软件复杂性的最有效方法之一是使用以下组件模型:

使单个软件组件更易于理解和更改。
将软件组件与其他组件的更改隔离。
最大限度地减少系统不同部分工作的设备之间的潜在干扰。
简化新的和更新的软件组件的交付。
Alan Kay 和 PARC 团队选择面向对象编程进行 GUI 开发的原因与面向对象编程对于当今并发和分布式应用程序的开发具有同样的意义。符合Kay面向对象编程定义的可组合微服务体现了Kay思想的价值。
Post Reply