收藏 分享(赏)

UML1PPT课件.ppt

上传人:oil007 文档编号:3834939 上传时间:2018-11-20 格式:PPT 页数:59 大小:2.92MB
下载 相关 举报
UML1PPT课件.ppt_第1页
第1页 / 共59页
UML1PPT课件.ppt_第2页
第2页 / 共59页
UML1PPT课件.ppt_第3页
第3页 / 共59页
UML1PPT课件.ppt_第4页
第4页 / 共59页
UML1PPT课件.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

1、面向对象建模技术,信息工程与自动化学院 计算机系/计算机重点实验室 教师:陈星,1,第一课 序言、预备知识和对象,授课日期:2011年2月21,红色部分属于大纲要求,2,回顾历史,计算机学科不全是技术! 计算机有纯粹的科学出身。 “计算”是什么? 1936年英国数学家Alan Mathison Turing 提出了通用计算模型“图灵机”,一切计算问题都可以用图灵机解决。 图灵被誉为“计算机科学之父”。,一台图灵机是一个七元组 (Q,q0,qaccept,qreject),其中 Q, 都是有限集合,且满足 1.Q 是状态集合; 2. 是输入字母表,其中不包含特殊的空白符 ; 3. 是带字母表 ;

2、 4. :QQL,R是转移函数,其中L,R 表示读写头是向左移还是向右移; 5.q0Q是起始状态; 6. qaccept是接受状态。 7.qreject是拒绝状态,且 qrejectqaccept,3,回顾历史,二次世界大战推动了计算机科学的发展 美军需要计算大量的“火力表”,依靠计算员,工作量远远完成不了,而且容易出错。 美军开展了ENIAC项目,并研制出了世界上第一台电子计算机。,4,回顾历史,ENIAC计算机有两大缺点: (1)没有存储器;(2)布线控制逻辑 严格说不是现代计算机的鼻祖。 研制原子弹的工作,让冯诺依曼也加入到研制计算机的行列。 约翰冯诺依曼,大数学家,被誉为“计算机之父”

3、。 研制原子弹的巨量计算迫使冯诺依曼等科学家寻找更好的计算工具。,5,回顾历史,冯诺依曼等人提出了“EDVAC离散变量自动电子计算机”方案 世界上第一种通用计算机 诞生了“冯诺依曼体系结构计算机” 特点 有存储器 程序作为数据存储 二进制 几乎每一台计算机都是这种结构的。,6,回顾历史,程序 是冯诺依曼体系结构计算机的概念。 一种可存储的指令序列,每一个指令都改变机器的状态。 最初的时候,机器非常昂贵,人们使用以机器为核心的程序语言机器语言和汇编语言。程序员在“机器世界”里工作。 60、70年代诞生了一些高级语言,Fortran、COBOL等,数值计算能力增强,有了子程序的概念。,7,回顾历史

4、,60年代中期,出现了软件危机,产生了“软件工程” 的概念,产生了“结构化软件开发方法”。 产生了结构化程序和结构化数据的概念,推进了新的结构化程序Pascal、C等。 软件开发人员开始离开“机器世界”,逐渐进入“问题世界” 。,8,回顾历史,上世纪80年代,产生了一些面向对象的软件开发方法。 软件开发人员摆脱了“机器世界”基本进入了“问题世界”。 产生了很多面向对象的编程语言,如:C+、Java、Dot.NET等。 面向对象的技术是以前的软件开发技术自然演进的成果。,9,课程定位,“面向对象建模技术”课程的基本内容: 对象、类型系统的基本知识 介绍面向对象软件开发方法 体系结构、设计模式 U

5、ML 2.0语言 面向对象编程技术(OOP) 课程目标 学会使用Ripple软件开发方法。 在软件过程各阶段能使用UML建模,能做具体的开发工作。,10,预备知识,在学习面向对象技术以前,我们需要简单的回顾“结构化软件开发方法”的有关知识。 面向对象方法是由结构化方法发展而来的,其中有一些方法沿用至今。 “软件建模”必须回答两个问题: 软件是什么,如何用模型反映? 如何利用现有的资源、技术手段把模型变成现实? 结构化方法也有很多合理的思想需要你们了解。,11,预备知识,软件,使用者,12,预备知识,从计算理论的角度任何软件都包括两个方面:计算和数据。 软件系统 由若干个稳定的状态组成 稳定状态

