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

Spi*_*idE 42 oop

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

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

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

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

有没有好的资源书籍或网站可以找到帮助......?

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

Rod*_*ati 49

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

我建议使用以下技术,如果大量应用,将迫使您使用OO技术,即使您可能还没有意识到它们.

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

如果遵循这些指导原则,您肯定会生成面向对象的代码,并且可能比许多有经验的开发人员具有更高的熟练程度.

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

祝好运!


ham*_*mcn 13

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

  • 为了避免21天的课程+1.很明显,你不能在21天内学习像OOP一样大而有趣的东西.人们花费数年时间学习它以提高效率和专业. (4认同)

Ode*_*ded 5

这需要时间.

从过程式编程转向面向对象很困难.现在,许多人面向对象开始,因此他们不会为这种范式变化而挣扎.

  • 了解OOP 的基本原理并继续参考它们.
  • 阅读OO代码 - 有许多开源项目可以提供样本.