UML、OOAD和OOP的实践与思索UML.ppt

上传人:re****.1 文档编号:569992460 上传时间:2024-08-01 格式:PPT 页数:113 大小:4.14MB
返回 下载 相关 举报
UML、OOAD和OOP的实践与思索UML.ppt_第1页
第1页 / 共113页
UML、OOAD和OOP的实践与思索UML.ppt_第2页
第2页 / 共113页
UML、OOAD和OOP的实践与思索UML.ppt_第3页
第3页 / 共113页
UML、OOAD和OOP的实践与思索UML.ppt_第4页
第4页 / 共113页
UML、OOAD和OOP的实践与思索UML.ppt_第5页
第5页 / 共113页
点击查看更多>>
资源描述

《UML、OOAD和OOP的实践与思索UML.ppt》由会员分享,可在线阅读,更多相关《UML、OOAD和OOP的实践与思索UML.ppt(113页珍藏版)》请在金锄头文库上搜索。

1、OOAOOA、OODOOD和和UMLUML面向对象技术的开发实践北京理工大学信息学院计算机科学系 金旭亮2024/8/11主要内容主要内容OOA、OOD与UML基础Rose如何介入软件开发的全过程案例:编写一个自己的简化版WinZip软件开发的哲学思考待研究的课题2024/8/12第一部分第一部分OOAOOA与与OODOOD基础基础2024/8/13OOAOOAObject-OrientedAnalysis(OOA):面向对象的分析 OOA的侧重点是业务领域分析,与软件所要应用的行业领域相关,而与软件技术关系不大,需要由领域专家进行。这一部分的工作被称为“需求分析”。2024/8/14OOAO

2、OA的成果的成果n业务领域用例图n活动图n协作图n大量的业务文档资料2024/8/15OODOODObject-orienteddesign(OOD)用面向对象的方法为真实世界建立一个计算机中的虚拟模型2024/8/16OODOOD的地位的地位OOD的主要任务是跨越业务领域模型与可实际运行的软件系统之间的鸿沟。OOD的难度是非常大的,负责OOD工作的人被称为系统架构设计师2024/8/17系统架构设计师的任务系统架构设计师的任务确定系统的总体框架-大多采用已有的领域框架正确理解需求分析得出的领域模型,用面向对象的思想设计出软件体系结构-系统概要设计分析现实的可获取的技术资源,分解出软件的各个组

3、件,安排好开发任务流程-系统详细设计2024/8/18OODOOD的成果的成果系统中有多少个类?系统中这些类间有什么关系(系统静态静态特性)?系统中这些类生成的对象如何协作来完成工作(系统动态动态特性)?系统中如何管理这些类和对象?2024/8/19OOPOOP流行的面向对象语言nObject-oriented Program (OOP)用一种面向对象的语言来实现OOD完成的系统设计Java、C+、Object Pascal、C#、VB.net2024/8/110关于关于OOPOOP用面向对象的语言编程不是OOP!OOP最重要的特征是面向对象理论的广泛应用OOP的成果是可运行的实际系统OOP中

4、掺杂着OOD,OOP与OOD你中有我,我中有你,OOP是具体的OOD,二者的区别就在于应用范围的不同。2024/8/111OOAOOA、OODOOD、OOPOOP与真实世界与真实世界2024/8/112面向对象理论的再认识面向对象理论的再认识封装封装体现了数据信息的隐藏,从而使不同模块的信息互不影响,这是OO的一大优点,因为它从类这一程序基本单位开始就支持信息隐藏。2024/8/113面向对象理论的再认识面向对象理论的再认识继承相对于结构化编程中的模块重用,面向对象中的继承体系显得更灵活,对代码的控制手段更多,从而推动了代码复用的程度,但却加大了学习掌握的难度。2024/8/114面向对象理论

5、的再认识面向对象理论的再认识多态的特点:所有可以发给base class对象的消息,也都同样可以发给derived class。这是了解面向对象真髓的关键之一。2024/8/115C+C+中的面向对象特性中的面向对象特性四种编程风范:结构化编程、基于对象、面向对象、泛型编程C程序员易犯的毛病:在C+中写C程序。2024/8/116软件源代码复用的方式软件源代码复用的方式组合(composition)与聚合(aggregation)继承(inherit)其基本思想是以现有的类为基础创建新的类2024/8/117STLSTLStandard Template Library,标准模板库STL是容器