6、都需要用数据反映出来。 软件状态的转换需要通过计算来实现。 结构化方法从数据和计算的角度逐步揭示软件的内涵,回答“软件是什么?”的问题。,13,预备知识,14,预备知识,不同的用户会有不同的视角,15,预备知识,产生了状态模型和工作流模型 若干个状态图 若干个工作流图 以“医药进销存”为例: 药品批量采购工作流模型 药品销售终端状态模型 库存销售、管理工作流模型 分析统计状态模型 关于工作场景、系统状态的建模方向描绘了系统的总体工作轮廓。,16,预备知识,到这一步,开发人员基本上清楚了系统的主要工作场景。 设计状态之间转换的计算过程是必然要进行的后继工作。 在这之前,开发人员必须了解大量的细节

7、。 为各种用户界面进行设计,你需要简单的画一画,必须揭示出需要显示的内容。 只有状态模型是不能够设计计算过程的,还必须有足够细致的数据模型。 总之,你需要更多细节。,17,预备知识,结构化方法的另一个方向是数据建模。 细致的收集目标系统相关的各种表单、报表、工作报告。 目的是了解各种业务对象和它们的关系。 以“医药进销存”为例: 我们收集到了药品说明书、药品销售凭据、药品采购凭据、成本核算报告,等大量有关的文件,识别了药品、厂家、批次、批次总价、有效期、计量等上百个业务对象。 所谓“行话”就是用业务对象为名词和业务流程为动词组成的句子。了解“行话” 很重要。,18,预备知识,有了足够的细节,可

8、以进行下一步: 进行用户界面的建模 画出要点进一步由美工美化界面构图 为界面的变化建立动作模型 进行数据建模 把业务对象变成数据库的表、字段、关系等 对必须在内存中存放的数据进行数据结构设计 进行系统硬件网络部署结构的设计 对计算过程进行设计 实现业务流程,使用“数据流图”这种工具 实现状态模型和动作模型:把状态数据化,设计算法,19,预备知识,在任何一个实际的软件项目中都会产生大量的模型: 状态模型、工作流模型 界面模型 ER图等数据模型 数据流图等过程模型 整个开发团队必须进行分工协作。 如何划分工作才能使各部分的关联最少? 如何使工作最协调?,20,预备知识,哲学家们认为世界是有结构的

9、软件专家们也有类似的看法,21,预备知识,各种模型都是有结构的: 状态模型可以细化为更多子状态模型; 工作流模型也可以细化; 过程模型也可以细化为若干个子过程; 数据模型可以进行分组; 界面模型也可以分组; ,软件开发团队也是有结构的: 项目经理 分析组 设计组 界面组 数据组 程序员组 测试组 ,这就叫做“结构化软件开发方法”,22,预备知识,结构化方法是历史上一类非常成功的软件开发方法,甚至今天的很多软件开发组织都还在使用这类方法。 当然,结构化方法也有一些缺点: 过分分离了数据和计算,虽然减少了耦合,但大规模的项目中会造成不必要的浪费。 团队之间往往只愿意共享数据,而不愿意共享处理这些数

10、据的过程,经常重复开发这些过程。 软件构件的可替换标准不明确,缺乏构件共享的基础条件。 结构化方法中,认为系统的主要部分是由“过程”构成的,但任何两个过程是否等价是不可判定的。 只有在类型系统的帮助下,计算机才能自动的解决这类问题。,系统中可替换的部分。,23,预备知识,面向对象软件开发方法继承了结构化方法的大多数优点。 数据和计算天然关系得到了保护。 增强了类型系统,在类型系统的帮助下,计算机能够识别出可以相互替换的构件,增强了构件的可重用能力。 所谓面向对象方法 如何用对象构成的模型来解释软件? 揭示从无到有构造软件的过程 提供批量生产软件的可能性,24,什么是对象,在回答“为什么要面向对

11、象”之前,需要先解释“对象” 的概念。 一个重要、复杂、含义广泛,且有争议的概念。 按照OOP的提法,Object=(ID,DS,MS) ID对象标识,区别不同对象的主要根据 DS数据集合 MS方法集合 我们需要先介绍数据集合和方法集合的概念。,25,什么是“数据”,在计算机中,任何数据都是二进制序列。数据具体代表什么含义,必须要看是数据类型。,01100001,a,97,26,什么是“数据”,数据类型一般包括: 基本类型(PrimitiveTypes) 集成类型(Composite Types) 基本数据类型至少包括: 布尔类型 整数类型 字符类型 浮点类型,27,什么是“数据”,数据类型的

