UML、OOAD和OOP的实践与思索UML_第1页
UML、OOAD和OOP的实践与思索UML_第2页
UML、OOAD和OOP的实践与思索UML_第3页
UML、OOAD和OOP的实践与思索UML_第4页
UML、OOAD和OOP的实践与思索UML_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

OOA、OOD和UML面向对象技术的开发实践2022/9/81主要内容OOA、OOD与UML基础Rose如何介入软件开发的全过程案例:编写一个自己的简化版WinZip软件开发的哲学思考待研究的课题2022/9/82第一部分OOA与OOD基础2022/9/83OOAObject-OrientedAnalysis(OOA):面向对象的分析OOA的侧重点是业务领域分析,与软件所要应用的行业领域相关,而与软件技术关系不大,需要由领域专家进行。 这一部分的工作被称为“需求分析”。2022/9/84OOA的成果业务领域用例图活动图协作图大量的业务文档资料2022/9/85OODObject-orienteddesign(OOD)用面向对象的方法为真实世界建立一个计算机中的虚拟模型2022/9/86OOD的地位OOD的主要任务是跨越业务领域模型与可实际运行的软件系统之间的鸿沟。OOD的难度是非常大的,负责OOD工作的人被称为系统架构设计师2022/9/87系统架构设计师的任务确定系统的总体框架---大多采用已有的领域框架正确理解需求分析得出的领域模型,用面向对象的思想设计出软件体系结构---系统概要设计分析现实的可获取的技术资源,分解出软件的各个组件,安排好开发任务流程---系统详细设计2022/9/88OOD的成果系统中有多少个类?系统中这些类间有什么关系(系统静态特性)?系统中这些类生成的对象如何协作来完成工作(系统动态特性)?系统中如何管理这些类和对象?2022/9/89OOP流行的面向对象语言Object-orientedProgram(OOP)用一种面向对象的语言来实现OOD完成的系统设计Java、C++、ObjectPascal、C#、VB.net……2022/9/810关于OOP用面向对象的语言编程不是OOP!OOP最重要的特征是面向对象理论的广泛应用OOP的成果是可运行的实际系统OOP中掺杂着OOD,OOP与OOD你中有我,我中有你,OOP是具体的OOD,二者的区别就在于应用范围的不同。2022/9/811OOA、OOD、OOP与真实世界2022/9/812面向对象理论的再认识封装封装体现了数据信息的隐藏,从而使不同模块的信息互不影响,这是OO的一大优点,因为它从类这一程序基本单位开始就支持信息隐藏。2022/9/813面向对象理论的再认识继承相对于结构化编程中的模块重用,面向对象中的继承体系显得更灵活,对代码的控制手段更多,从而推动了代码复用的程度,但却加大了学习掌握的难度。2022/9/814面向对象理论的再认识多态的特点:所有可以发给baseclass对象的消息,也都同样可以发给derivedclass。这是了解面向对象真髓的关键之一。2022/9/815C++中的面向对象特性四种编程风范:结构化编程、基于对象、面向对象、泛型编程C程序员易犯的毛病:在C++中写C程序。2022/9/816软件源代码复用的方式组合(composition)与聚合(aggregation)继承(inherit)其基本思想是以现有的类为基础创建新的类2022/9/817STLStandardTemplateLibrary,标准模板库STL是容器,算法和其他一些组件的集合2022/9/818泛型编程在OOD中的应用一种独特的平面型编程风范,大量使用C++的模板技巧典型案例:STL在标准的OOD设计方案中引入泛型编程技术,可以起到减少类数目的作用泛型技术可以看成是C++类的“合并同类项”。2022/9/819统一建模语言UMLUML图形化的建模语言开发者用来为面向对象系统建立模型具有灵活性与可扩展性2022/9/820统一软件过程RUP三大特点:用例驱动、迭代开发和增量开发2022/9/821OOAD的强大工具---ROSEROSE是采用UML进行软件系统设计的一个CASE工具,还有其他工具比如Visio,JBuilder7等。使用ROSE可以保证源代码与系统模型的一致性,这在软件开发过程中是非常有用的正向:UML模型软件代码框架逆向:软件代码UML模型ROSE支持双向工程2022/9/822ROSE对软件开发全过程的参与4+1视图ProcessViewDeploymentViewLogical

