收藏 分享(赏)

UML 第一讲:概述.ppt

上传人:dzzj200808 文档编号:5750682 上传时间:2019-03-15 格式:PPT 页数:89 大小:4.05MB
下载 相关 举报
UML 第一讲:概述.ppt_第1页
第1页 / 共89页
UML 第一讲:概述.ppt_第2页
第2页 / 共89页
UML 第一讲:概述.ppt_第3页
第3页 / 共89页
UML 第一讲:概述.ppt_第4页
第4页 / 共89页
UML 第一讲:概述.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

1、大象-Thinking in UML,1、面向对象概念 2、面向对象技术发展 3、面向对象与结构化 4、建模,Introduce,课时:42学时(30+12) 目标: 能够熟练地使用UML表达设计思想 运用面向对象设计的一般原则进行应用系统的分析和设计 对面向对象思想和理论有进一步的理解,Why?,需要理由吗? 我们从事软件行业 面向对象是最主流的软件开发思想 UML是最主流的建模方法,UML+面向对象,OOAD,系统定义、分析、设计、实现,对于今天的软件开发者来说,UML是他们的面包和黄油,What?,1- 感受面向对象的思想 2- 学习基本的面向对象理论 3- 学习基本的UML语言 4-

2、利用UML语言进行面向对象的系统建模,Evaluation,作业 结合课程进度,安排小作业 实验 设计一个系统模型 考试 课程结束后安排考试,References1-1,UML Distilled(UML精粹) Martin Fowler 官方文献和经典著作: 一方面是严谨、准确,但又高度抽象化甚至形式化; 一方面则是生动、直观,不求面面俱到,但能让人很快就对概念大厦的全貌一目了然 从1986年在故乡英国拿到电子工程学位,到参与开发建模软件Ptech,再到成为独立开发顾问,参与国家保健服务系统的开发,再到移居美国,加入著名的克莱斯勒C3项目,到成为软件顾问公司ThoughtWorks的首席科学

3、家,References1-2,References2-1,Applying UML and Patterns - An Introduction to Object-Oriented Analysis and Design UML和模式应用-面向对象分析与设计导论 THE BEST Object Orientated Analysis and Design tutorial book (A) 在 OOA/D、迭代式开发和 UML 方面是全球最畅销的书籍之一,已被翻译成多种语言并在业界和院校中被广泛使用,References2-2,References3,The Unified Modelin

4、g Language User Guide(UML用户指南) The Unified Modeling Language Reference Manual(UML参考手册) Grady Booch James Rumbaugh Ivar Jacobson,References4,Design Patterns: Elements of Reuseable Object-Oriented Software GoF (Gang of Four): Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 长盛不衰的经典 23种设计模式 李维:

5、不会用设计模式的程序员是低层次的软件人才,他们只会写code罢了 Agile Software Development - Principles, Patterns, and Practices Robert C. Martin 2003年的Jolt图书震撼大奖,将面向对象与敏捷软件开发方法结合,References5,Enterprise Java with UML 介绍各种UML软件模型,加深对面向对象分析与设计的理解 结合Java语言,灵活使用UML 通过一个案例(考勤卡系统),贯穿全书: 从用户需求到最终实现 从各种UML图表到完成最后Java代码,References6-1,IBM

6、Rational Website http:/ IBM Rational Developer Network IBM UML Resource Center http:/ IBM Rational Edge http:/ Resources http:/ http:/www.omg.org/uml/ http:/www.sei.cmu.edu/http:/ http:/ http:/,1、面向对象的概念,对象(Object)类(Class)实例(Instance)消息(Message)方法(Method),属性(Attributes)封装(Encapsulation)继承(Inheritan

7、ce)多态性(Polymorphism)重载(Overloading),f1,f2,f3,fi,fn,fi(X),S,gi(X,S),S,输出,输出,1.1. 对象(Object),fi(X,S),(1)对象的定义,对象是具有相同状态的一组操作的集合对象是对问题域中某个东西的抽象对象是一台自动机,定义1 Object: :=(Oid, DS, OS, MI),Oid 对象名称(标识)DS=d1,d2,dn 数据结构集OS=o1,o2,om 操作集MI=m1,m2,mk 消息名称集,定义2 Ojbect: :=(id, RM, DS, CS, ds, B),id 通讯地址,是定义1中Oid的具体