12、性质 用于识别一个二进制块是否属于这个类型 100111010111010可识别为字符型(GB18030) 与运算有关 对于整数型:有算术运算(整数) 对于布尔型:有逻辑表达式(布尔值) 转换到其他类型的语言成分 基本数据类型定义了数据的二进制位数。,28,什么是“数据”,基本数据类型已经无法再分解和解释: 你无法回答“什么叫做整数” 集成数据类型是可以组成关系分解的,也就是可以组合得到的。 基本类型和基本类型组合 基本类型和集成类型组合 集成类型和组合集成类型 类似于C语言的结构体。,29,什么是“数据”,如果要问“如何识别一个二进制序列是否属于某个集成数据类型?” 按下图追猎会有帮助。,只

13、要映射存在, 就能判定。,30,什么是“数据”,由于基本数据类型上有各种运算和表达式,集成数据类型上也应该存在运算和表达式。 运算和数据不应该总是“分离” 的。 结构化程序C和Pascal就是分离地对待运算与数据的。 面向对象程序解决了这个问题,把数据和运算结合在一起,称为“方法”或“操作”。,31,什么是“方法”,方法 可包含抽象语句的语句序列。 不是运行时的概念,是程序设计时的概念。 有些语言的术语把“方法” 称为“函数”,教材上有时也称为“操作”,都是同义词。 严格区分“运行时”和“程序设计时”是必要的。,32,什么是“方法”,运行时,程序设计时,语句,语句,可执行语句,可执行语句,抽象

14、化,追踪,33,什么是“方法”,关于“指令” 不同的CPU有不同的指令集合。 共性:每一条指令都用于改变“作用域状态”状态。 作用域状态改变则机器状态改变。 机器状态:就最简系统而言(只包括内存和CPU),每一个机器状态对应于(M,R) M:内存所有数据 R:CPU所有寄存器的数值,指令涉及到一定的内存空间和寄存器,称为“作用域”。,34,什么是“方法”,关于“指令”和“机器状态”的关系有两条线索:用一序列指令把把机器状态推到我们想要的情况,就是设计程序的目的。,35,什么是“方法”,关于“语句” 不同的语言有不同的概念系统 以Java为例以下元素可以组成语句: 变量、变量数组:来自内存储器的

15、概念 赋值表达式、算术表达式、逻辑表达式、位运算表达式 简单语句可以组成块语句 一个逻辑表达式和一个语句组成条件语句 一个逻辑表达式和一个语句组成循环语句 ,36,什么是“方法”,语句的作用: 改变作用域状态,类似于指令 例如:a=1; 转换程序元素 表达式数值 对象类 ,37,什么是对象,有大量可执行语句片段的作用是一样的,只不过具体的数值不一样而已。 看两个“运行时”的语句组:,38,抽象语句,char ua=“filename.exe”.toCharArray(); int idx=-1; int i=0; while(iua.length) if(uai=.)idx=i;i+; Str

16、ing extName=new String(ua,idx+1,ua.length-idx-1);,char ua=“deploy.exe”.toCharArray(); int idx=-1; int i=0; while(iua.length) if(uai=.)idx=i;i+; String extName=new String(ua,idx+1,ua.length-idx-1);,什么是对象,把不同的数值替换为变量之后,则两段程序就是一样的,形成了一种参数化的抽象方式。 这样做的目的是为了少编写类似的代码。 产生了方法的概念。 人类的思维方式:“方法是可以多次使用的”。,char u

17、a=filename.toCharArray(); int idx=-1; int i=0; while(iua.length) if(uai=.)idx=i;i+; String extName=new String(ua,idx+1,ua.length-idx-1);,39,什么是“方法”,被变量替换了具体数值的语句,必须实例化后才可执行,称为“抽象语句”。 关于“方法” 包含一序列语句(可能含有抽象语句) 可单独作为作为一条语句使用,用于改变对象的状态。 可作为数值使用。 OOP所讲的方法是人类对“机器世界”做的改造而已 ,距离人类的思维还有差异。,你能解释一下什么叫做“对象的状态”吗?

