当前位置:文档之家› 西安交通大学研究生面向对象技术考试要点

西安交通大学研究生面向对象技术考试要点

1.绪论软件=程序+数据+文档;软件工程=过程+方法+工具(过程:when、in what order方法:what);软件过程:是指一套关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及相关Artifacts(计划、文档、模型、编码、测试、手册等)组成。

三种方法:UP(the unified process),The OPEN Process,OOSP(The Object-Oriented Software Process)。

2.软件工程模型回顾软件过程的基本模型:线性顺序模型:瀑布模型(Waterfall);进化模型:原型法模型(Prototyping);基于构件的开发模型(Component-Based Development)。

迭代模型:增量模型(Incremental);螺旋模型(Spiral)其他(Formal,RAD,4GT) 2.1瀑布模型(Royce,1970)历史最悠久、应用最广泛,虽然Royce 提出的瀑布模型支持反馈环,但大多数使用该过程模型的机构均将其视为严格线性的过程模型。

瀑布模型的流程(无反馈环):分析→设计→编码→测试。

缺点:①实际项目很少按照该模型给出的流程进行。

虽然线性容许迭代,但这种迭代是间接的,且极容易导致混乱。

②客户常常很难清楚地给出所有需求,但该模型却要求非得如此,并且不能忍受项目开始阶段自然存在的不确定性。

③客户必须有足够的耐心,因为软件产品的运行版本一直要等到项目开发周期的晚期才能得到。

④如果直到检查运行程序时才发现大的错误,其后果很有可能是灾难性的。

⑤线性顺序会导致“阻塞状态”,即等待时间> 开发时间。

2.2原型法模型(Bernard Boar,1984)帮助客户明确其需求(以增量方式进行)原型法模型的流程(环状)规格描述、开发和验证等阶段交织在一起;原型的本质:“口香糖+ 打包绳”。

优点①开发者与客户之间的误解,可通过对系统功能的“示范”而被识别出来。

②客户在使用原型法模型期间,可以发现新的需求或找出未发觉的问题。

③可大量节约开发成本,并可提高系统的应变能力。

缺点①原型只包含局部功能,难以掌握系统的整体动态状况。

②许多机构认为在原型上花费过多资源是一种浪费,因为原型一般(二般呢?……) 无法成为真正的系统而必须抛弃。

③维护工作较为困难。

2.3基于构件的开发(Component-Based Development,CBD)出发点:复用;基础:庞大的可复用软件构件库+ 构件的集成框架;CBD 的典型代表:统一软件开发过程(Unified Software Development Process,USDP)优点①能显著减少软件开发工作量(70%),从而能显著降低开发成本(84%) 和开发风险。

②软件产品可以尽快交付客户。

缺点①需求折衷无法回避,可能导致系统与客户实际需求背离。

②当可复用构件的新版本不受开发者的掌控时,系统的演化能力将可能受损。

未来:面向对象技术将使CBD 如虎添翼,因为面向对象技术能够开发出大量可复用的构件。

2.4增量模型:融合了瀑布模型的基本成分和原型法模型的进化特征;每一个线性序列产生软件的一个可发布的“增量”;任何增量的处理流程均可以结合原型法模型;第一个增量往往是核心的产品增量模型vs.原型法模型:与原型法模型最大的不同在于,增量模型特别强调每一个增量均发布一个可操作产品,亦即早期的增量是最终产品的“可拆卸”版本。

优点①不必等到最终产品完成,客户便可以从早期增量受益。

②客户可以把早期增量作为原型,并为后期增量提出需求。

③尽管某些增量可能存在问题,但是整个项目的风险较低。

局限性①增量不能太大②每个增量均应具备一定功能③客户需求与增量大小之间的映射应匹配。

发展:极限编程。

2.5螺旋模型(Boehm,1988)吸收了瀑布模型和原型法模型的优点;增加了风险分析;使软件的增量版本的快速开发成为可能。

优点①使用原型实现作为降低风险的机制。

②在系统开发初期,风险性高的部分首先被考虑,从而能及早发现错误、降低风险并减少开发成本。

③在编写软件时,已有产品可供运行或“示范”。

缺点①客户对该模型的可控性常常产生疑虑。

②开发者需要具备和掌握较多风险评估的知识和技术。

③如果某个大风险未被及时考虑,会给后续开发造成困难。

2.6形式化模型(Formal)的局限性:开发很费时、很昂贵。

具有使用形式化模型所必需背景的开发者寥若晨星,尚需多方面的培训。

当客户对形式化模型一无所知时,开发者无法将该模型作为和客户进行通信的机制。

2.7快速应用开发(RAD)强调极短的开发周期;是线性顺序模型的一个“高速”变种;与增量模型具有相似性;通过使用基于构件的建造方法实现快速开发;RAD主要用于信息系统开发。

缺点①对于大型软件开发项目必须有足够的人力资源支持②要求客户和开发者均应在短的时间框架内完成各自相应的快速活动,任何一方爽约均会导致项目失败③当系统难以模块化时,或者当高性能是系统的主要指标时,RAD 将可能失效④RAD不适合技术风险高的情况2.8第四代技术(4GT)是多种软件过程模型的综合;包含了一系列软件工具;开发者在更高抽象层次上描述软件规格;软件工具根据开发者的软件规格描述自动生成源代码。

优点①显著缩短了软件的开发时间②显著提高了建造软件的生产率。

