这是在谈话我是有网络,它发生在我,我不知道这是应该的工作:相当多的程序员似乎只是采取如给定-确实,显而易见的这类是必要的语言功能对于管理巨大的软件项目。

这不是显而易见我怎么他们这样做。

我对你的问题是,你怎么知道的?什么目标的措施是有的,显示,这类增加的生产力,代码的再利用和减少复杂性的生产的计划?什么方面的课程使其适用于大型团队合作?

现在,有一个问题我想要问,那有点难以表达。我很抱歉如果我得到这一错误,结束了混乱的,或者激怒任何人:

客观地说,你怎么知道的使用的类别并不是导致的应用程序正大开始呢?也就是说,它可能是一个程序具有等同功能可能是书面的,有多少代码,小到不需要任何特别措施"管理",使用其他一些代码的再利用的战略?(有很多选择,例如那些在编程功能的模式或方向的编程)。

最后一点是什么,史蒂夫Yegge已经暗示在他的博客。但我有点怀疑双方的论点,由于一个现实缺乏任何硬数据从任何人,没有足够的经验来完成我自己。

你怎么想?

编辑:特别是我很感兴趣,为什么许多程序员认为原型的风格是继承不到任务时遇到较大的应用程序。我很抱歉的这个问题是模糊的--这是一个产品的缺乏理解的关于这一主题。

edit2:似乎有一些混乱过什么,我的意思是通过功能性的程序。(我不认为任何版本的VB是有史以来的功能,肯定不是旧版本)。请参阅《维基百科的文章。http://en.wikipedia.org/wiki/Functional_programming

edit3:让我强调,我正在寻找客观的措施。不是主观的意见。

有帮助吗?

解决方案

封装的理论提供了一个客观的理由为什么课程比不具有类。

国际标准化组织界定的封装作,酒店,所含信息的对象只能通过相互作用,在该接口的支持的对象。'

因此,如某些信息可通过这些接口,一些信息必须隐藏的和无法访问的内的对象。在酒店这样的信息表现出的被称为信息隐藏,其定义由帕纳斯认为模块应用来隐藏两个困难的决定和决定,都可能改变。

注意这个字:改变。信息隐藏的关切问题的潜在事件,例如不断变化的难设计的决策的未来。

考虑一类有两个方法:方法()其是信息隐藏在这一类别,方法b()哪些是公开的并因此可以直接通过其他课程。

有一定的概率,未来变化的方法()将需要改变方法在其他类。还有一个特定的概率,一个未来变化的方法b()将需要改变方法在其他类。概率,这种波动的变化将会发生的方法(),但是,通常是低于用于方法b()只是因为方法b()可能取决于通过更多课程。

这降低概率波动的影响是一个关键的利益封装。

考虑最大潜能数量的源代码的依赖(茂金属聚乙烯-首字母缩略词是从图论)在任何程序。推断从定义上说,我们可以说,鉴于两个方案提供相同的功能用户使用,该程序有最低茂金属聚乙烯的是更好地装封,在统计上更好的包裹的程序将更便宜的维持和开发,因为成本的最大潜在改变,它将低于最大潜在改变的不良好的封systém.

考虑,此外,一个语言与刚才的方法和没有课,因此不意味着信息隐藏的方法。让我们说我们的程序有1000方法。什么是茂金属聚乙烯的这个程序?

封装理论告诉我们,鉴于一个系统的公共n节点,茂金属聚乙烯的这个系统是n(n-1)。因此茂金属聚乙烯我们1000公共方法是999,000.

现在,让我们打破这systém为两大类,每一个都具有500方法。因为我们现在有类,我们可以选择一些方法,公共和方法中的一些私人的。这将是这种情况,除非每种方法实际上是依赖于每一个其他方法(这是不可能的).让我们来说,50个方法在每个类别是公开的。什么茂金属聚乙烯的systém是什么?