18、,40,什么是“对象”,我们已经接触到了“程序设计时”的对象概念,类似于整个系统的一个局部。 我们需要了解“问题世界”的对象。一句话,“问题世界”的对象就是人类脑子里的概念。 学习这门课的一个目的,就是要把脑子里的对象变成UML描述的对象,再变成程序世界的对象。,41,什么是“对象”,对象包括 一组属性 一组行为,面向对象方法学的基本信仰。,42,什么是“对象”,从现在开始,大家需要使用属性和行为建立对象模型。 例子1:咖啡贩售机对象(见教材2.4) 属性集 可出售的饮料类别列表 饮料价格表 饮料配方表 行为集 显示可出售的饮料 选择要买的饮料 收钱 分发饮料,43,什么是“对象”,例子2:C

19、arModel对象(教材B.3) 属性集 Name Price 行为集 getSummary getDetail,44,什么是“对象”,例子3:Member对象(教材B.3) 属性集 inGoodStanding number 行为集 getPassword isLogginOn Loginon getDetail ,45,什么是“对象”,对象包含数据和计算,系统也包括数据和计算两个方面,二者是同构的。 也可以认为对象是一个微缩型的系统。 对象实际上是系统运行时的一个组成部分。,对象模型合理性讨论,46,什么是“对象”,系统的数据部分可以实现划分,让每一个数据单元都可以隶属于一个对象。 但整个

20、系统在运行中的指令序列不可能固定在一个对象中。 否侧就会有一些数据永远没有指令来访问。,对象模型合理性讨论,47,什么是“对象”,系统的程序指令会穿越不同的对象。 如何解决控制权分配的问题? 软件专家想出了“消息传递”的概念对象之间相互传递消息,接受消息的对象获得执行程序指令的控制权。 类似于传递控制权的“接力赛跑”。,对象模型合理性讨论,48,什么是“对象”,“消息接力赛”的想法解决了指令序列分割的问题,使“对象组成系统” 具有了合理性。 让软件专家们产生了新的遐想: 有专家认为,对象应该拥有独立的并发性,使它们可以象人一样发送消息。让人觉得对象天生就应该拥有并发性。 但从“消息传递” 的起

21、源上看,无非为了解决控制流的传递,对象与并发没有本质的联系。 “对象必须并发”,这是一种误解。,对象模型合理性讨论,49,什么是“对象”,对象消息传递的概念,也让建模专家们产生了另一种思想: 把真实世界的对象关系也描述为“传递消息”,并且等同于软件对象的“消息传递”。称为“消息传递”的万能化。 例如:“我登上了一辆汽车” ,被描述为: “我”发送消息给“汽车”,通知“汽车”,对象“我”进入,让“汽车”改变自己的状态。 对象“我”改变状态,成为“乘车”的状态。 这是迄今为止,面向对象方法学常用的一种建模思想。,对象模型合理性讨论,50,什么是“对象”,几个消息传递的例子,51,什么是“对象”,几

22、个消息传递的例子,52,什么是“对象”,实际上,软件世界的对象传递消息是依靠方法调用实现的。,对象模型合理性讨论,53,什么是“对象”,依靠方法调用来传递消息已经完全被大多数建模专家接受了。 真实对象的消息传递=软件对象的方法调用。 这一点非常重要,否则无法把模型变成程序。 请思考是否还有别的方法实现消息传递模型? 请讨论:依靠方法调用来传递消息对消息传递的过程有什么限制? 考虑消息传递的过程和方法调用过程的关系。 希望大家对这种消息模型做到心中有素,在建模时有意识的按这个套路设计消息。,对象模型合理性讨论,54,什么是“对象”,既然把系统分解为对象具有合理性和可行性,如何进行分解较为合理?,

23、分解系统的基本思路,如何切割系统?,55,什么是“对象”,分解系统的基本思路,界面,控制,数据,边界对象,控制对象,实体对象,大体按照这个思路分解系统。,56,什么是“对象”,对象的含义是有争议的,尤其反对 “对象包含一组属性”的提法。 暗示对象是由属性组成。如果给一组属性,是不是可以重构对象呢? 在程序世界确实可以,但现实世界则通常不能。 用“组成”的概念去分解和理解现实对象 计算机科学家受机器世界的影响太深。 自然哲学学派的思想方法。,学术分歧,57,什么是“对象”,连教材也承认这一点:一方面“鼓吹”真实世界是对象构成的,程序世界也是对象构成的,二者都是对象。 另一方面又说,无法完全为真实世界的对象建立模型。 本身就是自相矛盾的。,学术分歧,58,第一课 作业,阅读1.4.2 案例分析,了解iCoot项目。 阅读附录B.1,59,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报