您的位置:首页 > 编程语言

编程接口的广义思考

2016-05-25 07:19 225 查看
接口相信大家都不陌生,其实接口不止在程序中运用,在生活中它也无处不在。

面向对象的程序语言都提供有接口,像 C# ,java 等 ,在java程序中你可以使用interface关键字申明设计自己的接,也可以使用implement继承别人的接口。

有很多图书都喜欢将接口比喻为一种职能,像一个工作,你得到工作就要去上班,上班的时候你会使用一些工作赋予你的权利去更好的完成工作。例如在java中继承 MouseListener 接口,你要做的工作就是实现几口中的所有方法,在这个接口中一共要实现五个方法,如果实现了这些方法,你就有了监听鼠标的能力。通过这个接口你可以随时了解鼠标的状态,同理你也可以通过实现接口来监听键盘、控制鼠标、控制键盘。只要java类库提供了相应的API。

由上面程序中的接口可以引出一种思想,或者说仅仅是我个人的观点。

接着思考上面监听鼠标的接口我们会发现,我们不知道鼠标的型号,不知道鼠标的厂家,也不知道鼠标内部的电路结构,就连鼠标用的驱动我们都不曾了解,当然我们确实监听了它(下面提供有监听鼠标的java源码),为什么可以这样,因为接口具有隐藏、和抽象的特性。隐藏的底层的复杂性,抽象出一个一般的操作方法。程序语言就是人与电脑之间的接口,程序员通过各式各样的代码来操控电脑。其实每个人都是程序员,只要你会使用电脑。你每一次移动鼠标或按下键盘电脑都会在背后执行很多代码,这些代码都是写好的隐藏在操作系统内部。这其实就是接口嵌套,编程有一定的复杂性,不可能让每个操作电脑的人都去学编程(那样的话很多人都会疯掉),所以人们编写了操作系统,将操作计算机的程序代码封装到操作系统中,用户只需要按需求调用。所以我们并不是直接操作电脑,我们通过操作系统这个接口操作程序代码,再通过程序代码这个接口操作计算机,这种接口嵌套极大的隐藏了操作的复杂性,你不需要了解硬盘是如何读写数据,内存是如何寻址,cpu如何运算,甚至你都不需要了解电脑还有硬盘内存,你只需要通过操作系
统这个这个接口动动鼠标敲敲键盘就可以完成大多数需要电脑去完成的工作。

接口无处不在所以不只会出现在电脑上,方向盘,油门,刹车,就是操作汽车的一个接口(这个接口有点硬),你不需要了解发动机内部复杂的机械是如何运转的你只需要踩一踩油门就可以控制。再过不久谷歌的智能汽车上路你连油门都不用踩,动动口或者动动手指即可,这也是嵌套接口隐藏了方向盘,油门,刹车,的复杂性只需要一个目的地,人工智能将根据路况自动驾驶。

接口就是一种能力的控制手段,我们大部分时间都在不停的创造和改造接口。
以上仅为个人观点,欢迎批评指正。下面是鼠标简单监听的java源码,老手跳过。
x is代表当前鼠标x轴坐标,y is 代表当前y的坐标 最右边的文本显示的是鼠标的状态。

package Mytest;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;

import org.omg.CORBA.ARG_OUT;

import Mytest.Dialog.MouseHander;

public class MyMouseListener extends JFrame implements MouseListener,MouseMotionListener{

Font myFont = new Font("幼圆", 20, 45);

private JLabel jb1,jb2,jb3;
public MyMouseListener() {
// TODO Auto-generated constructor stub
Dimension myToolkit = getToolkit().getScreenSize();
int x=(int)myToolkit.getWidth()/2;
int y=(int)myToolkit.getHeight()/2;
int x0=(int)myToolkit.getWidth()/4;
int y0=(int)myToolkit.getHeight()/4;
jb1 = new JLabel();
jb2 = new JLabel();
jb3 = new JLabel();
jb1.addMouseMotionListener(this);
jb2.addMouseMotionListener(this);
jb3.addMouseListener(this);
jb3.addMouseMotionListener(this);
jb3.setFont(myFont);
this.addMouseMotionListener(this);
this.setLayout(new GridLayout(1,3));
this.add(jb1);
this.add(jb2);
this.add(jb3);
//this.setBounds(myToolkit.getWidth()/4,myToolkit.getHeight()/4,myToolkit.getWidth()/2,myToolkit.getHeight()/2);
this.setBounds(x0, y0, x, y);
this.setVisible(true);
this.setDefaultCloseOperation(3);

}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub

jb3.setText("clicked");

}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
jb3.setText("Entered");
}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
jb3.setText("Exited");
}

@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
jb3.setText("Processed");
}

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
jb3.setText("Released");

}
public static void main(String[] args){
new MyMouseListener();
}
@Override
public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub

}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
int x=arg0.getX();int y= arg0.getY();

jb1.setFont(myFont);jb2.setFont(myFont);
String sx = String.valueOf(x);String sy=String.valueOf(y);
jb1.setText("x is: "+sx);jb2.setText("y is: "+sy);

}

}


运行的结果参考图片
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: