与中职生探讨面向对象程序设计——C#

来源 :中国校外教育·理论 | 被引量 : 0次 | 上传用户:lhyhh123
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
   [摘 要]:2005年初,笔者在北京参加了北大青鸟教师培训班,学习的内容是C#。之后,经过几年的教学实践,笔者对面向对象程序设计有了更为深广的理解,本文笔者就谈谈自己的认识与体会,以与中职计算机专业学生朋友交流。
  [关键词]:中职生 面向对象程序设计 C#
  
  首先,笔者谈几点理解面向对象程序设计的要点:
  封装性:数据和行为封装在一个自定义的数据类型里面,其作用:(1)把松散的方法聚合到数据类型里面。(2)隐藏数据类型内部的数据定义。
  继承性:把多个数据类型按照一定的方法进行抽象,把共有的属性放的一个高层的数据类型里面,然后底层的多个类型可以共享这个高层类型的数据和方法。作用有两个:(1)简化数据类型的定义,减少重复定义。(2)使组织结构清晰化,这和现实世界的分门别类具有异曲同工之妙。
  多态性:一个方法,可以根据其操纵的具体类型的对象的不同(抽象类型相同),可以有不同的表现。其作用:(1)进一步简化方法的定义。(2)是多种不同的方法具有统一的接口,方便调用。
  接下来,我们结合实例说说设计模式。
   为了更好地理解设计思想,实例尽可能简单化。但随着需求的增加,程序将越来越复杂。此时,就有修改設计的必要,重构和设计模式就可以派上用场了。最后当设计渐趋完美后,你会发现,即使需求不断增加,你也可以神清气闲,不用为代码设计而烦恼了。
  假定我们要设计一个媒体播放器。该媒体播放器目前只支持音频文件mp3和wav。如果不谈设计,设计出来的播放器可能很简单:
  
  public class MediaPlayer
  
  {
  
  private void PlayMp3()
  
  {
  
  MessageBox.Show("Play the mp3 file.");
  
  }
  
  private void PlayWav()
  
  {
  
  MessageBox.Show("Play the wav file.");
  
  }
  
  public void Play(string audioType)
  
  {
  
  switch (audioType.ToLower())
  
  {
  
  case ("mp3"):
  
  PlayMp3();
  
  break;
  
  case ("wav"):
  
  PlayWav();
  
  break;
  
  }
  }
  }
  你会发现,这个设计有很大的隐患,它根本没有为未来的需求变更提供最起码的扩展。仔细分析这段代码,它其实是一种最古老的面向结构的设计。如果你要播放的不仅仅是mp3和wav,你会不断地增加相应地播放方法,然后让switch子句越来越长,直至达到你视线看不到的地步。
  我们来体验面向对象的思想。把mp3和wav看作是一个独立的对象。
  
  public class MP3
  
  {
  
  public void Play()
  
  {
  
  MessageBox.Show("Play the mp3 file.");
  
  }
  
  }
  
  public class WAV
  
  {
  
  public void Play()
  
  {
  
  MessageBox.Show("Play the wav file.");
  
  }
  
  }
  
  统一的Play()方法。在后面的设计中,会发现这样改名是很关键的!
  
  但以现在的方式去更改MediaPlayer的代码,实质并没有多大的变化。
  既然mp3和wav都属于音频文件,他们都具有音频文件的共性,我们就应该建立一个共同的父类。
  public class AudioMedia
  {
  public void Play()
  {
  MessageBox.Show("Play the AudioMedia file.");
  }
  }
  现在,我们引入了继承的思想。
  我们播放的只会是某种具体类型的音频文件,因此,这个AudioMedia类并没有实际使用的情况。对应在设计中,就是:这个类永远不会被实例化。所以,还得动一下手术,将其改为抽象类。
  public abstract class AudioMedia
  {
  public abstract void Play();
  }
  public class MP3:AudioMedia
  {
  public override void Play()
  {
  MessageBox.Show("Play the mp3 file.");
  }
  }
  public class WAV:AudioMedia
  {
  public override void Play()
  {
  MessageBox.Show("Play the wav file.");
  }
  }
  public class MediaPlayer
  {
  public void Play(AudioMedia media)
  {
  media.Play();
  }
  }
  看看现在的设计,既满足了类之间的层次关系,同时又保证了类的最小化原则,更利于扩展(到这里,你会发现play方法名改得多有必要)。
  即使你现在又增加了对WMA文件的播放,只需要设计WMA类,并继承AudioMedia,重写Play方法就可以了,MediaPlayer类对象的Play方法根本不用改变。
  然而,如果要求设计的媒体播放器能够支持视频文件。怎么办呢?
  原来的软件设计结构似乎出了问题,视频文件和音频文件有很多不同的地方。解决起来也不难,让视频文件对象认音频文件作父亲啊。需要为视频文件设计另外的类对象,假设我们支持RM和MPEG格式的视频:
  public abstract class VideoMedia
  {
  public abstract void Play();
  }
  public class RM:VideoMedia
  {
  public override void Play()
  {
  MessageBox.Show("Play the rm file.");
  }
  }
  public class MPEG:VideoMedia
  {
  public override void Play()
  {
  MessageBox.Show("Play the mpeg file.");
  }
  }
  虽然视频和音频格式不同,别忘了,他们都是媒体中的一种,很多时候,他们有许多相似的功能,比如播放。根据接口的定义,完全可以将相同功能的一系列对象实现同一个接口:
  public interface IMedia
  {
  void Play();
  }
  public abstract class AudioMedia:IMedia
  {
  public abstract void Play();
  }
  public abstract class VideoMedia:IMedia
  {
  public abstract void Play();
  }
  再更改一下MediaPlayer的设计就OK了:
  public class MediaPlayer
  {
  public void Play(IMedia media)
  {
  media.Play();
  }
  }
  总结一下,从MediaPlayer类的演变,我们可以得出这样一个结论:在调用类对象的属性和方法时,尽量避免将具体类对象作为传递参数,而应传递其抽象对象,更好地是传递接口,将实际的调用和具体对象完全剥离开,这样可以提高代码的灵活性。
