面向对象分析和设计讲座面向对象方法学_第1页
面向对象分析和设计讲座面向对象方法学_第2页
面向对象分析和设计讲座面向对象方法学_第3页
面向对象分析和设计讲座面向对象方法学_第4页
面向对象分析和设计讲座面向对象方法学_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象分析和设计讲座面向对象方法学内容历史回眸开发模式传统方法学面向对象方法学面向对象基本概念对象组成面向对象分析/设计/编程信息系统建模第2页,共74页,2024年2月25日,星期天1.历史回眸现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出的图灵机模型。随后不到十年,电子计算机就诞生了(1945)。(埃尼亚克)它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件开发(如果可以称之为软件开发的话)与现在的大不相同。为了算一道题,要有人事先把完成加减乘除等各类运算的部件像搭积木那样搭起来,如果换一道题,则要把这些部件分解开来,根据新的要求重新搭建,效率极低(与现在比)。第3页,共74页,2024年2月25日,星期天现代电子计算机的体系结构及实际计算模型来自冯.诺依曼的思想。1946年他和他的同事们发现了埃尼亚克的缺陷,发表了一份报告,提出了程序放入内存,顺序执行的思想,这样,当算一道新题时就只需采取改变计算机中的程序的“软”的方法。英国的科学家维尔克斯实现了冯.诺依曼的思想,领导研制了“艾克萨克”。因此,现在的计算机通常被称为冯.诺依曼计算机。

第4页,共74页,2024年2月25日,星期天早期程序员们使用机器语言来进行编程运算;随着编译技术的出现,人们设计了许多更高级别的语言;这些语言摆脱了机器语言繁琐的细节,更接近于人的自然语言,迅速流行开来。据统计,全世界的高级语言起码有几千种,但从可计算性的角度看,它们的计算能力都等价于图灵机。已经证明,一个计算机语言,只要除了赋值语句之外,还包括顺序语句,条件语句和循环语句,它的计算能力即相当于图灵机。这里当然要排除其他技术因素的影响,如程序长度,变量个数,数据精度等。第5页,共74页,2024年2月25日,星期天由于图灵机的想法是把问题转化为一步一步按规则执行的机械求解过程,各种计算机语言也不过都是某种形式语言,因此软件开发的过程实质上就是程序员们对客观世界问题域的形式化的过程。程序员们先建立问题的模型(形式化),再用计算机语言加以合适的表达,最后再输入计算机里进行计算。第6页,共74页,2024年2月25日,星期天最早的高级语言大约诞生于1945年,是德国人楚译为他的Z-4计算机设计的PlanCalcul,比第一台电子计算机还早几个月;在电子计算机上实现的第一个高级语言是美国尤尼法克公司于1952年研制成功的ShortCode;而真正得到推广使用,至今仍在流行的第一个高级语言是美国的计算机科学家巴科斯设计,并于1956年首先在IBM公司的计算机上实现的FORTRAN语言。第7页,共74页,2024年2月25日,星期天早期的高级语言主要是应用于科学和工程计算,其代表作有FORTRAN和ALGOL60。计算机进入商业和行政管理领域以后,出现了COBOL和RPG等便于商界使用的语言。这类语言和数据库技术,图形界面技术(可视化编程),面向对象的思想及RAD(RapidApplicationDevelopment)的概念相结合,形成了一批更方便使用的所谓第四代语言(4GL),如Powerbuilder,Delphi,VB等。第8页,共74页,2024年2月25日,星期天前一类应用于科学和工程计算的大型语言相对来说更为基础,因而也更为灵活,应用范围更为广泛。在FORTRAN,BASIC(学习型)之后,自70年代以来,模块特征更明显,简单易用,可靠性强的PASCAL异军突起,在世界范围内广泛流行。但进入80年代以后,它的地位又逐渐为更实用的C语言替代。到现在,C语言的地位已相当于一种“高级汇编语言”了。第9页,共74页,2024年2月25日,星期天80年代后期,面向对象的语言开始浮出水面,C++借助使用C语言的庞大程序员队伍,一举建立了面向对象语言的老大地位。从而OO的思想正式统治了整个软件开发界。C++的流行甚至使得美国军方从80年开始大力扶植的Ada语言还未及推广便胎死腹中了。第10页,共74页,2024年2月25日,星期天90年代以后,计算机世界更是发生了天翻地覆的变化,原先的单机平台让位于WEB,“网络就是计算机”,新的语言不仅要是OO的,Visual的,更要是基于WEB的。Java语言借INTERNET的东风,横空出世,一夜红遍天下。上述这些变化,表面是不同的编程工具的流行,但其背后反映的却是一种更为深刻的认识论的改变,即你是用何种观点来认识这个世界的?第11页,共74页,2024年2月25日,星期天2.开发模式(Paradigm)开发模式又称为范型、范例、风范或模式(Pattern)。开发模式定义了特定问题和应用的开发过程中将遵循的步骤;确定将用于表示问题和解的那些成分的类型;利用这些成分表示与问题解决有关的抽象;直接得到问题的结构。第12页,共74页,2024年2月25日,星期天开发模式的选择影响到整个软件开发生存期。就是说,它支配选择:设计方法编码语言测试和检验技术第13页,共74页,2024年2月25日,星期天3.传统方法学传统方法学:瀑布模型,结构化分析/设计/编码瀑布模型的缺点:僵化瀑布模型要求:生命周期各阶段间遵守严格的顺序,实际情况是:软件开发往往在反复实践中完成瀑布模型要求:预先定义并“冻结”软件需求,实际情况是:某些系统的需求的一个逐渐明确的过程,且预先定义的需求到软件完成时可能已经过时第14页,共74页,2024年2月25日,星期天SA-SD-SP技术的缺点:本质上是功能分解,以实现功能的过程为中心,而用户的需求变化主要是针对功能的。这就使基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好系统有明确的边界定义,且系统结构依赖于系统边界的定义,这样的系统不易扩充和修改数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用性(reusability)较差第15页,共74页,2024年2月25日,星期天4.面向对象方法学的起源维特跟斯坦是本世纪乃至人类哲学史上最伟大的哲学家之一。他生前只于1922年出版了一本著作——《逻辑哲学论》(TractatusLogico-Philosophicus)。在该书中,他阐述了一种世界观,或者说一种认识世界的观点,这种观点,在六七十年后的今天,终于由一种哲学思想沉淀到技术的层面上来,成为计算机业界的宠儿,这就是“OO”,Object-Oriented,面向对象。第16页,共74页,2024年2月25日,星期天维特根斯坦在《逻辑哲学论》一书中提出了如下思想:世界可以分解为事实(Theworlddividesintofacts.)

