




已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/7/27,1,OOA、OOD和UML,面向对象技术的开发实践,北京理工大学信息学院计算机科学系 金旭亮,2019/7/27,2,主要内容,OOA、OOD与UML基础 Rose如何介入软件开发的全过程 案例:编写一个自己的简化版WinZip 软件开发的哲学思考 待研究的课题,2019/7/27,3,第一部分 OOA与OOD基础,2019/7/27,4,OOA,Object-Oriented Analysis (OOA):面向对象的分析,OOA的侧重点是业务领域分析,与软件所要应用的行业领域相关,而与软件技术关系不大,需要由领域专家进行。 这一部分的工作被称为“需求分析”。,2019/7/27,5,OOA的成果,业务领域用例图 活动图 协作图 大量的业务文档资料,2019/7/27,6,OOD,Object-oriented design (OOD),用面向对象的方法为真实世界建立一个 计算机中的虚拟模型,2019/7/27,7,OOD的地位,OOD的主要任务是跨越业务领域模型与可实际运行的软件系统之间的鸿沟。 OOD的难度是非常大的,负责OOD工作的人被称为系统架构设计师,2019/7/27,8,系统架构设计师的任务,确定系统的总体框架-大多采用已有的领域框架 正确理解需求分析得出的领域模型,用面向对象的思想设计出软件体系结构-系统概要设计 分析现实的可获取的技术资源,分解出软件的各个组件,安排好开发任务流程-系统详细设计,2019/7/27,9,OOD的成果,系统中有多少个类? 系统中这些类间有什么关系(系统静态特性)? 系统中这些类生成的对象如何协作来完成工 作(系统动态特性)? 系统中如何管理这些类和对象?,2019/7/27,10,OOP,流行的面向对象语言,Object-oriented Program (OOP),用一种面向对象的语言来实现OOD完成的系统设计,Java、C+、Object Pascal、C#、VB.net,2019/7/27,11,关于OOP,用面向对象的语言编程不是OOP! OOP最重要的特征是面向对象理论的广泛应用 OOP的成果是可运行的实际系统 OOP中掺杂着OOD,OOP与OOD你中有我,我中有你,OOP是具体的OOD,二者的区别就在于应用范围的不同。,2019/7/27,12,OOA、OOD、OOP与真实世界,2019/7/27,13,面向对象理论的再认识,封装,封装体现了数据信息的隐藏,从而使不同模块的信息互不影响,这是OO的一大优点,因为它从类这一程序基本单位开始就支持信息隐藏。,2019/7/27,14,面向对象理论的再认识,继承,相对于结构化编程中的模块重用,面向对象中的继承体系显得更灵活,对代码的控制手段更多,从而推动了代码复用的程度,但却加大了学习掌握的难度。,2019/7/27,15,面向对象理论的再认识,多态的特点:,所有可以发给base class对象的消息,也都同样可以发给derived class。这是了解面向对象真髓的关键之一。,2019/7/27,16,C+中的面向对象特性,四种编程风范:,结构化编程、基于对象、面向对象、泛型编程,C程序员易犯的毛病:在C+中写C程序。,2019/7/27,17,软件源代码复用的方式,组合(composition)与聚合(aggregation) 继承(inherit),其基本思想是以现有的类为基础创建新的类,2019/7/27,18,STL,Standard Template Library,标准模板库,STL是容器,算法和其他一些组件的集合,2019/7/27,19,泛型编程在OOD中的应用,一种独特的平面型编程风范,大量使用C+的模板技巧 典型案例:STL 在标准的OOD设计方案中引入泛型编程技术,可以起到减少类数目的作用,泛型技术可以看成是C+类的“合并同类项”。,2019/7/27,20,统一建模语言UML,UML,图形化的建模语言,开发者用来为面向对象系统建立模型,具有灵活性与可扩展性,2019/7/27,21,统一软件过程RUP,三大特点:,用例驱动、迭代开发和增量开发,2019/7/27,22,OOAD的强大工具-ROSE,ROSE是采用UML进行软件系统设计的一个CASE工具,还有其他工具比如Visio,JBuilder7等。,使用ROSE可以保证源代码与系统模型的一致性, 这在软件开发过程中是非常有用的,正向:UML模型软件代码框架 逆向:软件代码UML模型,ROSE支持双向工程,2019/7/27,23,ROSE对软件开发全过程的参与,4+1视图,2019/7/27,24,用ROSE表达系统功能,2019/7/27,25,用ROSE表达软件的静态结构,类图Class Diagram: 表明了一个软件中的各个类之间的关系,2019/7/27,26,用ROSE表达软件的静态结构,2019/7/27,27,用ROSE表达软件的静态结构,2019/7/27,28,用ROSE表达软件的静态结构,2019/7/27,29,用ROSE表达软件的静态结构,小结:,用Rose来描述一个软件的静态结构,首先应将整个系统划分为若干子系统或几个组成部分,每个组成部分以一个包来表示。,接着,需要设计具体的类,并用各种关联符号表达出类间的关系,注意,每个类都必须归属于某一个包,这样才便于查找某个类,2019/7/27,30,用组件图描述软件组件,一般用组件图来生成代码,2019/7/27,31,用ROSE表达软件的动态特性,序列图,序列图用于表达对象之间是如何发送消息,何时new一个对象,何时delete它,非常适合表达一种代码流程。,2019/7/27,32,用ROSE表达软件的动态特性,协作图,协作图比较适合表达类之间的依赖关联,2019/7/27,33,用ROSE表达软件的动态特性,状态图,当系统可以明显地划分为几个不同状态时,状态图可以大显身手,最明显的是ADO 记录集的状态转换,例如:需要给水分子的三种物理状态建模,2019/7/27,34,用ROSE表达软件的动态特性,活动图,活动图最适合表达出一种处理流程,2019/7/27,35,用ROSE表达软件的动态特性,小结:,(1)所有图的最根本目的是要对系统运行过程中的各个对象之间的关系作出确定性的唯一性的描述,从而保证所有开发人员都能对系统有一个统一的认识。,(2)一般在确定了软件的静态结构之后才进行描述系统的动态特性,(3)在任何情况下,保证ROSE模型与实际代码的一致都是至关重要的!,(4)要根据实际情况选择一种合适的图来表达系统,不要强行要求用上所有类型的图,牢记:我们的目的是为了交流!,2019/7/27,36,参考资料,2019/7/27,37,参考资料,2019/7/27,38,参考资料,2019/7/27,39,参考资料,2019/7/27,40,参考资料,2019/7/27,41,参考资料,2019/7/27,42,参考资料,2019/7/27,43,案例研究一,再造一个WinZip,麻雀虽小,五脏俱全,2019/7/27,44,缘起:,用一个规模小的工具软件来说明OOD的实际应用 整个软件完成周期:四天,2019/7/27,45,开发过程,形成软件总体想法:5分钟 形成软件技术想法:5分钟 实验技术想法:1天 设计系统详细设计方案:1天 正式编码和测试:半天,感触:只要有技术积累,再加上合理的OOD,开发一个软件会成为一种很有成就感的创作!,2019/7/27,46,基于组件的用户界面设计,标准的分层体系结构:,2019/7/27,47,功能设想,2019/7/27,48,技术方案考虑,采用C+流技术 采用Borland C+ Builder开发,BCB vs VC,2019/7/27,49,软件的工作原理(一),要编写一个软件,首先要知道人是如何完成某项工作的; 接着,必须分析如何用计算机来完成这个工作,其结果是形成一个计算机算法,这要求有相关领域的理论知识,2019/7/27,50,软件的工作原理(二),计算机中文件的基本类型,2019/7/27,51,软件的工作原理(三),计算机中文件的基本类型,2019/7/27,52,软件的工作原理(四),考虑软件的内部总体数据处理流程,2019/7/27,53,设计过程(一)-资源选择,选择可以复用的代码资源:,C函数库:用fopen()、fclose()等打开和关闭文件,然后,直接在内存中对字节流进行处理,STL:用标准模板库(STL)中的iostream类,VCL:用TStream类,2019/7/27,54,设计过程(二)-接口设计,设计基本的流操作类接口,请参看源代码文件: FileStreamOpt.h FileStreamOpt.cpp,2019/7/27,55,设计过程(三)-利用多态,VCL的TStream类继承树图,注意:接口设计中采用了TStream* 以利用多态,2019/7/27,56,设计过程(四)-数据结构,Struct VS Class,2019/7/27,57,数据结构设计结果,2019/7/27,58,设计过程(五)-数据对象的管理?,OO软件的显著特点之一是如何管理对象,C+技术难点:=运算符重载,STL在数据结构方面有强大的表达能力!,vector VS list,利用VCL的现有特性改善设计,2019/7/27,59,设计过程(六)-功能实现,2019/7/27,60,设计结果,2019/7/27,61,Key:,先进行非可视化功能类的设计 设计过程中要综合考虑各方面的要求,作出综合平衡,然后才能形成可行的设计方案 界面设计放在功能设计方案之后,它的目的是提供一个用户接口以驱动功能类的运作.,2019/7/27,62,界面设计案例:,界面与功能代码的完全分离,2019/7/27,63,用户界面设计(一)-窗体,2019/7/27,64,用户界面设计(二)-灵活性,用户界面编码的分层原则 : (1)不在控件的事件处理过程中书写大量的代码! (2)尽可能减少代码对具体控件的依赖 (3)重复使用的某种功能的控件应被封装成新的控件 (4)考虑窗体间的相似性,巧妙利用窗体的OO特性:继承,多态与重载,一个复杂的控件原则上应新建一个控制类以便于使用,这个控制类的接口成员应是按逻辑来划分而不是按技术来划分的,2019/7/27,65,用户界面设计(三)-健壮性,保证用户界面层以正确的顺序调用功能类,避免一个窗体过于复杂,2019/7/27,66,提高软件健壮性,每一个函数都尽可能地保证是独立完备的、安全的。 程序基本完成后,从最底层的类开始,逐步找出每个对外接口的前条件(前提)和后条件(结果),然后,判断有无可能发生错误,并且决定这些错误应该如何处理,2019/7/27,67,开发高容错程序三原则,预防所有可以预料和防止的错误; 处理所有可以预料但不能防止的错误; 捕获所有不能预料的错误;,代码实例分析,2019/7/27,68,使用ROSE进行正向代码生成,设计类接口 新建一个组件 将类赋与组件 生成代码,2019/7/27,69,使用ROSE进行正向代码生成(1),设计类接口,2019/7/27,70,使用ROSE进行正向代码生成(2),新建一个组件,2019/7/27,71,使用ROSE进行正向代码生成(3),选定组件的语言,2019/7/27,72,使用ROSE进行正向代码生成(4),给组件分配类,2019/7/27,73,使用ROSE进行正向代码生成(5),分配了类的组件,2019/7/27,74,使用ROSE进行正向代码生成(6),生成代码,2019/7/27,75,使用ROSE进行逆向更新,逆向更新的目的是用更改后的代码刷新系统模型文件,以保证系统文档与真实代码的一致性,2019/7/27,76,使用ROSE进行逆向转换,选择组件 打开Ansi C+ specification窗口选择文件 生成模型,2019/7/27,77,用已有代码进行逆向转换(1),新建组件,2019/7/27,78,用已有代码进行逆向转换(2),打开ANSI C+参数设置窗口,2019/7/27,79,用已有代码进行逆向转换(3),加入C+头文件和CPP文件,2019/7/27,80,用已有代码进行逆向转换(4),从菜单中选逆向工程命令,2019/7/27,81,用已有代码进行逆向转换(5),ROSE工程资源浏览器中新生成的类,2019/7/27,82,用已有代码进行逆向转换(6),新生成的类的属性窗口,2019/7/27,83,用已有代码进行逆向转换(7),在类图中显示逆向工程生成的类,2019/7/27,84,OOAD理论总结与思索,2019/7/27,85,软件开发的最重要思维方式,软件开发的最重要思维方式是什么?,抽象!,软件=对象+对象之间的关系,结构化编程时代 程序=数据结构+算法,面向对象软件时代,软件=?,2019/7/27,86,组件化时代的软件设计,什么是软件组件?,注意:区分ROSE中的组件与软件理论领域中的组件,可以复用的,具备一定功能的类的组合。,单个类不够资格成为软件组件!,软件组件可以以源代码方式存在,也可以以二进制形式存在,2019/7/27,87,组件化时代的软件设计,OOD设计师制定组件的规范,高级程序员实现这些可复用的组件,现代软件开发已成为组装已有组件的过程,最典型的例子是Java与.net类库,2019/7/27,88,设计模式,大型系统中良好的设计是关键,为开发面向对象的软件提供一个架构,减少了软件设计的复杂度,为软件设计方案的重用提供了可能性,可以避免犯一些常规性的错误,使设计独立于语言,建立了一套软件架构设计师的“通用语言”,在软件开发周期中缩短了设计周期,设计模式(Design patterns),2019/7/27,89,使用设计模式,熟悉模式才能知道如何使用模式,用模式的最好方法就是设计时忘掉所有的模式名,只从实践出发寻找可行的方案,必要时才去翻模式书以获得灵感。,我们用UML来描述模式,ROSE是画图工具,2019/7/27,90,设计模式经典书籍,四个老外权威:Gamma, Helm, Johnson and Vlissides,“Gang of Four”四人帮,Design Patterns, Elements of Reusable Object-Oriented Software (Addison Wesley: 1995),提出23种设计模式,创建型设计模式:解决如何创建对象的问题 结构型设计模式:解决类和对象间的结构关系问题 行为型设计模式:解决对象间的动态关系问题,2019/7/27,91,参考资料,2019/7/27,92,参考资料,2019/7/27,93,关于设计模式,设计模式运用时,心中要无模式;关键在于把握其思想。,应仔细研究成熟的设计模式,将其活学活用,模式不是数学公式!,2019/7/27,94,结构化编程与面向对象编程,面向对象的关键是抽象 面向对象分析设计的成功实施要求更高,难度更大: 在理解对象基本理论和开发技术的前提下,加上丰富的程序开发实践,才行。 结构化与面向对象方法应该相辅相成,在合适的地方用合适的方法。,2019/7/27,95,结构化编程与面向对象编程,在类的内部代码实现上采用结构化编程的方式: 比如:将一个太长的函数按功能分解为若干个小函数,做为类的私有函数,只有在调试代码清除BUG中,才发觉OO的妙处和软件工程理论的无比正确! 最重要的是两点: (1)代码隔离; (2)控制模块规模;,2019/7/27,96,对象的存储,对象的存储不应直接与数据库打交道 对象的管理通常都设计控制类采用STL容器进行管理,从数据库记录集生成对象,然后把对象放入STL容器中,是一个很好的设计方案,数据库表的一对多关联,表现为对象之间的组合,多对多关联如何处理?请思索!,2019/7/27,97,对象与关系数据库,对象实例的数据保存在数据库表中,一般一条记录对应一个对象实例,尽量避免一个对象实例的数据分布在不同的表中,这样就加大了移植的难度; 对象与数据库之间的关系问题是OOD与OOP必须解决的问题之一。,2019/7/27,98,数据库表关联与对象的对应,表的一对一关联可直接映射到对象间的一对一关联,2019/7/27,99,数据库表关联与对象的对应,一对多关联,2019/7/27,100,数据库表关联与对象的对应,多对多关联需拆成两个一对多的关联,2019/7/27,101,分而治之的设计方法,“分而治之”是一个基本的方法,简单地说,就是将一个复杂的系统划分为几个子系统,然后,分别处理这些子系统,最后再合成一个完整的系统。 这是西方科学的主要思维方法之一:重视局部与细节,用放大镜去研究大象。,2019/7/27,102,横向与纵向,可以利用多态、模板等机制简化设计,继承是纵向的设计方案,STL是横向的解决方案,继承可以复用代码,模板可以减少类的数量,相互配合才是良好的设计。 基于组件的“搭积木”过程可以看成是将横向与纵向设计相结合的典范,2019/7/27,103,OOD的指导原则,为特定问题产生一个class,然后让它在解决其他问题时,渐渐成长而成熟; 设计Class及其接口,是OOD的主要任务; 开始写程序,让一部分先动起来,以验证设计,或找出难点所在; 保持类的小而简洁,功能明确,Thinking in Javap82,2019/7/27,104,OOAD的哲学方法论,真学问把复杂的问题弄得简单,它的目的是让你能够理解;伪学问把简单的问题弄得复杂,它的目的是让你感到神秘。,不做就学不到,2019/7/27,105,OOAD的哲学方法论,一切都要从实际出发,不迷信老外的一切,相信自己的直觉。采用“拿来主义” 现在的OOD,大多是在采用已有的系统架构基础上修修补补,以达到最大限度地利用现有资源的目的。所以,OOD不是独立于语言与开发工具的。 不存在界限分明的OOD阶段,事实上,OOD是与编码交织在一起的,没有编码作基础,无法进行OOD,不进行编码实践,就无法改进OO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 竹材采运安全风险识别与防范考核试卷
- 药品行业政策变动与影响考核试卷
- 坚定文化自信宣讲
- 数字智慧方案5474丨人力资源管理数字化转型解决方案1
- 中学生法制教育专题
- 公司2024年庆元旦活动方案细选
- 环保儿童视频课件
- 2019-2025年税务师之税法一通关提分题库及完整答案
- 《轴流泵维护》课件
- 2025年医用穿刺器械项目合作计划书
- 心电监护操作评分标准
- 三年级美术下册 《多彩的窗户》教学课件
- JJG 700 -2016气相色谱仪检定规程-(高清现行)
- 优秀病例演讲比赛PPT
- 技术报告审签表
- GB∕T 25684.5-2021 土方机械 安全 第5部分:液压挖掘机的要求
- 中国基层胸痛中心认证标准(第三版)
- 鸡的解剖步骤及病
- 喷涂件检验通用规范
- 石方爆破及安全施工工艺流程图
- 市场部经理年终总结PPT模板
评论
0/150
提交评论