ViewImplementationViewProgrammers

Softwaremanagement

PerformanceScalabilityThroughput

SystemIntegratorsSystemtopology

Delivery,installationcommunicationSystemEngineeringUse-CaseViewStructure

Analysts/

DesignersEnd-userFunctionality2022/9/823用ROSE表达系统功能2022/9/824用ROSE表达软件的静态结构类图ClassDiagram:表明了一个软件中的各个类之间的关系2022/9/825用ROSE表达软件的静态结构2022/9/826用ROSE表达软件的静态结构2022/9/827用ROSE表达软件的静态结构2022/9/828用ROSE表达软件的静态结构小结:用Rose来描述一个软件的静态结构,首先应将整个系统划分为若干子系统或几个组成部分,每个组成部分以一个包来表示。接着,需要设计具体的类,并用各种关联符号表达出类间的关系,注意,每个类都必须归属于某一个包,这样才便于查找某个类2022/9/829用组件图描述软件组件一般用组件图来生成代码2022/9/830用ROSE表达软件的动态特性1:PerformResponsibility 客户对象供应者对象t消息:Client:Supplier调用周期说明……反身消息对象生命线1.1:PerformAnother

Responsibility 序列图序列图用于表达对象之间是如何发送消息,何时new一个对象,何时delete它,非常适合表达一种代码流程。2022/9/831用ROSE表达软件的动态特性1:PerformResponsibilityClientObjectSupplierObjectMessageLink:Client:Supplier协作图协作图比较适合表达类之间的依赖关联2022/9/832用ROSE表达软件的动态特性状态图当系统可以明显地划分为几个不同状态时,状态图可以大显身手,最明显的是ADO记录集的状态转换例如:需要给水分子的三种物理状态建模2022/9/833用ROSE表达软件的动态特性活动图活动图最适合表达出一种处理流程2022/9/834用ROSE表达软件的动态特性小结:(1)所有图的最根本目的是要对系统运行过程中的各个对象之间的关系作出确定性的唯一性的描述,从而保证所有开发人员都能对系统有一个统一的认识。(2)一般在确定了软件的静态结构之后才进行描述系统的动态特性(3)在任何情况下,保证ROSE模型与实际代码的一致都是至关重要的!(4)要根据实际情况选择一种合适的图来表达系统,不要强行要求用上所有类型的图,牢记:我们的目的是为了交流!2022/9/835参考资料2022/9/836参考资料2022/9/837参考资料2022/9/838参考资料2022/9/839参考资料2022/9/840参考资料2022/9/841参考资料2022/9/842案例研究一再造一个WinZip麻雀虽小,五脏俱全2022/9/843缘起:用一个规模小的工具软件来说明OOD的实际应用整个软件完成周期:四天2022/9/844开发过程形成软件总体想法:5分钟形成软件技术想法:5分钟实验技术想法:1天设计系统详细设计方案:1天正式编码和测试:半天感触:只要有技术积累,再加上合理的OOD,开发一个软件会成为一种很有成就感的创作!2022/9/845基于组件的用户界面设计标准的分层体系结构:用户界面类系统外部功能类系统底层基本功能类2022/9/846功能设想2022/9/847技术方案考虑采用C++流技术采用BorlandC++Builder开发BCBvsVC2022/9/848软件的工作原理(一)要编写一个软件,首先要知道人是如何完成某项工作的;接着,必须分析如何用计算机来完成这个工作,其结果是形成一个计算机算法,这要求有相关领域的理论知识2022/9/849软件的工作原理(二)计算机中文件的基本类型2022/9/850软件的工作原理(三)计算机中文件的基本类型2022/9/851软件的工作原理(四)考虑软件的内部总体数据处理流程2022/9/852设计过程(一)---资源选择选择可以复用的代码资源:C函数库:用fopen()、fclose()等打开和关闭文件,然后,直接在内存中对字节流进行处理

STL:用标准模板库(STL)中的iostream类

