在我读过的唯一一个开发博客中,那个由Joel-On-Software-Found-of-SO所提供的东西,很久以前,我读到OO不会导致生产率提高。自动内存管理。凉。谁可以拒绝数据?
我仍然相信面向对象非面向对象的编程与具有内联编程的所有功能。
(而且我应该知道,就像我从GWBasic开始的那样。)当您重构代码以使用函数时,
variable2654
将成为
variable3
您所使用的方法。或者,更好的是,它有一个您可以理解的名称,
并且该函数是否简短,它被称为
value
足以完全理解。
当没有功能的代码变成带有方法的代码时,您将删除大量的代码。
当你重构代码是真正的面向对象,b
,c
,q
,和Z
成为this
,this
,this
和this
。而且由于我不相信使用this
关键字,因此您可以删除大量的代码。实际上,即使您使用也可以做到这一点this
。
我不认为OO是自然的隐喻。
我也不认为语言是自然的隐喻,也不认为Fowler的“气味”比说“这段代码的味道不好”更好。就是说,我认为面向对象不是关于自然的隐喻,而那些认为
对象只是突然出现在您面前的人根本就没注意这一点。
您定义了对象Universe,更好的对象Universe将导致代码更短,更易于理解,更好地工作,或者所有这些(以及我遗忘的某些标准)。我认为使用客户/域的自然对象作为编程对象的人会失去重新定义Universe的能力。
例如,当您使用航空公司预订系统时,所谓的预订可能根本不符合法律/商务预订。
一些基本概念是很酷的工具
我认为大多数人都夸大了“当您有锤子时,他们都是钉子”的事情。我认为硬币/镜子的另一面也是如此:当您拥有多态性/继承性之类的小工具时,您会发现适合手套/袜子/隐形眼镜的用途。OO的工具非常强大。我认为,单一继承是绝对不可让人迷失的必要,而我自己的
多重继承软件则无法承受。
OOP的意义是什么?
我认为这是处理绝对大量代码库的好方法。我认为它可以让您组织和重新组织代码,并提供一种语言来执行此操作(除了您正在使用的编程语言之外),并以一种非常自然且易于理解的方式对代码进行模块化。
OOP注定会被大多数开发人员误解
这是因为这是一个像人生一样令人大开眼界的过程:您越来越从经验中了解OO,并开始避免某些模式,并在变得更聪明时采用其他模式。最好的例子之一是您停止对不控制的类使用继承,而改用
Facade模式。
关于您的小文章/问题
我确实想提到你是对的。在很大程度上,可重用性是一个梦想。这是来自安德斯·赫伊尔斯贝格(Anders Hejilsberg)的引述,内容来自此处:
如果您要求刚开始的程序员编写日历控件,他们经常会自言自语:“哦,我要编写世界上最好的日历控件!就日历类型而言,它将是多态的。它将具有显示器,以及那个,那个,另一个。他们需要在两个月内交付日历应用程序。他们将所有这些基础结构都放置在控件中,然后花了两天时间在其之上编写一个糟糕的日历应用程序。他们会认为:“在该应用程序的下一版本中,我将做更多的事情。”
一旦他们开始考虑如何实际实现抽象设计的所有其他具体化,那么事实证明他们的设计是完全错误的。现在他们把自己画在了一个角落,他们不得不把整个东西扔掉。我一遍又一遍地看到。我坚信简约。除非您实际上要解决一般问题,否则不要尝试建立解决特定问题的框架,因为您不知道该框架的外观。