2022年程序设计方案方法的演化及极限 .pdf
《2022年程序设计方案方法的演化及极限 .pdf》由会员分享,可在线阅读,更多相关《2022年程序设计方案方法的演化及极限 .pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 / 24 程序设计方法的演化及极限1引言当今社会是信息社会,信息社会的灵魂是作为“信息处理机”的电子计算机,从1946 年第一台计算机ENIAC问世到今天的“深蓝”,电子计算机的硬件得到突飞猛进的发展,程序设计的方法也随之不断的进步。20 世纪 70 年代以前,程序设计方法主要采用流程图 ,结构化设计 (Structure Programming,SP 思想也趋成熟, 整个 20 世纪 80年代 SP 是主要的程序设计方法。然而,随着信息系统的加速发展,应用程序日趋复杂化和大型化。传统的软件开发技术难以满足发展的新要求。20 世纪 80 年代后,面向对象的程序设计 (Object Orie
2、nt Programming,OOP 技术日趋成熟并逐渐地为计算机界所理解和接受。面向对象的程序设计方法和技术是目前软件研究和应用开发中最活跃的一个领域。如果把过去十年称为“ OO时代”,相信不会引起太多的异议。面向对象技术会如此受到广泛的重视,主要是面向对象的思想接近于客观世界的实际和符合人们通常的思维方式从而易于为人们所接受。到目前为止, OO技术得到了最广泛的应用,并且也被证明不是软件开发的“银弹”。从Robert Martin到 Bertrand Meyer ,研究者们把OO的能力和局限摸了个一清二楚。同时,人们也在传统的 OO三要素 (封装性,继承性,多态性的基层上发展了更多的新技术
3、,借以弥补OO的缺陷 ,使 OO方法和技术能够更好地解决软件开发中的问题。OO技术的一大局限性就是:它对软件职责的划分是“垂直”的。在一个标准的对象继承体系中, 每一继承类主要是负责软件系统中一个特定部分的功能,对象的行为是在编译期间被决定的 。OO 技术的另一大问题是接口问题。在传统的OO环境下,对象开发者没有任何办法确保使用者按照自己的要求来使用接口。 由于 OO技术的这些缺点,按照事物发展的规律,必然促使新的程序设计方法出精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 24 页2 / 24 现来解决这些问题,这就是即将到来的后OO
4、时代。2结构化程序设计早期的计算机存储器容量非常小,人们设计程序时 首先考虑的问题是如何减少存储器开销,硬件的限制不容许人们考虑如何组织数据与逻辑,程序本身短小,逻辑简单,也无需人们考虑程序设计方法问题。与其说程序设计是一项工作,倒不如说它是程序员的个人技艺。但是,随着大容量存储器的出现及计算机技术的广泛应用,程序编写越来越困难,程序的大小以算术基数递增,而程序的逻辑控制难度则以几何基数递增,人们不得不考虑程序设计的方法。最早提出的方法是 结构化程序设计方法 ,其核心是模块化 。1968 年 Dijskstra在计算机通讯上发表文章1 ,注意到了“结构化程序设计”,之后,Wulf 主张“可以没
5、有GOTO 语句” 2 。至 1975 年起,许多学者研究了“把非结构化程序转化为结构化程序的方法”,“非结构的种类及其转化”,“结构化与非结构化的概念”,“流程图的分解理论”等问题。结构化程序设计逐步形成既有理论指导又有切实可行方法的一门独立学科。SP方法主张使用顺序、选择、循环三种基本结构来嵌套连结成具有复杂层次的“结构化程序”,严格控制GOTO语句的使用。 用这样的方法编出的程序在结构上具有以下效果:(1 以控制结构为单位,只有一个入口,一个出口,所以能独立地理解这一部分。(2 能 够 以 控 制 结 构 为 单 位 , 从 上 到 下 顺 序 地 阅 读 程 序 文 本 。(3 由于程
6、序的静态描述与执行时的控制流程容易对应,所以能够方便正确地理解程序的动作。SP的要点是:“自顶而下,逐步求精”的设计思想,“独立功能,单出入口”的模块仅用 3 种( 顺序、分支、循环 基本控制结构的编码原则3 。自顶而下的出发点是从问题的总体目标开始,抽象低层的细节,先专心构造高层的结构,然后再一层一层地分精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 24 页3 / 24 解和细化。这使设计者能把握主题,高屋建瓴,避免一开始就陷入复杂的细节中,使复杂的设计过程变得简单明了,过程的结果也容易做到正确可靠。独立功能,单出、入口的模块结构减
7、少了模块的相互联系使模块可作为插件或积木使用,降低程序的复杂性,提高可靠性。程序编写时,所有模块的功能通过相应的子程序( 函数或过程 的代码来实现。程序的主体是子程序层次库,它与功能模块的抽象层次相对应,编码原则使得程序流程简洁、清晰,增强可读性。在 SP 中,划分模块不能随心所欲地把整个程序简单地分解成一个个程序段,而必须按照一定的方法进行。模块的根本特征是“相对独立,功能单一”。换言之,一个好的模块必须具有高度的独立性和相对较强的功能。模块的好坏,通常用“耦合度”和“内聚度”两个指标从不同侧面而加以度量。所谓耦合度,是指模块之间相互依赖性大小的度量,耦合度越小,模块的相对独立性越大。所谓内
8、聚度,是指模块内各成份之间相互依赖性大小的度量,内聚度越大,模块各成份之间联系越紧密,其功能越强。因此在 模 块 划 分 应 当 做 到 “ 耦 合 度 尽 量 小 , 内 聚 度 尽 量 大 ” 。结构化程序相比于非结构化程序有较好的可靠、易验证性和可修改性;结构化设计方法的设计思想清晰,符合人们处理问题的习惯,易学易用,模块层次分明,便于分工开发和调试,程序可读性强。其设计语言以Ada语言为代表。3面向对象程序设计20 世纪 90 年代,由于计算机硬件的飞速发展,对软件系统在规模和性能方面的要求也在不断的提高。因此,传统的程序设计方法使得软件和硬件能力的差距迅速扩大。传统的软件工具、软件技
9、术和抽象层次越来越难以适应大规模复杂软件系统的开发特点 。 因 此 , 软 件 能力 已 成 为 制约 软 件 发 展 的 主 要 因 素。OOP 方法源于 20 世纪 70 年代中后期,在20 世纪 80 年代逐步代替了传统的SP方法,成为最重要的方法之一,至今OOP方法被广泛应用于各个领域。面向对象的基本思想与结构化设计思想完全不同,面向对象的方法学认为世界由各种对象组成,任何事物精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 24 页4 / 24 都是对象,是某个对象类的实例,复杂的对象可由较简单的对象的某种方式组成。OOP的基石
10、是对象和类。 对象是数据及对这些数据施加的操作结合在一起所构成的独立实体的总称;类是一组具有相同数据结构和相同操作的对象的描述。面向对象的基本机制是方法和消息,消息是要求某个对象执行类中某个操作的规格说明;方法是对象所能执行的操作,它是类中所定义的函数,描述对象执行某个操作的算法,每一个对象类都定义了一组方法。OOP有 3 个重要特性:封装性、继承性和多态性。封装性是指对象是数据和处理该数据的方法所构成的整体,外界只能看到其外部特性( 消息模式、处理能力等,其内特性( 私有数据、处理方法等对外不可见。 对象的封装性使得信息具有隐蔽性,它减少了程序成分间的相互依赖,降低程序的复杂性,提高程序的可
11、靠性和数据的安全性。继承性(Inheritance反映的是类与类之间的不同抽象级别,根据继承与被继承的关系,可分为基类和衍生类,基类也称为父类,衍生类也称为子类,正如“继承”这个词给我们的字面提示一样,子类从父类那里获得所有的属性和方法,并且可以对这些获得的属性和方法加以改造,使之具有自己的特点。继承性使得相似的对象可以共享程序代码和数据,继承性是程序可重用性的关键。多态性是指在形式上表现为一个方法根据传递给它的参数的不同,可以调用不同的方法体,实现不同的操作。将多态性映射到现实世界中,则表现为同一个事物随着环境的不同,可以有不同的表现形态及不同的和其他事物通信的方式。 多态性使程序员能在一个
12、类等级中使用相同函数的多个版本,程序员可以集中精力开发可重用的类和方法而不必过分担心名字的冲突问题。 OOP 方法是以“对象”为中心进行分析和设计,紧抓“模型化世界”的对象,使这些对象形成了解决目标问题的基本构件 ,即 解决从“用什么做”到“要做什么”。其解决过程从总体上说是采用自底向上方法,先将问题空间划分为一系列对象的集合,再将对象集合进行分类抽象,一些具有相同属性行为的对象被抽象为一个类,类还可抽象分为子类、超类(超类是子类的抽象 。其间采用继承来建立这些类之间的联系,形成结构层次。同时对于每精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4
13、 页,共 24 页5 / 24 个具体类的内部结构,又可采用自顶向下逐步细化的方法由粗到细精化之。调试运行时通过向类对象发消息来完成,对象执行相应操作并返回结果,使对象集的初始状态变成了 终 态 。 故OOP 总 体 来 说 主 要 是 不 断 设 计 新 的 类 和 创 建 对 象 的 过 程 。与传统的 SP相比, OOP 方法具有许多优点,如采用“对象”为中心的设计方式,再现了人类认识事物的思维方式和解决问题的工作方式;OOP方法以对象为唯一的语义模型,整个软件任务是通过各对象(类之间相互传递消息的手段协同完成。因此,能尽量逼真地模拟客观世界及其事物;由对象和类实现了模块化,类继承实现了
14、抽象对象,以及任一对象的内部状态和功能的实现的细节对外都是不可见的,因此很好地实现信息隐藏。由此建立在类及其继承性基础上的重用能力可应付复杂的大型的软件开发。面向对象方法使得软件具有良好的体系结构、便于软件构件化、软件复用和良好的扩展性和维护性,抽象程度高,因而具有较高的生产效率。目前,面向对象程序设计语言以Java、C+ 为代表。4后面向对象方法虽然面向对象程序设计方法有诸多优点,但经过多年的实践摸索,人们也发现面向对象方法有其不足,如许多软件系统不完全都能按系统的功能来划分构件,仍然有许多 重 要 的 需 求和 设 计 决 策 , 比 如 安全 、 日 志 等, 它 们 具有 一 种 “
15、贯穿 特 性 ”和“代码交织”(code tangling现象。 代码交织现象是现有软件系统中许多不必要的复杂性的核心。它增加了功能构件之间的依赖性,分散了构件原来假定要做的事情,提供了许多程序设计出错的机会,使得一些功能构件难以复用,源代码难以开发、理解和发展。因此,人们在面向对象的基础上发展了更多的新技术,借以弥补面向对象技术的缺陷,使得面向对象技术能够更好的解决软件开发中的问题。这些建立在面向对象的基础精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 24 页6 / 24 上、并对面向对象做出扩展的新技术被广泛应用的时期,我们把它称
16、为“后面向对象时代 ” 。 在 后 面 向 对 象 时 代 , 有 许 多 新 型 的 程 序 设 计 思 想 值 得 关 注 。4.1 面向方面程序设计面向方面程序设计(Aspect-Oriented programming, AOP 方法,这一概念最早是由施乐 (Xerox 公司在美国加州硅谷PaloAlto 研究中心 上提出4。所谓的 Aspect,就是 AOP提供的一种程序设计单元,它可以将上文提到的那些在传统程序设计方法学中难于清晰地封装并模块化实现的设计决策,封装实现为独立的模块。 Aspect是 AOP的核心,它超越了子程序和继承,是AOP将贯穿特性局部化和模块化的实现机制。通过
17、将贯穿特性集中到Aspect 中,AOP就取得一种单一的结构化行为-该行为在传统程序中分布于整个代码中- 这样就使Aspect 代码和系统目标都易于理解。在 AOP中,Aspect 是 AOP中的一阶实体, AOP中的 Aspect 正如 OOP 中的类。现有对 Aspect 的认识有错误校验策略、设计模式、同步策略、资源共享、分布关系和性能优化等。Aspect 的实现和传统开法方法中模块的实现不同。Aspect 之间是一种松耦合的关系,各 Aspect 的开发彼此独立。主代码的开发者甚至可能没有意识到Aspect 的存在,只是在最后系统组装时刻,才将各Aspect 代码和主代码编排融合在一起
18、。因此,主代码和 Aspect 之间可以是一种不同于传统“显式调用”关系的“隐式调用”5 。在软件复杂性日益增加的今天,隐式调用有巨大的优点,因为某一应用的领域专家,不太可能对分布、认证、访问控制、同步、加密、冗余等问题的复杂的实现机制很熟悉,因此就不能保证他们在程序中进行正确的调用。在当前强调程序演化的情况下,这一点尤其重要 , 因 为 开 发 人 员 很 难 正 确 预 见 到 未 来 对 程 序 的 新 需 求 。AOP 是一种 关注点分离技术 ,通过运用aspect 这种程序设计单元,允许开发者使精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -
19、第 6 页,共 24 页7 / 24 用结构化的设计和代码,反映其对系统的认识方式。要使设计和代码更加模块化、更具结构化,使关注点局部化而不是分散于整个系统中。同时,需使关注点和系统其他部分保 持 良 好 定 义 的 接 口 , 从 而 真 正 达 到 “ 分 离 关 注 点 , 分 而 治 之 ” 的 目 的 。有关 AOP更加详细的资料,读者可以进入希赛网 代理性 (Action On Behalf Others。代理具有代表他人的能力,即它们都代表用户工作。这是代理的第一特征。(2 自制性 (Autonomy。一个代理是一个独立的计算实体,具有不同程度的自制能力。它能在非事先规划、动态的
20、环境中解决实际问题,在没有用户参与的情况下,独立发现和索取符合拥护需要的资源、服务等等。(3 主动性 (Proactivity。代理能够遵循承诺采取主动,表现面向目标的行为。例如, Internet上的代理可以漫游全网,为用户收集信息,并将信息提交给用户。(4 反 应 性 (Reactivity。 代 理 能感 知 环 境, 并 对 环 境作 出 适 当的 反 应 。(5 社会性 (Social Ability。代理具有一定的社会性,即它们可能同代理代表的用户、资源、其它代理进行交流。(6 智能性 (Intelligence。代理具有一定程度的智能,包括推理到自学习等一系精选学习资料 - -
21、- - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 24 页8 / 24 列的智能行为(7 移动性 (Mobility。代理具有移动的能力,为完成任务,可以从一个节点移动到 另 一 个 节 点 。 比 如 访 问 远 程 资 源 、 转 移 到 环 境 适 合 的 节 点 进 行 工 作 等 。面向 Agent 的程序设计 (Agent-Oriented programming方法与面向对象程序设计方法的最基本区别在于Agent 的社会性。面向Agent 程序设计的主要思想是 :根据 Agent理论所题推出的代表性Agent 特性的、精神的和有意识的概念直接设计
22、Agent。这样一个目的后面的动机是人们运用意愿姿态作为一个代表复杂系统的抽象机制。由于Agent的上述特性,基于Agent 的系统应是一个集灵活性、智能性、可扩展性、稳定性、组织性等诸多优点于一身的高级系统。4.3 其它后面向对象程序设计除了上述两种主流的后面向对象程序设计方法外,还出现了许多值得关注的新的程序设计方法。如: 。GP是一种范型 (paradigm 它致力于将各种类型按照一小组功能性的需求加以抽象,然后以这些需求为条件实现算法。 由于 算法在其操作的数据类型上定义了一个严格的窄接口,同一个算法便可以应用于各种类型之上 。GP为应用程序开发人员提出了十分美妙的承诺。它使“从一种一
23、个的软件系统向自动制作软件的各不相同的变体发展”这种思路变得十分真实可信。简 单 地 说 , GP 以 “ 确 定 软 件 开 发 中 自 动 化 的 好 处 ” 为 中 心 进 行 软件 开 发 。2)面向构件程序设计 。在面向构件程序设计中构件就是一组业务功能的规格,面向构件针对的是业务规格,不需要源代码,可执行代码或者中间层的编译代码,在这个层面上可以做到代码的集成、封装、多态,做到AOP ,这才是面向构件的精髓。面向构件技 术 还包 括 了 另一个 重 要思 想, 这就 是 程 序在 动 态运 行时 构件 的 自动装 载 。 敏捷也称作轻量级开发方法,对许多人来说,这类方法的吸引之处在
24、于对繁文缛节的官僚过程的反叛。它们在无过程和过于繁精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 24 页9 / 24 琐的过程中达到了一种平衡,使得能以不多的步骤过程获取较满意的结果。敏捷型方法强调“适应性”而非“预见性”,敏捷型方法变化的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。敏捷型方法是“面向人”的(people-oriented 而非“面向过程”的 (process-oriented,敏捷型方法认为没有任何过程能代替开发组的技能,过程起的作用是对开发组的工作提供支持。5程序设计方法的极限软件工程发展的一个侧重方
25、向是对软件开发过程中分析、设计的方法的研究。这方面的第一个重要成果就是在70 年代风靡一时的结构化开发方法,即PO(面向过程的开发或结构话方法 。 PO 是人们在用计算机世界来表达现实世界时,追求过程话、模块化、封装以及更高的抽象的结果。人们用计算机来映射现实世界时,最低层的实现无非是靠数字电路技术产生的高电平与低电平信号。在 PO中,人们关注的是如何用函数和过程来实现对现实世界的模拟,将其映射到计算机世界之中。 OO 是这种抽象层次不断提高的过程的自然发展结果,它采用类和对象的概念,把变量以及对变量进行操作的函数和过程封装在一起,用这种更高一级的抽象来表达客观世界。通常,一个对象包含一些属性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年程序设计方案方法的演化及极限 2022 程序设计 方案 方法 演化 极限
限制150内