VCL:用TStream类2022/9/853设计过程(二)---接口设计设计基本的流操作类接口请参看源代码文件:2022/9/854设计过程(三)---利用多态VCL的TStream类继承树图注意:接口设计中采用了TStream*以利用多态2022/9/855设计过程(四)---数据结构StructVSClass2022/9/856数据结构设计结果2022/9/857设计过程(五)---数据对象的管理?OO软件的显著特点之一是如何管理对象C++技术难点:=运算符重载STL在数据结构方面有强大的表达能力!vectorVSlist利用VCL的现有特性改善设计2022/9/858设计过程(六)---功能实现2022/9/859设计结果2022/9/860Key:先进行非可视化功能类的设计设计过程中要综合考虑各方面的要求,作出综合平衡,然后才能形成可行的设计方案界面设计放在功能设计方案之后,它的目的是提供一个用户接口以驱动功能类的运作.2022/9/861界面设计案例:界面与功能代码的完全分离2022/9/862用户界面设计(一)---窗体2022/9/863用户界面设计(二)---灵活性用户界面编码的分层原则:(1)不在控件的事件处理过程中书写大量的代码!(2)尽可能减少代码对具体控件的依赖(3)重复使用的某种功能的控件应被封装成新的控件(4)考虑窗体间的相似性,巧妙利用窗体的OO特性:继承,多态与重载一个复杂的控件原则上应新建一个控制类以便于使用,这个控制类的接口成员应是按逻辑来划分而不是按技术来划分的2022/9/864用户界面设计(三)---健壮性保证用户界面层以正确的顺序调用功能类

避免一个窗体过于复杂2022/9/865提高软件健壮性每一个函数都尽可能地保证是独立完备的、安全的。程序基本完成后,从最底层的类开始,逐步找出每个对外接口的前条件(前提)和后条件(结果),然后,判断有无可能发生错误,并且决定这些错误应该如何处理2022/9/866开发高容错程序三原则

预防所有可以预料和防止的错误;处理所有可以预料但不能防止的错误;捕获所有不能预料的错误;代码实例分析2022/9/867使用ROSE进行正向代码生成设计类接口新建一个组件将类赋与组件生成代码2022/9/868使用ROSE进行正向代码生成(1)设计类接口2022/9/869使用ROSE进行正向代码生成(2)新建一个组件2022/9/870使用ROSE进行正向代码生成(3)选定组件的语言2022/9/871使用ROSE进行正向代码生成(4)给组件分配类2022/9/872使用ROSE进行正向代码生成(5)分配了类的组件2022/9/873使用ROSE进行正向代码生成(6)生成代码2022/9/874使用ROSE进行逆向更新逆向更新的目的是用更改后的代码刷新系统模型文件,以保证系统文档与真实代码的一致性2022/9/875使用ROSE进行逆向转换选择组件打开AnsiC++specification窗口选择文件生成模型2022/9/876用已有代码进行逆向转换(1)新建组件2022/9/877用已有代码进行逆向转换(2)打开ANSIC++参数设置窗口2022/9/878用已有代码进行逆向转换(3)加入C++头文件和CPP文件2022/9/879用已有代码进行逆向转换(4)从菜单中选逆向工程命令2022/9/880用已有代码进行逆向转换(5)ROSE工程资源浏览器中新生成的类2022/9/881用已有代码进行逆向转换(6)新生成的类的属性窗口2022/9/882用已有代码进行逆向转换(7)在类图中显示逆向工程生成的类2022/9/883OOAD理论总结与思索2022/9/884软件开发的最重要思维方式软件开发的最重要思维方式是什么?抽象!软件=对象+对象之间的关系结构化编程时代

