学习以面向对象的方式思考

时间:2010-04-22 07:21:24

标签: oop

我是一名程序员,试图学习面向对象范式的代码......我主要使用PHP,我想学习zend框架......所以,我觉得我需要学习用OO PHP编写代码。 ..

问题是,在很长一段时间内完成使用函数的代码后,我无法用OO的方式思考....

也觉得我可能不是唯一一个从一开始就面临这个问题的人......

那么,你是如何学习面向对象编程的?尤其是你是如何成功地“学习”代码使用函数......并学会将代码视为对象......?

是否有任何好的资源书籍或网站可以找到帮助...... ??

感谢您分享您的知识和经验......

5 个答案:

答案 0 :(得分:46)

我已经用OO进行了20多年的软件开发,我可以告诉你,查看其他人的代码往往是教你如何用面向对象的语言进行过程式编程。 / p>

我建议使用以下技术,即使你可能还没有意识到这些技术,如果你自由地使用这些技术,将迫使你使用OO技术。

  1. 不要复制和粘贴代码。
  2. 创建代表您在谈论功能时所谈论的内容的类 - 例如,订单输入系统将包含订单,客户,帐户,订单项,库存项目等。
  3. 创建这些类时,不要对任何公共集进行编码,并获取访问类数据成员的方法。
  4. 向这些域模型类添加方法,以执行相关对象的工作。 Order.invoice(),account.close(),InventoryItem.decrement()。缺少公共get方法将向您显示代码的正确位置(数据所在的位置 - 在相应的域对象中)。请记住,对象是数据和对其进行操作的代码 - 任何两者都不是对象。
  5. 你最终会发现你必须为某些类成员添加一些公共get方法,这没关系,只需等到你被迫这样做。不情愿地添加公共获取方法。
  6. 在应用程序级别,几乎每行代码都应该移动到山区。换句话说,应用程序级别的大多数代码行应该调用域模型方法。
  7. 将所有功能放在域模型对象中,然后通过将其连接到用户界面在应用程序中公开该功能。我再说一遍,将功能放在域模型中,而不是应用程序中。
  8. 如果您遵循这些准则,您肯定会生成面向对象的代码,并且可能比许多有经验的开发人员具有更高的熟练程度。

    最后,避免注射 - 即Spring,Unity等!!使用注射可能有一些有效的案例 - 大多数用途都源于缺乏面向对象的设计经验。作为是否注射的指导原则,请考虑您注射注射的频率可能会发生变化。在许多情况下,我发现注入的东西永远不会改变 - 在这些情况下,唯一注入的是纯粹的开销。

    祝你好运!

答案 1 :(得分:13)

  1. 阅读其他人的代码 - 您认识的人是优秀的开发人员
  2. 教授语言“idomatic usage”的书籍/文章
  3. (避免使用“在21天内”的字样)

答案 2 :(得分:5)

这需要时间。

从程序编程转向面向对象很困难。现在,许多人以面向对象的方式启动,因此他们不会为这种范式变化而烦恼。

  • 了解OOP的fundamentals并继续参考它们。
  • 阅读OO代码 - 有许多开源项目可供您采样。

答案 3 :(得分:1)

阅读以下其中一本书

  1. 2015_Book_Object-OrientedAnalysisDesignA
  2. Eric Freeman和Elisabeth Freeman Small的《 Head First设计模式》
  3. 头至上的面向对象分析和设计:OOA&D的大脑友好指南

享受

答案 4 :(得分:0)

PDF链接

  

1)从头开始进行面向对象的分析和设计

Head First Object-Oriented Analysis and Design.pdf

  

2)头先设计模式

Head First Design Patterns.pdf