学习或者提高面向对象编程(OOP)技能的良好挑战/任务/练习
提高面向对象编程技能的挑战是什么?
该民意调查的目的是提供一个想法,以了解哪些练习对学习OOP有用。
挑战应该是尽可能与语言无关,要求很少或者不需要使用特定的库,或者只需要最常用的库。尝试每个答案仅包含一个挑战,这样一来投票就仅代表该挑战的优点。如果指出了所需的技能水平,以及它为什么是有用的练习背后的原理,那也将是很好的。
然后,可以将挑战的解决方案发布为"如何..."问题的答案,并从此处链接到。
例如:
- 挑战-实现后进先出堆栈
- 技能水平-初学者
- 基本原理-提供有关如何引用对象的经验
解决方案
回答
尽管比"从头开始"分配的访问性低,但无疑是一个很好的挑战,那就是重构一些不使用继承或者不使用继承过多的代码来充分利用继承。重构的过程将暴露很多oop的好处和陷阱,就像我在最近的项目中所做的那样。与过去的项目创建了自己的面向对象的设计相比,它还促使我更好地理解概念。
回答
挑战:用我们选择的语言为我们选择的网站/服务API编写一个包装程序(例如,用C#编写的ZenDesk API包装程序)。将包装程序作为开源发布,以供其他人使用。
技能等级:初学者到中级
基本原理:了解如何将第三方Web服务API外推到有意义的对象/类集合中,从而使该API在我们选择的语言中的重用更加容易。
回答
在学习了基础知识之后,请学习"四人帮"设计模式书。
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设计常见编码问题的优雅解决方案的编码人员,都必须阅读。
回答
给定的任务与成为" OOP"几乎没有关系,更多地取决于如何对其进行评分。
我将看一看《重构》第3章,并确保解决方案中不存在任何不好的代码味道。或者,更重要的是,仔细检查那些确实适用的方法。
最重要的是,注意设置器和获取器的存在(表明我们正在使用某个类的值,而不是要求该类对自己的值进行操作)–或者使用"扩展"而不应用Liskov替换原理,诸如此类那。
回答
采取过程式的代码段,然后尝试将其转换为基于OOP的解决方案。在此过程中,请查阅有关重构和设计模式的书。我的一个朋友能够以这种方式在理解面向对象的概念方面迈出了一大步。与任何事物一样,这可能不适用于每个人。
回答
我发现CRC卡在学习,教学和构建良好的OO设计方面非常有效。
回答
从头开始编写具有挑战性的程序。尝试让一些人(大约五个人应该可以使用)来使用它。响应他们的更改请求。
调整程序的设计。从小开始,然后看着它成长。应对这种增长。这很难。随着时间的流逝,我们还必须修复错误并进行维护,这对我来说是非常宝贵的一课。
回答
面向对象设计中的构建技能是一本可能有用的免费书籍。描述如下
"本书的目的是通过为他们提供一系列有趣且适度复杂的OO设计练习来帮助初学者。这本书还可以帮助管理人员提高对OO软件开发过程的舒适度。我们将为我们提供应用程序构建是一个微不足道的步骤,将需要一些仔细的思考和设计;此外,由于应用程序本质上是娱乐性的,因此非常有趣且引人入胜。使好的设计看起来不可能。"