《软件工程》本科教学华北电力大学计算机系第2章面向对象方法及UML概述《软件工程》本科教学华北电力大学计算机系什么是软件开发软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程。包含两项主要活动:人们对所要解决的问题及其相关事物的认识基于这种认识所进行的描述《软件工程》本科教学华北电力大学计算机系客观感知世界---计算机编程语言---计算机世界软件的实质是人们以计算机编程语言为桥梁,将客观感知世界映射于计算机世界中去,以解决人们在客观感知世界中要解决的问题。《软件工程》本科教学华北电力大学计算机系高级语言的发展历史真正得到推广使用,至今仍在流行的第一个高级语言是美国的计算机科学家巴科斯设计,并于1956年首先在IBM公司的计算机上实现的FORTRAN语言。早期的高级语言主要是应用于科学和工程计算,其代表作有FORTRAN和ALGOL60。计算机进入商业和行政管理领域以后,出现了COBOL和RPG等便于商界使用的语言。近年来,这类语言和数据库技术,图形界面技术(可视化编程),面向对象的思想及RAD(RapidApplicationDevolopment)的概念相结合,形成了一批更方便使用的所谓第四代语言(4GL),如Powerbuilder,Delphi,VB等。《软件工程》本科教学华北电力大学计算机系自70年代以来,模块特征更明显,简单易用,可靠性强的PASCAL异军突起,在世界范围内广泛流行。但进入80年代以后,它的地位又逐渐为更实用的C语言替代。到现在,C语言的地位已相当于一种“高级汇编语言”了。80年代后期,面向对象的语言开始浮出水面,C++借助使用C语言的庞大程序员队伍,一举建立了面向对象语言的老大地位。从而OO的思想正式统治了整个软件开发界。C++的流行甚至使得美国军方从80年开始大力扶植的Ada语言还未及推广便胎死腹中了。《软件工程》本科教学华北电力大学计算机系90年代以后,计算机世界更是发生了天翻地覆的变化,原先的单机平台让位于WEB,“网络就是计算机”,新的语言不仅要是OO的,Visual的,更要是基于WEB的。Java语言借INTERNET的东风,横空出世,一夜红遍天下,变化之快令人瞠目结舌。上述这些变化,表面是不同的编程工具在城头变幻大王旗,但其背后反映的却是一种更为深刻的认识论的改变,即你是用何种观点来认识这个世界的?《软件工程》本科教学华北电力大学计算机系计算机语言汇编语言PO语言OO语言人对问题域的认识客观事物(问题域)自然语言语言鸿沟计算机世界(线形存储、顺序执行)编程语言计算机执行语言的鸿沟自然语言与编程语言之间存在着很大的差距,这种差距称为“语言的鸿沟”。《软件工程》本科教学华北电力大学计算机系ØOO方法学的基本思想从现实世界的客观存在的事物(即对象)出发,来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。(人类认知过程的计算机模拟)2.1.2面向对象方法《软件工程》本科教学华北电力大学计算机系①问题的结构空间和软件的解空间是一致的。问题的结构空间:指问题涉及的业务范围。软件的解空间:计算机解决问题域问题的解法。ØOO方法学的主要优点一致实体客观世界问题的结构空间软件问题的解空间实体对象一致实体客观世界问题的结构空间软件问题的解空间实体对象一致实体客观世界问题的结构空间软件问题的解空间实体对象《软件工程》本科教学华北电力大学计算机系②系统的稳定性好传统方法建立的软件结构依赖于要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。用户需求基本是针对功能的,系统不稳定。Coad-Yourdon分析了当需求发生变化时:功能:最易变外部接口:很易变属性:较易变对象:较稳定《软件工程》本科教学华北电力大学计算机系③可重用性好传统的软件重用技术是利用标准函数库。标准函数库往往只提供最基本、最常用的功能。还缺乏必要的柔性。对象固有的封装性和信息隐蔽,使对象具有较强的独立性。提供了较理想的可重用的软件成分。重用时提供了很大的灵活性。(派生和继承)《软件工程》本科教学华北电力大学计算机系④可维护性好面向对象的软件稳定性好面向对象的软件容易理解面向对象的软件容易修改易于测试和调试《软件工程》本科教学华北电力大学计算机系Coad和Yourdon给出了一个定义:面向对象=对象+类+继承+通信如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统是面向对象的。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。《软件工程》本科教学华北电力大学计算机系对象是具有相同状态的一组操作的集合。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。家具价格尺寸重量位置颜色属性服务购买销售称重移动桌子价格尺寸重量位置颜色购买销售称重移动属性服务《软件工程》本科教学华北电力大学计算机系对象的特点抽象对象是描述客观事物的本质、与系统目标有关的特征。九方皋相马,不分牡、牝、骊、黄,心唯骏马特征;宋庖丁解牛,只见筋,骨,皮,肉,目无全牛形象。对象是属性和服务的结合体,二者不可分,而且对象的属性值只能由这个对象的服务来改变。封装《软件工程》本科教学华北电力大学计算机系类是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。《软件工程》本科教学华北电力大学计算机系实例就是由某个类所描述的一个具体的对象。对象和实例的区别对象即可指一个具体的对象,也可以泛指一般的对象。实例必须是一个具体的对象。《软件工程》本科教学华北电力大学计算机系消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。是一个对象向另一个对象发出的服务请求。例如:顾客对售报亭说:“买一份《北京晚报》”。接受者:售报亭要求的服务:报刊零售;输入信息:买报种类,份数,钱数;输出信息:买到的报,找回的零钱;《软件工程》本科教学华北电力大学计算机系封装性是将一些数据和与这些数据有关的操作集合起来,放在一起,形成一个能动的实体。把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(对象)。信息隐蔽:尽可能地隐蔽对象的内部细节,只保留有限的外部接口。《软件工程》本科教学华北电力大学计算机系继承是子类自动地共享基类中定义的数据和方法的机制。继承具有传递性。汽车运货车救火车大轿车起重车《软件工程》本科教学华北电力大学计算机系继承的意义简化了人们对事物的认识和描述。复用:继承性是OO方法实现复用的前提,不仅支持复用而且使系统可扩充。结构清晰、易编程、易理解。易修改:共同部分只要在一处修改即可。易增加新类:只须描述不同部分。继承的分类单继承:子类只允许有一个父类的继承多继承:一个子类可以从多个父类中继承其属性和操作轮船吨位时速吃水线行驶停泊客船载重量供餐《软件工程》本科教学华北电力大学计算机系退休者教师退休教师《软件工程》本科教学华北电力大学计算机系在一般类定义的属性或服务被特殊类继承之后,可以具有不同的数据类型或表现为不同的行为,使得同一个属性或服务名在一般类及其各个特殊类中具有不同的意义。《软件工程》本科教学华北电力大学计算机系intabs(inta)longabs(longa)floatabs(floata)doubleabs(doublea)intabs(intn)longlabs(longn)doublefabs(doublex)面向对象的软件开发过程《软件工程》本科教学华北电力大学计算机系统一过程模型RUP《软件工程》本科教学华北电力大学计算机系•面向对象的软件开发方法–Rumbaugh方法•通用电气公司著名OO大师JamesRumbaugh博士和他的同事提出的对象模型化技术(OMT),用于分析、系统设计和对象级设计。•建立三个模型对象模型(描述对象、类、层次和关系)动态模型(描述对象和系统的行为)功能模型(类似于高层的DFD)•适用于描述和分析以数据为中心的信息系统。《软件工程》本科教学华北电力大学计算机系–Coad和Yourdon方法Coad和Yourdon方法常常被认为是最容易学习的OOA方法。建模符号相当简单,而且开发分析模型的导引直接明了。–Booch方法Rational公司OO大师GradyBooch设计比较适合于系统的设计与构造。–Jacobson方法瑞典爱立信公司的IvarJacobson博士最大的特点是面向用例,比较适合于需求分析。《软件工程》本科教学华北电力大学计算机系UML的统一活动图来自JamesOdell,状态图来自DavidHarel接口来自Microsoft,包的符号来自AppleMacintosh《软件工程》本科教学华北电力大学计算机系UML发展历程2.3统一建模语言简介《软件工程》本科教学华北电力大学计算机系UML的特点统一标准面向对象可视化独立于过程UML是一种建模语言,不是一种方法,它独立于过程。容易掌握使用《软件工程》本科教学华北电力大学计算机系沙发之争(过程与对象的对话)某天在某一家软件公司里,那令人讨厌的项目经理要求两名程序员完成同样的一个任务。经理并且承诺谁先完成任务的发给一张带转轮的真皮沙发代替原来的木质靠背椅。杰:习惯过程式编程的程序员涛:一个面向对象的程序员他们都知道这是一个不错的机会。任务是在GUI的程序界面里有一个正方形,一个圆形和一个正三角形。但用户点击这个图形时,图形会顺时针旋转360°并且播放相应的AIF音效。《软件工程》本科教学华北电力大学计算机系杰,坐在自己的办公室里,对自己说:“这个程序要做什么?我们需要哪些过程?“旋转并且播放音效。”他又回答了自己。所有他的程序就是去完成这两个过程。涛带着他的笔记本坐在休息室里。他也在思索着:“程序中都有什么东西啊?谁是主要的角色啊?他最先想到的就是形状。当然他也想到了其他的一些对象,比如用户,音效和点击事件。因为已经有现成的库支持其他的对象了。因此因此他把重点放在创建形状类上。《软件工程》本科教学华北电力大学计算机系在杰的办公室就像曾经写过千百的的程序一样,杰把他的程序认为是重要的过程,并且没有用什么时间就完成了旋转和播放音效的过程。他的程序大概是这样的rotate(shapeNum){//maketheshaperotate360°}playSound(shapeNum){//useshapeNumtolookupwhichAIFsoundtoplay,andplayit}杰的程序基本是完成了,他觉得他赢了,他似乎已经感觉到那张真皮沙发了《软件工程》本科教学华北电力大学计算机系涛和他的笔记本在休息室,涛为每个形状写了一个类classSquare{rotate(){//codetorotateasquare}playSound(){//codetoplaytheAIFfileforasquare}}classCircle{rotate(){//codetorotateacircle}playSound(){//codetoplaytheAIFfileforacircle}}《软件工程》本科教学华北电力大学计算机系classTriangle{rotate(){//codetorotateatriangle}playSound(){//codetoplaytheAIFfileforatriangle}}《软件工程》本科教学华北电力大学计算机系但是请等一下,任务有所变动“现在你是快一点,杰”,项目经理说着,“但我还要加一点小小的功能在程序里。这对你们这样高水平的程序员来说,应该是毫无问题的。”“如果只是个小改动,我可以接受。”杰想着,他知道经理所说的毫无代价的改动是骗人的。“为什么涛会显得如此的平静呢