学习语言的OO功能有什么好的标准练习?

时间:2010-03-11 02:26:59

标签: oop language-agnostic

当我学习一门新语言时,我经常编写一些数学函数来习惯控制流语法。之后,我喜欢实现一些排序算法来习惯数组/列表结构。

但我没有一个标准练习来探索语言OO功能。有人为此进行过股票练习吗?

对于已经熟悉这些概念的程序员来说,一个好的答案自然会为继承,多态等提供帮助。一个理想的答案是可以用几个词进行沟通而不含糊不清的答案,就像“实现mergesort”完全明确一样。 (例如,回答“设计游戏”是如此模糊,以至于无用。)

有什么想法吗?

编辑:我不得不说这里的结果有些讽刺。 10个upvotes和(最初)5个收藏夹表明这是其他人感兴趣的问题。然而,最受欢迎的答案是说没有好的答案。那好吧。我想我会看下面的教科书,我发现OO过去很有用。

7 个答案:

答案 0 :(得分:2)

我无法想象有一套标准的练习可以自然地将编程语言的OO功能介绍给每个人。很多介绍性的OO教程都充满了AnimalsCatsDogs,至少对我来说并没有真正削减它。在OO中找到一个你经常遇到困难的问题域,并尝试将其用作你所选择的每种语言的库存练习集。

我们习惯于用语言思考的OO结构在语言中可能没有意义。 Javascript浮现在脑海中,它震撼了我们如何思考一般对象的整个基础。也就是说,你不应该适应一种语言,而应该根据你的目的调整语言。随着知识库的增长和经验的不断改进,您自然希望实现您认为最适合您使用的每种编程语言的内容,无论语言提供什么。

答案 1 :(得分:1)

一些乐趣:实现Shape / Circle / Ellipse层次结构而不会陷入陷阱(在Java,Scala等中可以很好地完成)。

编辑在查看the Wikipedia article中建议的解决方案之前实现:)

答案 2 :(得分:1)

好问题...... 在我看来,最好的老师只是找到一个简单的OO功能示例,并尝试单独编写一些内容,为自己创建新的示例,并尝试开发简单的应用程序,您可以在其中连接OO的所有功能。

实现像不使用OO功能的合并排序算法,导致它们不需要它是没用的。尝试真正有用的程序。

我记得在学习OO时我用一般的“动物”界面编写应用程序,继承它的方法和类,如“两栖动物”。这是时间的缩短;)

答案 3 :(得分:1)

我使用过Hunt The Wumpus。 BASIC中最初的实现并不是OO,但如果你重新开始它就会非常适合这个。

答案 4 :(得分:0)

以下是我使用的内容:

http://homepage.mac.com/s_lott/books/oodesign.html

我已经做了足够多次,在我看来它是“标准”。

答案 5 :(得分:0)

这可能太具体了,但这才是我真正让我真正了解OOP的个人信息。对于我的工作,我必须编写代码以从各种不同的来源中提取数据。从设计各种“DataProvider”类的角度来看,我应该直截了当地解决这个问题。只有逐渐清楚的是,我可以通过将不同的提供商分解为层次结构类别来重复使用多少代码,如下所示:

  • 的DataProvider
    • TextDataProvider
      • HtmlDataProvider
      • CsvDataProvider
      • XmlDataProvider
    • BinaryDataProvider

......等等。我建议像这样的任何问题 - 你需要在一堆不同的方式中完成某个任务(在我的情况下,提取数据)(例如,来自多个来源) - 将是一个深入研究OOP的好机会,并希望学会了解它的实用性。

答案 6 :(得分:0)

我个人认为学习OO的最佳方法是编写自己的测试框架。

我找到了一个测试跑步者的布局,拥有一个或多个测试套件,每个测试套件都有自己的测试用例足够的起点,但你可以轻松地从那里开始,甚至可能是你关心的事情在将来使用。

或者,如果你想要完全抛弃某些东西,那么总是Enterprise FizzBuzz。 :)