编程接口的广义思考
2016-05-25 07:19
225 查看
接口相信大家都不陌生,其实接口不止在程序中运用,在生活中它也无处不在。
面向对象的程序语言都提供有接口,像 C# ,java 等 ,在java程序中你可以使用interface关键字申明设计自己的接,也可以使用implement继承别人的接口。
有很多图书都喜欢将接口比喻为一种职能,像一个工作,你得到工作就要去上班,上班的时候你会使用一些工作赋予你的权利去更好的完成工作。例如在java中继承 MouseListener 接口,你要做的工作就是实现几口中的所有方法,在这个接口中一共要实现五个方法,如果实现了这些方法,你就有了监听鼠标的能力。通过这个接口你可以随时了解鼠标的状态,同理你也可以通过实现接口来监听键盘、控制鼠标、控制键盘。只要java类库提供了相应的API。
由上面程序中的接口可以引出一种思想,或者说仅仅是我个人的观点。
接着思考上面监听鼠标的接口我们会发现,我们不知道鼠标的型号,不知道鼠标的厂家,也不知道鼠标内部的电路结构,就连鼠标用的驱动我们都不曾了解,当然我们确实监听了它(下面提供有监听鼠标的java源码),为什么可以这样,因为接口具有隐藏、和抽象的特性。隐藏的底层的复杂性,抽象出一个一般的操作方法。程序语言就是人与电脑之间的接口,程序员通过各式各样的代码来操控电脑。其实每个人都是程序员,只要你会使用电脑。你每一次移动鼠标或按下键盘电脑都会在背后执行很多代码,这些代码都是写好的隐藏在操作系统内部。这其实就是接口嵌套,编程有一定的复杂性,不可能让每个操作电脑的人都去学编程(那样的话很多人都会疯掉),所以人们编写了操作系统,将操作计算机的程序代码封装到操作系统中,用户只需要按需求调用。所以我们并不是直接操作电脑,我们通过操作系统这个接口操作程序代码,再通过程序代码这个接口操作计算机,这种接口嵌套极大的隐藏了操作的复杂性,你不需要了解硬盘是如何读写数据,内存是如何寻址,cpu如何运算,甚至你都不需要了解电脑还有硬盘内存,你只需要通过操作系
统这个这个接口动动鼠标敲敲键盘就可以完成大多数需要电脑去完成的工作。
接口无处不在所以不只会出现在电脑上,方向盘,油门,刹车,就是操作汽车的一个接口(这个接口有点硬),你不需要了解发动机内部复杂的机械是如何运转的你只需要踩一踩油门就可以控制。再过不久谷歌的智能汽车上路你连油门都不用踩,动动口或者动动手指即可,这也是嵌套接口隐藏了方向盘,油门,刹车,的复杂性只需要一个目的地,人工智能将根据路况自动驾驶。
接口就是一种能力的控制手段,我们大部分时间都在不停的创造和改造接口。
以上仅为个人观点,欢迎批评指正。下面是鼠标简单监听的java源码,老手跳过。
x is代表当前鼠标x轴坐标,y is 代表当前y的坐标 最右边的文本显示的是鼠标的状态。
运行的结果参考图片
面向对象的程序语言都提供有接口,像 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); } }
运行的结果参考图片
相关文章推荐
- 编程实现计算FIRST集和FOLLOW集C++之(二)处理候选式:右部为空
- 【华为OJ】【106-Sudoku-Java】
- 第108讲: Spark Streaming电商广告点击综合案例动态黑名单过滤真正的实现代码
- Some C++ Concepts
- C/C++-style输入输出函数
- leetcode #33 in cpp
- MATLAB FDATool IIR数字滤波器设计
- Strassen's algorithm to compute matrix multiplication
- eclipse 安卓开发环境搭建
- python2.7下安装scrapy
- leetcode #32 in cpp
- OSChina 周三乱弹 ——掌握写代码核心科技的名人们!
- [Ruby笔记]14.Ruby local_variable
- 用python记录运行pid,并在需要时kill掉它们
- java中的命名规范
- eclipse开发时常用的快捷键
- C#匹配中文字符串的4种正则表达式分享
- JavaWeb会话管理:(2)Session
- 组合简便算法 (long long 与__int64)
- 64_鸡兔同笼