1.3 过程式编程与面向对象编程对比

在我们深入了解面向对象开发的优势之前,先考虑一个更基本的问题:究竟什么是对象?这既是一个复杂的问题,也是一个简单的问题。复杂是因为学习任何一种软件开发方法论都非易事,简单是因为人们已经在按对象的方式进行思考。

Tip

在面向对象大师Robert Martin的一个YouTube演讲视频中,他提到“人们按照对象的方式思考”这种说法是市场销售人员杜撰的。这一点引人深思。

例如,当你看到一个人,你会把他看作一个对象。一个对象由两部分组成:属性及行为。人具有属性,比如眼睛颜色、年龄、身高等。人也具有行为,比如行走、说话、呼吸等。对象的基本定义是一个包含了数据和行为的实体。前面的“和”是面向对象编程与其他编程方法论的核心区别。例如,在过程式编程中,代码放置在完全不同的函数或程序中。在如图1.1所示的理想情况下,程序即为“黑盒”(black box),接收输入,然后输出。数据放置在单独的结构中,通过函数或程序进行操作。

图1.1 黑盒

面向对象与过程式编程的不同之处

在面向对象设计中,属性及行为包含在单个对象中,而在过程式或结构式设计中,属性和行为通常是分开的。

虽然面向对象设计越来越流行,但有个现实问题最初阻碍了面向对象设计的推广,那就是很多非面向对象的系统还在正常工作。因此,没有任何商业动力来将其改造为面向对象的系统。任何熟悉计算机系统的人都知道,不管对系统的修改有多小,都极可能引发灾难性的后果。

接受面向对象的数据库也存在相同的问题。随着面向对象开发方式的发展,貌似面向对象的数据库将替代关系型数据库。然而,这绝不会发生。关系型数据库得到了大量的商业投资,而现有的关系型数据库可以正常工作,这一重要因素阻碍了向面向对象的数据库的转换。将关系型数据库转换为面向对象的数据库花销巨大又充满风险,因此没有一个足够令人信服的理由来支持转换。 ...

Get 面向对象的思考过程(原书第5版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.