PHP面向对象杂谈二

来源:互联网 发布:fft算法三级实现 编辑:程序博客网 时间:2024/05/16 09:19
              代码设计
   在面向过程的程序过程中,也许很少提到代码设计,过程中代码设计无非是是不是应该写一个函数,如何简单的模块化,代码是不是够精简。自从面向对象系统出来后,代码设计也真正有了技术和艺术的感觉。在面向对象的实现中,设计是指定义系统组成并组织各组件间关系的过程。这一过程本来也不是个难事,倘若只需要眼前的功能,那只要把面向过程的代码话在类里就可以做到,那么,为什么要代码设计?为的就是重构代码,重复利用代码,减少开发周期,简言之,那就是省钱少力呗。其实,每个码农的骨子里肯定都不喜欢敲重复的代码,那确实无聊。面向对象编程中,你肯定会愁要定义哪些类,这些类要干些什么,这个类跟那个类有什么等等,有各种不同的实现,面对这么多方案,如何决定那或许就是设计。在设计过程中,必须决定某个操作何时属于某个类型,何时属于这个类型使用的另一个类。在每个地方你都面临选择,你的决定可能使代码更清晰、更优雅,也可能会让为我陷入困境。

              面向对象与面向过程的区别
   面向对象设计与传统的过程式编程有什么不同呢?大概很多人通俗的认为最大的不同在于面向对象编程中包含对象。我想这种说法相当于什么也没有说。或许,面向对象与面向过程最大的不同在于如何分配职责。另外一个或许能够感受得到的是:通过良好的对象设计,面向对象很容易重用,很容易隐藏细节(隐藏数据与功能)。大抵大部分人在刚学习了面向对象的编程后,会感觉,面向对象代码多了好多,实现一个简单的功能又要设计,又要码更多代码,通常都不愿意。实事上,当真正做项目时,才会感觉对象真的很重要。

              内聚与耦合
   内聚是指一个模块内部各成分之间相关联程度的度量。理想情况下,你应该使各组件职责清晰、分工明确。如果代码间的关联范围太广,维护的时候修改某部分代码意味着也可能要修改其它相关的代码。
   耦合是指系统中各部分之间的紧密性,太紧密并不是一个很好的设计,称之为紧耦合。对应的有松耦合之说。
   通俗来说,内聚就好比一个家族内所有人(对象)最亲,最要好,而耦合就是一个家族内的人与此外的人的关系或许没有那么强相关,不过话又说回来,所有的都有例外。 
   还有正交这么一说,所谓的正交,实际是松耦合中最松的一种特例,代码中某部分完全与其它部分不相关,我怎么变都跟其它部分没有关系。也就是说可能独立出来,然后可以供其它使用者使用,插件就是这么一种类型。

              多态与封装
   多态是指在一个公用接口后面维护多个实现,也就是说一个公用接口中定义的方法只有等到运行时才会知道该方法如何实现,通俗的来说就是把公用的方法延迟到子类去实现,每个类维护它自己本身的一个实现。
   封装,简单来说就是对客户端代码隐藏数据和功能,通过private,protected等来对客户端隐藏无关的一些内部实现及数据。多态是另一种封装。

              感知设计的需要
   设计代码并不刚开始就能够完美的实现,需要经过不断修改,演绎,最终使自己满足。在设计代码时,通常都需要忽略细节,抓住主干,然后再补充实现。这就是四人帮<设计模式>一书中提到的:为接口而不是实现而编程。接口实际就是最主要的部分,实现就是细节。
   在写代码时,有些常见的状况出现时,通常意味着要设计。
   1. 代码重复:代码重复是最显然的一个,因为如果有多个重复,修改时修改其中一个,其它的也需要修改。
   2. 强耦合:简单的来说就是类知道太多外面的东西了,跟这有关系,跟那有关系。
   3. 万能的类:类的功能太多了,设计原则指出其中一个原则就是单一职责原则。
   4. 条件语句:条件语句意味着分好多情况,分好多类的概念。
0 0
原创粉丝点击