面向接口编程的优点
① java 面向接口编程,好处在哪
好处:
接口和实现分离了,适于团队的协作开发。
更具体的优点:可以参看IDP原则。J2EE中的API规范基本上都是接口,由各应用服务器来实现,比如:WebSphere按照这个接口实现自己的,WebLogic也按照这个接口实现自己的,作为开发者来说我们根本就不用去管谁是怎样实现的,只要按照J2EE的API
来写就可以了,根本用不着导入它们的实现包,实际上具体的是由它们自身完成了。
接口说白了,也就是定死了一个框,具体的是糊红纸还是糊黑纸我们都用不着去管的,我们只要知道它是个框,提供
了哪些方法就够了。举个简单的JDBC的例子吧,比如有个BaseDao接口,现在有MySQLDao实现了一个(我们可以把具体的实现类配在配置
文件中,再通过反射进行实例化),也就类似这样的:
BaseDao=(BaseDao)(Class.forName(Config.getDaoName()).newInstance());
.其中Config.getDaoName()可以获得配置文件中的配置,比如是:com.bao..impl.MySQLDao。
要改用Oracle了,这样我们只要按BaseDao的定义,再实现一个OracleDao就可以了,
再将配置文件中的配置改为:com.bao..impl.OralceDao就可以了,而在已经写好的代码中,我们可以一行不
改的进行了数据库移植,这个就是面向对象设计原则中的“开-闭原则”(对增加是开放的,对修改是封闭的)但这只是理论上的,现实中很难做到的。
② java面向对象程序设计有什么优缺点
优点
1、抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2、继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3、封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4、多态:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
缺点
1、过度封装:使用OOP时,会把一些复杂的问题分拆抽象成较简单的独立对象,通过对象的互相调用去实现方案。但是,由于对象包含自己封装的数据,一个问题的数据集会被分散在不同的内存区域。互相调用时很可能会出现数据的cache miss的情况。
2、多态:在C++的一般的多态实现中,会使用到虚函数表。虚函数表是通过加入一次间接层来实现动态派送。但在调用的时候需要读取虚函数表,增加cache miss的可能性。基本上要支持动态派送,无论用虚函数表、函数指针都会形成这个问题,但如果类的数目极多,把函数指针如果和数据放在一起有时候可放缓问题。
③ 面向对象程序设计的优点是什么
1、维护简单
面向对象程序设计的一个特征就是模块化。实体可以被表示为类以及同一内名字空容间中具有相同功能的类,可以在名字空间中添加一个类而不影响该名字空间的其他成员。这种特征为程序的维护提供了便捷性。
2、可扩充性
如果有一个具有某一种功能的类,就可以扩充这个类,创建一个具有扩充功能的类。
3、代码重用
功能是被封装在类中的,类是作为一个独立实体而存在的,因此可以很简单的提供类库,使代码得以重复使用。
(3)面向接口编程的优点扩展阅读
面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
④ 关于java面向对象编程和面向接口编程区别
Struggle说得对。根本不是一个层次的东西。“面向对象思想”和“面向过程思想”相对,而“针对接口(抽象)编程”和“针对实现编程相对”。首先纠正楼主一个认识误区,任何编程思想都是在试图建立现实世界和计算机世界的“映射”。无论是面向过程还是面向对象或者是其它的什么思想,根本目的都是在计算机中建立现实世界的模型,通过模型的“沙盘推演”,达到解决现实问题的目的。宏观上说,无论是面向对象还是面向过程,都是一种世界观,是一种对世界的认知和划分。只不过面向过程的思想把世界划分为数据结构和函数,而面向对象的思想把世界划分为对象和方法。相对于面向过程的思想而言,面向对象思想和现实世界的“映射”更容易建立,所以现在面向过程的思想已经逐渐被面向对象的思想所取代(但是这绝不是说面向对象思想可以完全取代面向过程的思想)。c语言是面向过程思想的典范,而面向对象的思想的代表编程语言有Java和C++等(切忌语言和语法规则服务于编程思想)。任何的编程语言只是编程思想得以实现的载体。
面向接口编程本身是面向对象编程思想所提倡的一种编程规范。因为它能够最大限度的解耦,所谓解耦既是解耦合的意思,它和耦合相对。耦合就是联系,耦合越强,联系越紧密。在程序中紧密的联系并不是一件好的事情,因为两种事物之间联系越紧密,你更换其中之一的难度就越大,扩展功能和debug的难度也就越大。举个硬件例子,道理和软件相同
软盘你知道吧,骨灰级的存储工具,最初是3.5英寸的,后来变成了2.5英寸,无论哪一种,都采用软驱中的磁头读取软盘上的数据,而且存储能力都小得可怜,现在你已经很难再见到它们了。后来出现了光盘,工作原理和软盘相似,但是传输速度和存储容量都大大超过软盘。遗憾的是软驱是无法读取光盘的,硬件制造商不得不提供光驱来替代软驱。今天既是一个不懂电脑的人,也不会利用软驱读取光盘?为什么呢?起码软盘和光盘的直径就不一样,塞不进去,然而你不这么做根本原因不是因为它太过匪夷所思,而是软驱和软盘的紧密“耦合”使得软驱只能用来读取软盘。但是USB接口则不同,Intel睿智的设计者们提出了这种传输接口,它几乎能够接驳几乎所有你想得到的输入输出设备,现在无论你接驳的是外置的USB光驱,还是USB软驱,甚至是最新的比USB产生还要晚的面部识别系统他都恩那个够正常工作,硬件制造商们不需要再去费脑筋提出更新的“X驱”了。什么原因呢?因为USB接口是针对抽象“接口”设计的松耦合设备,USB接口的提供端并不知道也不需要知道接口的另一端是鼠标、键盘、摄像头还是其它的什么设备,它对任何传输进来的数据都采用相同的处理规则,管你是什么,你符合USB的传输方式我就支持你。这样你可以任意更换USB的另一端设备,而且你惊奇的发现他们都能够正常工作!软件编程也是一样,Java类库中这样的例子太多。比如Arrays.sort()方法,该方法是一个排序方法,需要利用Compareble接口的compareTo()方法,但是compareTo()方法没有任何实现,它需要你自己去编写,这是合理的因为计算机并不知道如何比较你定义的数据(是字典排序字符,还是大小排序阿拉伯数字或者其它的什么方式)。那就只好交给你自己来编写,sort方法是一个针对抽象接口Compareble编程的方法。,该方法只是专注于采用哪种排序方式,是冒泡排序还是快速排序,而不考虑具体两个对象的比较方式。具体的你最好看看api。总结一下针对接口编程给编写程序最大限度的解耦合,提供了最大的扩展性。它使得整个程序,不会因为局部的更改(无论是因为修正错误还是提供功能的扩展),而“牵一发而动全身”,造成整个软件必须重新编写。
⑤ 面向接口编程和面向实现编程的区别
面向接口表示子类是实现接口或者抽象类,而面向实现表示继承普通类,
明显前者耦合比较低,
因修改代码比较低,因为接口和抽象类本身有的方法不干
事情,而是子类去去实现,