[工学]4-java面向对象设计ppt课件_第1页
[工学]4-java面向对象设计ppt课件_第2页
[工学]4-java面向对象设计ppt课件_第3页
[工学]4-java面向对象设计ppt课件_第4页
[工学]4-java面向对象设计ppt课件_第5页
已阅读5页,还剩16页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java面向对象设计思想计算机学院通讯软件工程中心张艳梅 本章主要内容:l1、一切皆对象l一切皆对象。l程序由对象构成。l对象由更小的对象构成。l每个对象有其职责。l对象职责经过它的下属对象的职责实现和下属对象相互协作来实现。l2、从实例领会OOPl开场运用对象l承继的益处l接口可是个利器1、一切皆对象l对象:是人们要进展研讨的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示详细的事物,还能表示笼统的规那么、方案和事件。l对象具有形状,一个对象用数值来描画它的形状。l对象详细操作,用来改动对象的形状,操作就是对象的行为。l对象实现了数据和操作的结合

2、,使数据和操作封锁于对象的一致体中。1.1 一切皆对象l实际上讲,可从要处理的问题身上提出一切概念性的组件,然后在程序中将其表达为一个对象。 l当我们进展面向对象的程序设计时,面临的最大一项挑战性就是,如何把问题描画转化为对象架构。 1.2 程序由对象构成l程序是一大堆对象的组合。l例:Light lt = new Light();l经过音讯传送,各对象知道本人该做些什么。l例:lt.on();lt.off();lt.brighten();lt.dim();l为了向对象发出恳求,需向那个对象“发送一条音讯。更详细地讲,可将音讯想象为一个调用恳求,它调用的是从属于目的对象的一个子例程或函数。 l

3、运用一些预先定义好的类时,我们在程序里采用的代码是非常简单和直观的。 1.3 对象由更小的对象构成1许多人以为代码重用是面向对象程序设计提供的最伟大的一种杠杆。为反复运用一个类,最简单的方法是直接运用那个类的对象。但同时也能将那个类的一个对象置入一个新类。我们把这叫作“创建一个成员对象。新类可由恣意数量和类的其他对象构成。这个概念叫作“组合也叫“包含在现有类的根底上组织一个新类。所以,虽然对象的概念非常简单,但在程序中却可到达恣意高的复杂程度。1.3 对象由更小的对象构成2l对象的组合具有极大的灵敏性。新类的“成员对象通常设为“私有Private,这样我们可在不干扰客户代码的前提下,从容地修正

4、那些成员。也可以在“运转期更改成员,这进一步增大了灵敏性。l由于承继的重要性,所以在面向对象的程序设计中,它经常被重点强调。作为新参与这一领域的程序员,或许早已先入为主地以为“承继该当随处可见。沿这种思绪产生的设计将是非常蠢笨的,会大大添加程序的复杂程度。相反,新建类的时候,首先应思索“组合对象;这样做显得更加简单和灵敏。利用对象的组织,我们的设计可坚持清新。1.4 每个对象都有其职责1l“接口Interface规定了可对一个特定的对象发出哪些恳求。然而,必需在某个地方存在着一些代码,以便满足这些恳求。这些代码与那些隐藏起来的数据便叫作“隐藏的实现。对象的职责就是决议如何对这条音讯作出反响执行

5、相应的代码。l每个对象都有一种模版。l类:详细一样或类似性质的对象的笼统就是类。因此,对象的笼统是类,类的详细化是对象,也可说实例是对象。类详细属性和操作。1.4 每个对象都有其职责2l一个类最重要的特征就是“能将什么音讯发给它?。 lJava 采用三个显式关键字以及一个隐式关键字来设置类边境:public,private,protected 以及暗示性的friendly。假设未明确指定其他关键字,那么默以为后者。这些关键字的运用和含义都是相当直观的,它们决议了谁能运用后续的定义内容。 1.5 对象职责由下属对象协作实现1l我们费尽心思做出一种类后,假设不得不又新建一种类,令其实现大致一样的功

6、能,那会是一件非常令人灰心的事情。但假设能利用现成的类,对其进展“克隆,再根据情况进展添加和修正,情况就显得理想多了。“承继正是针对这个目的而设计的。但承继并不完全等价于克隆。 1.5 对象职责由下属对象协作实现2l有两种做法可将新得的衍生类与原来的根底类区分开。l第一种做法:为衍生类添加新函数功能。普通都是认识到根底类不能满足我们的要求。新类“类似原类l第二个方法是改动根底类一个现有函数的行为。我们将其称作“改善那个函数。只需为衍生类的函数建立一个新定义即可。我们的目的是:“虽然运用的函数接口未变,但它的新版本具有不同的表现。新类“等价原类1.5 对象职责由下属对象协作实现3l由于类为“圆C

