第 7 章 面向对象编程
- 格式:docx
- 大小:134.53 KB
- 文档页数:5
第七章面向对象程序设计面向对象程序设计(Object-Oriented Programming, OOP)是一种以对象为中心的编程思想和方法。
在面向对象的程序设计中,程序由对象组成,每个对象都有自己的数据和方法。
对象通过和其他对象的交互来完成任务,实现程序的功能。
面向对象程序设计有以下几个核心概念:1.类和对象:类是对象的模板或蓝图,描述了对象的属性和行为。
对象是类的一个实例,具有类定义的属性和方法。
通过类可以创建多个对象。
2.封装:封装是指将数据和操作数据的方法组合到一个单元中,隐藏了数据的实现细节。
对象的内部状态对外部是不可见的,只能通过对象的公共方法访问和操作数据。
3.继承:继承是指一个对象可以继承另一个对象的属性和方法。
被继承的对象称为父类或基类,继承父类的对象称为子类或派生类。
通过继承,子类可以拥有父类的所有属性和方法,并且可以进一步进行修改或扩展。
4.多态:多态是指同一操作可以在不同的对象上具有不同的行为或结果。
同一个方法可以在不同的类中有不同的实现。
通过多态,可以提高代码的灵活性和可复用性。
5.抽象:抽象是指将具有相似特征和行为的事物抽象成类或接口,忽略了具体的实现细节。
抽象类和接口可以提供通用的行为定义,具体的实现由子类来完成。
面向对象程序设计有以下优点:1.继承和多态提高了代码的灵活性和可复用性。
可以通过继承来重用已有的代码,并且可以通过多态来扩展和修改已有的代码。
2.封装将数据和方法组合到一个单元中,隐藏了数据的实现细节,提高了代码的安全性和可维护性。
3.抽象将具有相似特征和行为的事物抽象成类或接口,忽略了具体的实现细节。
抽象类和接口可以提供通用的行为定义,而具体的实现由子类来完成。
4.面向对象的程序设计使得代码更易理解和管理。
代码以对象为中心,更符合人们对问题的理解和描述。
面向对象程序设计在实践中得到了广泛的应用。
许多编程语言支持面向对象程序设计,如Java、C++、Python等。
类和对象
1. 简述类和对象之间的关系
2. 对象的引用和对象本身分别存在哪块存储区?
3. 方法签名由哪些部分组成?
4. 创建一个Teacher类,要求描述姓名、性别、年龄、薪水,定义一个方法,用于在教师
原有薪水的基础上增加5000,再定义一个TeacherTest类,创建一个Teacher对象并初
始化对象的各属性值,调用教师增加薪水的方法,并将增加薪水后的教师信息输出。
5. 小红养了两只猫,一只叫小黑,今年2岁,黑色,另一只叫小白,今年5岁,白色。请
编写一个程序,要求当用户输入小猫的名字时,就显示猫的名字、年龄和颜色。如果用
户输入的小猫名字错误,则显示“小红没有养这只猫”。
封装、继承
1. 编写一个类Student,代表学员,要求:
1) 具有属性:姓名、年龄、性别、专业
2) 具有方法:自我介绍,负责输出该学员的姓名、年龄、性别以及专业
3) 具有两个带参数的构造方法:
第一个构造方法中,设置学员的性别为男,专业为Android,其余属性的值由参数
给定;第二个构造方法中,所有属性都由参数给定
编写测试类StudentTest进行测试,分别以两种方式对两个Student对象进行初始化,
并分别调用他们的自我介绍方法,看看输出结果是否正确。
2. 需求
1) 定义一个(Person)类,包含属性:姓名,年龄,性别;写好相关的方法,能够构造的
时候初始化或者后续修改属性值。
2) 定义一个Employee类继承于Person类,包含新的属性:职位;写好相关的方法,
能够构造的时候初始化或者后续修改属性值,重写equals方法,规则:当两个对
象的姓名,年龄,性别,职位都相等时返回true,否则返回false。
3) 写一个测试类进行相关测试(要求可以打印对象的信息,能够比较对象是否"相等")。
效果:
3. 假设现在需要对员工进行建模,员工包含3个属性:工号、姓名、工资。经理也是员工,
除了含有员工的属性外,另外还有一个奖金属性。请使用继承的思想设计出员工类和经
理类。要求类中提供必要的方法进行属性访问。
4. 用面向对象编程的思想,设计一个猜拳游戏,完成人机猜拳互动游戏的开发。
功能:
1) 选取对战角色
2) 猜拳
3) 记录分数
效果图:
提示:
先思考这个程序中一共涉及到多少个类,需要创建多少个对象。
5. 为某音像店开发一个迷你DVD管理器,实现DVD碟片的管理,包括如下功能:新增DVD、
查看DVD、删除DVD、借出DVD、归还DVD。(后台使用数组来存放DVD对象。默认最多
存放100个)
设计:
1) DVD类(属性:id ,name ,lendCount,lendDate,status)(默认每张DVD都是唯一的)
lendCount字段每借一次加1
2) DVDDB类(提供一个动态数组来保存多张DVD)
3) DVDManager类(提供操纵功能),添加DVD、查看DVD、删除DVD、借出DVD、归还
DVD、DVD排行榜(按借出次数降序排序),退出系统
效果图:
多态
1. 张三可以开关家里的任何电器,比如电灯、电视、电扇等。使用继承和多态来实现开关
电器的方法。
2. 学校中心配备一台打印机(可以是黑白打印机,也可以是彩色打印机)。中心可以通过
打印机打印学员的个人信息(张三和李四等)。通过继承和多态来设计这个程序,使程
序具有更好的扩展性和维护性。
3. 模拟一个军队作战,军队里面有各种兵,骑兵,步兵等等。每种兵的攻击敌人方式不一
样。建立各种各样的兵,至少3种,然后建立一个军官,军官也会上场去攻击敌人,但是
军官还有一种行为,就是发号,军官发号了,无论什么兵都去战场攻击敌人,也可以指
定哪种兵去攻击敌人。最后程序运行效果就是一个军官开始发号,然后所有被指定的士
兵包括军官都去打仗,显示每个人攻击敌人的方式。
4. 用Java程序完成以下场景:
有一个主人(Master类),他养了两只宠物(Pet类),一只宠物是狗(Dog类),
名字叫“旺财”,另一只宠物是猫(Cat类),名字叫“小花”,现在有两种食物(Food
类),分别是骨头(Bone)和鱼(Fish)。主人分别给两只宠物喂食物,两只宠物厌食,
狗只吃骨头(如果主人为够吃别的食物,就显示“狗不吃某某食物”);猫只吃鱼(如果
主人为猫吃别的食物,就显示“猫不吃某某食物”)
提示:
1) 程序结构如下
2) main方法代码如下
3) 程序运行结果如下
抽象类和接口
1. 通过抽象类定义车类的模版,定义一个抽象方法run(),然后通过抽象的车类来派生拖
拉机(Tractor)、卡车(Truck)、小轿车(Saloon),并且有各自的run()方法实现。
2. 编写一个程序,要求:
1) 定义一个Student类(属性:学号、名字、成绩),通过实现comparable接口让它
具有比较大小的能力(通过成绩来比较)
2) 定义一个Student数组stus,生成5个Student对象,存入stus中
3) 定义一个StudentTest类,通过调用Arrays工具类中的sort方法来对stus中的
元素进行排序。
3. 编写一个程序,模拟以下场景:
现有一块电脑主板,其主板本身已经集成了网卡和声卡功能,但是为了满足市场的需求,
主板上提供了3个PCI接口,提供给用户后期扩展功能使用。用户可以在PCI接口上插
上各种PCI设备,例如可以支持千M网速的独立网卡、HIFI音质的独立声卡、检测专
用的检测卡等。
4. 使用策略模式的设计方式来实现对数组的排序,提供两种具体的实施策略,冒泡排序法
和选择排序法。
5. 使用策略模式的设计方式来实现两个数的操作获得相应的结果。提供四种具体的实施策
略,加、减、乘、除操作。
6. 需求:
1) 定义点类(二维,即包含x,y坐标) Point
2) 定义一个图形类Figure(抽象类):包含抽象方法画图(onDraw)
3) 定义一个三角形继承于图形类,
属性:三个点
方法:设置点,获取点等相关方法以及重写的画图方法
PS:画图方法中要求打印出画出的是一个什么图形和各个点坐标
4) 定义一个圆形类,和三角形要求一致
5) 定义一个画家类Painter
方法:画画:可以画出一个图形
6) 写一个测试类,测试画家画画,画一个三角形,一个圆形