6、,算法和其他一些组件的集合2024/8/118泛型编程在泛型编程在OODOOD中的应用中的应用一种独特的平面型编程风范,大量使用C+的模板技巧典型案例:STL在标准的OOD设计方案中引入泛型编程技术,可以起到减少类数目的作用泛型技术可以看成是C+类的“合并同类项合并同类项”。2024/8/119统一建模语言统一建模语言UMLUMLUMLn图形化的建模语言n开发者用来为面向对象系统建立模型n具有灵活性与可扩展性2024/8/120统一软件过程统一软件过程RUPRUP三大特点:用例驱动、迭代开发和增量开发2024/8/121OOADOOAD的强大工具的强大工具-ROSEROSEROSE是采用UML

7、进行软件系统设计的一个CASE工具,还有其他工具比如Visio,JBuilder7等。使用ROSE可以保证源代码与系统模型的一致性,这在软件开发过程中是非常有用的正向:UML模型软件代码框架逆向:软件代码UML模型ROSE支持双向工程2024/8/122ROSEROSE对软件开发全过程的参与对软件开发全过程的参与4+1视图Process ViewDeployment ViewLogical ViewImplementation ViewProgrammers Software management PerformanceScalabilityThroughput System Integrat

8、orsSystem topology Delivery, installationcommunicationSystem EngineeringUse-Case ViewStructure Analysts/DesignersEnd-user Functionality2024/8/123用用ROSEROSE表达系统功能表达系统功能2024/8/124用用ROSEROSE表达软件的静态结构表达软件的静态结构类图ClassDiagram:表明了一个软件中的各个类之间的关系2024/8/125用用ROSEROSE表达软件的静态结构表达软件的静态结构2024/8/126用用ROSEROSE表达软件的

9、静态结构表达软件的静态结构2024/8/127用用ROSEROSE表达软件的静态结构表达软件的静态结构2024/8/128用用ROSEROSE表达软件的静态结构表达软件的静态结构小结:用Rose来描述一个软件的静态结构,首先应将整个系统划分为若干子系统或几个组成部分,每个组成部分以一个包来表示。接着,需要设计具体的类,并用各种关联符号表达出类间的关系,注意,每个类都必须归属于某一个包,这样才便于查找某个类2024/8/129用组件图描述软件组件用组件图描述软件组件一般用组件图来生成代码2024/8/130用用ROSEROSE表达软件的动态特性表达软件的动态特性1: PerformRespons

10、ibility客户对象供应者对象t消息:Client:Supplier调用周期说明 反身消息对象生命线1.1: PerformAnotherResponsibility序列图序列图用于表达对象之间是如何发送消息,何时new一个对象,何时delete它,非常适合表达一种代码流程。2024/8/131用用ROSEROSE表达软件的动态特性表达软件的动态特性1: PerformResponsibilityClient ObjectSupplier ObjectMessageLink:Client:Supplier协作图协作图比较适合表达类之间的依赖关联2024/8/132用用ROSEROSE表达软件

11、的动态特性表达软件的动态特性状态图当系统可以明显地划分为几个不同状态时,状态图可以大显身手,最明显的是ADO 记录集的状态转换例如:需要给水分子的三种物理状态建模2024/8/133用用ROSEROSE表达软件的动态特性表达软件的动态特性活动图活动图最适合表达出一种处理流程2024/8/134用用ROSEROSE表达软件的动态特性表达软件的动态特性小结:(1)所有图的最根本目的是要对系统运行过程中的各个对象之间的关系作出确定性的唯一性的描述,从而保证所有开发人员都能对系统有一个统一的认识。(2)一般在确定了软件的静态结构之后才进行描述系统的动态特性(3)在任何情况下,保证ROSE模型与实际代码

12、的一致都是至关重要的!(4)要根据实际情况选择一种合适的图来表达系统,不要强行要求用上所有类型的图,牢记:我们的目的是为了交流!2024/8/135参考资料参考资料2024/8/136参考资料参考资料2024/8/137参考资料参考资料2024/8/138参考资料参考资料2024/8/139参考资料参考资料2024/8/140参考资料参考资料2024/8/141参考资料参考资料2024/8/142案例研究一案例研究一再造一个WinZip麻雀虽小,五脏俱全2024/8/143缘起:缘起:用一个规模小的工具软件来说明OOD的实际应用整个软件完成周期:四天2024/8/144开发过程开发过程形成软件

