- 2022-08-30 发布 |
- 37.5 KB |
- 60页
申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
文档介绍
[计算机]uml课件
面向对象建模技术信息工程与自动化学院计算机系/计算机重点实验室教师:陈星\n第三课类继承(一)授课日期:2011年3月7★红色部分属于大纲要求\n类继承继承是两个类之间的一种具有单向传递性的关系不是对象之间的关系与人的分类概念较为接近什么是“继承”\n类继承关于“继承”的几个术语\n类继承继承在对象之间的作用继承的含义ABab?对象a与对象b之间会产生什么关系?\n类继承继承在对象之间的作用继承的含义ABaba∈b对象a所具有的属性和操作对象b自动都有。a∈b\n类继承继承在对象之间的作用继承的含义ABabbinstanceofA“对象b是A的实例”是真命题。都是同类对象\n类继承继承在对象之间的作用继承的含义AB把系统中所有A的对象全部或部分替换为B的对象,系统也可以正常工作。替换终于有一条线索,可以处理这种构件之间的可替换性\n类继承设计一个商品销售界面的框架例子商品销售界面分类列表搜索区大图标展示区/商品细节区\n类继承定义一个框架例子\n类继承利用类继承修改系统,有时称为“无缝焊接”例子我的检索面板我的商品细节面板利用类继承,把自己的程序替换进去,让它们一起工作。\n类继承利用类继承,可以平滑地升级系统例子V2.0一些更好的程序我的商品细节面板V2.0你还可以继续改进\n类继承利用类继承,系统可以“平滑的进化/开发”例子旧系统新系统在原有框架下替换一些构件模型实际系统把概念构件替换为实际构件面向对象软件开发方法的思想\n类继承继承的一般描述\n类继承请为Car、Bicycle、Truck建立类模型对象模型和类模型继承的范例1aCaraBicycleaTruck200milesPerGallonnumberOfGearsAxleWeighttopSpeed3.53301208对象类分界CarBicycleTruck\n类继承请为Car、Bicycle、Truck建立类模型类和属性继承的范例1milesPerGallonnumberOfGearsAxleWeighttopSpeedCarBicycleTruck\n类继承放置一个新的类LandVehicle,不改变Car、Bicycle、Truck的语义?减少“黑线”继承的范例1milesPerGallonnumberOfGearsAxleWeighttopSpeedCarBicycleTruckLandVehicle通过绿线和黑线的组合Car、Bicycle、Truck还是能连接到topSpeed\n类继承UML模型UML中,类型放在冒号后面。\n类继承为List、Bag、LinkedList、ArrayList建立类模型。继承的范例2……aBagaLinkedListanArrayList对象类分界一组对象BagLinkedListArrayList\n类继承放置一个新类Collection继承的范例2Collection一组对象BagLinkedListArrayList\n类继承LinkedList和ArrayList的对象是有序的,维护元素加入的次序。对象世界继承的范例2……aBagaLinkedListanArrayList02…1加入的次序\n类继承类世界继承的范例2Collection一组对象BagLinkedListArrayList序映射\n类继承增加一个新类继承的范例2Collection一组对象BagLinkedListArrayListNoName序映射\n类继承进一步减少绿线把新类定名为“List”继承的范例2Collection一组对象BagLinkedListArrayListList序映射只要利用黑线与绿线组合;绿线与绿线组合,对象与类和属性的对应关系没有改变。减少了概念的联系,降低了耦合.\n类继承考虑方法contains:继承的范例2contains\n类继承利用继承性,只需要放置在继承的顶点(根类)。继承的范例2contains\n类继承考虑方法elementAt:继承的范例2elementAt\n类继承利用继承性:继承的范例2elementAt\n类继承考虑方法contains:继承的范例2numberOfElements\n类继承利用继承性:继承的范例2numberOfElements\n类继承用UML表达类模型继承的范例2\n类继承整理后UML类模型继承的范例2aBagaLinkedListaArrayList这些对象有哪些操作?\n类继承继承的范例2aLinkedListaArrayListelementAt在两个对象中的实现是一样的吗?List类的elementAt如何实现?\n类继承继承的范例2其实这是一个抽象方法。\n类继承使用抽象类是人类智慧的一种本能。你会给很多水果削掉果皮,自然而然产生“削果皮”的概念,产生了抽象类Fruit抽象方法peel假如给一个Fruit的对象发送peel消息,将会怎样?假如给List对象发送一个contains消息,将会怎样?抽象类\n类继承抽象类的来源抽象类苹果橙子梨水果当不承认水果与苹果、橙子、梨有继承关系的时候承认射向“苹果”类、“橙子”类和“梨”类的对象都射向“水果”类。对象类分界\n类继承建立继承的动机:所有射向“苹果”类的对象都射向“水果”类抽象类苹果水果对象类分界\n类继承建立继承的动机:增加“苹果”与“水果”的继承关系抽象类苹果水果对象类分界减少了黑线,减轻了知识系统的负担。每一个对象还是到达“苹果”和“水果”\n类继承建立继承的动机:“水果”成了抽象类抽象类苹果水果对象类分界没有直接用“黑线”投到“水果”的对象。橙子梨\n类继承产生抽象方法抽象类苹果对象类分界削苹果削苹果\n类继承抽象方法的产生:抽象类苹果对象类分界削苹果削苹果削苹果削橙子橙子水果削水果更和谐\n类继承抽象方法的产生:抽象类苹果削苹果水果削水果子类子类方法超类/父类超类方法人类思维的习惯\n类继承抽象类由于类结构的形成过程中丢弃了具体细节可能含有无法被程序实现的方法称为抽象方法请思考:抽象方法既然无法执行,有什么用处呢?抽象类\n类继承含有抽象方法的类方法包括方法名方法参数表方法体(代码)抽象方法没有方法体无法执行抽象类无法实例化抽象类和抽象方法\n类继承UML中用斜体字表示抽象类如果不能使用斜体字,在类名左边或上方注明{abstract}抽象类和抽象方法有方法体(代码)的方法对抽象方法的调用,被自动代替为对具体方法的调用。请思考内在的好处。\n类继承在Java中定义抽象类:publicabstractclassList{publicabstractbooleancontains(Objecto);}错误的语句:newList();只有具体的类能够被实例化,如果调用抽象方法,最终一定会调用一个具体类的“重定义方法”。抽象类和抽象方法\n类继承重定义方法与类模型重定义方法CollectionListArrayListcontains相同的方法名containscontains相同的参数表不同的方法体相同的返回值类型\n类继承重定义方法重定义方法ListArrayListelementAtelementAt这个关系意味着什么?两个方法用来处理同一个消息\n类继承重定义方法重定义方法elementAt这里需要安装一个List的对象anArrayListanLinkedListelementAtelementAt消息传递到实际装入的对象上\n类继承重定义方法接受消息elementAt这里可以安装List的对象设计时编译器解决运行时动态绑定anArrayListanLinkedListelementAt类继承的规则决定可安装的对象。重命名方法的规则保证设计的消息能够被动态绑定的对象处理。\n属性也可以重定义\n类继承一个Stack对象实现Stack(继承)aStack……Collection一组对象对象类分界Stack\n类继承实现Stack(继承)Collection一组对象Stack是否有序?\n类继承实现Stack(继承)Collection一组对象Stack序映射List但List是一个抽象类,继承List没有重用到太多代码。\n类继承实现Stack(继承)Collection一组对象Stack序映射List继承LinkedList或ArrayList都可以获得实际的可重用的代码LinkedList\n类继承一个Stack对象实现Stack(继承)aStack……Collection一组对象对象类分界Stack\n类继承实现Stack(继承)Collection一组对象Stack是否有序?\n类继承实现Stack(继承)Collection一组对象Stack序映射List但List是一个抽象类,继承List没有重用到太多代码。\n类继承实现Stack(继承)Collection一组对象Stack序映射List继承LinkedList或ArrayList都可以获得实际的可重用的代码LinkedList\n作业完成3.11复习题1-5查看更多