封装理论告诉我们这是:n((n/r)-1+(r-1)p)在那里r类的数量,以及p数量的公共方法。这会给我们两类systém一茂金属聚乙烯的达到499,000.因此,最大的潜在成本的变化,在这两类systém是已经大大低于未封装systém.

让我们说你突破你的systém成3类,每一个都具有333类(嗯,一个将有334),并再次每50公众的方法。什么茂金属聚乙烯?使用上述方程式再次茂金属聚乙烯将大约为482 000.

如果systém被分成4类的250方法中的每一个,所茂金属聚乙烯将会449,000.

如果可能看起来,增加的数量类在我们systém总是会减少其茂金属聚乙烯,但这是不是这样。封装理论显示,若干类到其中的systém应该被分解,以尽量减少茂金属聚乙烯的是:r=sqrt(n/p),这对于我们的systém实际上是4.一systém有6类,例如,将有一个茂金属聚乙烯的465,666.

其他提示

这是一个很好的问题。组织代码为类是开发团队打造小,可重复使用的模块的一种方式。此外,这些模块具有唯一表达什么类是能够表现和有限的接口,而不是如何做的。每个类是正交于他人,因此在错误的情况下高度可测试和模块化。

现在我刚才所描述的是从一个完美的世界一个奇怪的景象。但是,任何优秀的开发人员做OOP的工作应该被追求这样的事情。

OOP是确认我们的开发者,是简单的人力和不能一次理解整个系统。因此,我们打破了系统启动成微小的可重复使用的部分,集中于那些。

以一个十位数的美国电话号码,例如,这是很难记住十位数字在你的脑袋,所以我们做的心理学家所说的“分块”。这意味着我们精神上分解成数,我们可以更好地记住块。

所以1234567890变得123-456-7890。幸运的是,电话公司也打破这些倒号以同样的方式和分配块的意思。 123是区号,456是前缀,以及7890是行号。每个块类似于类,它们都有各自的责任,格式和含义。

所以在最后我能说的最好的事情是,OOP使我们能够建立具有集中和封装功能大,可扩展的系统。它让我们没有看到大画面所有的时间,并能够专注于做一两件事,做的很好。

我绝不向任何编程范式偏执,但我已经在面向对象的方式用于同时操作。

就个人而言,我有很多的 'A-HA!'时刻,类有直接帮助我理解我更好的工作领域。

最值得注意的是,在情况下,有为什么一个系统发生故障,或者应该怎样一个系统来做,上课常常迫使我想想这散片整体的应该做的,而且往往混淆比不导致在手重构的类/方法

在短,封装真的让我一个快乐的人。 ;)

希望有所帮助。

我觉得类可以帮助,因为它们对应于分类非常一般认知概念等可有助于自然描述大型应用程序。

我宁愿类,以便我可以将一个大问题分成管理的部分是可测试的作为单独的单元。恕我直言,代码重用是高估的 - 从来就很难看到它发生,我的工作。对我来说,我所得到的最出良好的面向对象的良好的可测试性。

另一个极端是用一堆全局变量和果酱public static void main(或Page_Load在ASP.NET)所有你的逻辑,并调用调用其他静态方法等等...(我在昏了头的静态方法最后一句结束。)

这会打破我的OO思维的唯一的事情是,如果我是一个纯粹的功能性语言,这是一件好事,因为大学生不幸的是我没有想过的工作。

这或许可以通过使不必要的复杂性(OO一路下行)过工程师一个简单的问题。然而,对于任何充分大的问题,我不认为这是可能的OO模式是什么原因造成它是摆在首位的大。采取例如操作系统,很难想象它易于维护(代码明智),如果它不是在面向对象的方式写入。

如果你有一大堆的"裸露的"功能在一个大型应用程序,很难作出改变这些职能。

  • 很难看到谁的使用功能("如果我改变这个,谁不影响?")
  • 很难作出改变的功能而不破坏其他人的代码。

如果你包裹的职能在课程,有助于隔离的范围。这不是一个神奇的子弹,但它可以帮助。

两件事情。