事实是由原子事实(atomicfacts)组成的。一个原子事实是多个对象(objects)的组合。对象是简单的(基本的)TheObjectissimple。对象形成了世界的基础。第17页,共74页,2024年2月25日,星期天杭州北京Post-officeMessageSendbymethod对象ObjectObject=数据AttributeAttributes:location;employee;

……+操作MethodMethods:send;sell;

……注意:Object内部的attributes不允许外部用户直接改动,只有当它提供了相应的服务method时,用户才能通过发送message来提请它执行。我想把邮局搬到我家门口,多加几个邮递员,24小时都开门……对不起,本邮局不提供此类服务唉,那就先送束花吧——

Post_office.Send(request,payment)第18页,共74页,2024年2月25日,星期天特点:尽可能模拟人类习惯的思维方式,即问题域与求解域在结构上尽可能一致。与传统方法相反,OOM以数据或信息为主线,把数据和处理结合构成统一体——对象。这时程序不再是一系列工作在数据上的函数集合,而是相互协作又彼此独立的对象的集合。第19页,共74页,2024年2月25日,星期天5.面向对象方法学的要素第20页,共74页,2024年2月25日,星期天4.1对象:世界由对象构成对象是面向对象开发模式的基本成份。每个对象可用它本身的一组属性和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。第21页,共74页,2024年2月25日,星期天4.2类:物以类聚类是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。第22页,共74页,2024年2月25日,星期天在一个类中,每个对象都是类的实例(Instance),它们都可使用类中提供的函数。对象的状态则包含在它的实例变量,即实例的属性中。第23页,共74页,2024年2月25日,星期天例:classPost_office{private:loc_typelocation;emp_typeemployee;

……public:voidsend(req_typerequest,money_typepayment);voidsell(intgoods,money_typepayment);

……};main(){Post_officeMy_PO;req_typeMy_request;money_typeMy_payment;

……My_PO.Send(My_request,My_payment);

……}第24页,共74页,2024年2月25日,星期天继承(inheritance):类可分层,下层子类与上层父类有相同特征,称为继承继承是使用已存在的定义做为基础建立新定义的技术。新类的定义可以是既存类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改继承类。既存类可当做基类来引用,则新类相应地可当做派生类来引用。4.3继承:世界的相似性与多样性第25页,共74页,2024年2月25日,星期天第26页,共74页,2024年2月25日,星期天使用继承设计一个新类,可以视为描述一个新的对象集,它是既存类所描述对象集的子集合。这个新的子集合可以认为是既存类的一个特殊化。Quadrilateral类是Polygon类的特殊化。Quadrilateral是限制为四条边的多边形。我们还可以进一步地把类Quadrilateral特殊化为Rectangle。第27页,共74页,2024年2月25日,星期天类Quadrilateral的界面可以等同于类Polygon的界面,而Rectangle类的界面又与Quadrilateral类的界面相同。新类的界面还可以被看做是既存类界面的一个扩充界面。例如,从一个既存的车辆类派生的四轮驱动车类可能不仅是车辆类子集合定义的特殊化,而且还可能在新类的界面中引入新的能力。第28页,共74页,2024年2月25日,星期天第29页,共74页,2024年2月25日,星期天在类的继承层次中,Quadrilateral的实际参数可以替换Polygon的形式参数。类Quadrilateral的界面与类Polygon的界面是相容的Quadrilateral的界面可响应Polygon界面的所有消息。第30页,共74页,2024年2月25日,星期天4.4消息:合作之道消息(message):对象间只能通过发送消息进行联系,外界不能处理对象的内部数据,只能通过消息请求它进行处理(如果它提供相应消息的话)。第31页,共74页,2024年2月25日,星期天消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。第32页,共74页,2024年2月25日,星期天OOM=Object+Class+Inheritance+Communicationwithmessages第33页,共74页,2024年2月25日,星期天传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解OOM:以object为核心,强调对现实概念的模拟而不强调算法。“面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统”。Class:由特殊到一般的归纳(induction)Inheritance:由一般到特殊的演绎(deduction)4.4传统方法与OO的比较第34页,共74页,2024年2月25日,星期天传统方法:结构依赖于功能,不稳定。OOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。传统方法:通过建立标准函数库来重用软构件。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要OOM:一个class所有的instances都可重用它的代码;由inheritance派生出的新的class可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。。第35页,共74页,2024年2月25日,星期天传统方法:可维护性是最令人头痛的问题。OOM:从以下几方面改善了可维护性稳定性好:软件功能需求的变化不牵动全局,只需局部修改;Class独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;Inheritance和多态性(polymorphism)使其很容易被修改和扩充;容易理解;容易测试、调试。有这一条就什么都好办了!这一点还可商榷第36页,共74页,2024年2月25日,星期天OOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。OOM与Prototyping结合使用效果好。第37页,共74页,2024年2月25日,星期天6.对象概念第38页,共74页,2024年2月25日,星期天f1f2f3……fi……fnfi(X)Sgi(X,S)S’输出输出1、Object:=ID+Method+Attribute+Message第39页,共74页,2024年2月25日,星期天特点:以数据为中心,不设与数据无关的操作;Object主动处理而不被动地等待被处理,外部只能通过message请求操作;具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法;具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信;模块独立性好:内聚强(①)、耦合松(③④)第40页,共74页,2024年2月25日,星期天2、Class:具有相同数据和相同操作的一组对象;3、Instance:某个class描述的具体对象;4、Message:=object_ID.method_ID(parameter(s));5、Method:object能做的操作,亦称为service、responsibility,在class中须定义相应的代码;6、Attribute:object的固有数据;7、Inheritance:子类自动共享父类的attributes和methods,而不必重复定义。第41页,共74页,2024年2月25日,星期天Class中国人中国人Attributes中国人Methods张山(instance)Class中国人