其他文献
[摘 要]:PBL-情景教学是将PBL教学与情景教学相结合的新尝试,将其运用于大班级针灸治疗学的教学,可以使学生在学习过程中温故而知新,在情景模拟中综合运用所掌握的知识对疾病进行诊断、辨证、治疗,最终达到提高学生自学能力,分析、解决问题的能力、临床思维能力、创新能力及团体协作能力的目的。在本校2005中西医临床专业本科的教学当中,实践了PBL-情景教学,通过问卷回访,加强教学交流,促进PBL-情景
[摘 要]本研究从多个角度对怀化市人教A版高中数学必修2的实施现状进行了深入的调查,结果表明,教师普遍认为数学2难教,教学课时不足造成教师课业负担加重,学生作业负担较重,阅读材料不被重视,多媒体课件使用不足,学生学习方式变化不大,数学学习兴趣不高。  [关键词]高中数学必修2 实施 调查    怀化市普通高级中学自2007年9月起统一开始进入新课改。数学使用的是人教A版高中数学必修教材,在具体实施
[摘要] 在高校学生思想政治教育活动中,教育的对象是大学生。他们既是教育的接受者,教育的对象,同时,又在一切思想教育信息的接受活动中,具有接受教育和自我教育的主动性,在高校中提高学生的接受能力,加强学生自我教育成为了高校思想教育工作者思考的问题。  [关键词] 思想政治教育 自我教育 接受能力    随着教育的普及,高校的扩招,全国大学生在校人数不断增加,入学门坎的降低造成了大批大学生素质参差不齐
[摘要]随着21世纪信息时代的到来和ERP在中国的发展,ERP系统作为培养ERP专业人才的教学,ERP软件的产生已经到了刻不容缓的地步。无论是在中国,还是在全世界ERP系统都掀起了一场关于管理思想和管理技术的革命。本文从各个方面论述了现代企业应用ERP系统的必要性。  [关键词]ERP系统 现代企业 管理技术    一、前言    近年来,信息化系统工程取得了显著的发展,信息化建设已经在社会上全面
[摘要] 本文以温州医学院国际教育学院为背景,分析当前高校留学生管理中普遍存在的问题,并针对问题提出相关对策,以期能对我国高等教育的留学生管理工作有所帮助。  [关键词] 温州医学院国际教育学院 高校留学生 管理工作 问题 对策  温州医学院国际教育学院于2006年起,开始成建制招收以英语教学语言为主的医学专业学历留学生。目前,有临床医学专业留学生班、口腔医学专业留学生班,学制6年,现在已有300
[摘要] 文章主要从以行动为导向的课程开发设计的必要性,课程开发设计的理念与思路,具体课程开发设计的实践及从具体课程开发设计的实践中所引发的思考等方面入手进行论述,旨在为高职同行们的课程开发与设计过程提供一定的理论支持和实践参考。  [关键词] 行动导向 职业能力 典型工作任务 教学情境    一、以行动为导向的课程开发设计的必要性  一直以来,学科体系的教育模式培养出来的学生能够掌握较好的学科理
【摘要】 茂名地区虽然属于欠发达地区,但向来十分重视教育的发展,紧跟教育发展的潮流,近来茂名地区很多初中学校对校本课程进行了开发和实践。作者在了解茂名地区初中学校校本课程开发及利用的现状的基础上,分析其中存在的问题,并试从教师个人的层面提出几点建议。   【关键词】 茂名地区 校本课程 改善建议   【中图分类号】 G632.4 【文献标识码】 A 【文章
[摘要] 工作过程导向项目教学是能对学校所在地区和服务企业的技术、服务和劳动组织发展做出快速响应并将变化整合在教学内容中,实现人才培养目标的教学方法。本文对《电子商务概述》教学目标、工作过程导向项目教学用于电子商务实践教学设计的意义、电子商务工作过程导向项目实践教学设计及教学中应注意的问题进行了阐述,为《电子商务概论》实践教学提供了新的思路。  [关键词] 工作过程导向 项目教学 高职 电子商务概
【摘 要】长期以来,人们对高等学校教学方法的研究重视不够。本文对传统教学方法优缺点进行了对比分析,对“教学策略”赋予了更新的内容与含义,明确解释了教学方法与教学策略的关系。并以实例分析了课程教学方法与教学策略的选择使用方法。  【关键词】高等教育 教学方法 教学策略    一、引言    长期以来,人们对高等学校教学方法的研究重视不够。高校普遍存在着“高校无教法”思想,大学教师重学术轻教学研究,用
[摘 要]:庄子齐物论思想由“齐物我”、“齐是非”、“齐生死”三大分支加以支撑。本文主要对着三个部分进行系统梳理,并分别分析了它们的不同作用。“齐物我”抹平了认识主体与客体之间的差等,批判了个人中心主义;“齐是非”消除了认识主体对客体的价值肯定和否定判断之间的差异,主要为了平息儒墨争辩;“齐生死”则教会人们更加理性的看待死亡,更好的享受生命。  [关键词]:庄子 齐物论 齐物我 齐是非 齐生死