缺点①目前的4GT 工具易用性不够高②目前的4GT 工具生成的源代码太低效③使用4GT 工具开发的大型软件产品的可维护性令人生疑。

未来:4GT与基于构件的模型相结合后,将可能成为软件开发的主流方法。

3.面向对象概述问题空间中,对象是现实世界中存在的实体应用所关心的抽象,概念、规则、事件、或者具有明确边界和意义的具体事物。

解空间中,对象是问题空间中的对象在计算机系统中的表示, 封装(encapsulation) 了数据和行为的通信单位。

对象的非严格记法:<对象> ::= <接口,数据,行为>。

对象的基本特征①每个对象均有自己的惟一标识,从而区别于 其他对象。

②对象之间通过消息进行通信。

③对象总是处于一 定的状态。

④对象有若干种行为。

⑤对象的行为分为三类:创建新对象、与其他对象通信、改变自身状态。

⑥对象的状态只能被自身的行为所改变。

⑦某个对象的状态可以由多个其他对象的状态构成。

类是创建对象的模板问题空间中:类代表着具有类似性质的一组对象;类中的每一个对象即为类的不同实例。

解空间中:类是对一组对象的抽象,集中了该组对象的共同特性。

类实际上是具有特定功能的模块。

类vs. 对象:静 vs. 动。

抽象数据类型 (Abstract Data Type ,ADT)是对一组对象的更高层次抽象。

ADT = 数据 + 操作。

ADT vs. 类:类=ADT+实现(可能只是部分);类“瘦”极限(未进行任何实现)=ADT ;“胖”极限(完全实现),有效类。

类间关系:继承 (inheritance);聚合 (aggregation);关联 (relationship)。

继承的含义:是一种“求同存异”的高度抽象方式。

(一般化(generalization),具体化(specialization))。

一般化、具体化、继承等术语均是复用思想的体现;一般化和具体化是对同一个类间关系的不同角度审视:父类是子类的一般化 (从父类角度看);子类是父类的具体化(从子类角度看)。

继承强调一般化 / 具体化关系中共享属性和操作的机制。

聚合的含义:表示“部分——整体”关系(组元类 (component class),组合类(assembly class))。

组合对象的存在依赖于组元对象。

性质:传递性 (递归聚合的基础);逆对称性。

关联的含义:对象实例之间的物理或概念联结被称为链;关联是对一组语义与结构相似的链的抽象;链是关联的实例。

聚合 vs. 继承:聚合更强调对象实例之间的关系,本质上是“与关系”(is partof ,ISP)继承更关注对象类之间的关系,本质上是“或关系”(is a,ISA)。

聚合 vs. 关联:聚合是关联的一种特殊形式;聚合与关联之间的模糊差异无关紧要。

消息是对象之间进行通信的构造或结构;消息分为请求消息和完成消息两种;消息模式:发送对象、接收对象、内容。

事件指对象之间一次消息的传递;多个事件按照时间顺序可构成事件序列。

消息 vs. 事件:静 vs. 动。

消息与对象:一个对象能接收不同形式不同内容的多个消息。

相同形式的消息可以送往不同的对象。

对于相同形式的消息,不同对象可以有 不同的解释,可以做出不同的反应。

消息与方法:对象接收到有效消息后,总会以某种行为做出适当反应。

期间,对象行为复用了类操作的代码实现(即类方法)。

消息与方法可视为同义词。

消息与代码无关,而方法是操作的代码实现。

消息传递 vs. 过程调用:当同一发送对象在不同时刻向同一接收对象多次发送相同消息时,接收对象依其当前状态不同可以做出不同反应。

消息传递可以异步进行,从而允许并行与分布执行。

如果过程体中只有局部变量,当同一调用者用相同参数值调用同一过程时,其调用结果在任何时刻都必然相同。

过程调用只能同步,其本质是串行执行。

多态性:含义:同一个操作可以是多个不同类的行为。

不同对象接收到同一个消息后,可产生完全不同的反应。

同一个消息可调用不同的方法。

意义:允许每个对象以自己最合适的方式去响应共同的消息,从而增强软件的灵活性和可复用性。

面向对象的特性:标识惟一性;分类性;多态性;继承性。

面向对象的主题:抽象;封装;归并数据与行为;共享/复用;强调对象结构而不是程序结构。

面向对象 = 对象 + 分类 + 继承 + 消息4. 典型面向对象方法摘要面向对象方法的发展:面向对象方法最早于 1986 年提出。

刚一开始就有五、六种面向对象方法。

之后的五年间迅速涌现出了 50 余种面向对象方法。

部分著名学者:Grady Booch ;James Rumbaugh ;Ivar Jacobson ;Coad 、Yourdon ;Shlaer 、Mellor ;Martin 、Odell 。

六种典型面向对象方法:①面向对象分析与设计 (OOA/OOD),Grady Booch ②对象建模技术 (OMT),James Rumbaugh ③面向对象软件工程 (OOSE),Ivar Jacobson ④面向对象分析与设计 (OOA/OOD),Coad & Yourdon ⑤面向对象系统分析 (OOSA),Shlaer & Mellor ⑥面向对象分析设计 (OOAD),Martin & Odell 一般化4.1面向对象分析与设计(OOA/OOD)四种模型:逻辑模型、物理模型、静态模型、动态模型;六种图:类图、对象图、交互图、状态迁移图、模块图、进程图;两种过程:宏观过程、微观过程。

相关主题