张山的AttributesClass上海人

(子类)上海人Attributes

上海人MethodsClass中国人李士(instance)

中国人李士的Attributes上海人李士的AttributesClass上海人例:第42页,共74页,2024年2月25日,星期天特点:若上海人的methods中有与中国人的同名,则李士执行该method时以上海人为准,不执行中国人中定义的同名method。传递性(transitivity):AB、BCAC,一个class继承了上层全部classes的一切性质。一个子类只有一个父类称为单继承(singleinheritance),一个子类可有多个父类称为多重继承(multipleinheritance).

“低层性质override高层性质”“县官不如现管”第43页,共74页,2024年2月25日,星期天注意:multipleinheritance在定义中应避免二义性(ambiguity),即二个父类中定义重名,但各具不同性质。例:FemaleChineseScholarICardDeckGraphicalObjectGraphicalDeckMethod:Draw:=takeacardfromadeckMethod:Draw:=displayagraphicalobjectMethod:Draw:=?例:第44页,共74页,2024年2月25日,星期天8Polymorphism:不同层次的classes可共享一个method名,但按各自的方式来实现这种method。C++中定义了虚函数(virtualfunction)来实现这一功能。即一个method有多个版本,运行时才决定执行哪一个。故亦称为动态联编(dynamicbinding)或滞后联编(latebinding)修改与扩充可以很容易地通过派生子类来完成Whichformdoyouneed,master?Aladdin’sGenie第45页,共74页,2024年2月25日,星期天doubleavg(constdoublea[],intsize);doubleavg(constinta[],intsize);doubleavg(constdoublea[],intsize);{doublesum=0.0;for(inti=0;i<size;++i)sum+=a[i];return(sum/size);}doubleavg(constinta[],intsize);{intsum=0;for(inti=0;i<size;++i)sum+=a[i];return((double)sum/size);}main(){intk[3]={1,2,3};doublex[3]={1.1,2.2,3.3};cout<<avg(k,3)<<“intaverage\n”;cout<<avg(x,3)<<“doubleaverage\n”;}9、Overloading⑴Function(orparameter)overloading:不同函数共用一个名字,而调用参数的特征不同。例:第46页,共74页,2024年2月25日,星期天⑵Operatoroverloading:同一运算符(operator)作用于不同类型的操作数(operand)上面。在编译(compile)阶段就决定了使用类型及执行代码,故亦称为静态联编(staticbinding)或先前联编(earlybinding)。