13、总体想法:5分钟形成软件技术想法:5分钟实验技术想法:1天设计系统详细设计方案:1天正式编码和测试:半天感触:只要有技术积累,再加上合理的OOD,开发一个软件会成为一种很有成就感的创作!2024/8/145基于组件的用户界面设计基于组件的用户界面设计标准的分层体系结构:用户界面类系统外部功能类系统底层基本功能类2024/8/146功能设想功能设想2024/8/147技术方案考虑技术方案考虑采用C+流技术采用BorlandC+Builder开发BCB vs VC2024/8/148软件的工作原理(一)软件的工作原理(一)要编写一个软件,首先要知道人是如何完成某项工作的;接着,必须分析如何用计算机

14、来完成这个工作,其结果是形成一个计算机算法,这要求有相关领域的理论知识2024/8/149软件的工作原理(二)软件的工作原理(二)计算机中文件的基本类型2024/8/150软件的工作原理(三)软件的工作原理(三)计算机中文件的基本类型2024/8/151软件的工作原理(四软件的工作原理(四)考虑软件的内部总体数据处理流程2024/8/152设计过程(一)设计过程(一)-资源选择资源选择选择可以复用的代码资源:C函数库:用fopen()、fclose()等打开和关闭文件,然后,直接在内存中对字节流进行处理 STL:用标准模板库(STL)中的iostream类 VCLVCL:用用TStreamTS

15、tream类类2024/8/153设计过程(二)设计过程(二)-接口设计接口设计设计基本的流操作类接口请参看源代码文件:FileStreamOpt.hFileStreamOpt.cpp2024/8/154设计过程(三)设计过程(三)-利用多态利用多态VCL的TStream类继承树图注意:接口设计中采用了TStream* 以利用多态2024/8/155设计过程(四)设计过程(四)-数据结构数据结构StructVSClass2024/8/156数据结构设计结果数据结构设计结果2024/8/157设计过程(五)设计过程(五)-数据对象的数据对象的管理?管理?OO软件的显著特点之一是如何管理对象C+技

16、术难点:=运算符重载STL在数据结构方面有强大的表达能力!vectorVSlist利用VCL的现有特性改善设计2024/8/158设计过程(六)设计过程(六)-功能实现功能实现2024/8/159设计结果设计结果2024/8/160Key:Key:先进行非可视化功能类的设计设计过程中要综合考虑各方面的要求,作出综合平衡,然后才能形成可行的设计方案界面设计放在功能设计方案之后,它的目的是提供一个用户接口以驱动功能类的运作.2024/8/161界面设计案例:界面设计案例:界面与功能代码的完全分离2024/8/162用户界面设计(一)用户界面设计(一)-窗体窗体2024/8/163用户界面设计(二)

17、用户界面设计(二)-灵活性灵活性用户界面编码的分层原则分层原则:(1)不在控件的事件处理过程中书写大量的代码!(2)尽可能减少代码对具体控件的依赖(3)重复使用的某种功能的控件应被封装成新的控件(4)考虑窗体间的相似性,巧妙利用窗体的OO特性:继承,多态与重载一个复杂的控件原则上应新建一个控制类以便于使用,这个控制类的接口成员应是按逻辑来划分而不是按技术来划分的2024/8/164用户界面设计(三)用户界面设计(三)-健壮性健壮性保证用户界面层以正确的顺序调用功能类避免一个窗体过于复杂2024/8/165提高软件健壮性提高软件健壮性每一个函数都尽可能地保证是独立完备的、安全的。程序基本完成后,

18、从最底层的类开始,逐步找出每个对外接口的前条件(前提)和后条件(结果),然后,判断有无可能发生错误,并且决定这些错误应该如何处理2024/8/166开发高容错程序三原则开发高容错程序三原则预防所有可以预料和防止的错误;预防所有可以预料和防止的错误;处理所有可以预料但不能防止的错误;处理所有可以预料但不能防止的错误;捕获所有不能预料的错误;捕获所有不能预料的错误;代码实例分析2024/8/167使用使用ROSEROSE进行正向代码生成进行正向代码生成设计类接口新建一个组件将类赋与组件生成代码2024/8/168使用使用ROSEROSE进行正向代码生成进行正向代码生成(1 1)设计类接口2024/

19、8/169使用使用ROSEROSE进行正向代码生成进行正向代码生成(2 2)新建一个组件2024/8/170使用使用ROSEROSE进行正向代码生成进行正向代码生成(3 3)选定组件的语言2024/8/171使用使用ROSEROSE进行正向代码生成进行正向代码生成(4 4)给组件分配类2024/8/172使用使用ROSEROSE进行正向代码生成进行正向代码生成(5 5)分配了类的组件2024/8/173使用使用ROSEROSE进行正向代码生成进行正向代码生成(6 6)生成代码2024/8/174使用使用ROSEROSE进行逆向更新进行逆向更新逆向更新的目的是用更改后的代码刷新系统模型文件,以保

20、证系统文档与真实代码的一致性2024/8/175使用使用ROSEROSE进行逆向转换进行逆向转换选择组件打开AnsiC+specification窗口选择文件生成模型2024/8/176用已有代码进行逆向转换(用已有代码进行逆向转换(1 1)新建组件2024/8/177用已有代码进行逆向转换(用已有代码进行逆向转换(2 2)打开ANSIC+参数设置窗口2024/8/178用已有代码进行逆向转换(用已有代码进行逆向转换(3 3)加入C+头文件和CPP文件2024/8/179用已有代码进行逆向转换(用已有代码进行逆向转换(4 4)从菜单中选逆向工程命令2024/8/180用已有代码进行逆向转换(用

21、已有代码进行逆向转换(5 5)ROSE工程资源浏览器中新生成的类2024/8/181用已有代码进行逆向转换(用已有代码进行逆向转换(6 6)新生成的类的属性窗口2024/8/182用已有代码进行逆向转换(用已有代码进行逆向转换(7 7)在类图中显示逆向工程生成的类2024/8/183OOADOOAD理论总结与思索理论总结与思索2024/8/184软件开发的最重要思维方式软件开发的最重要思维方式软件开发的最重要思维方式是什么?抽象!软件软件软件软件= =对象对象对象对象+ +对象之间的关系对象之间的关系对象之间的关系对象之间的关系结构化编程时代程序=数据结构+算法面向对象软件时代,软件=?202

22、4/8/185组件化时代的软件设计组件化时代的软件设计什么是软件组件?注意:区分ROSE中的组件与软件理论领域中的组件可以复用的,具备一定功能的类的组合。单个类不够资格成为软件组件!软件组件可以以源代码方式存在,也可以以二进制形式存在2024/8/186组件化时代的软件设计组件化时代的软件设计OOD设计师制定组件的规范,高级程序员实现这些可复用的组件现代软件开发已成为组装已有组件的过程,最典型的例子是Java与.net类库2024/8/187设计模式设计模式大型系统中良好的设计是关键n为开发面向对象的软件提供一个架构n减少了软件设计的复杂度n为软件设计方案的重用提供了可能性n可以避免犯一些常规

23、性的错误n使设计独立于语言n建立了一套软件架构设计师的“通用语言”n在软件开发周期中缩短了设计周期设计模式(Design patterns)2024/8/188使用设计模式使用设计模式熟悉模式才能知道如何使用模式用模式的最好方法就是设计时忘掉所有的模式名,只从实践出发寻找可行的方案,必要时才去翻模式书以获得灵感。我们用UML来描述模式,ROSE是画图工具2024/8/189设计模式经典书籍设计模式经典书籍四个老外权威:Gamma,Helm,JohnsonandVlissidesn“Gang of Four”四人帮nDesign Patterns, Elements of Reusable Ob

24、ject-Oriented Software (Addison Wesley: 1995)n提出23种设计模式n创建型设计模式:解决如何创建对象的问题n结构型设计模式:解决类和对象间的结构关系问题n行为型设计模式:解决对象间的动态关系问题2024/8/190参考资料参考资料2024/8/191参考资料参考资料2024/8/192关于设计模式关于设计模式设计模式运用时,心中要无模式;关键在于把握其思想。应仔细研究成熟的设计模式,将其活学活用模式不是数学公式模式不是数学公式!2024/8/193结构化编程与面向对象编程结构化编程与面向对象编程面向对象的关键是抽象面向对象分析设计的成功实施要求更高,

25、难度更大:在理解对象基本理论和开发技术的前提下,加上丰富的程序开发实践,才行。结构化与面向对象方法应该相辅相成,在合适的地方用合适的方法。2024/8/194结构化编程与面向对象编程结构化编程与面向对象编程在类的内部代码实现上采用结构化编程的方式:比如:将一个太长的函数按功能分解为若干个小函数,做为类的私有函数只有在调试代码清除BUG中,才发觉OO的妙处和软件工程理论的无比正确!最重要的是两点:(1)代码隔离;(2)控制模块规模;2024/8/195对象的存储对象的存储对象的存储不应直接与数据库打交道对象的管理通常都设计控制类采用STL容器进行管理从数据库记录集生成对象,然后把对象放入STL容

26、器中,是一个很好的设计方案数据库表的一对多关联,表现为对象之间的组合,多对多关联如何处理?请思索!2024/8/196对象与关系数据库对象与关系数据库对象实例的数据保存在数据库表中,一般一条记录对应一个对象实例,尽量避免一个对象实例的数据分布在不同的表中,这样就加大了移植的难度;对象与数据库之间的关系问题是OOD与OOP必须解决的问题之一。2024/8/197数据库表关联与对象的对应数据库表关联与对象的对应表的一对一关联可直接映射到对象间的一对一关联2024/8/198数据库表关联与对象的对应数据库表关联与对象的对应一对多关联2024/8/199数据库表关联与对象的对应数据库表关联与对象的对应

27、多对多关联需拆成两个一对多的关联2024/8/1100分而治之的设计方法分而治之的设计方法“分而治之”是一个基本的方法,简单地说,就是将一个复杂的系统划分为几个子系统,然后,分别处理这些子系统,最后再合成一个完整的系统。这是西方科学的主要思维方法之一:重视局部与细节,用放大镜去研究大象。2024/8/1101横向与纵向横向与纵向可以利用多态、模板等机制简化设计继承是纵向的设计方案,STL是横向的解决方案,继承可以复用代码,模板可以减少类的数量,相互配合才是良好的设计。基于组件的“搭积木”过程可以看成是将横向与纵向设计相结合的典范2024/8/1102OODOOD的指导原则的指导原则为特定问题产

28、生一个class,然后让它在解决其他问题时,渐渐成长而成熟;设计Class及其接口,是OOD的主要任务;开始写程序,让一部分先动起来,以验证设计,或找出难点所在;保持类的小而简洁,功能明确Thinking in Javap822024/8/1103OOADOOAD的哲学方法论的哲学方法论真学问把复杂的问题弄得简单,它的目的是让你能够理解;伪学问把简单的问题弄得复杂,它的目的是让你感到神秘。不做就学不到2024/8/1104OOADOOAD的哲学方法论的哲学方法论一切都要从实际出发,不迷信老外的一切,相信自己的直觉。采用“拿来主义”现在的OOD,大多是在采用已有的系统架构基础上修修补补,以达到最

29、大限度地利用现有资源的目的。所以,OOD不是独立于语言与开发工具的。不存在界限分明的OOD阶段,事实上,OOD是与编码交织在一起的,没有编码作基础,无法进行OOD,不进行编码实践,就无法改进OOD2024/8/1105OOADOOAD的哲学方法论的哲学方法论不管白猫黑猫,逮着老鼠就是好猫。书本上理论上介绍了许多有用的理论,但一切都要从实际出发,OO不是万试灵丹。2024/8/1106现实的约束:现实的约束:从实际角度出发,OO到底是省事还是费事?请拍拍大脑问问自己,我该怎样做?用自己的大脑思索,不要用别人的大脑思索!2024/8/1107待研究的课题(一):待研究的课题(一):XML对软件组件

30、技术的冲击(如何用XML重构整个软件体系结构)?以记录集为中心转为以XML数据为中心用XML实现跨平台的信息交换XML如何存储与传递现有的软件如何转化为以XML为中心的软件2024/8/1108待研究的课题(二)待研究的课题(二)面向对象软件的测试理论:如何对面向对象软件中复杂的静态和动态关系进行测试?如何设计测试用例?测试过程如何管理?2024/8/1109待研究的课题(三)待研究的课题(三)利用新一代的WebService技术,如何构造一个分布式的多层系统?要实现跨平台的组件调用怎样实现?如何创建一个横跨Linux和Windows的分布式系统?在组件级别实现统一?2024/8/1110待研

31、究的课题(四)待研究的课题(四)可复用面向对象软件代码库的设计如何构建一个高度可复用的代码库?参考JDK,STL,.net frameWork,VCL,抽象、概括、总结2024/8/1111待研究的课题(五)待研究的课题(五)计算机技术发展日新月异,实践在不断地提出新问题,这是一个永无止境的过程。大家有没有自己的想法?探索一个别人还不熟悉的领域,把国外先进的东西与中国的具体实践结合起来提高中国软件产业的技术水平,是我们的责任!2024/8/1112结束语感谢您聆听我的“胡言乱语”,希望没有浪费大家的时间,希望和大家交朋友,共同推动中国软件技术的普及、应用、发展和进步!联系方式:金旭亮 北京理工大学信息学院计算机系904教研室JinXuL2024/8/1113

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号