Bre*_*ton 12 oop code-reuse functional-programming class scale
这出现在我在网上的一次对话中,我发现我不知道这应该如何工作:相当多的程序员似乎只是把它作为一个给定 - 事实上,很明显,类是一种必要的语言管理大型软件项目的功能.
我不明白他们是如何做到这一点的.
我的问题是,你怎么知道的?哪些客观测量表明类可以提高生产力,重用代码并降低程序生产的复杂性?课程的哪些方面使其成为大型团队合作的理想选择?
现在,我想问一个问题,这有点难以表达.如果我弄错了,最后会让任何人感到困惑或愤怒,我很抱歉:
客观地说,您如何知道类的使用不是应用程序开始时的原因?也就是说,是否有可能使用其他代码重用策略编写具有相同功能的程序,代码少得多,小到不需要任何特殊措施来"管理"它?(有许多选择,例如函数式编程范例或面向方面编程).
最后一点是Steve Yegge在他的博客上暗示的东西.但是我对这个论点的双方都持怀疑态度,因为任何人都缺乏任何硬数据,而且没有足够的经验可以自己得出结论.
你怎么看?
编辑:特别是我感兴趣的是为什么许多程序员认为原型样式继承在大型应用程序方面不能胜任任务.对不起这个问题很模糊 - 这是我对这个话题缺乏了解的结果.
edit2:似乎对函数式编程的含义感到困惑.(我认为任何版本的VB都不具备功能,当然不是旧版本).请参阅维基百科文章. http://en.wikipedia.org/wiki/Functional_programming
edit3:让我强调一下,我正在寻找客观的措施.不是主观意见.
这个问题问得好.将代码组织到类中是开发团队创建小型可重用模块的一种方式.此外,这些模块具有富有表现力和有限的界面,仅表达了该类的功能,而不表示它是如何实现的.每个类与其他类正交,因此在出错时可高度测试和模块化.
现在我刚刚描述的是一个完美世界的奇怪场景.但任何做OOP工作的优秀开发人员都应该努力做到这一点.
OOP是对我们开发人员只是人类并且不能立即理解整个系统的承认.因此,我们将系统分解为微小的可重用部分,并专注于这些部分.
以一个十位数的美国电话号码为例.很难记住你头上的十位数字,所以我们做了心理学家所说的"分块".这意味着我们在精神上将数字分解为我们可以更好地记住的块.
因此1234567890变得123-456-7890.对我们来说幸运的是,电话公司也以同样的方式打破这些数字并分配块的含义. 123是区号,456是前缀,7890是行号.这些块中的每一个都像一个类,它们都有各自的职责,格式和含义.
总而言之,我能说的最好的事情是OOP允许我们构建具有集中和封装功能的大型可扩展系统.它使我们不必一直看到大局,并能够专注于做一件事并做得好.
小智 2
封装理论提供了为什么类比根本没有类更好的客观原因。
\n\n国际标准化组织将封装定义为“对象中包含的信息只能通过对象支持的接口处的交互来访问的属性”。
\n\n因此,由于某些信息可以通过这些接口访问,因此某些信息必须隐藏在对象内并且无法访问。这些信息所表现出的属性称为信息隐藏,帕纳斯通过认为模块应该设计为隐藏困难的决策和可能改变的决策来定义信息隐藏。
\n\n注意这个词:改变。信息隐藏涉及潜在事件,例如未来困难的设计决策的变化。
\n\n考虑一个具有两个方法的类:方法 a() 是隐藏在类中的信息,方法 b() 是公共的,因此可以由其他类直接访问。
\n\n未来对方法 a() 的更改有可能需要更改其他类中的方法。未来对方法 b() 的更改也有可能需要更改其他类中的方法。然而,方法 a() 发生这种连锁反应的概率通常会低于方法 b() 的概率,这仅仅是因为方法 b() 可能被更多的类所依赖。
\n\n减少连锁反应的可能性是封装的一个主要优点。
\n\n考虑任何程序中源代码依赖项(MPE - 来自图论的缩写)的最大潜在数量。从上面的定义推断,我们可以说,给定两个程序向用户提供相同的功能,具有最低 MPE 的程序封装得更好,并且从统计上看,封装得更好的程序的维护和开发成本会更低,因为成本它的最大潜在变化将低于封装不太好的 syst\xc3\xa9m 的最大潜在变化。
\n\n此外,考虑一种只有方法而没有类的语言,因此无法相互隐藏方法的信息。假设我们的程序有 1000 个方法。该程序的 MPE 是多少?
\n\n封装理论告诉我们,给定一个有n个公共节点的系统,这个系统的MPE是n(n-1)。因此,我们 1000 个公共方法的 MPE 是 999,000。
\n\n现在让我们将 syst\xc3\xa9m 分成两个类,每个类都有 500 个方法。由于我们现在有了类,所以我们可以选择将一些方法设为公共,将一些方法设为私有。除非每个方法实际上都依赖于所有其他方法(这不太可能),否则情况就会如此。假设每个类中有 50 个方法是公共的。syst\xc3\xa9m 的 MPE 是多少?
\n\n封装理论告诉我们它是: n((n/r) -1 + (r-1)p) 其中 r 是类的数量,p 是每个类的公共方法的数量。这将使我们的两类 syst\xc3\xa9m 的 MPE 为 499,000。因此,此两类 syst\xc3\xa9m 中的更改的最大潜在成本已经大大低于未封装的 syst\xc3\xa9m 的成本。
\n\n假设您将 syst\xc3\xa9m 分成 3 个类,每个类有 333 个类(好吧,一个类有 334 个),每个类都有 50 个公共方法。什么是MPE?再次使用上述方程,MPE 约为 482,000。
\n\n如果 syst\xc3\xa9m 分为 4 类,每类 250 个方法,则 MPE 将为 449,000。
\n\n看起来,增加 syst\xc3\xa9m 中的类数量总是会降低其 MPE,但事实并非如此。封装理论表明,为了最小化 MPE,syst\xc3\xa9m 应分解为的类数为:r = sqrt(n/p),对于我们的 syst\xc3\xa9m 实际上是 4。一个 syst\xc3\例如,具有 6 个类别的 xa9m 的 MPE 为 465,666。
\n