4. OO之后是什么? 一、 从软件工程的发展历史来看 1969年NATO会议之后,“软件危机”成为人们关注的焦点。为迎接软件危机的挑战,人们进行了不懈的努力。这些努力大致上是沿着两个方向同时进行的。一是从管理的角度,希望实现软件开发过程的工程化。这方面最为著名的成果就是提出了大家都很熟悉的“瀑布式”生命周期模型。它是在60年代末“软件危机”后出现的第一个生命周期模型。如下所示。 分析 → 设计 → 编码 → 测试 → 维护 后来,又有人针对该模型的不足,提出了快速原型法、螺旋模型、喷泉模型等对“瀑布式”生命周期模型进行补充。现在,它们在软件开发的实践中被广泛采用。 这方面的努力,还使人们认识到了文档的标准以及开发者之间、开发者与用户之间的交流方式的重要性。一些重要文档格式的标准被确定下来,包括变量、符号的命名规则以及原代码的规范格式。 值得一提的是,在开发者之间、开发者与用户之间的交流方式这方面,由于Internet的出现提供了一种全新的交流手段,也产生了一种基于Internet的全新的开发方式,即OSS(Open Source Software)。 其代表作有Linux(操作系统),Apeche(web server),Sendmail(Mail server)等。OSS是一种极有前途的开发方式,借Internet发展的大潮,它势必会对整个软件开发模型产生难以估量的影响。近期的IEEE软件工程专刊将为次出一期专题特刊。1999年1月份也将举行关于Linux/OSS的国际研讨会。各家计算机公司纷纷对此作出反应,微软也意识到了来自OSS的巨大威胁,在8月底提出了一份内部保密的文件,专门提出了自己的应对策略,可谓是山雨欲来风满楼。有兴趣者请对此保持关注。 软件工程发展的第二个方向,侧重与对软件开发过程中分析、设计的方法的研究。这方面的第一个重要成果就是在70年代风靡一时的结构化开发方法,即PO(面向过程的开发或结构话方法)。 PO是人们在用计算机世界来表达现实世界时,追求过程话、模块化、封装以及更高的抽象的结果。 人们用计算机来映射现实世界时,最低层的实现无非是靠数字电路技术产生的高电平与低电平信号。用数学的语言来表示,就是像 010101000010111 这样的二进制串。这样的抽象层次是极低的,远离了自然语言,对一般人是不可理解的。人们把这些二进制串分块定义,提出了字节、ASCII码这样的更高抽象层次的概念,使之对应于自然语言的一个个字母。在此基础再借助某种形式语言,抽象出变量、表达式、运算、语句等概念。在这个层面上,一般经过训练的程序员已经可以比较不那么痛苦地进行软件开发了。下一步的抽象就产生了PO。 在PO中,人们关注的是如何用函数和过程来实现对现实世界的模拟,将其映射到计算机世界之中。 OO是这种抽象层次不断提高的过程的自然发展结果,它采用类和对象的概念,把变量以及对变量进行操作的函数和过程封装在一起,用这种更高一级的抽象来表达客观世界。通常,一个对象包含一些属性和方法,它对应于自然语言中一个有意义的名词,描述了现实世界中的一个物体(物理实体)或概念(抽象实体)。 这个抽象层次如下图所示: 计算机世界中的抽象层次 *XO(X?-Oriented) 最高的抽象层次 *OO(对象、类) *PO(过程、函数、变量) *变量、运算、表达式、语句 *字节(4位、8位、16位、32位、64位) *二进制串 0101011110001 最低的抽象层次 从上图及以上的讨论我们知道,软件工程的发展历史就是人们不断追求更高的抽象、封装和模块化的历史。OO当然不会是历史的终结。尽管不能精确得到OO之后是什么,我们至少可以推知,OO之后的XO,必然将是比OO更高一级的抽象。它所依赖的核心概念必然高于并包容对象这一概念。正如对象高于并包容了函数和变量一样。 二、 从维特根斯坦在《逻辑哲学论》一书中的思想来看
前面我们已经知道,维特根斯坦在《逻辑哲学论》 一书中提出了如下思想: *世界可以分解为事实 ( The world divides into facts.) *事实是由原子事实(atomic facts)组成的。 *一个原子事实是多个对象(objects)的组合。 *对象是简单的(基本的) The Object is simple。 *对象形成了世界的基础。 即: 世界---事实----原子事实----对象这样一个从整体到局部、从抽象到具体的认识之链。在这个层次中,对象作为最基本的模块,构成了整个认识大厦的基石。对象通过相互之间的复杂的关联构成了整个世界。这个观点也是面向对象理论的基石。 上一段我们通过对计算机世界的分析得出,OO之后的发展,必将产生比OO更高一级的抽象的概念用于编程。按照维特根斯坦的思想可以很自然地得出结论:这个概念就是事实(FACT)。即面向对象之后是面向事实,OO之后是FO(Fact-Oriented)。 那么,什么是事实(fact)?让我们再次重温一下维特根斯坦的观点。 首先,世界是所有事实的总和。世界可以分解为事实。任一事实或者为真,或者不为真。(即事实应返回一个布尔变量,或为TRUE,或为FALSE) 其次,那些为真的事实,是由原子事实(atomic facts)组成的。 原子事实和简单对象的关系是这样的:一个原子事实是多个对象(object)的组合。在原子事实中,对象以某种确定的方式相连。原子事实中对象相互连接的方式即是原子事实的结构。 也就是说,原子事实是有结构的,这种结构被维特根斯坦看作是现实世界的模式(form)。 这里,维特根斯坦提出了几个重要的概念:事实(fact)、原子事实(atomic fact)和模式(form)。 如果我们以上的推理过程正确的话,我们将得出一个结论:面向对象(OO)之后是面向事实(FO),在面向事实(FO)的分析、设计和编程中,我们将主要围绕事实(fact)、原子事实(atomic fact)和模式(form)这些基本概念来组织我们的软件开发活动。在人们认识世界的层次结构中,这些概念是比对象(object)和类(class)更高一级的抽象。 5. 最后的极限 OO之后如果FO,那么我们当然要问,FO之后又是什么?再往后哪?有没有一个最后的极限?若有,极限何在?这是个很困难的问题,不过还是让我们继续思考下去,看看能有些什么结果,尽管它可能会是十分愚蠢和幼稚。 我们知道,软件的实质是人们以计算机编程语言为桥梁,将客观感知世界映射于计算机世界中去,以解决人们在客观感知世界中要解决的问题。这里牵涉三个主要的范畴: 客观感知世界--------计算机编程语言----------计算机世界 (1)计算机世界 在计算机世界中,可以想象的是,单位面积的一块芯片上可以集成的晶体管数目总会有个上限,摩尔定律早晚要失效。另外,现在多数电脑采用的冯.诺依曼结构也需要被突破。(如并行计算的研究) (2)计算机编程语言 现在的计算机编程语言,都是某种类型的形式语言。要解决一个问题,首先我们必须为它构造算法。也就是说,对于没有算法的问题,我们是束手无策的。这类问题被成为是“不可计算的”。它们的解不能由图灵机来产生。这是我们面临的一个极限。 那么一个问题有了算法,是不是就一定可以解决哪?很遗憾,答案是不。对于那些NP(非多项式)问题,尤其是NP完备的问题,尽管存在算法,我们仍然是无法在多项式时间内解决的。著名的“哈密顿线路问题”和“旅行推销员问题”都属于这类问题。它们的共同特征是,当问题的规模(或复杂度)线形增加时,解决该问题所要化的时间将呈指数上升,以至于它们尽管理论上是可求解的,但实际上却是不可能的。因为要花费的时间可能已经超过了宇宙的寿命。这也是我们面临的一个极限。 还需要指出,现在的计算机语言作为形式语言的一种,也必然具有形式语言自身所有的局限性。数学的发展史上,曾经有三次危机,第三次危机是有罗素的一个“佯谬”引发的悖论危机。为解决此危机,希尔伯特提出了宏伟的形式化规划,企图使数学一劳永逸地处于无可争辩的安全基础之上。可是,1931年奥地利25岁的天才数学逻辑学家歌德尔提出了一条划时代的定理,粉碎了希尔伯特形式化的美梦。哥德尔定理向我们展示,公理系统本身的协调性的陈述在被编码成适当的算术命题后,将成为一道这样“不能决定的”不能决定的命题。想象一个表达式既不为真,也不为假,它的真假对一个形式系统(计算机)而言它是不可判定的。因此在这方面,哥德尔定理是我们面临的又一个极限。 (3)客观感知世界 现在让我们假设软件工程已经发展到了这样一个理想的境界,有一天我们实现了自然语言编程,是否就万事大吉了?换句话,自然语言是否能很好地描述、表达客观感知世界? 维特根斯坦在《逻辑哲学论》里已经指出了。 *世界的意义必定存在于世界之外; *显然伦理学是无法表述的。 伦理学是超越现实的; *实际上存在着不可表达的东西;这显示了它的存在;它是神秘的。 (见《逻辑哲学论》第六节) 也就是说,外部世界中存在一些我们可以感知却无法用语言来表达的东西。 他接着说: “对于那些不可言说的,必须保持沉默。”(Whereof one cannot speak,thereof one must be silent) 这句话,成为我们最后的极限。 在讨论完这三个范畴中我们将面临的主要问题后,我们最后来讨论一下人的主观世界对软件及软件开发的影响。 6. 极限之外的空间
世界可以分为主观想象世界和客观可感知世界,或者说是内世界和外世界。其中,主观想象世界是计算机从未涉足的空间。这是属于我们个人的私有空间,充斥着我们自己离奇古怪的幻想和起伏不定的情绪。它具有极大的跳跃性和不确定性,常常以直觉、想象的方式进行着自己的活动。它们通常是语言所不能表达的。 尽管这个内世界是如此的复杂、混乱、难以捉摸,但它却是我们与生俱来的一部分。 我们就是这样的人。 就是这样的人从事着软件开发的工作。 这样的人开发出来的软件究竟在多大程度上是对客观世界不折不扣的映射?还是这个映射过程已经被扭曲或掺杂了?软件开发者的这个主观想象世界,他们的欢乐、沮丧、奇想、恐惧、希望等等,究竟是怎样影响着软件开发的质量? 人们是要用计算机来复制整个世界?还是来复制人本身? 人们是在扮演上帝的角色吗? 这样的问题我实在不知该如何去解答,甚至觉得根本无从下手。 如果你还有足够的耐心读到这里,请你也来想一想,希望它们不会使你头疼。 :) 最后,我将引用我从网上偶尔发现的一篇文章中的话作为结束语: “自以为是的立法者(人类)犯下了一个大错,以为自己能定义整个软件开发过程。他们既不了解其开始也不了解其结果。学术界试了一下,然后就知难而退了。商业界则对其毫无办法。大型软件开发商们斥巨资来制造代码,明明想要扮演上帝的角色,却还装作自己是人类的公仆。所有人都在盯着镜子里的自己。计算机却在一旁偷偷的笑。” |
相关推荐
标题中提及的“OOALV常用功能完整简例”,描述中说明了该简例包含的内容:热键单击、双击、帮助、编辑和自定义工具条等。OOALV是指面向对象的ALV,它是在SAP系统中常用的报表输出组件,用于将数据以表格形式展示。在...
### ABAP OOALV 学习文档详析 #### 一、ABAP OOALV 概述 **ABAP OOALV**(Object-Oriented Application List Viewer)是一种用于SAP系统的高级列表显示技术,主要用于生成复杂的报表和列表视图。自R/3 4.6C版本起...
### OO4O简介及其在VC++中的应用 #### 摘要 OO4O(Oracle Objects for OLE)是Oracle公司推出的一种高级底层接口,专为基于Oracle数据库的应用程序开发而设计。它提供了快速访问Oracle数据库的能力,并且兼容微软...
3. **OOALV介绍**:面向对象的ALV(OOALV)是ALV的一种扩展,引入了面向对象编程的概念,使得开发者能够更灵活地定制ALV的功能。通过创建类和继承,可以实现更复杂的逻辑和界面定制。 4. **CL_SALV_TABLE类**:OO...
实战OO_用例建模 实战OO_用例建模 实战OO_用例建模
3、Windows XP/WIN7/win10系统(64位系统对应64位dll文件,32位系统对应32位dll文件),将oo2core_6_win64.dll复制到C:\Windows\System32目录下。 4、如果您的系统是64位的请将32位的dll文件复制到C:\Windows\SysWOW64...
ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数
SAP OO ALV技术介绍 SAP OO ALV技术是SAP系统中的一种报表控件类,通过调用cl_gui_alv_grid类的方法可以实现ALV报表的显示。OO ALV技术可以满足大多数ALV需求,但有时需要与后续的屏幕开发等集中在一个屏幕中,或者...
3. 继承与代码复用:通过继承,ABAP OO可以重用已有类的方法,只需要编写新类特有的功能,减少了代码冗余,提高了可维护性。面向过程编程中,代码复用通常需要复制和粘贴,难以实现灵活扩展。 4. 接口与业务逻辑:...
《实战OO》是一本深入探讨面向对象(Object-Oriented, OO)编程技术的书籍,主要针对软件开发人员,特别是那些关注于软件设计流程和优化的开发者。此书的PDF版本是作者或读者为了个人学习和参考而留存的备份,包含了...
3. 系统设计阶段使用对象模型,可以清晰地描述系统的设计。 OO RES 的缺点包括: 1. 需要专业的技术背景和面向对象技术的知识。 2. 需要大量的时间和资源来进行需求分析和系统设计。 在江苏油田勘探开发一体化...
Oracle Objects for OLE (OO4O) is a product designed to allow easy access to data stored in Oracle databases using any programming or scripting language that supports the Microsoft ...
SAP OO ALV技术介绍 SAP OO ALV技术是SAP系统中的一种报表控件类,通过调用cl_gui_alv_grid类的方法set_table_for_first_display可以实现ALV报表的显示。OO ALV技术相比于标准函数REUSE_ALV_GRID_DISPLAY和REUSE_...
oracle oo4o 817安装包oracle oo4o 817安装包oracle oo4o 817安装包
[SAP ABAP开发技术总结]ALV详解(Fuction ALV 和OO ALV) 图文并茂,详细介绍了Fuction ALV 和OO ALV的相关开发 [SAP ABAP开发技术总结]ALV详解:Function ALV(一) [SAP ABAP开发技术总结]ALV详解:Function ALV...
在本实例中,我们将深入探讨如何使用Object Oriented for Oracle (OO4O)库和Microsoft Visual C++ 6.0(或Visual Studio .NET)来实现对Oracle数据库的C++编程操作。OO4O库是Oracle公司提供的一个接口,允许开发者...
2. **预编译语句**:预编译SQL语句可以提升执行效率,因为数据库只需解析一次SQL模板,之后只需替换参数即可。 3. **批处理**:批量执行相似的DML语句可以减少网络通信次数,提高执行速度。 **六、安全注意事项** ...
PPT,需求分析,OO分析前言,PPT,需求分析,OO分析前言,
#### 三、主要类及其用途 - **`cl_gui_alv_grid`**: 这个类是OOALV的核心类,负责ALV的基本功能和行为。开发者通常会实例化这个类,并通过其提供的方法来定制ALV的显示效果。 - **`cl_gui_custom_container`**: 用于...