首先是一个类是一个的不透明域实体的想法。 当正确完成的,面向对象的程序引入了一个抽象层:在接下来的最高层,封送对象做你想要什么,而不是处理的细节。你不需要知道对象和类是如何工作的:他们做什么只。这是一种信息隐藏的,它减少了一个团队必须保持在他们的头上,因为他们工作的复杂性。

第二个是,面向对象编程允许一种代码重用的:可以定义覆盖其他类的某些行为(继承),或一个其实例包括其它类的实例的类,用它们来实现其目标(封装和组合物)。

正确的使用面向对象的技术可以减少需要管理的代码量,并减少你需要记住,你的工作负担或维护系统事物的数量。在实践中,这种方法并不总是有效。

客观地说,你怎么知道的 使用的课程不是原因的 应用程序正大开始呢?

采取任何大的程序/应用程序,这不是写在一个面向对象的语言(例如C,COBOL,即使纯SQL)和您应该能够证人,代码尺寸不是直接归因于语言的模式。对每个数字的精心设计的,非常精炼,重复使用的C#或Java的组件,还有同等数量的精心设计的,非常精炼,重复使用的C Dll。相反,还有同等数量的可怕,臃肿的代码。

这一点是,良好的程序员都能够改进他们的系统的设计无关的语言/平台。

关于面向对象的,至少对我来说,它带来的到表一"潜在的"-查程序的世界 升技接近 我们真实的世界。我们都知道我们的世界和宇宙的问题是充分的对象组成的 更小的物体.继续放在所有从galatical星系统的分子,原子和亚原子颗粒的,这是真正令人惊奇的如何完全不同的问题都是由同样的微小颗粒组合在各种模式。看看我们自己的生物学甚至,这是令人难以置信的有时认为60%的机构实际上只是水时断下降到其最好的。但看看所有的各种系统和机构在地方燃烧的化学保持我们的运行和活。

当我们学会理解的简单(哦,真的...哈哈)的构建模块形成的真实世界的系统,我们看到在每天的性质,我们应该能够理解,设计和建造极其复杂或复杂的系统应该开始与小组这样做很少的自己。并通过缓慢地融合和啮合他们一起到越来越大的部件我们可以获得更多的功能和能力。直到我们达到所需的系统,我们的设想。

的(适当)使用的类别是要打破一系统进入其最好的。作为可能。所以,你可以看看一些东西在一个时间和某一特定水平的抽象和不会被淹没的宗旨和逻辑,是没有处理本区域的关切问题。当你设计一个系统,想想你自己剖析;想想 如何 你要设计人的身体。当你设计一个系统,想想 开始一个新的公司;什么是主要的司、部门,你需要操作业务。谁是这种类型的工作人员运行所需的那些部门。各种设备,他们需要使用与互动,以履行他们的工作。你如何打破商业运作进入其最好让自己更好地理解它?

当你了解的基本原则,即一些对象,只是由较小的物体,您将是在您的途中,建立高度可重复使用的细胞或分子。

课程已经最有帮助,我在这方面,我可以工作在一个小方面的一个复杂的项目在一段时间。能够脱钩方面的一个代码从大型项目是非常有益的,这样你就不会成为不堪重负。在结束之间的凝聚力,这些课程可以给你一个快速概述的如何项目工程而无需处理的内脏。

尽可维护性,这是很容易看UML类图并找出如何的一切规定了比看一个名单的功能,在我的意见。

我觉得说类,你应该意味着对象。类只不过是地方,你可以把你的对象。该OOP范式是有原因的如此成功。一旦你有一个“啊哈!”那一刻,你觉得你终于明白了面向对象的概念,你可以在一个更加有组织的方式开始编程。

我在Visual Basic编程3的很长一段时间,所以我有很多经验与功能编程,然后来VB5和发现对象是一个巨大的解脱,因为我可能涉及现实世界实体到我的代码,并且它帮助了很多。

这就是它的全部要点,在你的代码重现真实世界的实体。它使阅读和工作更容易,因为你可以拣东西吃,做的东西的,或者做的东西吧。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top