Class 类如何帮助您管理大型应用程序?

Class 类如何帮助您管理大型应用程序?,class,oop,functional-programming,code-reuse,scale,Class,Oop,Functional Programming,Code Reuse,Scale,这是我在网上进行的一次对话中提到的,我突然意识到我不知道这应该是如何工作的:相当多的程序员似乎只是将其视为给定的——事实上,很明显,类是管理大型软件项目所必需的语言特性 我不清楚他们是怎么做到的 我的问题是,你怎么知道的?有哪些客观指标表明类提高了生产率、代码重用并降低了程序生产的复杂性?类的哪些方面使它们成为大型团队协作的理想选择 现在,我想问一个问题,这有点难以表达。很抱歉,如果我弄错了这一点,并最终使任何人感到困惑或愤怒: 客观地说,您如何知道类的使用并不是应用程序开始变得庞大的原因?也就

这是我在网上进行的一次对话中提到的,我突然意识到我不知道这应该是如何工作的:相当多的程序员似乎只是将其视为给定的——事实上,很明显,类是管理大型软件项目所必需的语言特性

我不清楚他们是怎么做到的

我的问题是,你怎么知道的?有哪些客观指标表明类提高了生产率、代码重用并降低了程序生产的复杂性?类的哪些方面使它们成为大型团队协作的理想选择

现在,我想问一个问题,这有点难以表达。很抱歉,如果我弄错了这一点,并最终使任何人感到困惑或愤怒:

客观地说,您如何知道类的使用并不是应用程序开始变得庞大的原因?也就是说,是否有可能编写一个具有等效功能的程序,使用更少的代码,小到不需要任何特殊措施来“管理”它,使用其他一些代码重用策略?(有很多可供选择,例如函数式编程范例或面向方面编程)

最后一点是史蒂夫·耶格在他的博客上暗示的。但我对争论的双方都持怀疑态度,因为我确实缺乏任何人提供的确凿数据,也没有足够的经验来独自得出结论

你觉得怎么样

编辑:我特别感兴趣的是,为什么许多程序员认为原型样式继承不能胜任大型应用程序的任务。很抱歉,这个问题很模糊——这是我对这个话题缺乏理解的结果

edit2:对于我所说的函数式编程的含义,似乎有些混淆。(我不认为任何版本的VB都是功能性的,当然不是旧版本)。请参考维基百科的文章。


edit3:让我强调一下,我正在寻找客观的衡量标准。不是主观意见。

我对任何编程范式都不是一个偏执的人,但我已经以面向对象的方式运行了一段时间

就我个人而言,我经历了很多“哈哈!”这些课程直接帮助我更好地理解了我工作的领域

最值得注意的是,在系统发生故障的原因或系统应该做什么的情况下,类常常迫使我思考整个系统中这个不连续的部分应该做什么,并且往往导致重构手头的类/方法

简而言之,封装真的让我更快乐


希望这能有所帮助。

我更喜欢类,这样我就可以将一个大问题划分为可管理的部分,这些部分可以作为单独的单元进行测试。恕我直言,代码重用被高估了——在我工作的地方,我几乎没见过这种情况发生。对我来说,我从好的OO中得到的最多的是良好的可测试性

另一个极端是使用一组全局变量,并在
publicstaticvoidmain
(或ASP.NET中的
Page\u Load
)中阻塞所有逻辑,调用调用其他静态方法的静态方法,等等。。。(最后一句话结束时我感到头晕。)


唯一能打破我OO思维定势的是,如果我使用的是纯函数式语言,这是我从大学起就没有考虑过的。不幸的是,这是一个非常好的问题。将代码组织到类中是开发团队创建小型可重用模块的一种方法。此外,这些模块具有表达性和有限的接口,仅表示类的功能,而不表示类的工作方式。每个类都与其他类正交,因此在出现错误时具有高度的可测试性和模块化

我刚才描述的是一个来自完美世界的奇怪场景。但是,任何从事面向对象编程工作的优秀开发人员都应该努力做到这一点

OOP是一种承认,我们,开发人员,仅仅是人类,不能同时理解整个系统。因此,我们将系统分解为可重用的小部件,并将重点放在这些部件上

以一个十位数的美国电话号码为例。在你的大脑中很难记住一个十位数的数字,所以我们做心理学家称之为“分块”。这意味着我们在心里把数字分解成块,以便更好地记住

所以
1234567890
变成
123-456-7890
。对我们来说,幸运的是,电话公司也以同样的方式对这些数字进行分解,并赋予这些数字的含义
123
是区号,
456
是前缀,
7890
是行号。每一个块都像一个类,它们都有各自的职责、格式和含义

总之,我能说的最好的事情是OOP允许我们构建具有集中和封装功能的大型、可伸缩的系统。它让我们不必总是看到全局,能够专注于做一件事并把它做好

两件事

第一种观点认为类是一个不透明的领域实体。正确完成后,面向对象程序将引入一个抽象层:在下一个最高层,您将封送对象以执行您想要的操作,而不是处理细节。您不需要知道对象和类是如何工作的:只需要知道它们是做什么的。这是一种信息隐藏,它降低了团队在工作时必须记住的复杂性

第二种是OO编程允许一种代码重用:您可以定义覆盖其他类(继承)中某些行为的类,或其实例包含其他类实例的类,使用它们来实现其目标(封装和组合)

正确地使用OO技术可以减少需要管理的代码量