【问题标题】:Good challenges/tasks/exercises for learning or improving object oriented programming (OOP) skills [closed]学习或提高面向对象编程(OOP)技能的良好挑战/任务/练习[关闭]
【发布时间】:2008-09-12 22:45:09
【问题描述】:

什么是提高您的面向对象编程技能的好挑战?

本次投票的目的是提供一个关于哪些练习对学习 OOP 有用的想法。

挑战应尽可能与语言无关,需要很少或不使用特定库,或者只需要最常见的库。尝试在每个答案中仅包含一个挑战,以便投票与该挑战的优点相对应。如果指出所需的技能水平以及为什么它是一个有用的练习背后的基本原理,那也很好。

然后可以将挑战的解决方案发布为“如何...”问题的答案,并从此处链接到。

例如:

  • 挑战 - 实现后进先出堆栈
  • 技能水平 - 初学者
  • 基本原理 - 提供如何引用对象的经验

【问题讨论】:

  • 我的大学有一个强制性的练习:编写一个 Java 媒体播放器来播放 mp3 文件。这是一个持续数周的任务,这对初学者来说非常棒。有 8 个章节,每个章节都有示例解决方案,还有单元测试。大约 70% 的代码总是被给出,每章你大约有十几个非常具体的任务。简单的 UI、文件访问、存储设置、使用继承和多态、添加自己的类、显然是循环和条件。它拥有您想要开始的一切。可悲的是,它受版权保护 -__- 我什至在完成后添加了自己的功能。

标签: oop


【解决方案1】:

Building Skills in Object-Oriented Design 是一本可能有用的免费书籍。

说明如下:

“这本书的目的是通过为初学者提供一系列有趣且适度复杂的 OO 设计练习来帮助他们。本书还可以帮助管理人员在 OO 软件开发过程中建立一定程度的舒适度。我们将构建的应用程序比琐碎的应用程序更重要,并且需要一些仔细的思考和设计。此外,由于这些应用程序本质上是娱乐性的,它们很有趣且引人入胜。本书允许读者探索面向对象设计的过程和工件在项目截止日期之前,让优秀的设计变得不可能。”

【讨论】:

  • 我支持这本 - 非常好的书。
【解决方案2】:

从头开始编写一个具有挑战性的程序。尝试让一些人(大约五个,这应该是可行的)使用它。响应他们的变更请求。

调整您的程序设计。从小处着手,然后看着它成长。管理这种增长。 这很难。随着时间的推移,您还必须修复错误并维护它,这对我来说是非常宝贵的一课。

【讨论】:

  • +1 响应他们的变更请求
【解决方案3】:

挑战:使用您选择的语言为您选择的网站/服务 API 编写一个包装器,该语言尚不存在(例如,用 C# 编写的 ZenDesk API 包装器)。将包装器发布为开源供其他人使用。

技能等级:初级到中级

基本原理:了解如何将第 3 方 Web 服务 API 外推到一组有意义的对象/类中,从而在您选择的语言中更轻松地重用该 API。

【讨论】:

    【解决方案4】:

    在您了解了基础知识后,请学习“Gang of Four”设计模式书。

    http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1221488916&sr=8-1

    这是一本经典之作,任何想要了解如何使用 OO 为常见编码问题设计优雅解决方案的编码人员都必须阅读。

    【讨论】:

    • 在充分尊重 GOF 的同时,“Head first in design patterns”读起来更有趣。
    • GOF 是终极的,我们不应该害怕它。每天睡前阅读。
    【解决方案5】:

    获取一段程序风格的书面代码,并尝试将其转换为基于 OOP 的解决方案。在此过程中,请查阅有关重构和设计模式的书。我的一个朋友正是通过这种方式在理解面向对象的概念方面向前迈出了一大步。与任何事情一样,这可能并不适合所有人。

    【讨论】:

      【解决方案6】:

      我发现CRC cards 在学习、教学和构建良好的 OO 设计方面非常有效。

      【讨论】:

        【解决方案7】:

        当然,一个很好的挑战,虽然比“从头开始”分配更难访问,是重构一些不使用继承或不使用太多继承的现有代码,以更好地利用继承。重构的过程将揭示 oop 的许多好处和陷阱,正如我在最近的项目中所做的那样。这也促使我比过去创建自己的面向对象设计的项目更好地理解这些概念。

        【讨论】:

          【解决方案8】:

          一个给定的任务与“OOP”关系不大,更多的是你如何给它评分。

          我会查看重构书第 3 章,并确保解决方案中不存在任何不良代码气味。或者,更重要的是,检查那些确实适用的。

          最重要的是,注意 setter 和 getter 的存在(表明您正在对类中的值进行操作,而不是要求类对自己的值进行操作)——或者在不应用 Liskov 替换原则的情况下使用“扩展” ,诸如此类。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-11
            • 2015-04-16
            • 1970-01-01
            • 2010-09-06
            • 2012-07-15
            • 2011-02-22
            • 1970-01-01
            • 2011-02-17
            相关资源
            最近更新 更多