交互的本质思考

    交互是个很有意思的东西,也是计算机科学里必须的一项课题,当今主流的交互无非是字符交互和图形化交互。前者可能多出现在比较专业的地方,而后者则出现在人们日常的各种计算机系统中,因为毕竟图形化的东西比较直观,也符合人类的认知习惯。

    我们和计算机打交道有两种,一种是和OS交互,一种是和OS上的应用软件(程序)交互。举个例子,如果我们要删除一个文件,那么我们就是和OS交互,我们向OS请求,请求它删除我们指定的一个文件(当然这个功能应用软件也可以完成,但是归根结底还是OS来做这件事)。如果我们要用QQ向好友发出一条信息,那么显而易见,我们是和QQ这个应用软件来交互的,我们请求QQ,请求它将我们指定的一些信息发给某个好友。但是对普通用户而言,无论是和OS的交互还是和具体应用程序的交互,都是和计算机的交互。可以说用户眼里不去管具体是由什么程序去做这件事,只是知道我这台计算机完成了这次任务。

 

    那么字符交互和图形化交互两种交互究竟有什么区别呢?其实两种交互背后的逻辑完全相同,都是用户表达自己的意愿给计算机,由计算机来实现它。一次字符的输入到结果的输出和用户触发屏幕上的一个按钮到响应,这两个过程后所要做的事情逻辑上可能完全相同。只是两者的驱动方式不同。前者很简单,就是把一个程序所需要的输入直接输入给该程序,然后程序去执行得到结果(可能也会展现给用户);后者则多了很多手续,首先是用户产生事件给OS,比如触屏事件(消息),OS会把这个事件(消息)转发给我们的应用程序,应用程序还要判断这个事件类型、参数等,然后去触发相应的逻辑,这个时候就和字符输入一样了。然后得出结果后还要以图形化的形式展现给用户,还要涉及到界面元素的重绘问题。所以图形化界面适合用事件驱动,展现上稍微多了几步,但是核心的逻辑都是一样的。

    当今的交互最主要的形式还是图形化界面,图形化界面的一个核心就是窗口(管理器)。比如linux系统里的X window窗口系统,即使利用了CS结构来实现图形化界面。其核型思想是包含一个X Server,主要负责监听用户的输入事件,比如:键盘,鼠标响应。同时和显卡交互完成界面的显示,另一个X Client则表示一个应用程序,它处理从X Server传来的用户事件,并且把绘制图形的请求交给Server来处理。

    其实说到底,我们都是和硬件交互,不是吗?我们触摸的是键盘,鼠标,在当前的触屏手机上连这些都没有了,我们直接和屏幕交互。但是,我们又不是和硬件交互的,我们触摸屏幕,我们敲击键盘,这些都只是我们交互的手段,我们最终交互的还是和软件,我们要告诉软件去完成我们的工作,这些硬件的中断,软件的事件之类的消息都是表达我们交互的载体,并非我们交互的目标。不是吗?再比如我们用浏览器访问远程的一个网页去获取一定的数据,那么我们究竟是和谁交互呢?呵呵,这要看我们解决问题的领域,如果你是做网站的,那么就是和远程服务器(进程)在交互,或者说和后台数据库在交互,如果你是做浏览器的,那么自然用户是和浏览器软件在交互,如果你说做硬件驱动的,那么用户就是和硬件在交互,如果你是做网络通信的,那么用户就是和socket在交互了。

    我们分析问题是一定要站在某一层面上去考虑,不然会乱成一团麻的。要根据问题域来决定在哪个层面进行思考。

    比如,我们考虑软件(包括OS)时,就不要站在硬件的层次去思考。我们要很快去屏蔽到硬件的细节,比如键盘的中断如何产生,触屏的电容如何工作等。我们就认为,我们按了一下键盘,这个键盘的数字就被传给了操作系统,我们触摸了一下iPhone的屏幕,一个手势事件产生并传递给了操作系统。这个层次上,我们是和操作系统在交互的。

   再比如我们在Framework之上考虑软件构成时,就不要考虑我们触摸一下屏幕,这个手势是怎样从硬件中断到操作系统,再到Framework,最后到我们的程序的。我们就可以认为是我们的这个触摸动作直接传给了我们的图形界面上的图元,我们所要做的就是设置监听来响应这个触发事件。在这个层次上,我们就是和我们的图形界面在交互了。

   总之,当前的系统软件已经帮助我们屏蔽了很多很多的底层细节,让我来专心的考虑应用逻辑。我们如果不做系统开发,那么有必要了解这些知识,但是当我们应用时,要能暂时的忘掉这些细节,专心的集中在我们这个layer,不要被这些错综复杂的细节所打乱。在有图形界面的系统上,我们一般都是建立在它们的应用程序框架上去写程序的。比如symbian,window,QT,KDE等。这就是我们写上层APP人员的“底层”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值