8、化RM 消息集 ReqM + FinMDS 数据结构集CS 通信状态集idle+waitds 数据DS初始值B 对象行为,(2)对象的特点,数据为中心主动的数据封装并行性模块独立性好,1.2. 类(Class),属性颜色圆心半径,方法(服务、操作)显示放大/缩小移动,具有相同数据和相同操作的一组对象,1.3. 实例(instance),由某个特定的类所描述的一个具体的对象,1.4. 消息(Message),要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明,Message := object_ID.method_ID(parameter(S),1.5. 方法(Method),对象所能

9、执行的操作 类中所定义的服务(Operations, methods, services, responsibilities),Show(int color) . . .,1.6. 属性(Attributes),类中所定义的数据对客观世界实体所具有的性质的抽象,属性颜色圆心半径,1.7. 封装(Encapsulation),把数据和实现操作的代码集中起来放在对象内部封装性的条件有一个清晰的边界有确定的接口(即协议)受保护的内部实现,类和对象,The only way to reach the attributes is to go through one of the methods,A cl

10、ass is a generalized description of a collection of similar objects.,class Post_office private :loc_type location ;emp_type employee ;public :void send (req_type request, money_type payment);void sell (int goods, money_type payment) ; ;,main ( ) Post_office My_PO ;req_type My_request ;money_type My_

11、payment ;My_PO.Send ( My_request, My_payment) ;,【例】,1.8. 继承(Inheritance),子类自动地共享基类中定义的数据和方法的机制 类等级,类的继承机制,【例】类的继承机制,低层性质override高层性质,继承的传递性(transitivity),CB,BA CA一个 class 继承了上层全部 classes 的一切性质,A,B,C,单继承和多重继承,单继承 (single inheritance)一个类只允许有一个父类 类等级为树形结构 多重继承(multiple inheritance)一个子类可有多个父类功能更强,使用更方便注

12、意避免二义性,多重继承的二义性(ambiguity),多个父类中定义重名,但各具不同性质的方法,CardDeck,GraphicalObject,GraphicalDeck,Method: Draw := takea card froma deck,Method: Draw := display a graphical object,Method: Draw := ?,继承的优点,共享程序代码和数据结构,大大 减少了冗余信息修改方便扩充:调用基类方法并增加代码改变:改写同名方法新增:定义新方法软件重用,1.9. 多态性(Polymorphism),不同层次的 classes 可共享一个meth

13、od名,而按各自的方式来实现该method 发送消息的对象不需要知道接受对象的类,接收方决定消息的解释。即同一消息可以用不同方法解释,方法的解释依赖于接收消息的类,而不依赖于消息的发送者。 虚函数(virtual function):一个method有多个版本,运行时才决定执行哪一个,动态联编(dynamic binding)/滞后联编(late binding),虚函数(virtual function):一个method有多个版本,运行时才决定执行哪一个 把函数调用与目标代码块的连接延迟到运行时进行 使系统更灵活 提高了系统的可重用性和可扩充性,1.10. 重载(Overloading),

14、函数重载(function/parameter overloading)参数特征不同算法不同运算符重载(operator overloading)操作数(operand)类型不同运算符语义不同,重载,静态联编 (static binding) 先前联编 (early binding) 编译阶段就决定了使用类型及执行代码,实例01-01:“东北一家人?”,东北人都是活雷锋 人、东北人、雷锋 老张开车去东北 撞啦! 老张、汽车、开车 撞啦,class 人 Region 籍贯; class Region interface 雷锋 helpPeople() class 东北人 extends 人 im

15、plements 雷锋 籍贯 = 东北;helpPeople() ,class CarDriveTo(Region) throws Exception (撞车)人 Driver; Main Program 人 老张;Car 夏利;夏利.Driver = 老张;try 夏利.DriveTo(东北); catch (Exception) ,面向对象的表示,2 面向对象技术发展,2.1 面向对象技术发展,里程碑1:Simula 67 (1962-1967,挪威) Ole-Johan Dahl和Kristen Nygaard 在挪威奥斯陆国家计算中心(NCC) 设计实现. 公认的世界上第一种面向对象语

16、言 基本思想,2.2 面向对象技术发展,里程碑2:Smalltalk(1970,施乐保罗阿托) Alan Kay设计实现 第一个成熟的面向对象语言,为开发GUI而设计 实用化,预言历史的最佳方式是创造历史 - Alan Kay,Smalltalk范例,“无消息模式方法,宜写算法” | s c f k | “定义了四个临时变量” fArray new:26. “f是Array实例长度26” sPrompter prompt:enter line default: “s是Prompter的实例,装输入字串” 1 to:26 do:i|f at:i put:0.1 to:size do:i| c(s

17、 at:i) asLowerCase.C isLetter ifTrue:kc asciiValue-a asciiValue + 1.F at:k put:(f at:k) + 1. f,2.3 面向对象技术发展-3,里程碑3:ADT, Ada 83, 基于对象(1977-1983) 编程理论界在结构化运动中提出ADT思想,以N. Wirth和Liskov为代表 美国防部军用开发语言评选,Ada被指定为强制性军用编程语言,实际上已经进入“基于对象”阶段,Ada Lovelace是英国著名诗人拜伦的女儿,1815年出生,世界上第一个程序员。Ada语言以她的名字命名,2.4 面向对象技术发展,里

18、程碑4:C+ (1982,贝尔实验室) 第一个被工业界广泛接受的支持面向对象能力的语言,创造者Bjarne Stroustrup 动机是给C添加一些Simula特性,以完成当时刚刚出现的大规模复杂任务 商业化,Bjarne Stroustrup,2.5 面向对象技术发展,里程碑5:MS-Windows(1985,微软) 第一个被广泛使用的GUI系统软件,它使面向对象技术的使用不可阻遏,1985年出品的Windows 1.0产品,1987年出品的Windows 2.0界面,2.6 面向对象技术发展-6,里程碑6:Booch Method(1991,G. Booch) 第一个被广泛接受使用的面向对

19、象建模方法,Booch代表作的第三版,2.7 面向对象技术发展,里程碑7:设计模式出版(1995,GoF) 掀起模式运动,2.8 面向对象技术发展,里程碑8:Java语言推出(1995,Sun) 第一个被广泛使用的面向对象语言,J2EE是目前最成功的面向对象框架。,2.9 面向对象技术发展,里程碑9:UML被OMG接纳为标准(1997) 面向对象方法学之战结束,2.10 面向对象技术发展,里程碑10:微软.NET计划(2000) 意义还难以评估,2.11 面向对象技术发展-总结,60年代后期:Simul67,基本思想 70年代后期:Smalltalk80,实用化 80年代:理论基础,C+等,商

20、业化 90年代:面向对象与设计方法学 B.H. Sellers等提出喷泉模型 G. Booch提出面向对象开发方法等 P. Coad和E.Yourdon提出OOA和OOD Jacobson提出OOSE 1997年:UML,面向对象 程序设计语言,“方法大战”,UML发展史,2.12 面向对象技术发展-现状,现状 OO成为最重要的软件开发方法 OO在GUI、模拟系统、游戏开发、应用框架、软件构件化领域大显身手 Java、UML 与 RUP 构件技术 (CORBA、COM、EJB、.Net) 类库与设计模式,2.13 面向对象技术发展-未来,未来 OO的形式化与自动化 OO构件、设计模式的丰富将进

21、一步提高软件开发的效率和质量 软件开发人员必须从 Think Procedurely转变为 Think Object-Orientedly,3 面向对象与结构化,3.1 面向对象 VS 结构化,扬弃,不是否定,3.2 面向对象 VS 结构化,Programming,3.3 面向对象 VS 结构化,结构化方法(SA+SD+SP),面向对象的方法,问 题 域,问 题 域,结构化分析,分析与设计的鸿沟,结构化设计,结构化编程,如C语言,需求工程,OOA&D,OOP,如Java语言,测 试,计 算 机 系 统,测 试,计 算 机 系 统,自然语言,编程语言,自然语言,OO编程语言,数据流图 数据字典,

22、模块和过程,需求模型,对象模型,OO方法,OO建模语言,3.4 面向对象 VS 结构化,实例01-02:BOM单成本计算,问题: 根据BOM(Bill of Materials)单进行产品原料成本的计算 分别用面向过程和面向对象的方式解决 目的: 体会过程式的思维方式与面向对象思维方式之间的区别,体会面向对象“模拟现实世界”的思维特色,实例01-02:问题描述,某产品BOM单如下,计算总价格,实例01-02:问题难点分析,零件(Piece)、组合件(Assembly)、部件(Part)的关系 零件和组合件都属于部件 组合件有零件和更小的组合件组成,而更小的组合件最终由零件组成 组合件与零件之间

23、存在递归关系,如何在程序中体现这个递归关系,是本系统的关键,实例01-02:思考?,用结构化的设计思路解决以上问题 用对象化的设计思路解决以上问题 将解决思路用自己认为合适的方式记录下来,可以是伪码,可以是图形 思考: 结构化的设计与对象化的设计有什么本质的不同?体现了怎样的思维差异?面向对象思想有何优势? 表达设计思想用代码合适吗?方便吗?图形表示有何优势?,实例01-02:结构化设计,关键:用算法来描述递归关系,totalCost = 0.0 初始化iterator,是否计算完毕?,是,返回totalCost,否,totalCost += calcPartCost(partID),实例01

24、-02:结构化设计-calcPartCost,getType(partID),入口,PIECE,c = cost(partID),ASSEMBLY,c =calcAssemblyCost(partID),出口 return c;,calcPartCost(partID),实例01-02:结构化设计-calcAssemblyCost,calcAssemblyCost(partID),iter.hasNext(),入口,NO,YES,c += calcPartCost(iter.next().partID),出口 return c;,List partList = getPartsOfAssemb

25、ly(partID); Iterator iter = partList.iterator();,实例01-02:结构化小结,针对过程抽象 calcPartCost (partID)函数与calcAssemblyCost (partID)函数描述了前述的递归关系,实例01-02:面向对象设计,关键:通过对象间的关系描述递归关系,实例01-02: API,package BOM; class BOMAPI static final int PIECE = 0; / 零件static final int ASSEMBLY = 1; / 组合件static final int getType(Str

26、ing id); / 判断是零件还是组合件/ 返回零件的价格,如果不是零件,抛出NotPieceException异常static final double cost(String id) throws NotPieceException;/ 返回一个列表,其中包含组成组合件的零件static final List getPartsOfAssembly(String id) throws NotAssemlyException; ,实例01-02:类图体现代码结构,abstract class Part public double cost(); class PiecePart extends

27、 Part public double cost(); class Assembly extends Part private LinkedList itsParts; / 以链表结构存放组合件的组成部件public double cost(); ,实例01-02:代码: PiecePart.cost(),public double cost() double c = 0.0;try c = BOMAPI.getCost(this.myID);return c;catch (NotPieceException e) assert false : “Piece identify assertio

28、n error”; ,实例01-02:代码: Assembly.cost(),public double cost() try double c = 0.0;List parts = BOMAPI. getPartsOfAssembly(this.myID) Iterator iter = parts.iterator();while (iter.hasNext() Part p = (Part)iter.next();c += p.cost();return c;catch (NotAssemblyException e) assert false : “Assembly identify

29、assertion error”; ,实例01-02:代码:计算BOM总价,double totalCost = 0.0; Iterator iter = partsList.iterator(); / 把整个BOM当成一个大的Assembly while (iter.hasNext() Part part = (Part) iter.next();totalCost += part.cost(); return totalCost;,实例01-02:顶级代码,BOM bom = new BOM(“BOM.xls”); totalCost = bom.calculateCost();,关键代码

30、只有一行,因为bom知道怎么计算它自己的总成本,3.5 归纳总结,结构化设计用算法刻画数据的递归关系,而面向对象思想直接用对象表达递归关系“模拟现实世界” 结构化设计中,数据是死的,全部依赖算法操作,而面向对象中,数据是活的,所谓的smart data 结构化设计更像是一个人在解决所有的问题,而面向对象设计更像是一个团队的分工协作,3.6 体会,使用得当,面向对象设计具有更大的灵活性,更好的模块化,可以进行更大规模的设计 但同时,面向对象设计和开发的难度更大,因为除了要考虑算法之外,还要考虑对现实世界的模拟、对象的识别和职责分配等等一系列问题 优秀的面向对象设计需要学习更多知识和技术,掌握一系

31、列设计原则和模式 UML图形化工具有助于表达和交流设计思想。但是否可以做到“无代码编程”,还在争论中,3.7 题外话,既然OO更难,为什么要用它? 大规模程序设计 灵活多变的系统需求 技术进步的必经之路 保持冷静:确实有很多项目不适合用OO,传统的结构化设计仍然很有意义。 本课程的重点是UML、面向对象分析和设计过程,4 上升到面向对象,通过简单通俗的事例来演绎对象建模的基本概念 开阔视野,轻松树立面向对象的观点 掌握用面向对象方法分析问题的要领 为学习对象建模方法热身,4.1 什么是建模?,建模就是认识现实世界,客观世界,主观世界,认识世界,改造世界,世界是什么样的呢?,4.2 模型因人而异

32、,不同类型的人有不同的世界观,持不同的世界观就会得到对现实世界的不同认识 建立不同的模型,模块,函数,功能,类,关联,对象,横看成岭侧成峰,远近高低各不同。 不识庐山真面目,只缘身在此山中。苏轼,横看成岭侧成峰,远近高低各不同。 不识庐山真面目,只缘身在此山中。苏轼,4.3 模型体现现实世界,只存在同一个现实世界,模型没有对错、只有符合建模人目的多少之分,4.4 OO、UML与建模,建模是最终目的 OO是一种建模理论 UML是一种体现OO的建模语言,是将OO理论转化为实践的工具,4.5 用例驱动,用例驱动是RUP的重要概念,即软件生产过程就是用例驱动的。 在实际的软件项目中,以实现用例为目标。 在RUP中,用例捕获了系统的功能性需求。 用例可以驱动的内容包括: 逻辑视图 进程视图 部署视图 实施视图,4.6 面向对象分析,一切都是对象 对象都是独立的 对象都具有原子性 对象都是可抽象的 对象都有层次性,

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

当前位置:首页 > 中等教育 > 职业教育

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


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

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

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