实验项目C、面向抽象和面向接口编程

一、实验目的

专题:继承基础和面向抽象编程

1、掌握继承的使用。

2、掌握Object类的基本用法。

3、理解和掌握抽象类的用法。

4、理解final关键字。

5、掌握和理解多态的运用。

专题:接口基础和面向接口编程

1、掌握接口的使用。

2、掌握和理解接口实现多态的运用。

3、理解和掌握匿名类的用法。

4、初步了解JDK8新特性和lambda表达式。

二、实验内容和主要步骤

专题:继承基础和面向抽象编程

  1. 继承基础实验
  2. Object类使用
  3. 抽象类和抽象方法
  4. 继承机制实现的多态

专题:接口基础和面向接口编程

  1. 接口基础
  2. 接口机制的多态基础
  3. 面向接口编程
  4. 匿名类
  5. [选做]函数式接口和lambda表达式

三、实验结论和思考

1、问题:开发一个应用,模拟计算机对移动存储设备的读写,即移动存储设备有U盘、手机卡、移动硬盘、闪卡等设备。

作答要求

(1)概要描述你采用何种方法来模拟该应用。采用该方案的理由是什么?

:采用面向接口编程来模拟,通过编写接口去抽象设计数据的读与写方法,再编写不同设备的实现类去重写接口方法,节省代码。最后设计和编写计算机类,模拟调用具有数据交换的外部设备:u盘、手机卡等,当需要再增添设备时,只需添加实现类去重写接口的读写方法,再在计算机类中调用即可,减少代码冗杂度,使得代码的实现更加灵活。


(2)在下面粘贴实现的各代码文件内容。注意标示和用文字描述清楚。

​
import static java.lang.System.out;

 interface IExtDevice{//读写设备接口
		void read();//读取数据
		void write();//写入数据
}

class  UDisk implements IExtDevice{//U盘
	@Override
	public void read() {
		out.println("读U盘...End");
	}
		@Override
		public void write() {
			out.println("写入U盘...End");
		}
	
}
class SIMCard implements IExtDevice{//手机卡
	@Override
	public void read() {
		out.println("读手机卡...End");
	}
		@Override
		public void write() {
			out.println("写入手机卡...End");
		}
	
}
class MobileHDD implements IExtDevice{//移动硬盘
	@Override
	public void read() {
		out.println("读移动硬盘...End");
	}
		@Override
		public void write() {
			out.println("写入移动硬盘...End");
		}
}

class FlashCard implements  IExtDevice{//闪卡
	@Override
	public void read() {
		out.println("读闪卡...End");
	}
		@Override
		public void write() {
			out.println("写入闪卡...End");
		}
}
class Mycomputer{//计算机
	private IExtDevice extDev;//插入的读写设备
	    IExtDevice getExtDev() {
		return extDev;
	}
	public void setExtDev(IExtDevice extDev) {
		this.extDev=extDev;
	}
	//调用所插设备的读写方法来完成实际的读写数据
	public void readDate() {
		extDev.read();
	}
	public void writeDate() {
		extDev.write();
	}	 
}
public class APPTest {
	public static void main(String[] arg) {
		Mycomputer computer=new Mycomputer();
		IExtDevice UDisk=new UDisk();//一个U盘
		IExtDevice SIMCard=new SIMCard();//一张手机卡
		IExtDevice MobileHDD=new MobileHDD();//一块移动硬盘
		IExtDevice FalshCard=new FlashCard();//一张闪卡
		
		out.println("***接入u盘");
		computer.setExtDev(UDisk);
		computer.readDate();
		computer.writeDate();
		out.println("==========");
		
		out.println("***接入手机卡");
		computer.setExtDev(SIMCard);
		computer.readDate();
		computer.writeDate();
		out.println("==========");
		
		out.println("***接入移动硬盘");
		computer.setExtDev(MobileHDD);
		computer.readDate();
		computer.writeDate();
		out.println("==========");
		
		out.println("***接入闪卡");
		computer.setExtDev(FalshCard);
		computer.readDate();
		computer.writeDate();
		out.println("==========");	
	}

}

​

(3)给出部分模拟执行的截图(至少2张)。

2程序评价和改进。

问题背景:编程模拟和表达老虎Tiger和猫咪Cat等具体种类的生物都是一种动物。即它们都具有共同的名字属性name和运动行为run,只不过具体的名字叫法不同,运动行为的具体方式也不同。比如Tiger可以叫“一只东北虎”等,它是“在森林里猎物”,Cat可以叫“一只宠物猫”,它是“在沙发上卖萌”。为简单起见,模拟程序系统暂时只考虑运动行为run,将来该模拟程序系统可能还要扩展支持更多动物的特征。

版本0.9:下面是一个实现,暂且称为v0.9。

 

 

问题:请用面向对象思想和技术简单评价该版本的程序实现,并给出一个你认为更好的实现。

作答要求

(1)用面向对象思想和技术简单评价版本0.9的程序实现,指出其不足。

:通过建立两个类Tiger和Cat,各自定义了局部变量name和run()方法,后编写公有测试类AnimalTest去新建Tiger对象和Cat对象去调用run()方法,实现功能。不足:当添加的动物对象够多时,就得再新建很多个类,新建多个构造方法去标示name,以及多个run()方法,提高了代码的冗杂度。

(2)把你的改进版本实现的代码有条理的粘贴到下面。

import static java.lang.System.*;
  abstract class Animal {
	public abstract String  run();

}
class Cat extends Animal{
	 
	public String run(){
		return ("一只猫在沙发上卖萌");
	}
}
class Tiger extends Animal{
	
	public String run(){
		return ("一只东北虎在森林里猎食\n" );
	}
}
public class AnimalTest {
	public static void main(String[] args) {
		Animal animal1=new Cat();
		out.println(animal1.run());
		Animal animal2=new Tiger();
		out.println(animal2.run());
	}

}

(3)简述改进版本的合理性。

:通过构建一个抽象类Animal,抽象类里构造了一个抽象方法run(),供子类Cat,Tiger去继承重写其抽象方法,若是还需要添加多个动物,直接新建个子类去继承父类Animal去重写其抽象方法即可,降低了代码量,降低了代码的冗杂度。

四、实验心得(必须填写)

在模拟计算机对移动存储设备的读写实现代码的过程中,我仔细思考了很多方法去想怎么实现功能,最后我联想到了面向接口的方法来模拟,因为通过编写接口去抽象设计数据的读与写方法,再编写不同设备的实现类去重写接口方法,节省代码。最后设计和编写计算机类,模拟调用具有数据交换的外部设备:u盘、手机卡等,当需要再增添设备时,只需添加实现类去重写接口的读写方法,再在计算机类中调用即可,减少代码冗杂度,使得代码的实现更加灵活。最终代码的设计和完美实现让我欢欣雀跃,获益良多。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tang_Fxiao_tang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值