一、 用户封装手机的基本属性和功能,要求手机既可以使用移动公司的SIM卡也可以使用联通公司的SIM卡(可以使用任何公司提供的SIM卡)。 1.问题的分析 如果设计的手机类中用某个具体的公司,比如移动公司,声明了对象,那么手机就缺少弹性,无法使用其他公司的SIM卡,因为一旦用户需要使用其他公司的SIM卡,需要修改手机的代码,比如增加用其他公司声明的成员变量。 如果每当用户有新的需求,就会导致修改类的某部分代码,那么就应当将这部分代码从该类中分割出去,使它和类中其他稳定的代码之间是松耦合关系(否则系统缺乏弹性,难以维护),即将每种可能的变化对应地提交给抽象类的子类负责完成。 2.设计抽象类 根据以上对问题的分析,首先设计一个抽象类SIM,该抽象类有三个抽象方法giveNumber()、setNumber()和giveCorpName(),那么SIM的子类必须实现giveNumber()、setNumber()和giveCorpName()方法。 3.设计手机类 设计MobileTelephone类(模拟手机),该类有一个useSIM(SIM card)方法,该方法的参数是SIM类型。显然,参数card可以是抽象类SIM的任何一个子类对象的上转型对象,即参数card可以调用SIM的子类重写的giveNumber()方法显示手机所使用的号码,调用子类重写的giveCorpName()方法显示该号码所属的公司。 除了子类外,还有SIM类及子类:SIMOFChinaMobile(模拟移动公司提供的卡)、SIMOFChinaUnicom(模拟联通公司提供的卡)和MobileTelephone类。 下图是MobileTelephone、SIM、SIMOFChinaMobile和SIMOFChinaUnicom类的UML图。 二、 用类描述计算机中CPU的速度和硬盘的容量。要求Java应用程序有4个类,名字分别是PC、CPU、HardDisk和Test,其中Test是主类。 PC类与CPU和HardDisk类关联的UML图如下。 其中,CPU类要求getSpeed()返回speed的值,要求setSpeed(int m)方法将参数m的值赋值给speed。HardDisk类要求getAmount()返回amount的值。要求setAmount(int m)方法将参数的值赋值给amount。PC类要求setCPU(CPU c)将参数c的值赋值给cpu,,要求setHardDisk(HardDisk h)方法将参数h的值赋值给HD。Y要求show()方法能显示cpu的速度和硬盘的容量。 主类Test的要求 (1) main()方法中创建一个CPU对象cpu。cpu将自己的speed设置为2200; (2) main()方法中创建一个HardDisk对象disk。disk将自己的amount设置为2200; (3) main()方法中创建一个PC对象pc; (4) pc调用setCPU(CPU c)方法,调用时实参是cpu; (5) pc调用setHardDisk(HardDisk h)方法,调用时实参是disk; (6) pc调用show()方法。 三、 设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。 编写抽象类Animal Animal抽象类有2个抽象方法cry()和getAnimaName(),即要求各种具体的动物给出自己的叫声和种类名称。 编写模拟器类Simulator 该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。 编写Animal类的子类:Dog和Cat类 下图是Simulator、Animal、Dog、Cat的UML图。 编写主类Application(用户程序) 在主类Application的main方法中至少包含如下代码。 Simulator simulator=new Simulator(); Simulator. playSound(new Dog()); Simulator. playSound(new Cat()); 四、 使用接口实现下题。 设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。 编写抽象类Animal Animal抽象类有2个抽象方法cry()和getAnimaName(),即要求各种具体的动物给出自己的叫声和种类名称。 编写模拟器类Simulator 该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。 编写Animal类的子类:Dog和Cat类 下图是Simulator、Animal、Dog、Cat的UML图。 编写主类Application(用户程序) 在主类Application的main方法中至少包含如下代码。 Simulator simulator=new Simulator(); Simulator. playSound(new Dog()); Simulator. playSound(new Cat()); 五、 设计一个广告牌,希望所设计的广告牌可以展示许多公司的广告词。 1. 设计接口 首先设计一个接口Advertisement,该接口有2个方法show-Advertisement()和getCorpName(), 那么实现Advertisement接口的类必须重写show-Advertisement()和getCorpName()方法,即要求各个公司给出具体的广告词和公司名称。 2. 设计广告牌类 然后我们设计AdvertisementBoard类(广告牌),该类有一个show(Advertisement adevr)方法,该方法的参数adver是Advertisement接口类型(就像人们常说的,广告牌对外留有(接口)。显然,该参数sdver可以存放任何实现Advertisement接口的类的对象的引用,并回调类重写的接口方法showAdvertisement()来显示公司的广告词,回调类重写的接口方法getCorpName()来显示公司的名称。 本文来源:https://www.wddqw.com/doc/32d7c92f964bcf84b9d57bd4.html