7、ircle的一个对象也属于类为“外形Shape的一个对象,所以一个圆完全能接纳外形音讯。l这意味着可让程序代码一致指挥“外形,令其自动控制一切符合“外形描画的对象,其中自然包括“圆。这一特性称为对象的“可交换性,是OOP 最重要的概念之一。 l假设经过承继增添了一种新类,如“三角形,那么我们为“外形编写的代码不用改动。所以说程序具备了“扩展才干 。 2、从实例了解面向对象设计思想l假定我们要设计一个媒体播放器。该媒体播放器目前只支持音频文件mp3和wav。初步设计出来的播放器能够很简单: lpublic class MediaPlayer l private void playMp3() l

8、System.out.println(Play the mp3 file.); l private void playWav() l System.out.println(Play the wav file.); l public void play(string audioType) l switch (audioType.ToLower() lcase (mp3): playMp3(); break; lcase (wav): playWav(); break; l 2、需求变卦促使我们改善l自然,他会发现这个设计非常的糟糕。由于它根本没有为未来的需求变卦提供最起码的扩展。当他为应接不暇的

9、需求变卦而焦头烂额的时候,他能够更希望让这份设计到它应该去的地方,就是桌面的回收站。 l仔细分析这段代码,它其实是一种最古老的面向构造的设计。假设他要播放的不仅仅是mp3和wav,他会不断地添加相应地播放方法,然后让switch子句越来越长,直至到达他视野看不到的地步。l好吧,我们先来体验对象的精神。根据OOP的思想,我们应该把mp3和wav看作是一个独立的对象。那么是这样吗?2、建立对象,一致接口lpublic class MP3 public void play() System.out.println(Play the mp3 file.); lpublic class WAV l pu

10、blic void play()System.out.println(Play the wav file.); 他曾经知道怎样建立对象了。更可喜的是,他在不知不觉中运用了重构的方法,把原来那个渣滓设计中的方法名字改为了一致的play()方法。但似乎他并没有击中关键,以如今的方式去更改MediaPlayer的代码,本质并没有多大的变化。2、引入承继,为了?l既然mp3和wav都属于音频文件,他们都具有音频文件的共性,为什么不为它们建立一个共同的父类呢? public class AudioMedia public void play() System.out.println(Play the A

11、udioMedia file.); l如今我们引入了承继的思想,OOP也算是象模象样了。得意之余,再仔细分析下,其真实现实生活中,我们播放的只会是某种详细类型的音频文件,因此这个AudioMedia类并没有实践运用的情况。对应在设计中,就是:这个类永远不会被实例化。所以,还得动一下手术,将其改为笼统类。2、出现类层次承继+组合l好了,如今的代码有点OOP的觉得了: public abstract class AudioMedia public abstract void play(); lpublic class MP3 extends AudioMedia public void Play(

12、) System.out.println(Play the mp3 file.); public class WAV extends AudioMedia public void Play() System.out.println(Play the wav file.); public class MediaPlayer public void play(AudioMedia media) media.play(); 2、无尽头的开展l看看如今的设计,保证了类的最小化原那么,更利于扩展到这里,他会发现play方法名改得多有必要。 即使他如今又添加了对WMA文件的播放,只需求设计WMA类,并承继

13、AudioMedia,重写play方法就可以了,MediaPlayer类对象的play方法根本不用改动。l是不是到此就该画上圆满的句号呢?然后刁钻的客户是永远不会满足的,他们希望他的媒体播放器可以支持视频文件。他又该苦楚了,由于视频文件和音频文件有很多不同的地方,他可不能偷懒,让视频文件对象认音频文件作父亲啊。他需求为视频文件设计另外的类对象了,假设我们支持RM和MPEG格式的视频:2、追加一个承继层次public abstract class VideoMedia public abstract void Play(); public class RM extends VideoMedia

14、public void Play() System.out.println(Play the rm file.); public class MPEG extends VideoMedia public void Play() System.out.println(Play the mpeg file.); 糟糕的是,他不能一劳永逸地享用原有的MediaPlayer类了。由于他要播放的RM文件并不是AudioMedia的子类。2、接口可是个利器l不过不用焦急,由于接口这个利器他还没有用上。虽然视频和音频格式不同,别忘了,他们都是媒体中的一种,很多时候,他们有许多类似的功能,比如播放。根据接口的

15、定义,他完全可以将一样功能的一系列对象实现同一个接口:lpublic interface IMedia abstract void play(); lpublic abstract class AudioMedia implements IMedia public abstract void play(); public abstract class VideoMedia implements IMedia public abstract void play(); l再更改一下MediaPlayer的设计就OK了: public class MediaPlayer public void play(IMedia media) media.play(); 2、总结,思索l从MediaPlayer类的演化,我们可以得出这样一个结论:在调用类对象的属性和方法时,尽量防止

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论