当你无法找到充分的理由或动力时,使用面向对象编程有何意义?
你必须被需要将想法构思和操纵为对象的需求所驱动。有些人感到需要对概念、流程或功能进行感知,而不是对象,因此他们会被驱动着朝向面向概念、想法或功能流程的编程方向。
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、名称、位置等。
仅在条带打印机中找到的信息:已使用周期、花边(织物|玻璃纸)、彩色带等。
仅在喷墨中找到的信息:墨盒等。
仅在激光中找到的信息:...
对我和许多面向对象的同学来说,我们更喜欢将所有公共信息量化为一个通用的信息封装,而不是为每种类型的打印机定义单独的结构/封装。
然后,我们更喜欢使用一个框架来管理每种打印机类型的所有函数引用,因为并不是所有打印机都以相同的方式进行打印或清洁。
所以你不喜欢使用对象的偏好/动机告诉你,如果你不使用对象,编程生活会更容易?这意味着你更愿意自己管理所有这些结构上的复杂性。你可能没有写足够的软件来有这种感觉。
懒惰的必要性
有人说 - 必要是创造力之母(还有,贪婪是邪恶的根源)。
但对我和我的同伴来说,面对必要的懒惰才是创造力的父母(以及缺乏金钱是邪恶的另一位父母)。
因此,我敦促你采取懒惰的态度来编程,这样最短路径原则就会融入你的生活中,你会发现除了朝向对象编程之外别无选择。