第47页,共74页,2024年2月25日,星期天7.面向对象的分析/设计/编程第48页,共74页,2024年2月25日,星期天7.1概述面向对象的分析(OOA)分析问题论域,找出问题解决方案,发现对象,分析对象的内部构成和外部关系,建立软件系统的对象模型面向对象的设计(OOD)根据已确定的系统对象模型,运用面向对象技术,进行系统软件设计面向对象的编程(OOP)第49页,共74页,2024年2月25日,星期天7.2面向对象的分析问题论域分析业务范围,业务规则,业务处理过程,确定系统的责任,范围和边界,确定系统的需求发现和定义对象和类识别对象和类,确定它们的内部特征:属性和操作,这是一个抽象过程识别对象的外部联系对象与对象,类与类之间的各种外部联系,包括一般与特殊,整体与部分,实例连接(关联),消息连接等建立系统的静态结构模型对象类图和对象图,系统与子系统结构图等,绘制相应的图建立系统的动态行为模型对象之间的交互关系等第50页,共74页,2024年2月25日,星期天7.3面向对象的设计设计对象和类具体设计对象和类的属性,操作,设计对象与类的各种外部联系的实现结构,设计消息与事件的内容、格式等设计系统结构设计组件与子系统,以及它们的相互的静态和动态关系设计问题论域子系统负责领域的业务服务设计人机交互系统设计数据管理子系统设计任务管理子系统进程管理设计优化,提高系统性能第51页,共74页,2024年2月25日,星期天详细的面向对象设计与语言有关。一般地,所有的语言都可以完成面向对象实现,但某些语言能够提供更丰富的语法,能够显式地描绘在面向对象分析和面向对象设计过程中所使用的表示法。7.4面向对象的编程第52页,共74页,2024年2月25日,星期天过程型语言只直接支持过程抽象可以增加数据抽象及封装(如利用结构化设计的信息隐蔽模块)无法明确地表示继承性。也无法明确支持整体与部分、类与成员、对象与属性等关系。具有面向对象特性的过程型语言可以成为一种实用的且可行的语言。第53页,共74页,2024年2月25日,星期天基于对象的语言,也叫做面向软件包的语言,如Ada等,能够直接支持过程抽象、数据抽象、封装和对象与属性关系它无法表示继承性,也无法表示类与成员、整体与部分的关系。基于对象语言的面向对象设计代表一种可行的开发方法。第54页,共74页,2024年2月25日,星期天面向对象的程序设计语言,包括C++、Smalltalk、Objective-C、Actor、Eiffel等,都直接支持过程抽象、数据抽象、封装、继承、以及对象与属性、类与成员关系。它们不明确地支持整体与部分关系,但可以方便地表示组装对象。第55页,共74页,2024年2月25日,星期天8.信息系统建模第56页,共74页,2024年2月25日,星期天8.1为什么要建模今天的计算机软件系统

