《软件工程课件11.ppt》由会员分享,可在线阅读,更多相关《软件工程课件11.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 第第1111章章 面向对象设计与实现面向对象设计与实现内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2 2 页页2第第1111章章 面向对象设计与实现面向对象设计与实现本章学习目标 理解掌握面向对象设计准则 理解掌握面向对象设计过程 理解面向对象程序设计语言技术特点 了解面向对象的测试策略 内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3 3 页页311.1 11.1 面向对象设计准则面向对象设计准则 面向对象设计是把分析阶段得到的需求转化成符合成本和质量要求的、抽象的系统实现方案的过程。从面向
2、对象分析到面向对象设计,是一个逐渐扩充模型的过程。或者说,面向对象设计就是用面向对象观点建立求解域模型的过程。尽管面向对象分析和面向对象设计的定义有明显区别,但是在实际的软件开发过程中二者没有明显的界限,很难精确地区分两个阶段。许多分析结果可以映射成设计结果,而在设计过程中又往往会加深和补充对系统需求的理解,从而进一步完善分析结果。因此,面向对象分析和设计活动是一个多次反复迭代的过程。面向对象方法学在概念和表示方法上的一致性,保证了在各项开发活动之间的平滑(无缝)过渡,领域专家和开发人员能够比较容易地跟踪整个系统开发过程,这是面向对象方法与传统方法比较起来所具有的一大优势。内蒙古工业大学内蒙古
3、工业大学软件工程软件工程(Software Engineering)第第 4 4 页页411.1 11.1 面向对象设计准则面向对象设计准则 所谓优秀的设计,就是权衡了各种因素,从而使得系统在其整个生命周期中的总开销最小的设计。对于大多数软件系统而言,近60%以上的软件费用都用于软件维护,因此,优秀软件设计的一个主要特点就是容易维护。本书第5章讲述了指导软件设计的基本原理,这些原理在进行面向对象设计时仍然成立,只是增加了一些与面向对象方法密切相关的新特点,例如,面向对象设计遵循一些准则,例如,模块化、抽象、信息隐蔽、强内聚性和弱耦合性。内蒙古工业大学内蒙古工业大学软件工程软件工程(Softwa
4、re Engineering)第第 5 5 页页511.1 11.1 面向对象设计准则面向对象设计准则1 1模块化模块化 程序模块化是面向对象的特征,对象是面向对象软件中的模块,它把数据结构和操作数据的方法结合一体形成模块,供其他对象调用。2 2抽象抽象 类实际上是一种抽象数据类型,它对外开放的公共接口构成了类的规格说明(即协议),这种接口规定了外界可以使用的合法操作符,利用这些操作符可以对类实例中包含的数据进行操作。使用者无须知道这些操作符的实现算法和类中数据元素的具体表示方法,就可以通过这些操作符使用类中定义的数据。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engin
5、eering)第第 6 6 页页611.1 11.1 面向对象设计准则面向对象设计准则3 3信息隐藏信息隐藏 面向对象采用了信息隐蔽的方法,使得对象的内部信息对外界是不可见的。对象提供对外的接口,用于调用对象提供的功能。信息隐蔽是通过对象的封装来实现的。4 4强内聚性强内聚性 内聚衡量一个模块内各个元素彼此结合的紧密程度。在设计时应该力求做到高内聚,面向对象设计中,通常包含下面3种类型的内聚:(1)类内聚 设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。类的属性和服务应该全都是完成该类对象的任务所必需的,其中不包含无用的属性或服务。如果某个类有多个用途,通常应该把它分解成
6、多个专用的类。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 7 7 页页711.1 11.1 面向对象设计准则面向对象设计准则(2)一般特殊内聚 设计出的一般-特殊结构,应该符合多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。(3)服务内聚 一个服务应该完成一个且仅完成一个功能。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 8 8 页页811.1 11.1 面向对象设计准则面向对象设计准则5 5弱耦合性弱耦合性 耦合是指一个软件结构内不同模块之间互连的紧密程度。在面向对象方法中,
7、对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。弱耦合是优秀设计的一个重要标准,因为这有助于使得系统中某一部分的变化对其他部分的影响降到最低程度。耦合可分为交互耦合和继承耦合两类。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 9 9 页页911.1 11.1 面向对象设计准则面向对象设计准则(1)交互耦合 对象之间的耦合通过消息连接来实现,这种耦合称为交互耦合。应该尽量降低消息连接的复杂程度,例如,尽量减少消息中包含的参数个数,降低参数的复杂程度;减少对象发送或接收的消息数目,从而降低交互耦合程度。对象是不可能完全孤立的,当两
8、个对象必须相互联系相互依赖时,应该通过类的协议(即公共接口)实现耦合,而不应该依赖于类的具体实现细节。(2)继承耦合 通过继承关系结合的父类和子类,彼此间结合越紧密越好。因此与交互耦合不同,要提高继承耦合的程度。从本质上看,通过继承关系结合起来的基类和派生类,构成了系统中粒度更大的模块,因此,它们彼此之间应该结合的越紧密越好。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 10 10 页页1011.2 11.2 面向对象设计面向对象设计 设计阶段的工作,在整个项目的开发过程中是一项非常重要的工作,该阶段完成的模型在实现阶段直接向代码进行转化。设计阶
9、段的工作必须在分析阶段所确定的模型的基础上进行,它所设计每一个类在分析阶段都是存在的,如果发现有确实需要增加的类,则需要在分析模型中增加该类,并验证是否确实需要增加。在设计阶段,一般不要过多地增加或删除分析模型中各个类图中的类。在设计阶段的工作,简单来说,是根据分析模型,对其进行扩充建立相应的设计模型。确切地说,是定义分析阶段所确定的每一个类,即定义每个类的方法和属性,并确定每个成员的可见性。可见性包括每个类成员是公有、私有、还是保护的。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 11 11 页页1111.2 11.2 面向对象设计面向对象设计
10、 在分析模型中,我们把类分为三种类型,即边界类、控制类和实体类,其图形的表示也比较简单。而在设计模型中,采用了UML标准的类的表示方法,每个类被分为三个部分,分别表示类名字、类属性和类方法。结合第10章RRUP的内容,定义了面向对象设计过程如下:(1)在设计的层次上加强分析阶段确定的序列图、协作图和状态图,讨论是否还有别的操作和类所需访问的数据。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 12 12 页页1211.2 11.2 面向对象设计面向对象设计(2)根据上面的工作,对类图进行细化。对每个类已存在的域进行细化,例如,方法应该确定它的名字,
11、参数和返回类型。增加新发现的数据类型,消息,方法。(3)利用开发工具提供了大量的类库,对系统已有的类进行完善,得到设计阶段的类图。(4)利用活动图(类似于结构化方法中程序流程图)描述类中每个方法的处理流程。(5)定义实体类的属性,进行数据库的设计。(6)建立系统的物理模型。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 13 13 页页1311.2 面向对象设计面向对象设计1设计阶段类图设计阶段类图(1)概述 在分析模型中,只是确定了相关领域中开发系统的各个抽象类之间关系,同时,只说明属性的含义和方法的功能,没有说明属性的具体类型、方法的参数和返回
12、类型以及两者可见性。同时,在现实的软件开发过程中,大多数用的都是可视化的集成开发环境(Integrated Development Environment,IDE)。开发工具提供了大量的类库可以使用,例如,C+中的STL、Visual C+中的MFC以及Java中的API等。在分析模型中,并没有把开发工具提供的基础类包括进去,因此,在设计模型中,根据问题的内容需要增加相关类库中的类。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 14 14 页页1411.2 面向对象设计面向对象设计【案例11.1】设计阶段类图管理员注册学生信息功能,包含下面的类:
13、边界类:student_save.jsp,通过该类输入学生注册信息。控制类:StudentInsert,该类接收边界层类student_save.jsp传递的信息(数据)。控制类:StudentImplement,被控制层类调用,将学生数据写入到学生信息表中。实体类:students,与学生信息表相对应。例如,控制类StudentInsert的类图,如图11.1所示。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 15 15 页页1511.2 11.2 面向对象设计面向对象设计图11.1 StudentInsert类的类图内蒙古工业大学内蒙古工业大
14、学软件工程软件工程(Software Engineering)第第 16 16 页页1611.2 面向对象设计面向对象设计控制类StudentImplement的类图,如图11.2所示。图11.2 StudentImplement类的类图内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 17 17 页页1711.2 面向对象设计面向对象设计实体类students类的类图,如图11.3所示。图11.3 students实体类图内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 18 18 页页1811.2 面向
15、对象设计面向对象设计管理员注册学生信息功能的类图,如图11.4所示。图11.4 管理员注册学生信息功能的类图内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 19 19 页页1911.2 面向对象设计面向对象设计(2)说明 通常一个完整的系统类图较大,类图中的每个类只有名字,一般不给出属性和方法,使之比较清晰,能较好地对整个模型把握。画完上述图后,再对各个类进行详细地说明,确定了各个类的属性和方法。在创建设计模型阶段,通过对各个类的不断细化,确定了各个类的方法和属性完成后,设计阶段的UML功能模型也就全部完成,下一步的工作就是如何实现系统了。对于如何
16、实现系统,即将设计模型转换成相应的程序代码,将在下一节介绍。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2020 页页2011.2 11.2 面向对象设计面向对象设计2 2类中操作建模类中操作建模 活动图用于对系统行为建模。活动图本质上就是流程图,它描述系统的活动、判定和分支等部分。因此,在UML中,可以把活动图作为流程图来使用,用于对系统的操作建模。【案例11.2】活动图管理员注册学生信息功能中,对控制类StudentImplement的save操作(方法)建模的活动图,如图11.4所示。内蒙古工业大学内蒙古工业大学软件工程软件工程(Soft
17、ware Engineering)第第 21 21 页页2111.2 面向对象设计面向对象设计图11.5 save操作的活动图内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2222 页页2211.2 面向对象设计面向对象设计3数据库设计数据库设计 数据库设计的开始阶段,最主要的工作就是要找出待开发系统中的实体关系图,即E-R图。而分析阶段给出的实体类之间的关系图也正好属于这个范畴,能够表现系统中大部分实体之间的关系。这样,数据库的设计就可以在此实体类图的基础上完成。在需求分析阶段,分析模型中的类图中有实体类,在设计模型中,这些实体类都被设计成数据
18、库中相应的数据表,将每个实体类的属性转换成相应数据库表中的字段。【案例11.3】表的设计 实体类students的定义参见图11.3,实体类对应的学生信息表,如表11.1所示。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2323 页页2311.2 面向对象设计面向对象设计表11.1 学生信息表(students)内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2424 页页2411.2 面向对象设计面向对象设计4物理建模物理建模 组件图和部署图是面向对象系统物理建模时使用的两种图。对软件建模过程中,
19、通常使用用例图来表示系统具有的功能;使用类图来描述系统的词汇;使用时序图、状态图和活动图来说明这些词汇中的事物任何相互协作来完成某些功能。在完成上述建模后,设计人员需要把这些逻辑模型转化成实际的物理事物,如可执行文件、动态链接库(Dynamic Link Library,dll)和类库等。UML中使用组件图来可视化物理组件以及它们间的关系,并描述其构造细节;使用部署图来可视化如何将软件部署到硬件上。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2525 页页2511.2 面向对象设计面向对象设计(1)组件图 概述 组件一般表示实际存在的、物理的物
20、件,它具有广泛的定义,以下的内容可以定义为组件:程序源代码、子系统、动态链接库、可执行文件和类等。组件图的作用 组件图用于对系统的实现视图建模,组件图在系统建模过程中主要作用:p 组件图帮助用户理解最终的系统结构。p 组件图使开发工作有一个明确的目标。p 组件图有利于帮助不直接参与系统分析和设计的人员理解系统有力的工具。p 组件图有利于软件系统的组件重用。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2626 页页2611.2 面向对象设计面向对象设计【案例11.4】组件图 下面组件图描述了学生学籍管理系统中各个子系统之间的关系。这里的组件用包图
21、表示,如图11.6所示。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2727 页页2711.2 面向对象设计面向对象设计图11.6 学生学籍管理系统的组件图内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2828 页页2811.2 面向对象设计面向对象设计(2)部署图 概述 部署图显示了运行软件系统的物理硬件,以及如何将软件部署到硬件上,描述了运行系统的硬件拓扑,即描述系统中各个物理组成部分的分布、提交和安装过程。部署图的作用 部署图用于对系统的实现视图建模。在部署图中,节点分成两种类型:p 处理器
22、:能够执行软件构件、具有计算能力的节点。p 设备:没有计算能力的节点,通常是通过其接口为外界提供某种服务,例如,打印机、扫描仪等。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 2929 页页2911.2 面向对象设计面向对象设计【案例11.5】部署图 学生学籍管理系统的部署图,如图11.7所示。图11.7学生学籍管理系统的部署图内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3030 页页3011.2 面向对象设计面向对象设计 在上图中,学生学籍管理系统中的边界类分布Client客户机上,控制类部署在
23、Web Server服务器上,数据库部署在Database Server服务器上,客户机和服务器通过网络协议TCP/IP连接。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 31 31 页页3111.3 11.3 面向对象实现面向对象实现 面向对象的实现主要包括两项工作:p 把面向对象设计结果翻译成用某种程序设计语言书写的面向对象程序;p 测试并调试面向对象的程序。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3232 页页3211.3.1 11.3.1 面向对象程序设计语言面向对象程序设计语言 除了
24、面向对象分析、设计等前期工作以外,所采用的程序设计语言特点和程序设计风格,对软件的可靠性、可重用性及可维护性也会产生重要的影响。由于面向对象方法与结构化方法不同,面向对象软件的测试也必然会具有其新的特点。选择面向对象程序设计语言的关键因素是看程序设计语言的表达能力和程序设计语言的可理解性、可维护性。面向对象分析和设计使用的表示方法上具有一致性,这种表示形式从问题域到系统分析,再到系统设计始终不变。一致的表示方法既有利于软件开发过程中使用统一的概念,也有利于维护人员理解软件的各种配置。因此,在选择面向对象对象语言时要考虑语言对分析和设计模型的一致性表达。内蒙古工业大学内蒙古工业大学软件工程软件工
25、程(Software Engineering)第第 3333 页页3311.3.1 11.3.1 面向对象程序设计语言面向对象程序设计语言 面向对象方法追求的目标之一是软件的可重用性。通过重用已有的软件元素不但可以提高开发效率、降低成本,同时可以大幅度提高软件产品的质量。选择的程序设计语言应该支持封装、继承和多态性,使得软件可以在代码层次上易于重用。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3434 页页3411.3.1 面向对象程序设计语言面向对象程序设计语言 1面向对象程序设计语言面向对象程序设计语言 面向对象实现要把面向对象设计的结果映
26、射到实际运行的程序,涉及到程序设计语言的选择,下面介绍几种主流的面向对象程序设计语言。面向对象思想的起源计算机仿真语言Simula,Simula 67由挪威的Kristen Nygaard和O1e-Joha Dahl于1965-1967年研制出来。Simula 67最初是为了模拟离散事件而设计的,它的基本贡献是对抽象和计算的理解。simula 67引入类的概念,这是大多数面向对象程序设计语言的基础。simula 67被认为是第一个面向对象程序设计语言。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3535 页页3511.3.1 面向对象程序设计语
27、言面向对象程序设计语言(1)常用的面向对象语言 最早的通用面向对象语言是20世纪80年代的Smalltalk,由于Smalltalk、C+的推出,使面向对象程序设计语言趋于成熟,从而形成了一种全新的面向对象编程(Object-Oriented Programming,OOP)的程序设计方法。C语言是由贝尔实验室于1972年设计出来的一种通用程序设计语言。C语言的主要特点是兼顾了高级语言和汇编语言的特点,与操作系统紧密相关。它提供了高效的执行语句,并且允许程序员直接访问操作系统和底层硬件。广泛流行使用的UNIX操作系统就是用C语言编写的。C+语言是在C语言的基础上发展起来的,与C语言兼容。它是1
28、980年由贝尔实验室开发出来的。C+主要是在C语言的基础上增加了类的机制,从而使其成为一种面向对象程序设计语言。C+语言起初也被称为“含类库的C”。C+增加了大容量的类库等许多新特性,并具有较高的执行效率。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3636 页页3611.3.1 面向对象程序设计语言面向对象程序设计语言 Java是一种面向对象的程序设计语言,由SunMicrosystems公司JamesGosling等人于1990年代初开发。它最初被命名为Oak,为嵌入式电子应用系统而开发的一种高级语言,由于市场需求没有预期的高,Sun放弃了
29、该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,在1995年5月23日以“Java”的名称正式发布了。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Java保留了C+的基本语法、类和继承等概念,Java丢弃了C+中较少使用的、难理解的某些特性,如操作符重载、多继承、自动的强制类型转换特别地,Java语言不使用指针,并提供了自动的垃圾收集,使得程序员不必为内存管理而担忧,它是一种纯粹的面向对象语言。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3737 页页3
30、711.3.1 面向对象程序设计语言面向对象程序设计语言 Python是一种新兴的面向对象、解释型的计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为“胶水语言”,它能够把用其他语言制作的各种模块(尤其是C/C+)很轻松地联结在一起。Python 作为脚本语言,跨平台性非常好,几乎在所有操作系统中可以使用。Python即支持面向过程的编程也支持面向对象的编程。在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C+和Java相比,Python以一
31、种非常强大又简单的方式实现面向对象编程。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 3838 页页3811.3.1 面向对象程序设计语言面向对象程序设计语言 (2)世界编程语言排行 TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量,如表11.2所示。排名使用著名的搜索引擎(例如,Google、MSN、Yahoo!、Wikipedia、YouTube及Baidu 等)进行计算。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering
32、)第第 3939 页页3911.3.1 面向对象程序设计语言面向对象程序设计语言表11.2 世界编程语言排行内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4040 页页4011.3.1 面向对象程序设计语言面向对象程序设计语言 该指数可以用来作为开发者的参考指数,了解编程技能是否仍然是最新、或开始建立一个新的软件系统时可以选用什么样的编程语言以及战略决策。CodeForge网站公布2014年11月“我最喜爱的编程语言”排行榜,如图11.8所示。此排行榜给出各种编程语言语言在国内和境外不同国家和地区的流行程度,可为软件工程师及其他业内人士提供参考。
33、与TIOBE排行榜不同,这份排行榜的数据不是来源于搜索引擎等间接途径,而是来自11月份对五万六千多名软件工程师的问卷调查。调查选项为单选,每个参与调查者只能选择一个自己最喜欢的编程语言。国内数据来源于对CodeF用户的统计。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 41 41 页页4111.3.1 面向对象程序设计语言面向对象程序设计语言图11.8 国内编程语言排行榜内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4242 页页4211.3.1 面向对象程序设计语言面向对象程序设计语言 与前几个月
34、的统计数据相比,11月份的统计数据中 C+和C语言仍然以大比分领先其他编程语言排在前两位,二者是当值无愧的最受全国程序员喜爱的编程语言(或者说从事C+和C语言编程的人数依然占有最大比例)。Java和C#也很受欢迎,分别排在第3和第4位。Matlab因其在数学计算和仿真方面的优势以及易学易用的特点,深受高校和科研所人员的喜爱,也是很多软件工程师验证前期算法的首选工具。Objective-C受到iOS程序开发的刺激,吸引大批程序开发人员从事编码工作呈上升趋势。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4343 页页4311.3.1 11.3.1
35、面向对象程序设计语言面向对象程序设计语言 2面向对象语言的优点 面向对象设计的结果,既可以用面向对象语言实现,也可以用非面向对象语言实现。面向对象程序设计语言本身就支持面向对象概念的实现,其编译程序可以自动地实现面向对象概念到目标程序的映射。而且与非面向对象语言相比,面向对象语言还具有以下一些优点:(1)一致的表示方法 面向对象的采用方法从问题域表示到面向对象分析,再到面向对象设计与实现始终稳定不变。一致的表示方法不但有利于在软件开发过程中始终使用统一的概念,也有利于维护人员理解软件的各种配置成分。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4
36、444 页页4411.3.1 面向对象程序设计语言面向对象程序设计语言(2)可重用性 为了能带来可观的商业利益,必须在更广泛的范围中运用重用机制,而不是仅仅在程序设计这个层次上进行重用。软件开发组织既可能重用它在某个问题域内的OOA结果,也可能重用相应的OOD和OOP结果。(3)可维护性 在实际软件系统开发中,维护人员面对的主要是源程序,如果程序设计语言本身能显式地表达问题域语义,对维护人员理解所要维护的软件将有很大帮助。因此,选择程序设计语言应该考虑的首要因素是,哪个程序设计语言能最好地表达问题域语义。一般来说,实现面向对象分析、设计的结果,应该尽量选用面向对象程序设计语言。内蒙古工业大学内
37、蒙古工业大学软件工程软件工程(Software Engineering)第第 4545 页页4511.3.1 面向对象程序设计语言面向对象程序设计语言3选择面向对象语言的实际因素选择面向对象语言的实际因素 (1)将来能否占主导地位 这主要是为了使自己的软件产品在若干年仍能具有较强的生命力。除了技术因素以外,通常还要考虑成本之类的经济因素。(2)可重用性 软件重用可以大大提高软件生产率,这也是采用面向对象方法的基本目标和主要优点。应该优先选用能够最完整、最准确地表达问题域语义的面向对象语言。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4646 页
38、页4611.3.1 11.3.1 面向对象程序设计语言面向对象程序设计语言(3)类库和开发环境 类库和开发环境是程序设计语言可重用性的决定因素。考虑具体程序设计语言工具,除了提供强大的适用的类库以外,还应提供方便地对类库进行相关操作的工具和环境。(4)其他因素 例如,售后服务和技术支持、对运行环境的需求、集成已有软件的难易程度等。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4747 页页4711.3.1 面向对象程序设计语言面向对象程序设计语言4面向对象程序设计语言技术特点选择面向对象语言时,应该着重考察语言的以下一些技术特点:(1)支持类与对
39、象概念的机制 支持类和对象概念机制是所有面向对象语言的基本特点。面向对象语言允许用户创建和引用动态对象。程序语言允许动态创建对象,必然涉及系统的内存管理问题。一般有两种管理内存的方法,一种是由语言的运行机制自动管理内存,另一种是由程序员编写释放内存的代码。比较流行的Java和C#语言都提供了自动回收“垃圾”的机制。自动内存管理机制方便安全,但是必须采用先进的垃圾收集算法以减少系统开销。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4848 页页4811.3.1 11.3.1 面向对象程序设计语言面向对象程序设计语言 程序员可以编写程序代码对所创建
40、的对象进行必要的管理。一些面向对象语言(例如C+)提供了析构函数来释放对象的内存空间,每当该对象超出范围或被显式删除时,就自动调用析构函数。这使得程序员能比较方便地回收系统内存。无论使用哪一种方法,都必须对内存进行有效地管理。如果不及时释放不再需要的对象所占用的内存,动态存储分配就有可能耗尽内存。(2)实现聚集(整体-部分)结构的机制 在C+和Java语言中,可通过组合类(在一个类中定义或声明另一个类的对象)实现整体和部分。(3)实现泛化(一般特殊)结构的机制 一般特殊结构的机制是指程序设计语言实现类继承的机制。有些语言支持多重继承,因而在派生类中可能会出现重名的问题,必须提供解决名字冲突的机
41、制。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 4949 页页4911.3.1 11.3.1 面向对象程序设计语言面向对象程序设计语言(4)实现属性和服务的机制 实现属性的机制应该考虑到对属性值的约束,控制属性的可见性,支持实例连接的机制。对于服务,则应能控制服务的可见性,支持消息连接的机制,实现动态联编。所谓动态联编,是指编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序执行时才能确定,这就要求联编工作要在程序运行时进行。动态联编机制使得程序员在向对象发送消息前,无须知道接受消息的对象属于哪个类。同时也使得程序在运行过程中,当需要执行
42、一个特定的服务时,具有自动选择实现该服务的适当算法的能力。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 5050 页页5011.3.1 面向对象程序设计语言面向对象程序设计语言(5)类型检查机制 程序设计语言按照编译时进行类型检查的严格程度可以分为强类型语言和弱类型语言。强类型语言语法规定每个变量或属性必须准确地属于某个特定的类。这样既有利于编译时发现程序错误,也增加了优化的可能性。由于强类型语言有助于提高软件的可靠性和运行效率,大多数新语言都是强类型语言。通常使用强类型编译型语言开发软件产品,使用弱类型解释型语言快速开发原型。内蒙古工业大学内蒙
43、古工业大学软件工程软件工程(Software Engineering)第第 51 51 页页5111.3.1 面向对象程序设计语言面向对象程序设计语言(6)类库 面向对象语言一般都提供对类库的支持。类库的使用为实现软件重用带来很大的方便。由于类库的存在,许多软件构件就不必由程序员从头编写了。类库中通常包含实现通用数据结构(例如,动态数组、表、队列和树等)的类,称为容器类。有些类库还提供独立于具体设备的接口类(例如输入/输出流),提供用于实现窗口系统的用户界面类等。类库丰富的功能给程序编码和代码重用提供了强大的支持。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineer
44、ing)第第 5252 页页5211.3.1 面向对象程序设计语言面向对象程序设计语言(7)效率 许多人认为效率低是面向对象语言的主要缺点。人们产生这一看法的一个主要原因是,早期的面向对象语言是解释型的而不是编译型的。事实上,由于类库的使用,面向对象语言有时能得到运行更快的代码。这是因为类库提供了效率更高的算法和更好的数据结构。有些常用的算法(例如哈希表算法)在类库中已得到实现,而且算法先进、代码可靠。另外,面向对象程序设计语言在运行时,使用动态联编实现多态性,似乎需要在运行时查找给定操作的类,这也可能会降低程序的执行效率。但实际上绝大多数面向对象语言都优化了这个查找过程,实现了高效率查找,而
45、且也不会由于继承深度加大或类中定义的操作增加而降低效率。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 5353 页页5311.3.1 11.3.1 面向对象程序设计语言面向对象程序设计语言(8)持久保存对象的机制 为了恢复被中断了的程序的运行,或者实现不同程序之间的数据传递,常常需要把数据长时间地保存下来,而不依赖于程序执行的生命期。有些面向对象语言(例如,Smalltalk等),能够把当前的执行状态完整地保存在磁盘上,有些则只提供了访问磁盘对象的输入和输出操作。另外,还有一些面向对象语言(例如,C+等),并没有提供直接存储对象的机制,必须由用户
46、自己管理对象的输入和输出,或者使用面向对象语言的数据库管理系统进行管理。也可以在类库中增加对象存储管理功能,这样就可以从“可存储的类”中派生出需要持久保存的对象,该对象自然继承了对象存储管理功能。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 5454 页页5411.3.1 面向对象程序设计语言面向对象程序设计语言(9)参数化类的机制 参数化类是使用一个或多个类型去参数化一个类的机制。在实际的应用中,常常可以看到这样一些软件元素(例如,函数、类等软件成分),它们的逻辑功能是相同的,所不同的主要是处理的对象(数据)类型。例如,一个向量类只是对它的数据
47、元素提供插入、删除、检索等基本操作,而不管这些元素是整型的,浮点型的,还是其他类型。为了减少程序冗余和提高程序的可重用性,程序设计语言最好能提供一种可以抽象出这类共性的机制。参数化类机制允许程序员先定义一个参数化的类模板(即在类定义中以参数形式代替一个或多个类型),然后把实际数据类型作为参数传递进来,从而实现程序不同类型的应用。C+语言就提供了这种类模板的机制。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 5555 页页5511.3.1 面向对象程序设计语言面向对象程序设计语言(10)开发环境 软件生产的实际开发工作都是在一定的开发环境下进行的。
48、软件工具和软件工程环境对软件生产率有很大的影响。一般情况下,应该包括下列一些最基本的软件工具:编辑程序、编译程序或解释程序、浏览工具和调试器(debugger)等。编译程序或解释程序是最基本、最重要的软件工具。编译与解释的差别主要是速度和效率的不同。一般用编译型语言来开发正式的软件产品,好的编译程序往往能生成效率很高的目标代码。解释程序的特点是边解释、边执行用户的源程序,虽然速度和效率都比不上编译程序,可是却能更加方便灵活地对源程序进行调试。这是编译程序所无法代替的。有些面向对象语言的编译程序先把用户源程序翻译成中间代码,再把中间代码翻译成目标代码。内蒙古工业大学内蒙古工业大学软件工程软件工程
49、(Software Engineering)第第 5656 页页5611.3.1 面向对象程序设计语言面向对象程序设计语言 通过面向对象的调试器,应该能够查看属性值和分析消息连接的结果。此外,在开发大型系统的时候,还需要有系统构造工具和变更控制工具。总之,应该考虑程序设计语言本身是否提供了软件系统开发所需要的工具,以及这些工具能否很好地集成起来。例如,MyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是对Eclipse IDE的扩展,利用它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它
50、是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,JavaScript,SQL,Hibernate等。据官方介绍,诸如IBM、戴尔、惠普、花旗集团、西门子、斯坦福大学、波音公司、三星等知名机构均使用MyEclipse进行Java、JavaEE开发,80%以上的全球财富100强企业均是MyEclipse的用户。内蒙古工业大学内蒙古工业大学软件工程软件工程(Software Engineering)第第 5757 页页5711.3.2 面向对象的测试策略面向对象的测试策略 软件测试的经典策略是,从单元测试开始,测试每一模块的功