程序=数据结构+算法面向对象软件时代,软件=?2022/9/885组件化时代的软件设计什么是软件组件?注意:区分ROSE中的组件与软件理论领域中的组件可以复用的,具备一定功能的类的组合。单个类不够资格成为软件组件!软件组件可以以源代码方式存在,也可以以二进制形式存在2022/9/886组件化时代的软件设计OOD设计师制定组件的规范,高级程序员实现这些可复用的组件现代软件开发已成为组装已有组件的过程,最典型的例子是Java与.net类库2022/9/887设计模式大型系统中良好的设计是关键为开发面向对象的软件提供一个架构减少了软件设计的复杂度为软件设计方案的重用提供了可能性可以避免犯一些常规性的错误使设计独立于语言建立了一套软件架构设计师的“通用语言”在软件开发周期中缩短了设计周期设计模式(Designpatterns)2022/9/888使用设计模式熟悉模式才能知道如何使用模式用模式的最好方法就是设计时忘掉所有的模式名,只从实践出发寻找可行的方案,必要时才去翻模式书以获得灵感。我们用UML来描述模式,ROSE是画图工具2022/9/889设计模式经典书籍四个老外权威:Gamma,Helm,JohnsonandVlissides“GangofFour”——四人帮DesignPatterns,ElementsofReusableObject-OrientedSoftware(AddisonWesley:1995)提出23种设计模式创建型设计模式:解决如何创建对象的问题结构型设计模式:解决类和对象间的结构关系问题行为型设计模式:解决对象间的动态关系问题2022/9/890参考资料2022/9/891参考资料2022/9/892关于设计模式设计模式运用时,心中要无模式;关键在于把握其思想。应仔细研究成熟的设计模式,将其活学活用模式不是数学公式!2022/9/893结构化编程与面向对象编程面向对象的关键是抽象面向对象分析设计的成功实施要求更高,难度更大: 在理解对象基本理论和开发技术的前提下,加上丰富的程序开发实践,才行。结构化与面向对象方法应该相辅相成,在合适的地方用合适的方法。2022/9/894结构化编程与面向对象编程在类的内部代码实现上采用结构化编程的方式:

比如:将一个太长的函数按功能分解为若干个小函数,做为类的私有函数只有在调试代码清除BUG中,才发觉OO的妙处和软件工程理论的无比正确! 最重要的是两点: (1)代码隔离; (2)控制模块规模;2022/9/895对象的存储对象的存储不应直接与数据库打交道对象的管理通常都设计控制类采用STL容器进行管理从数据库记录集生成对象,然后把对象放入STL容器中,是一个很好的设计方案数据库表的一对多关联,表现为对象之间的组合,多对多关联如何处理?请思索!2022/9/896对象与关系数据库对象实例的数据保存在数据库表中,一般一条记录对应一个对象实例,尽量避免一个对象实例的数据分布在不同的表中,这样就加大了移植的难度;对象与数据库之间的关系问题是OOD与OOP必须解决的问题之一。2022/9/897数据库表关联与对象的对应表的一对一关联可直接映射到对象间的一对一关联2022/9/898数据库表关联与对象的对应一对多关联2022/9/899数据库表关联与对象的对应多对多关联需拆成两个一对多的关联2022/9/8100分而治之的设计方法“分而治之”是一个基本的方法,简单地说,就是将一个复杂的系统划分为几个子系统,然后,分别处理这些子系统,最后再合成一个完整的系统。这是西方科学的主要思维方法之一:重视局部与细节,用放大镜去研究大象。2022/9/8101横向与纵向可以利用多态、模板等机制简化设计继承是纵向的设计方案,STL是横向的解决方案,继承可以复用代码,模板可以减少类的数量,相互配合才是良好的设计。基于组件的“搭积木”过程可以看成是将横向与纵向设计相结合的典范2022/9/8102OOD的指导原则为特定问题产生一个class,然后让它在解决其他问题时,渐渐成长而成熟;设计Class及其接口,是OOD的主要任务;开始写程序,让一部分先动起来,以验证设计,或找出难点所在;保持类的小而简洁,功能明确——《ThinkinginJava》p822022/9/8103OOAD的哲学方法论真学问把复杂的问题弄得简单,它的目的是让你能够理解;伪学问把简单的问题弄得复杂,它的目的是让你感到神秘。不做就学不到2022/9/8104OOAD的哲学方法论一切都要从实际出发,不迷信老外的一切,相信自己的直觉。采用“拿来主义”现在的OOD,大多是在采用已有的系统架构基础上修修补补,以达到最大限度地利用现有资源的目的。所以,OOD不是独立于语言与开发工具的。不存在界限分明的OOD阶段,事实

温馨提示

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

评论

0/150

提交评论