[转] 面向对象和设计模式的随想

作者联系方式:会飞的鱼 <parker30_liu at hotmail dot com>

本文来自CSDN博客:http://blog.csdn.net/flyfish30/archive/2008/08/07/2779365.aspx

    面向对象的程序设计技术自60年代诞生以来,从刚开始的前卫而又昂贵(指实现和运行的代价)的技术到现在的遍地开花,已经过去了40来年了。现在,面向对象技术已经渗透到程序设计的各个角落,从大型服务应用框架到GUI框架,到桌面应用程序,到操作系统内核和驱动程序,无处不在。那面向对象究竟是什么呢,设计模式又是什么呢,我们该如何面对呢,无需太过严肃,让我们随意的游历一下吧。

    面向对象技术是将数据和行为封装到一个独立的对象,以对象为基本元素的一种程序设计方法。对象隐藏了实现,每个对象是独立的实体,对象之间通过消息传递(方法调用也是一种消息传递方式)来进行交互。类是同一个类型的对象的描述,是所有该类型的对象的模板,可以由类生成对象,类可以继承自其他类。面向对象是一种程序设计思想,其在一定的抽象层次上将程序实体封装成独立的对象,达到解除程序各部分之间的耦合,理清各部分之间的关系的目的。

    设计模式是在软件开发的长期过程中形成的解决特定场合下的特定问题的一个经过实践检验的可重复使用的高效的解决方案。设计模式是程序设计方法,是以面向对象为基础的。

    每一种面向对象技术的实现都有一个对象系统,一个完备的对象系统背后还有一个类型系统,如C++的类型系统,java的类型系统,用C实现的gobject的GTYPE类型系统。实际上,类型系统是面向对象技术的根本,有了类型,我们才有对象类型、类类型、接口类型、基本数据类型,在这之上才有对象和类、接口等。Linux内核也实现了一个较为简单的对象系统kobject,不过没有对应的类型系统。

    面向对象技术根据是否支持动态类型分为静态型和动态型。如smalltalk就是动态型的,C++则是静态型的。而用C语言实现的gobject也支持动态类型,甚至还实现了一般是动态语言才有的闭包(closure),C还是很强大的。现在新出现的python和ruby等动态语言都是支持动态型的面向对象系统。

    面向对象技术最主要的就是封装、继承、多态、接口,通过多层次、多角度的抽象来达到。封装就是将数据和方法、行为放到一个对象实体中。继承是类与类之间的关系,子类继承了父类的方法和部分数据。多态是调用不同对象的同一个方法,会有不同的行为,至于通过函数重载实现的多态并不是面向对象技术中的多态,可以看作是C++的语法糖。接口是模块和类提供给客户对象的操作界面,其定义了一套操作规范,但并没有实现,由声明具有该接口的具体模块和类实现。

    面向对象技术已经有多种实现。有的实现是完整的,如C++和JAVA等。有的实现具有动态特性,如smalltalk、python、ruby等。有的实现是简单的,如很多用C写的开源软件中的面向对象实现,好像directFB中也有。Linux内核也有一个简单的面向对象实现,就是kset和kobject,实现了一个简单的设备类层次。

    使用面向对象技术编写程序时,不要忘了面向过程的程序设计方法,很多时候需要将面向过程和面向对象相融合才能写出好的程序。我们需要灵活的使用面向对象技术才能得到最好的效果。

    设计模式不仅可以在面向对象的程序设计语言中使用,也可以在C语言,甚至是在汇编语言中使用。这同样可以在用C写的开源软件中看到,linux内核也使用了一些设计模式,如上面说的kset和kobject,使用的是composite模式,内核的动态电源管理,使用了观察者模式,其实现是注册-通知机制。

    设计模式如同武术中的招式,围棋中的定式,需要在特定的场合下使用,不能生搬硬套,需要根据实际情况变招。设计模式提供了系统的隐喻,提供了多种情况下可用的解决方案,让我们可以更快速的思考设计,减少了交流时的障碍。但我们不能局限于这些设计模式中,正如李小龙所言:“以无法为有法,以无限为有限”。

 

时间: 2024-10-30 23:09:20

[转] 面向对象和设计模式的随想的相关文章

面向对象编程设计模式--简单工厂模式讲解

工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了. 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返的类都有一个共同的你类和共同的方法, 但每个方法执行的任务不同,而且根据不同的数据进行了优化. 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一. 下面进行一个代码示例: public class g

