本篇文章主要介绍了"面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现) --转载",主要涉及到方面的内容,对于软件工程感兴趣的同学可以参考一下:
引言--面向接口所处的设计模式中的位置。其实,我认为Java/C#比C++高级的其中一个原因是,它对面向接口编程的支持。不要误解,并不是说C++不支持面向接口编...
引言--面向接口所处的设计模式中的位置。
其实,我认为Java/C#比C++高级的其中一个原因是,它对面向接口编程的支持。不要误解,并不是说C++不支持面向接口编程,而是说C++的语法中没有这种天然的机制。
面向对象之于面向过程,面向接口之于面向实现。但基本上,面向接口和面向实现都基于面向对象的模式,也就是说面向接口并不能称为比面向对象的更高的一种编程模式。而是在面向对象中大的背景下的一种更加合理的软件设计模式,它增强了类与类之间,模块与模块的之间的低耦合性,是软件系统更容易维护、扩展。
不管是面向什么,都是一种软件设计模式,与具体的语言有没多大关系。
就像之前介绍C语言一样,并不是说C语言这种面向过程的语言不能做面向对象编程,而是说,C语言当初设计的并没有针对面向对象软件系统的风格而进行设计的。由于后来的面向对象软件设计风格的流行,后来者语言C++/java/C#都在语言设计上充分考虑了支持面向对象的方便性,所以这些语言称为面向对象编程语言。
根据语言之间没有能力大小的理论,C是可以进行面向对象编程的(实践上也是可行的)。
上面理论同样适合讨论—— C++之于面向接口编程。
面向接口软件设计,并不是在java或C#中出现interface这种关键字后才有的。还是那句话,它是一种软件设计模式,与具体语言无关,C++或者C都可以并且也大量使用过这种编程模式。而仅是因为这种模式的优点,java与C#才在C++的基础上,设计成更好的支持面向接口编程(里面提出的语言级别的接口的概念)。
两种interface的概念
这就需要了解语言(java/C#)级上的interface,与软件设计级别上的interface了。可以说,是现有软件设计上的interface概念,然后那些“后起”语言,就为了充分的支持这种软件设计(毕竟设计最终要用语言实现),而加入了"interface"这个关键字及其相关概念。也就是说,即使java/C#不使用它们语言自带的interface技术,也可以进行面向接口编程(你或许知道——使用抽象类)。这么讲吧,两种接口不属于同一级别的东西,并不应该拿来比较,但一定要比较,可以认为,软件设计上的接口概念比语言级别的接口概念要大。
面向接口(设计)编程是什么意思,为了什么,有什么好处
(1)说文解字
“面向”这个词,在软件设计编程中得到大量的使用。但似乎我们有不是很明白它到底代表什么意思。就像前面纠结“面向对象”这个词是什么意思的时候,我们也需要对“面向接口”这个词有较为深刻的解析。
“对象”与“数据”的区别在于“对象是信息与处理信息的方法的载体,而数据只是信息的载体”,而“面向”这个词的关键含义是,当我们在设计一个系统、实现一个系统的时候,我们基于、以什么为设计和编程的目标。面向过程设计和编程,设计师和程序员在设计和编程的时候所面对的、和所能够利用的东西往往只是一些变量。而面向对象则不同,他们面对的是一些对象,可以说是一些活生生的对象。
比如你要编程控制一个人。
面向过程编程中,给你的只是一个人的信息体(结构体),这个信息体中包含完整描述一个人的各种“静态信息”的数据,例如姓名、性别、年龄、体重、样貌等等,这种时候,如果要控制一个人,让他说一句话“你好吗”。那么你就需要,专门设计一个函数或者一个过程,来调用这个人的所具备的各种机体,然后让他说出话来(实际上是等于知道一个人如果把那句话发出来)。这是一个很让人头痛的东西,而我们希望的是程序员或这是设计人员面向的是一个活生生的人,这个人是会说话的,它并不需要我们叫他如何和说话,我们要让它说话只需要将说的内容传递给他,而他就会说出来。这个说话就是这个人的“动态信息”。