




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OOA、OOD和UML面向对象技术的开发实践北京理工大学信息学院计算机科学系金旭亮2021/7/311主要内容2021/7/312OOA、OOD与UML基础Rose如何介入软件开发的全过程案例:编写一个自己的简化版WinZip软件开发的哲学思考待研究的课题第一部分2021/7/313OOA与OOD基础OOA2021/7/314Object-Oriented
Analysis(OOA):面向对象的分析OOA的侧重点是业务领域分析,与软件所要应用的行业领域相关,而与软件技术关系不大,需要由领域专家进行。这一部分的工作被称为“需求分析”。OOA的成果2021/7/315业务领域用例图活动图协作图大量的业务文档资料OODObject-orienteddesign
(OOD)用面向对象的方法为真实世界建立一个计算机中的虚拟模型2021/7/316OOD的地位2021/7/317OOD的主要任务是跨越业务领域模型与可实际运行的软件系统之间的鸿沟。OOD的难度是非常大的,负责OOD工作的人被称为系统架构设计师系统架构设计师的任务2021/7/318确定系统的总体框架---大多采用已有的领域框架正确理解需求分析得出的领域模型,用面向对象的思想设计出软件体系结构---系统概要设计分析现实的可获取的技术资源,分解出软件的各个组件,安排好开发任务流程---系统详细设计OOD的成果2021/7/319系统中有多少个类?系统中这些类间有什么关系(系统静态特性)?系统中这些类生成的对象如何协作来完成工作(系统动态特性)?系统中如何管理这些类和对象?OOP2021/7/3110Object-oriented
Program
(OOP)用一种面向对象的语言来实现OOD完成的系统设计流行的面向对象语言Java、C++、ObjectPascal、C#、……关于OOP2021/7/3111用面向对象的语言编程不是OOP!OOP最重要的特征是面向对象理论的广泛应用OOP的成果是可运行的实际系统OOP中掺杂着OOD,OOP与OOD你中有我,我中有你,OOP是具体的OOD,二者的区别就在于应用范围的不同。OOA、OOD、OOP与真实世界2021/7/3112面向对象理论的再认识封装封装体现了数据信息的隐藏,从而使不同模块的信息互不影响,这是
OO的一大优点,因为它从类这一程序基本单位开始就支持信息隐藏。2021/7/3113面向对象理论的再认识继承相对于结构化编程中的模块重用,面向对象中的继承体系显得更灵活,对代码的控制手段更多,从而推动了代码复用的程度,但却加大了学习掌握的难度。2021/7/3114面向对象理论的再认识2021/7/3115多态的特点:所有可以发给baseclass对象的消息,也都同样可以发给derivedclass。这是了解面向对象真髓的关键之一。C++中的面向对象特性2021/7/3116四种编程风范:结构化编程、基于对象、面向对象、泛型编程C程序员易犯的毛病:在C++中写C程序。软件源代码复用的方式2021/7/3117组合(composition)与聚合(aggregation)继承(inherit)其基本思想是以现有的类为基础创建新的类STL2021/7/3118Standard
Template
Library,标准模板库STL是容器,算法和其他一些组件的集合泛型编程在OOD中的应用2021/7/3119一种独特的平面型编程风范,大量使用C++的模板技巧典型案例:STL在标准的OOD设计方案中引入泛型编程技术,可以起到减少类数目的作用泛型技术可以看成是C++类的“合并同类项”。统一建模语言UML2021/7/3120UML图形化的建模语言开发者用来为面向对象系统建立模型具有灵活性与可扩展性统一软件过程RUP2021/7/3121三大特点:用例驱动、迭代开发和增量开发OOAD的强大工具---ROSE2021/7/3122ROSE是采用UML进行软件系统设计的一个CASE工具,还有其他工具比如
Visio,JBuilder7等。ROSE支持双向工程正向:UML模型软件代码框架逆向:软件代码UML模型使用ROSE可以保证源代码与系统模型的一致性,这在软件开发过程中是非常有用的ROSE对软件开发全过程的参与4+1视图LogicalViewImplementationViewProgrammersSoftwaremanagementProcessViewSystem
IntegratorsPerformanceScalabilityThroughputDeploymentViewSystemEngineeringSystem
topologyDelivery,
installationcommunicationUse-Case2021/7/3123ViewAnalysts/DesignersStructureEnd-userFunctionality用ROSE表达系统功能2021/7/3124用ROSE表达软件的静态结构类图Class
Diagram:表明了一个软件中的各个类之间的关系2021/7/3125用ROSE表达软件的静态结构2021/7/3126用ROSE表达软件的静态结构2021/7/3127用ROSE表达软件的静态结构2021/7/3128用ROSE表达软件的静态结构2021/7/3129小结:用Rose来描述一个软件的静态结构,首先应将整个系统划分为若干子系统或几个组成部分,每个组成部分以一个包来表示。接着,需要设计具体的类,并用各种关联符号表达出类间的关系,注意,每个类都必须归属于某一个包,这样才便于查找某个类用组件图描述软件组件一般用组件图来生成代码2021/7/3130用ROSE表达软件的动态特性1:PerformResponsibility消息:Client:Supplier调用周期说明……反身消息对象生命线1.1:2021/7/3131PerformAnotherResponsibility序列图客户对象
供应者对象t序列图用于表达对象之间是如何发送消息,何时
new一个对象,何时delete它,非常适合表达一种代码流程。用ROSE表达软件的动态特性1:
PerformResponsibilityClient
ObjectSupplier
ObjectLink:Client2021/7/3132:Supplier协作图Message协作图比较适合表达类之间的依赖关联用ROSE表达软件的动态特性状态图2021/7/3133当系统可以明显地划分为几个不同状态时,状态图可以大显身手,最明显的是ADO
记录集的状态转换例如:需要给水分子的三种物理状态建模用ROSE表达软件的动态特性活动图活动图最适合表达出一种处理流程2021/7/3134用ROSE表达软件的动态特性2021/7/3135小结:所有图的最根本目的是要对系统运行过程中的各个对象之间的关系作出确定性的唯一性的描述,从而保证所有开发人员都能对系统有一个统一的认识。一般在确定了软件的静态结构之后才进行描述系统的动态特性在任何情况下,保证ROSE模型与实际代码的一致都是至关重要的!要根据实际情况选择一种合适的图来表达系统,不要强行要求用上所有类型的图,牢记:我们的目的是为了交流!参考资料2021/7/3136参考资料2021/7/3137参考资料2021/7/3138参考资料2021/7/3139参考资料2021/7/3140参考资料2021/7/3141参考资料2021/7/3142案例研究一再造一个WinZip麻雀虽小,五脏俱全2021/7/3143缘起:2021/7/3144用一个规模小的工具软件来说明OOD的实际应用整个软件完成周期:四天开发过程2021/7/3145形成软件总体想法:5分钟形成软件技术想法:5分钟实验技术想法:1天设计系统详细设计方案:1天正式编码和测试:半天感触:只要有技术积累,再加上合理的OOD,开发一个软件会成为一种很有成就感的创作!基于组件的用户界面设计标准的分层体系结构:用户界面类系统外部功能类系统底层基本功能类2021/7/3146功能设想2021/7/3147技术方案考虑2021/7/3148采用C++流技术采用Borland
C++
Builder开发BCB
vs
VC软件的工作原理(一)2021/7/3149要编写一个软件,首先要知道人是如何完成某项工作的;接着,必须分析如何用计算机来完成这
个工作,其结果是形成一个计算机算法,这要求有相关领域的理论知识软件的工作原理(二)计算机中文件的基本类型2021/7/3150软件的工作原理(三)计算机中文件的基本类型2021/7/3151软件的工作原理(四)考虑软件的内部总体数据处理流程2021/7/3152设计过程(一)---资源选择2021/7/3153选择可以复用的代码资源:C函数库:用fopen()、fclose()等打开和关闭文件,然后,直接在内存中对字节流进行处理STL:用标准模板库(STL)中的iostream类VCL:用TStream类设计过程(二)---接口设计设计基本的流操作类接口请参看源代码文件:
FileStreamOpt.hFileStreamOpt.cpp2021/7/3154设计过程(三)---利用多态VCL的TStream类继承树图注意:接口设计中采用了TStream*
以利用多态2021/7/3155设计过程(四)---数据结构2021/7/3156Struct
VS
Class数据结构设计结果2021/7/3157设计过程(五)---数据对象的管理?2021/7/3158OO软件的显著特点之一是如何管理对象vector
VS
listSTL在数据结构方面有强大的表达能力!C++技术难点:=运算符重载利用VCL的现有特性改善设计设计过程(六)---功能实现2021/7/3159设计结果2021/7/3160Key:2021/7/3161先进行非可视化功能类的设计设计过程中要综合考虑各方面的要求,作出综合平衡,然后才能形成可行的设计方案界面设计放在功能设计方案之后,它的目的是提供一个用户接口以驱动功能类的运作.界面设计案例:界面与功能代码的完全分离2021/7/3162用户界面设计(一)---窗体2021/7/3163用户界面设计(二)---灵活性2021/7/3164用户界面编码的分层原则:(1)不在控件的事件处理过程中书写大量的代码!(2)尽可能减少代码对具体控件的依赖重复使用的某种功能的控件应被封装成新的控件考虑窗体间的相似性,巧妙利用窗体的OO特性:继承,多态与重载一个复杂的控件原则上应新建一个控制类以便于使用,这个控制类的接口成员应是按逻辑来划分而不是按技术来划分的用户界面设计(三)---健壮性2021/7/3165避免一个窗体过于复杂保证用户界面层以正确的顺序调用功能类提高软件健壮性2021/7/3166每一个函数都尽可能地保证是独立完备的、安全的。程序基本完成后,从最底层的类开始,逐步找出每个对外接口的前条件(前提)和后条件(结果),然后,判断有无可能发生错误,并且决定这些错误应该如何处理开发高容错程序三原则2021/7/3167预防所有可以预料和防止的错误;处理所有可以预料但不能防止的错误;捕获所有不能预料的错误;代码实例分析使用ROSE进行正向代码生成2021/7/3168设计类接口新建一个组件将类赋与组件生成代码使用ROSE进行正向代码生成(1)设计类接口2021/7/3169使用ROSE进行正向代码生成(2)新建一个组件2021/7/3170使用ROSE进行正向代码生成(3)选定组件的语言2021/7/3171使用ROSE进行正向代码生成(4)给组件分配类2021/7/3172使用ROSE进行正向代码生成(5)分配了类的组件2021/7/3173使用ROSE进行正向代码生成(6)生成代码2021/7/3174使用ROSE进行逆向更新逆向更新的目的是用更改后的代码刷新系统模型文件,以保证系统文档与真实代码的一致性2021/7/3175使用ROSE进行逆向转换2021/7/3176选择组件打开Ansi
C++
specification窗口选择文件生成模型用已有代码进行逆向转换(1)新建组件2021/7/3177用已有代码进行逆向转换(2)打开ANSI
C++参数设置窗口2021/7/3178用已有代码进行逆向转换(3)加入C++头文件和CPP文件2021/7/3179用已有代码进行逆向转换(4)从菜单中选逆向工程命令2021/7/3180用已有代码进行逆向转换(5)ROSE工程资源浏览器中新生成的类2021/7/3181用已有代码进行逆向转换(6)新生成的类的属性窗口2021/7/3182用已有代码进行逆向转换(7)在类图中显示逆向工程生成的类2021/7/3183OOAD理论总结与思索2021/7/3184软件开发的最重要思维方式2021/7/3185软件开发的最重要思维方式是什么?抽象!结构化编程时代程序=数据结构+算法面向对象软件时代,软件=?软件=对象+对象之间的关系组件化时代的软件设计2021/7/3186什么是软件组件?可以复用的,具备一定功能的类的组合。单个类不够资格成为软件组件!软件组件可以以源代码方式存在,也可以以二进制形式存在注意:区分ROSE中的组件与软件理论领域中的组件组件化时代的软件设计2021/7/3187OOD设计师制定组件的规范,高级程序员实现这些可复用的组件现代软件开发已成为组装已有组件的过程,最典型的例子是Java与.net类库设计模式2021/7/3188大型系统中良好的设计是关键设计模式(Design
patterns)为开发面向对象的软件提供一个架构减少了软件设计的复杂度为软件设计方案的重用提供了可能性可以避免犯一些常规性的错误使设计独立于语言建立了一套软件架构设计师的“通用语言”在软件开发周期中缩短了设计周期使用设计模式2021/7/3189熟悉模式才能知道如何使用模式我们用UML来描述模式,ROSE是画图工具用模式的最好方法就是设计时忘掉所有的模式名,只从实践出发寻找可行的方案,必要时才去翻模式书以获得灵感。设计模式经典书籍2021/7/3190四个老外权威:Gamma,Helm,
Johnson
andVlissides“Gang
of
Four”——四人帮Design
Patterns,
Elements
of
ReusableObject-Oriented
Software
(Addison
Wesley:
1995)提出23种设计模式创建型设计模式:解决如何创建对象的问题结构型设计模式:解决类和对象间的结构关系问题行为型设计模式:解决对象间的动态关系问题参考资料2021/7/3191参考资料2021/7/3192关于设计模式2021/7/3193应仔细研究成熟的设计模式,将其活学活用设计模式运用时,心中要无模式;关键在于把握其思想。模式不是数学公式!结构化编程与面向对象编程2021/7/3194面向对象的关键是抽象面向对象分析设计的成功实施要求更高,难度更大:在理解对象基本理论和开发技术的前提下,加上丰富的程序开发实践,才行。结构化与面向对象方法应该相辅相成,在合适的地方用合适的方法。结构化编程与面向对象编程2021/7/3195在类的内部代码实现上采用结构化编程的方式:比如:将一个太长的函数按功能分解为若干个小函数,做为类的私有函数只有在调试代码清除BUG中,才发觉OO的妙处和软件工程理论的无比正确!最重要的是两点:代码隔离;控制模块规模;对象的存储2021/7/3196对象的存储不应直接与数据库打交道对象的管理通常都设计控制类采用STL容器进行管理从数据库记录集生成对象,然后把对象放入STL容器中,是一个很好的设计方案数据库表的一对多关联,表现为对象之间的组合,多对多关联如何处理?请思索!对象与关系数据库2021/7/3197对象实例的数据保存在数据库表中,一般一条记录对应一个对象实例,尽量避免一个对象实例的数据分布在不同的表中,这样就加大了移植的难度;对象与数据库之间的关系问题是OOD与OOP必须解决的问题之一。数据库表关联与对象的对应表的一对一关联可直接映射到对象间的一对一关联2021/7/3198数据库表关联与对象的对应一对多关联2021/7/3199数据库表关联与对象的对应多对多关联需拆成两个一对多的关联2021/7/31100分而治之的设计方法2021/7/31101“分而治之”是一个基本的方法,简单
地说,就是将一个复杂的系统划分为几
个子系统,然后,分别处理这些子系统,最后再合成一个完整的系统。这是西方科学的主要思维方法之一:重
视局部与细节,用放大镜去研究大象。横向与纵向2021/7/31102可以利用多态、模板等机制简化设计继承是纵向的设计方案,STL是横向的解决方案,继承可以复用代码,模板可以减少类的数量,相互配合才是良好的设计。基于组件的“搭积木”过程可以看成是将横向与纵向设计相结合的典范OOD的指导原则2021/7/31103为特定问题产生一个class,然后让它在解决其他问题时,渐渐成长而成熟;设计Class及其接口,是OOD的主要任务;开始写程序,让一部分先动起来,以验证设计,或找出难点所在;保持类的小而简洁,功能明确——《Thinking
in
Java》p82OOAD的哲学方法论2021/7/31104真学问把复杂的问题弄得简单,它的目的是让你能够理解;伪学问把简单的问题弄得复杂,它的目的是让你感到神秘。不做就学不到OOAD的哲学方法论2021/7/31105一切都要从实际出发,不迷信老外的一切,相信自己的直觉。采用“拿来主义”现在的OOD,大多是在采用已有的系统架构基础上修修补补,以达到最大限度地利用现有资源的目的。所以,OOD不是独立于语言
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新材料科学与技术考试题及答案
- 精馏试题及答案
- 园林绿化大专考试题及答案
- 大学团队面试题及答案
- 客户信用状况证明函(7篇)
- 电商运营成果认证书(5篇)
- 机电工程数字工厂考题及答案
- 计算机软件测试与软件开发的协同研究试题及答案
- 软考网络工程师实战演练试题及答案
- 机电工程创新实践试题及答案
- 摩根斯丹利-2025中国汽车综述 China Autos Overview -2025-05
- 供电公司新闻宣传工作培训
- 2024年全国统一高考英语试卷(新课标Ⅰ卷)含答案
- 读书分享读书交流会《你当像鸟飞往你的山》课件
- 人教版高一下学期期末考试数学试卷与答案解析(共五套)
- 天津科技大学 分子生物学 名词解释
- 宏观经济学模拟试卷
- 体检报告单入职体检模板
- 工程设计重点难点分析及应对措施
- 工作计划及进度表
- (新教材)粤教粤科版三年级上册科学 2.8 物质的溶解 教案(教学设计)
评论
0/150
提交评论