什么是提高你的面向对象编程技能的好挑战?
这个投票背后的想法是提供一个关于哪些练习对学习 OOP 有用的想法。
挑战应该尽可能与语言无关,需要很少或不使用特定库,或者只需要最常见的库。尝试在每个答案中仅包含一个挑战,以便投票与该挑战的优点相对应。如果指出所需的技能水平,以及为什么它是一个有用的练习背后的基本原理,那也很好。
然后可以将挑战的解决方案发布为“如何...”问题的答案,并从此处链接到。
例如:
- 挑战 - 实施后进先出堆栈
- 技能水平 - 初学者
- 基本原理 - 提供如何引用对象的经验
什么是提高你的面向对象编程技能的好挑战?
这个投票背后的想法是提供一个关于哪些练习对学习 OOP 有用的想法。
挑战应该尽可能与语言无关,需要很少或不使用特定库,或者只需要最常见的库。尝试在每个答案中仅包含一个挑战,以便投票与该挑战的优点相对应。如果指出所需的技能水平,以及为什么它是一个有用的练习背后的基本原理,那也很好。
然后可以将挑战的解决方案发布为“如何...”问题的答案,并从此处链接到。
例如:
Building Skills in Object-Oriented Design是一本可能有用的免费书。
说明如下:
“本书的目的是通过为初学者提供一系列有趣且适度复杂的 OO 设计练习来帮助他们。本书还可以帮助管理人员在 OO 软件开发过程中建立一定程度的舒适度。我们将使用的应用程序构建是微不足道的一步,需要一些仔细的思考和设计。此外,由于应用程序本质上是娱乐性的,它们很有趣且引人入胜。本书允许读者在项目截止日期之前探索 OO 设计的过程和工件让好的设计看起来不可能。”
从头开始编写一个具有挑战性的程序。尝试让一些人(大约五个,这应该是可行的)使用它。响应他们的变更请求。
调整您的程序设计。从小处着手,然后看着它成长。管理这种增长。这很难。随着时间的推移,您还必须修复错误并维护它,这对我来说是非常宝贵的一课。
挑战:用您选择的语言为您选择的网站/服务 API 编写一个包装器,该语言尚不存在(例如,用 C# 编写的ZenDesk API包装器)。将包装器发布为开源供其他人使用。
技能等级:初级到中级
基本原理:学习如何将第 3 方 Web 服务 API 外推到一组有意义的对象/类中,从而在您选择的语言中更轻松地重用该 API。
学习了基础知识后,请学习“Gang of Four”设计模式一书。
这是一本经典之作,任何想要了解如何使用 OO 来设计常见编码问题的优雅解决方案的编码人员都必须阅读。
获取一段程序式的书面代码,并尝试将其转换为基于 OOP 的解决方案。在此过程中,请查阅有关重构和设计模式的书。我的一个朋友正是通过这种方式在理解面向对象的概念方面向前迈出了一大步。与任何事情一样,这可能并不适合所有人。
我发现CRC 卡在学习、教学和构建良好的 OO 设计方面非常有效。
当然,一个很好的挑战,尽管比“从头开始”分配更难访问,是重构一些不使用继承或不使用太多继承的现有代码,以更好地利用继承。重构的过程将揭示 oop 的许多好处和陷阱,正如我在最近的项目中所做的那样。它也促使我比过去的项目更好地理解这些概念,在这些项目中我创建了自己的面向对象设计。
给定的任务与“OOP”几乎没有关系,更多的是你如何对其评分。
我会查看重构书第 3 章,并确保解决方案中不存在任何不良代码气味。或者,更重要的是,检查那些确实适用的。
最重要的是,注意 setter 和 getter 的存在(表明您正在对类中的值进行操作,而不是要求类对自己的值进行操作)——或者在不应用 Liskov 替换原则的情况下使用“扩展”,例如那。