当您找不到这样做的充分理由或动机时,使用面向对象编程的意义何在?
您必须受到将想法作为对象来构思和操作的需要的激励。有些人觉得需要感知概念、流程或功能而不是对象,然后他们被激励去面向概念、想法或功能流程的编程。
大约 13 年前,我从 c 切换到 c++,只是因为我需要一些想法,但 c 并不容易执行。简而言之,我的需求激发了我面向对象的编程。
面向对象的思维定势
首先,你有字节、字符、整数和浮点数。
然后你的程序开始被各种各样的变量,本地和静态的。然后您决定将它们分组到结构中,因为您认为所有通常都在传递的变量。
数据聚合
因此,就像打印机的信息一样,它的所有变量都应该包含在 Printer 结构中:
{id, name, location,
impactType(laser|inkjet|ribbon),
manufacturer, networkAddr},
etc.
因此,现在,当您通过打印机信息调用一个又一个函数时,您没有具有长参数列表的函数或具有巨大串扰可能性的大量静态变量集合。
信息整合
但数据聚合还不够好。我仍然必须依赖一堆函数来处理数据。因此,我有一个聪明的想法或将函数指针合并到 Printer 结构中。
{id, name, location,
impactType(laser|inkjet|ribbon),
manufacturer, networkAddr,
*print(struct printer),
*clean(struct printer)
}
当数据包含有关如何处理/感知数据的过程时,数据就升级为信息。
信息量化
现在,激光、色带和喷墨打印机的信息集并不相同,但它们都有一组最常见的信息分母 (LCD):
任何打印机共有的信息:ID、名称、位置等
仅在色带打印机中发现的信息:usedCycles、色带(织物|玻璃纸)、colorBands 等
仅在喷墨中找到的信息:墨盒等
仅在激光中发现的信息:...
对于我和许多面向对象的群组,我们更愿意将所有公共信息量化为一个公共信息封装,而不是为每种打印机类型定义单独的结构/封装。
然后,我们更喜欢使用一个框架来管理每种类型打印机的所有功能引用,因为并非所有打印机都以相同的方式打印或清洁。
因此,您远离对象的偏好/动机告诉您,如果您不使用对象,您的编程生活会更轻松?您更愿意自己管理所有这些结构复杂性。您一定没有编写足够多的软件来产生这种感觉。
懒惰的必要性
有人说——需要是创造力之母。(还有,贪财是万恶之源)。
但对我和我的同伙来说——面对需要时的懒惰是创造力的父母。(以及缺钱是万恶之源)。
因此,我敦促您对编程采取一种懒惰的态度,以便最短路径原则在您的生活中发挥作用,您会发现但别无选择,只能将自己定位于使用对象进行编程。