其实C语言诞生以来,人们就想了很多办法来体现“面向对象”的思想。下面就来说说我所知道的方法。
有的人不禁要问,宏定义怎么扯到这里来了,我们可以先看一个简单的例子:
- #define MacroFunction Afunction
然后在程序里面你调用了大量的AFunction,但是有一天,你突然发现你要用BFunction了,(不过AFunction又不能不要,很有可能你以后还要调用),这个时候,你就可以#define MacroFunction Bfunction来达到这样的目的。
当然,不得不说这样的办法是too simple,sometime na?ve的,因为一个很滑稽的问题是如果我一般要改为BFunction,一半不变怎么办? 那就只好查找替换了。
静态的入口函数,保证函数名相同,利用标志位调用子函数:
这样的典型应用很多,比如说网卡驱动里面有一个入口函数Nilan(int FunctionCode,Para*)。具体的参数是什么记不清楚了。保证相同的函数名就是说:网卡驱动是和pNA+协议栈互连的,那么如何保证pNA+协议栈和不同的驱动都兼容呢,一个简单的办法就是仅仅使用一个入口函数。
通过改变如果函数的参数值,来调用内部的各个函数。这样的做法是可以进化的:如果以后想调用新的函数,增加相应的函数参数值就好了。如果我们将网卡驱动和pNA+协议栈看作两个层的话,我们可以发现:
层与层之间的互连接口是很小的(这里是一个入口函数),一般是采用名字解析的办法而不是具体的函数调用(利用FunctionCode调用函数,Nilan仅仅实现名字解析的功能)――!接口限制和名字解析
接口限制:层与层之间仅仅知道有限的函数
名字解析:层与层之间建立共同的名字与函数的对应关系,之间利用名字调用功能。 面向对象的理念是自发的,源自天然的。所以面向对象技术被设计得最遵循思维的自然方式。也就是说,用到的符号,术语,定义和每个人都相关。基于面向对象的分析和设计技术的这些特点,客户可以从始至终参与到系统的分析中去,参与到系统的设计。由于在讨论对象之间的交互作用时,大家使用同样的术语概念。客户还可以参与文档的创建和编写,因为他明确已有对象的含义。这样分析出来的设计绝对是符合需求易于客户使用及管理的。
另外加上面向对象技术方面的继承等技术,使得应用系统的的升级变的轻松。当今计算机硬件的飞速发展使得由于使用面向对象技术带来的速度效率问题变得越来越没那么重要了,而各个行业对于计算机的使用使得软件越来越复杂,清晰的分析和设计条理变成了更主要的问题,而面向对象是非常适合解决这个问题的。
(1)系统分层在数据库和客户端加入一个中间层,在这一层添加业务层和数据访问层,数据访问层与数据库交互为业务层提供数据服务。业务层为客户层提供经过分析及过滤筛选之后的对象及对象集合。
面向对象的理念是自发的,源自天然的。所以面向对象技术被设计得最遵循思维的自然方式。也就是说,用到的符号,术语,定义和每个人都相关。基于面向对象的分析和设计技术的这些特点,客户可以从始至终参与到系统的分析中去,参与到系统的设计。由于在讨论对象之间的交互作用时,大家使用同样的术语概念。客户还可以参与文档的创建和编写,因为他明确已有对象的含义。这样分析出来的设计绝对是符合需求易于客户使用及管理的。
另外加上面向对象技术方面的继承等技术,使得应用系统的的升级变的轻松。当今计算机硬件的飞速发展使得由于使用面向对象技术带来的速度效率问题变得越来越没那么重要了,而各个行业对于计算机的使用使得软件越来越复杂,清晰的分析和设计条理变成了更主要的问题,而面向对象是非常适合解决这个问题的。
【编辑推荐】