如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
面向对象练习2010-09-26一个练一个练习习:看看:看看大大家是否家是否真真正理解正理解面面向对象向对象•假设一个吉他Guitar店,需要一个可以搜索查找库存的简单程序•程序要求很简单,是个控制台程序,数据不需要持久化,即先不使用数据库•程序的功能:•在初始化时,首先初始化库存信息,将所有Guitar编目,并将信息加入库存目录中,存储的guitar信息包括序列号、价格、制造商、模型、类型、背板木料、头部木料等信息•当用户输入想要查找的Guitar类型信息,如制造商、模型、类型、背板木料、头部木料等信息,程序可以从库存目录中搜索到匹配的Guitar,返回库存中匹配的Guitar信息,如果没有找到,那么返回“您要的Guitar没有找到!”•看看你实现的程序共有几个类,查找起来方便么,有没有进一步提高优雅性的地方山东大学计算机学院2增加了增加了个个需求需求•假设这个商店还能卖琵琶,可以查琵琶,也是个弦乐器•假设这个商店还能卖更多乐器,不仅是弦乐器•给出设计和实现山东大学计算机学院3CRCCRC卡片卡片•完成CRC卡片设计的单词频率统计的程序•使用继承、接口、多态、组合等概念优化这个程序山东大学计算机学院4理解理解类类的方法的方法•当定义类并且确定该类应当包含何种方法,是类方法还是实例方法时,通常并不是一目了然的。•比如,假设要定义一个Set类(不同于java.util.Set接口),其对象行为类似于数学概念上的(有限、无序)整数集合。对于这样一个集合很自然的操作便是与另一个Set对象求交集。对于该Set类,这样的操作有如下(至少)两个版本的声明方式:•PublicSetintersect(SetotherSet)•PublicstaticSetintersect(SetfirstSet,SetsecondSet)•哪个版本更好呢?山东大学计算机学院5练习练习•java.awt.event包中有一个ActionListener接口,请回顾并编程练习这个接口的使用方法•思考:为什么ActionListener是一个接口而不是抽象类山东大学计算机学院6类的责类的责任任的分离的分离•图(graph)就是节点的集合,每个节点都通过边与任意数目的其他节点相连。•图的使用者一般通过遍历边来访问节点——比如,用于寻找从一个节点到另一个节点的路径。在这样的情况下,使用者需要知道图中的哪些节点是已经访问过因而不需要再次访问的。为了知道这些已经访问过的节点,可以采取好几种方法,如•(1)每个节点都可以有一个公共的setVisited方法和一个getVisited方法,用户可以调用setVisited方法将Node对象设置为已经访问过,用户还可以调用getVisited方法来查看某个Node对象是否已经访问过。•(2)Graph对象可以有一个公共的setVisited(Noden)方法,该方法可以将Node节点置为已经访问过。还有一个getVisited(Noden)方法可以返回真、假以表明某个Nodele对对象是否已经访问过。•(3)除了Node和Graph的对象以外,还可以用另外一个对象记录已经访问过的Node节点。•这些方法你觉得哪个好,为什么,不好的那些方法为什么不好山东大学计算机学院7理解理解特特殊化殊化•假设需要编写一个绘图程序,其中需要有一个Rectangle类来存储矩形的相关信息,可以利用现有的类,如java.awt.Rectangle。但是现在需要的类必须包含一个getCenter()及一个setCenter(intx,inty)方法。而上述的java.awt.Rectangle没有这两个方法。•如果现存的java.awt.Rectangle类源码是可用的,可以通过以下几种方法来修改满足需求•方法一:修改这个java.awt.Rectangle类,增加新的方法,删除不用的方法•方法二:复制java.awt.Rectangle类的代码,建一个新类EnhancedRectangle,然后在其中增加新的方法•比较这两种方法的优缺点•如果可用的只是java.awt.Rectangle类的编译码而不是源代码,又有几种实现方案呢,给出你认为最好的解决方案的主要代码•在JAVAAPI中有javax.swing.JOptionPane类。它包含很多类方法。Java类的设计人员为什么选择将其设计为类方法而不是实例方法山东大学计算机学院8泛泛化化•假设一家企业有一个保存所有当前消费者记录的营业系统。因为该企业同时面对自然人消费者及企业消