讨论:什么是面对对象
Panr 2004-01-02 04:08:54 题:关于“面对对象”理论
Panr 2004-01-02_16-00
//////////////////
//0前言
//0.1来由
这段时间我一直在考虑架构的问题,经过一段时间的努力,CSDN 上的讨论过程如下
http://expert.csdn.net/Expert/TopicView1.asp?id=1988630
http://expert.csdn.net/Expert/TopicView1.asp?id=2211555
http://expert.csdn.net/Expert/TopicView1.asp?id=2224368
http://expert.csdn.net/Expert/TopicView1.asp?id=2464664
在试图用不同的方法描述以后,我决定把原帖分为两个主题:
1.软工中的信息流转,参考这个帖子
http://expert.csdn.net/Expert/TopicView1.asp?id=2509650
2.OO理论与主要模型类别(模型类别就是自动机)
“对象”就是数据实例,是一个状态上下文,它描述了一个实例当前处在什么状态
“类型”定义了对象特性,它能够根据当前状态和当前消息确定出对象的下一状态
欢迎在本帖子中讨论
//0.2目录
0前言
0.1来由
0.2目录
1形象
1.1概述
1.2面向过程
1.3基于对象
1.4面向术语
1.5面向过程向基于对象进化
1.6基于对象向面向术语进化
2自动机
2.1概述
2.2特点的比较
2.3面向过程的图灵机
2.4基于对象的协作机
2.5面向术语的智能机
//////////////////
//1形象
//1.1概述
计算机程序的代码总是会被划分在多个模块中,根据划分模块不同,我们可以把程序归类为以下三类
面向过程的程序
基于对象的程序
面向术语的程序
//1.2面向过程
典型的面向过程的例子是汽车的组装流水线。我们将建设几间厂房,一间厂房中布置了几条组装流水线,在一号厂房中有一条轿车组装线、一条面包车组装线;二号厂房有两条公交车组装线,...
现在我要组装一辆卡车时,就需要先确定厂房,然后找到卡车的组装线,再把所有的工件提供给组装线,最后我们就可以得到一辆完整的卡车了
每一条组装加工的流水线就是一个功能函数,通过对特定的工件的组装加工,我们获得处理的结果
//1.3基于对象
典型的基于对象的例子是“绿色贝雷帽的战斗小组”。每组十二人,首先是组长和副组长,然后是担任作战任务的士官2人、担任维修和技术任务的士官2人、担任医疗任务的士官2人、配备重火器的士官和轻武器的士官各1人、担任通讯任务的士官2人
可以想象得出小组成员必然经过许多的“作战”“医疗”和“通讯”这些基本的训练,所有的人都能作战,会处理伤口,使用所携带的通讯器材....
那么为什么不能平衡体力消耗“今天你扛了重火器,明天就扛轻一点的医药箱”呢?
我指定这两位为作战兵,那两位为医疗兵,是因为我的士兵不在乎这点体力,我需要明确职责便于管理
如果没有指定医疗兵,医药箱就极有可能是轮流扛的,这样副组长将分心考虑药品有没有受潮,麻醉剂需要避光保存等杂务
现在组长知道有人受伤了,他只是需要喊一声医疗兵,然后问一下医疗兵伤员需要休息几个小时才能恢复战斗力
所以虽然在战斗小组中只有一样的特种队员,但是我还建立了七个抽象数据类型来说明
组长、作战兵、重火器兵、轻武器兵、通讯兵、维修兵、医疗兵
//1.4面向术语
典型的面向术语的例子是“经济类犯罪”。法律都是以条款的形式的被规定的,所以法律条款中的术语是什么含义是很值得研究的。比如“人”这个术语,最初有人提出法律面前人人平等,然后经济马上扩展了“人”的外延,把政府机关、经济实体称为“法人”
经济法中有一种做法叫“合理避税”,比如用公司的固定资产乘上折旧率,把折旧费用作为生产的支出的一部分,那就可以减少一部分的税收了,这就是“合理避税”
假设少做某一笔帐可以少交了一千,电脑的折旧支出也可以少交了一千
那么你不做那笔帐也没报折旧支出,少交了一千税款并且犯了法;做那笔帐又上报折旧支出,你还是少交了一千的税款但是没犯法
法盲不值得被同情。文字游戏是有意义的,有些东西是值得推敲的,术语概念则需要被准确地理解和熟练地运用
-----杂谈
上面的例子是术语的运用,术语的理解来说有两个问题,行业术语过于口语化,术语随着时代(市场定位)发生变化
过于口语化的定义将经不起推敲,比如摄像监控中会有一个词叫“警情”,报警的发生叫做“警情来了”,后来我把警情分成了“报警信息”“警情录象”两个概念
-----
//1.5面向过程向基于对象进化
为每条组装流水线配备一个“Line长”,为每个厂房配备一个“车间主任”
这样以后,就有了基于对象的形式,各个组件间通过团结协作达成共同的目标,我们在全局上将主要考虑如何协作的问题
为了进一步优化,我们可能需要不断重构组件
//1.6基于对象向面向术语进化
把战斗小组的人数增加到1400,或者十万人,那么什么后勤保障系统、辅助管理系统都会建立起来
这样以后,许多的工作都不得不通过交流来完成,这种交流就是一种条款的方式,我们在全局上将主要考虑公正性和合理性的问题
//////////////////
//2自动机
//2.1概述
自动机系统是研究信息处理工程的概念,是一台“能回答某个问题的机器”
一个自动机只能回答一个问题,而且对你提问的格式有很多的要求
通俗打个比方说明:
int AutomataAdd (int nA, int nB)
{
int nAnswer;
nAnswer = nA + nB;
return nAnswer;
};
这里的AutomataAdd 就是一个加法自动机(只能回答加法问题),你只能按“被加数”和“加数”的格式提问,然后AutomataAdd 将告诉你答案
自动机可以包括以下基本型:
“图灵机型”是面向过程的软件实现模式,前面的AutomataAdd 就是一个例子
“协作机型”是基于对象的软件实现模式
“智能机型”是面向术语的软件实现模式,是自动机的乌托邦,它将运用信息理论中的所有知识
//2.2特点的比较
表2.2.1、运用类特点的比较
基本特征 运用软件
面向过程 实现功能的代码 自动化
基于对象 便于管理的数据 管理类软件
面向术语 具有智能的术语 具有自动学习能力的软件
表2.2.2、实现类特点的比较
研究主题 工作途径 指导原则
面向过程 算法 逻辑推理的运用 实现功能
基于对象 构架 架构的设计 满足客户所有需求
面向术语 知识 术语的进化 术语的的语义合理性
//2.3面向过程的图灵机
设计图灵机的工作途径是:运用推理逻辑
图灵机是这种操作策略的结果:[无策略]
关键的问题是要找出从输入(问题)到输出(答案)的推理过程
推理过程其实是我们自己的分析推理的过程,是通过“分析推理的自动化(模拟解题过程)”来获得答案的自动机
这个推理过程在必须是无歧义地在有限次操作内完成,通过顺序点的概念我们将可以把“这个推理过程”和“程序运行时上下文”一一对应起来
//2.4基于对象的协作机
设计协作机的工作途径是:架构的设计
协作机是这种操作策略的结果:先明确研究对象,再研究和设计对象间的协作关系
关键的问题是要找出业务数据,并规定业务数据间的交互协同等作用关系
业务数据就是我们的研究对象,“对象实例通过交互协作后,属性所处的状态”就是自动机相关问题的答案
-----杂谈
其实“先明确研究对象再展开研究”的做法在哲学上是错误的
正确的做法是:先观察现象,归纳属性,再决定是否要针对某几个属性组合出一个术语概念
“明确研究对象”这个过程肯定是工作的一部分
如果这个工作是由程序本身完成的,那将再不是单纯的协作机
-----
//2.5面向术语的智能机
设计智能机的工作途径是:术语的进化
智能机是这种操作策略的结果:术语系统的迭代
协作机中“明确研究对象”的过程就是构造“低版本的术语系统”,这个过程只是认知过程的起点,而后我们还要在此基础上在不断地进化推演和实践,修改术语概念的定义,获得“高版本的术语系统”
智能机是协作机的扩展,它回答问题的模式就是协作机的模式
但是智能机中,数据实例具有什么属性是可以变化的,既然协作机是通过“属性所处的状态”回答问题的,原则上它具有更自由的答题能力
这就是术语的进化过程