是产品,而非“计算机程序”。

软件系统作为产品的特征开发者和使用者是脱离的。软件产品为用户提供功能软件产品具有质量的概念软件产品,应具备完备的用户手册技术文档

软件产品的生产过程具有工业化生产的特点开发团队协同工作软件产品需要使用工具技术是可复用质量必须稳定的不应在不同版本的软件之间产生质量不稳定的现象第57页,共74页,2024年2月25日,星期天但是,和其它传统的、成熟的工业生产行业相比,软件生产实际上仍处于幼稚阶段举一个成熟的工业化生产的例子:电子产品制造首先,确定产品性能指标如:收音机波段扬声器频率范围等等……

第58页,共74页,2024年2月25日,星期天然后设计电原理图构成:集成电路符号晶体管符号电阻电容符号标注符号描述电气连接关系可以了解到各关键信号的电气指标:信号的频率,电平电流,等等。

第59页,共74页,2024年2月25日,星期天电原理图是电子产品生产制造的基础。电子产品定型并投入生产后设计资料被作为技术资料存档产品需要更新换代技术复用软件生产行业,情形有所不同…首先,写系统分析报告由文字和示意性的框图构成然后,提出设计报告简单的文本和非标准图形组成第60页,共74页,2024年2月25日,星期天报告评审通过后编码、调试、测试、发行在大多数情况下,这时的工作已经和报告的内容脱钩这是由于开发和项目计划方面的压力软件产品发行,开发项目结束后,这些报告已不具备参考价值因为此时软件设计报告已经和软件的实际实现脱节,无法反映软件产品的实际原理和结构。软件产品需要更新换代时软件新版本的开发队伍所面对的只是老版本的软件产品本身加上相关的源代码。除此之外,没有任何其它的资源可以帮助他们分析和理解原产品的设计原理、结构和实现思路。第61页,共74页,2024年2月25日,星期天这相当于制造收音机时不绘制画电原理图就直接用集成电路、晶体管、电阻、电容制造收音机带来许多严重的问题对产品进行维修/维护新产品开发如何使开发周期最短、费用最节省对软件行业是同样的,它使得软件的技术复用难以进行开发队伍无法得到明确有效的分工软件的质量难以保证降低软件产品开发效率第62页,共74页,2024年2月25日,星期天回顾成熟的工业行业的发展历史,可以看出标准而规范的设计描述手段的引入,对产业的成熟起着重要的作用标准而规范的设计描述手段,作为一种标准的交流媒介,可以:促进开发队伍的分工合作提高(软件)产品的开发效率和质量从本质上讲,标准而规范的设计描述手段,就是建模第63页,共74页,2024年2月25日,星期天在产品的实际制造之前,先用模型来描述产品的特性和结构,使得参与产品设计和制造的人员能够了解目标产品的:设计原理内部结构制造工艺和流程从中找出产品设计和生产过程中的困难和风险所在第64页,共74页,2024年2月25日,星期天为什么要进行建模,是由于:对于一个复杂的软件系统,人们无法对其整体进行详细而全面的把握。所以,一个复杂的软件系统必须由多个开发人员共同完成。对于开发队伍里的每个成员而言,他(她)不可能对整个软件系统有全面而详细的了解。而对于一个软件产品而言,如果对整个系统的功能、原理和结构没有一个全面而详细的记载的话,将会对此软件产品的开发、维护、升级产生不利的结果。第65页,共74页,2024年2月25日,星期天通过建模把一个复杂的系统,按问题的不同方面,以一种约定好的,为大家共同接受的描述方式,分别进行全面而详尽的描述;这样,人们在试图理解一个系统时,可根据他所关心的某一方面的问题,查阅对应的系统模型,从而得到对此问题的理解。第66页,共74页,2024年2月25日,星期天8.2信息系统建模的原则准确的原则:模型必须准确地反映软件系统的真实情况。模型必须准确,意味着在软件开发的整个周期内模型必须和产品始终保持一致。

分层的原则:在建模的过程中,必须有不同的模型,以不同的抽象程度,反映系统的不同侧面。在软件构筑的不同阶段,不同的开发相关人员(stockholder),如:投资者、管理者、设计者、程序员、测试者,使用者,看待软件的侧重面有所不同。因此,软件系统的建模需要不同的模型以反映系统的不同侧面。如:一类模型描绘系统的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论