1. java面向接口的编程什么意思什么情况下去用
做大型项目时,有些功能会多次用到,为了程序的可拓展性和可利用性,会选择接口
2. 什么是面向接口编程及一个简单实例
面向接口编程是一个很高级的概念了以前的面向对象编程,以java为例子,主要的操作针对对象来进行,把要处理的问题简化分解成对象的方式来解决,对对象的使用主要是引用对象提供的方法后来的使用过程中,逐渐有人发现,当程序的内容不断扩大,程序的编写和完善需要更多的人员来合作完成的时候,面向对象的方式有些不便就很突出了,主要的就是类的继承和方法的重写,查询起来和引用起来很多不便。所以现在有面向接口编程的理念提出来,接口就是标准,接口就是规范,但是接口没有实现的方法,这样避免了很多类的继承的问题,特别在大型的程序的编写方面有广泛的应用。什么是面向接口编程及一个简单实例
3. 有谁帮我阐述一下:面向接口编程的思想,及其优点
首先你要知道软件工程的概念是什么!简单的说软件工程就是让程序模块化,把特定的代码逻辑独立封装,只传入参数和返回参数,外部集中调用。这也就是C、c++、java、c#中的方法、函数、类库头文件等体现。
而接口也是基于这个目的产生的。首先说说为什么要用到接口,我是学java的,所以以java举例,前面说了把代码逻辑独立的封装确实能增加代码的重用性,具有更好的性能。
但是同样的问题也产生了,如果系统结构很复杂,多个开发人员就不能做到有效的协作了。就像用零件拼装一辆汽车一样,很多工人一起工作,他们怎么知道哪2个零件之间结合在一起,怎么耦合。这和软件工程很类似,多个开发人员一起开发不同的模块,他们同样也会遇到程序结构耦合的问题,这都是在开发时很令人头疼的问题。
接口就是为解决这个问题诞生的,他把方法和类封装的更彻底,只显示入口参数和返回参数,而具体的实现类,和方法实现都可以完全隐藏起来,这样做就可以制定一个统一的标准,即使因为开发人员人多脑杂,模块间的代码风格和思路不同,也完全不影响整个系统的架构,这样使得系统的复杂性得到有效控制,降低开发的难度和成本。举个生动的例子就是电脑主板的生产商他无法知道他生产的主板上将要用的CPU是什么型号的,用的内存是什么规格的。但是只要制定统一的行业标准,他就可以预留指定的接口,无论你CPU是基于什么工作原理,也无论你内存多大,只要符合此接口的标准,各个原件就能有效协作组成一台电脑。
4. 什么是面向接口编程
什么是接口?
-- 在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承), 由关键词 interface 修饰。
什么是面向接口编程?
-- 在系统分析或架构设计中,每个层级的程序并不是直接提供程序服务,而是定义一组接口,通过实现接口来提供功能。面向接口编程实际是面向对象编程的一部分。
面向接口编程的优点?
1、接口的定义和实现分开(分开有什么好处呢?)
首先,项目一般是由团队共同开发来完成的,在其中,接口的定义一般是由架构师来设定,然后又编程人员来实现完成,架构师根据架构、设计规则来设定接口,把握项目的整体视图和编写规范,编程人员实现具体业务逻辑,分工明确,程序清晰。
其次,从实现上看,接口的定义时间很短,但接口的实现周期相对较长,若一个编程人员需要调用其他人员编写的某个方法时,可以采用多态的方式获取接口对象,来调用方法,这样保证团队共同完成开发。
2、接口可以有多个实现类,便于以后的业务扩展
什么意思呢?
-- 比如实现类的业务需要扩展功能,此时可以采用重新实现接口的方式,这样降低了程序的冗余 和 一个类写太多行代码的尴尬。
另外,接口的多实现易于通过配置文件的方式配置接口的实现类(这个是指在spring中管理对象的时候)。
5. (Java)谁能给个“面向接口编程”的例子
很简单啊,我给你一个java类库里的接口怎样啊?是一个经常用到的MouseListener:
/*
* @(#)MouseListener.java 1.17 03/12/19
*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.awt.event;
import java.util.EventListener;
/**
* The listener interface for receiving "interesting" mouse events
* (press, release, click, enter, and exit) on a component.
* (To track mouse moves and mouse drags, use the
* <code>MouseMotionListener</code>.)
* <P>
* The class that is interested in processing a mouse event
* either implements this interface (and all the methods it
* contains) or extends the abstract <code>MouseAdapter</code> class
* (overriding only the methods of interest).
* <P>
* The listener object created from that class is then registered with a
* component using the component's <code>addMouseListener</code>
* method. A mouse event is generated when the mouse is pressed, released
* clicked (pressed and released). A mouse event is also generated when
* the mouse cursor enters or leaves a component. When a mouse event
* occurs, the relevant method in the listener object is invoked, and
* the <code>MouseEvent</code> is passed to it.
*
* @author Carl Quinn
* @version 1.17, 12/19/03
*
* @see MouseAdapter
* @see MouseEvent
* @see <a href="http://java.sun.com/docs/books/tutorial/post1.0/ui/mouselistener.html">Tutorial: Writing a Mouse Listener</a>
* @see <a href="http://www.awl.com/cp/javaseries/jcl1_2.html">Reference: The Java Class Libraries (update file)</a>
*
* @since 1.1
*/
public interface MouseListener extends EventListener {
/**
* Invoked when the mouse button has been clicked (pressed
* and released) on a component.
*/
public void mouseClicked(MouseEvent e);
/**
* Invoked when a mouse button has been pressed on a component.
*/
public void mousePressed(MouseEvent e);
/**
* Invoked when a mouse button has been released on a component.
*/
public void mouseReleased(MouseEvent e);
/**
* Invoked when the mouse enters a component.
*/
public void mouseEntered(MouseEvent e);
/**
* Invoked when the mouse exits a component.
*/
public void mouseExited(MouseEvent e);
}
接口与类的写法差不多,这个接口放在MouseListener.java(称为一个编辑单元)里.
6. 面向接口编程,具体怎么操作
面向接口编程[zz]
在前面的章节中,我们提到一个接口设计的例子。为什么我们提倡接口的设计呢?Martin Fowler在他的分析模式一书中指出,分析问题应该站在概念的层次上,而不是站在实现的层次上。什么叫做概念的层次呢?简单的说就是分析对象该做什么,而不是分析对象怎么做。前者属于分析的阶段,后者属于设计甚至是实现的阶段。在需求工程中有一种称为CRC卡片的玩艺儿,是用来分析类的职责和关系的,其实那种方法就是从概念层次上进行面向对象设计。因此,如果要从概念层次上进行分析,这就要求你从领域专家的角度来看待程序是如何表示现实世界中的概念的。下面的这句话有些拗口,从实现的角度上来说,概念层次对应于合同,合同的实现形式包括接口和基类。简单的说吧,在概念层次上进行分析就是设计出接口(或是基类),而不用关心具体的接口实现(实现推迟到子类再实现)。结合上面的论述,我们也可以这样推断,接口应该是要符合现实世界的观念的。
在Martin Fowler的另一篇著作中提到了这样一个例子,非常好的解释了接口编程的思路:
interface Person {
public String name();
public void name(String newName);
public Money salary ();
public void salary (Money newSalary);
public Money payAmount ();
public void makeManager ();
}
interface Engineer extends Person{
public void numberOfPatents (int value);
public int numberOfPatents ();
}
interface Salesman extends Person{
public void numberOfSales (int numberOfSales);
public int numberOfSales ();
}
interface Manager extends Person{
public void budget (Money value);
public Money budget ();
}
可以看到,为了表示现实世界中人(这里其实指的是员工的概念)、工程师、销售员、经理的概念,代码根据人的自然观点设计了继承层次结构,并很好的实现了重用。而且,我们可以认定该接口是相对稳定的。我们再来看看实现部分:
public class PersonImpFlag implements Person, Salesman, Engineer,Manager{
// Implementing Salesman
public static Salesman newSalesman (String name){
PersonImpFlag result;
result = new PersonImpFlag (name);
result.makeSalesman();
return result;
};
public void makeSalesman () {
_jobTitle = 1;
};
public boolean isSalesman () {
return _jobTitle == 1;
};
public void numberOfSales (int value){
requireIsSalesman () ;
_numberOfSales = value;
};
public int numberOfSales () {
requireIsSalesman ();
return _numberOfSales;
};
private void requireIsSalesman () {
if (! isSalesman()) throw new PreconditionViolation ("Not a Salesman") ;
};
private int _numberOfSales;
private int _jobTitle;
}
这是其中一种被称为内部标示(Internal Flag)的实现方法。这里我们只是举出一个例子,实际上我们还有非常多的解决方法,但我们并不关心。因为只要接口足够稳定,内部实现发生再大的变化都是允许的。如果对实现的方式感兴趣,可以参考Matrin Fowler的角色建模的文章或是我在阅读这篇文章的一篇笔记。
通过上面的例子,我们可以了解到,接口和实现分离的最大好处就是能够在客户端未知的情况下修改实现代码。这个特性对于分层技术是非常适用的。一种是用在层和层之间的调用。层和层之间是最忌讳耦合度过高或是改变过于频繁的。设计优秀的接口能够解决这个问题。另一种是用在那些不稳定的部分上。如果某些需求的变化性很大,那么定义接口也是一种解决之道。举个不恰当的例子,设计良好的接口就像是我们日常使用的万用插座一样,不论插头如何变化,都可以使用。
最后强调一点,良好的接口定义一定是来自于需求的,它绝对不是程序员绞尽脑汁想出来的。