﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-黑武士的领地-随笔分类- 软件工程</title><link>http://www.blogjava.net/hou/category/2415.html</link><description>——黑武士是反微软的JAVA阵营的流氓JAVA程序员 </description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:37:44 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:37:44 GMT</pubDate><ttl>60</ttl><item><title>OO以后是什么？</title><link>http://www.blogjava.net/hou/archive/2005/08/01/8924.html</link><dc:creator>黑武士</dc:creator><author>黑武士</author><pubDate>Mon, 01 Aug 2005 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/hou/archive/2005/08/01/8924.html</guid><wfw:comment>http://www.blogjava.net/hou/comments/8924.html</wfw:comment><comments>http://www.blogjava.net/hou/archive/2005/08/01/8924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hou/comments/commentRss/8924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hou/services/trackbacks/8924.html</trackback:ping><description><![CDATA[<FONT size=2>按照技术由概念到原型再到产品的5--5--5规则，面向对象技术现在已经走向成熟，是时候该考虑OO以后是什么了。在这个还没有出现新技术标准的时期，每个人都有权力去思考，以下就是我关于OO以后的思考。&nbsp;<BR><BR>　　OO之后是什么呢？我认为是FO--Function&nbsp;Oriented（面向职能）。这里的Function不同于我们在当前编程所用的函数Function。这里的Function指职能模块。所谓职能模块，是指可独立完成特定任务，而对无力完成的任务可自行找到具备完成该任务功能的其它职能模块，并与之建立联系以合力完成工作的功能体。&nbsp;<BR><BR>　　在阐述我的理由之前，先来看一看我们经历了什么。我们首先经历了PO--面向过程，然后是OO--面向对象。为什么会是这样一个过程呢？因为它是一个由具体变得越来越抽象的过程。人为了更轻松的解决问题，总是希望尽可能抽象的描述问题、解决问题，过于具体有时候会使人感到很痛苦。在面向过程中，我们的方法是“先做什么，再做什么，最后做什么”，这就好像一个成年人做事的方法，他知道每一步该干什么，它按那个步骤去干。在面向对象中，我们的方法是“不管对象是怎么实现的，我们只需知道它可以干什么，怎么让它去干”，这就像一个孩子的做事方法，他不知道那个东西是怎么来的，他只知道那个东西可以用来干什么以及利用它去干他想干的事。管它板凳是怎么做的呢？它可以拿来坐就行啦！更小的孩子是怎么做的呢？他们甚至还不知道板凳可以拿来坐。很简单，“妈咪，我要……”管他妈妈要去干什么或要请谁帮忙干什么呢？反正妈妈会把一切办好，妈妈是万能的。&nbsp;<BR><BR>　　再来看一看我们的工业生产。一开始是手工作坊，一个人从头做到尾，一步一步地做，就好像OP。然后是机器化大生产，各台机器在那造着不同的零件，然后将它们组装到一块；造零件的只知道一个零件单独的作用，但不知道它到底是用到自行车上还是飞机上；组装的则不用知道零件是从哪来的，是谁做的；这就好像是OO。现在的模式是什么呢？公司接到生意，再将生意分散委托给别人做；需要法律顾问，到律师楼请律师；需要企划，找公共关系公司；需要做广告，找广告公司；生产找专门的制造公司；自己公司需要做的就是接到生意，干自己公司可以干的，将干不了和自己干效益不高的部分交给专门的公司干。&nbsp;<BR><BR>　　职能模块就是“妈妈”，就是现在的公司。它干自己可以干的任务；对于干不了的，它知道到那可以找到能干这个任务的模块，并与之协作共同完成工作。顾客将问题交给软件人员，软件人员完成包含职能模块A的程序并将之提交给顾客。顾客使用该程序解决问题，模块A完成它能完成的部分，不能完成的部分由A自动去寻找可以完成剩余部分的B、C、D，B、C、D又可以去寻找E、F、G、H……再一级一级反馈回到A，由A组装成结果提交给顾客。&nbsp;<BR><BR>　　以上是通过其它领域的情况推出OO以后是FO的，那么在我们的计算机领域有些什么来支持这种想法呢？大家知道，在计算机领域关于程序有过三个公式：&nbsp;<BR><BR>　　1、程序=数据结构+算法&nbsp;<BR><BR>　　2、程序=逻辑+控制&nbsp;<BR><BR>　　3、程序={对象1，对象2，……，对象n}　　对象=数据结构+方法&nbsp;<BR><BR>　　第一个公式是FO时代提出的，第三个公式是OO时代提出的。可以看出第三个公式中关于对象的定义与第一个公式中程序的定义的相似性。事实上对象和以前的程序的确很相似，它所缺乏的就是程序的控制结构，因此不论是框架编程还是控件编程，都需由程序员来完成控制结构。现在我们可以想象，数据结构和方法相结合产生对象，下一步干什么呢？当然是将控制结合进去。这就是我们的职能模块，结合了控制的、自动的、智能的模块。&nbsp;<BR><BR>　　大家知道，不久前Microsoft公布了其“.net”计划。它以后的产品将在本地机上实现基本的功能，而更高端的功能将由程序向Microsoft的服务器提出请求，由服务器来完成。这虽然是由客户端软件向固定地址提出请求，不是由模块自身完成且缺乏智能性，但是我们仍然可以将其看作是FO的一种很原始很原始的雏形。&nbsp;<BR><BR>　　实现FO需要什么呢？需要高速智能网络、智能接口、分布式技术、并行技术，最重要的是需要一个国际化的管理机构。&nbsp;<BR><BR>　　为什么需要这些呢？很显然，面向职能是基于全球性的Internet的，这就必然用到分布式技术。大家知道，分布式技术最大的问题就是网络上大量信息的传输，这需要一个高速的Internet。信息在网络上消耗了时间，用并行技术可弥补回来,以空间换时间。职能模块要求自己去寻找可帮助其完成任务的其它模块，当前的网络办不到这一点，这需要的是一个智能网络。模块A需要其它模块与之协作时，要将其要求提出并发消息到网络上的模块搜索器，模块搜索器将找到一到多个具有所要求功能的模块，模块A要找到最符合自己要求的模块B，并按B的接口要求发送B所要求的信息；与此同时，B要能很好的描述自己的功能，很确切的提出自己的要求，并能从A发送来的消息中提取自己需要的信息，这就要求智能模块拥有智能接口。智能模块的标准的定义、大量模块的登记、模块信息的组织、模块使用的协调等等都需要一个国际化的组织来进行管理。&nbsp;<BR><BR>　　我们现在又有什么来支持这些呢？提到分布式计算，当然会想到CORBA。事实上，CORBA和我们这职能模块的工作方式是很相似的。使用职能模块，在模块完成不了工作时，通过网络向其它模块求助。CORBA应用程序也是通过向Smart&nbsp;Agent发送消息，再通过smart&nbsp;agent找到相应的CORBA对象来完成工作。但CORBA对象的接口是如此的确定，大量的控制工作仍是由程序员完成。职能模块的接口是模糊的、智能化的，一切控制由模块自己去完成。寻找模块必须通过高速智能网络。高速现在已越来越不成为问题了。而智能化，由CISCO公司提出的基于DEN的智能网络解决方案让人看到解决问题的曙光。最麻烦的是智能接口，这需要极端先进的人工智能技术。人工神经元网络也许是解决问题的途径，但一切离彻底解决问题还太遥远。&nbsp;<BR><BR>　　当一切都解决时，我们桌面上的应用程序将变得如此的简单，如此的相似。它们拥有不同的界面，但它们所做的事情都一样：接受命令，联系模块搜索器，将一切具体的工作都交给模块供应商提供的职能模块去干吧！&nbsp;<BR><BR>　　在机器能理解自然语言的时候，用语言命令计算机工作的时代自然也就到来了！&nbsp; <BR></FONT><img src ="http://www.blogjava.net/hou/aggbug/8924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hou/" target="_blank">黑武士</a> 2005-08-01 15:14 <a href="http://www.blogjava.net/hou/archive/2005/08/01/8924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>