解读设计模式----代理模式(Proxy Pattern)

一.说买电脑的那些事 我之前一直用的是台式机,可总感觉不方便,特别是携带,就拿租房子后搬家来说吧,费了不少劲.种种原因有了想换笔记本的想法.5.1假期和一个好朋友特到电脑城去逛了一圈,一进电脑城便见:"HP笔记本XX总代理.IBM笔记本专卖.XX电脑YY总代理......". 看了很多家销售店,给我印象最深的就是到处都是XX牌电脑专卖和代理商,就在同一层楼里我就见着同一牌子有6家代理销售商铺.呵呵,看来我们买电脑就直接找销售代理商就可以,没必要在找生产厂商了,厂商生产出电脑后就是要把产

Java设计模式之综述篇

自从J2EE出现以来,就大大简化了在Java下的企业级开发.但是随着J2EE越来越普遍地被应用到各个领域中,开发者们渐渐意识到需要一种方法来标准化应用程序的开发过程,他们采用的方法是标准化应用程序的结构层.在结构层通常封装了一些独立于业务逻辑的复杂技术,以便在业务逻辑和底层的架构之间建立起弱连接.在个专题中将会介绍一些设计模式,通过利用这些设计模式,开发人员可以达到标准化和简化应用程序开发过程的目的. 应用程序结构和J2EE J2EE是一个很成功的技术,它为一些基本的任务提供了一致的标准,例如数

参透Node中exports的7种设计模式

前言 这篇文章试着要整理,翻译Export This: Interface Design Patterns for Node.js Modules这篇非常值得一读的文章. 但因为这篇文章有些时日了,部分示例已经不符合现况.故这是一篇加上小弟收集汇整而成的更新翻译. 旅程的开始 当你在Node中加载一个模块,我们到底会取回什么?当我们撰写一个模块时我们又有哪些选择可以用来设计程序的界面? 在我第一次学习Node的时候,发现在Node中有太多的方式处理这个问题,由于Javascript本身非常弹性,

我的设计模式学习笔记------&amp;gt;Java设计模式总概况

设计模式(Design Pattern)的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计领域.在<建筑的永恒方法>一书中是这样描述模式的: 模式是一条由三个部分组成的通用规则:他表示一个特定环境.一类问题和一个解决方案之间的关系.每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计. 软件领域的设计模式也有类似的定义:设计模式是对处于特

PHP设计模式之:数据映射模式教程

之前的几种设计模式,都是大大提高了PHP代码的可读性.可维护性.但是,在WEB应用中还有更重要的需求与挑战,那就是:数据库应用.可之前的设计模式,都没有涉及于此.今天写到的,数据映射模式就是能够更好的组织应用程序与数据库进行交互.博主这两天也是花了点时间对,这种模式有了那么一点的了解.斗胆在这个里献丑,按照自己的理解,写一点东西与大家分享,互相学习.当然说到数据映射模式,就不得不提到对象关系映射(Object Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型

java 面向对象面试集锦_java

java  面向对象:这里整理了面向对象的基础知识,帮助大家学习理解,希望能帮助到大家,这里是 根据公司面试资料整理的相关知识: Overload和Override的区别.Overloaded的方法是否可以改变返回值的类型? Overload是重载的意思,Override是覆盖的意思,也就是重写.重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子

面向对象的Javascript之一(初识Javascript)_js面向对象

1. Javascript最大的特性在于其灵活性.作为一名前端开发人员,既可以采用函数式的编程风格,也可以采用更复杂一点的面向对象的编程风格.不管你采用哪种风格,都可以完成一些非常有用的任务.因而,Javascript是一门面向过程的语言,同时也是一门面向对象的语言,进而可以模仿面向对象语言的编程模式和惯用法.我们用一个例子来说明:启动和停止动画. 如果你习惯于函数式的编程风格,代码会如下: 复制代码 代码如下: function startAnimation() { //启用动画 } func

揭穿 XQuery 的神话和误解

    XQuery 给软件架构师和开发人员带来了很多希望,因为大大减少了建立使用 XML 的服务所需要编写的代码量.您也许认为 XQuery 所做的一切很容易理解,但是在 XQuery 的软件开发社区中仍然存在着错误的想法和误解.Frank Cohen 在本文中详细剖析和澄清了围绕着 XQuery 的很多神秘色彩和误解. 如果您在使用 XML.Web 或者面向服务的架构(Service Oriented Architecture,SOA),那么很可能会从 XML Query (XQuery)