实验要求 3
实验指导文档:面向对象设计实验
一、实验目的
本实验通过构建一个虚拟宠物领养与管理系统,逐步引导学生掌握 Python 中面向对象编程(OOP)的核心概念与实践方法,提升面向复杂问题进行结构化建模与程序设计的能力。
二、实验环境
- Python 3.8+
- 推荐开发环境:Jupyter Notebook / VS Code
- 外部库视情况而定
三、实验背景与任务场景描述
在现实生活中,许多宠物领养平台、虚拟宠物应用或游戏都需要对不同种类的宠物进行管理、交互和展示。这类系统通常涉及多个对象之间的复杂关系,如宠物、主人、行为、状态、家族等。这为面向对象编程(OOP)提供了极具实践价值的建模场景。本实验以“虚拟宠物领养系统”为核心场景,需要设计一个模拟真实应用逻辑的对象系统,要求通过自定义类、组织类关系、封装行为与状态,从零构建一个具备如下功能的简易虚拟宠物应用:
- 宠物基础信息管理:支持创建多个宠物,记录其基本身份(名字、编号、年龄)
- 宠物行为模拟:支持喂食、成长、发声等行为,反映对象的状态变化
- 多类型宠物扩展:支持猫、狗、鸟等不同种类宠物,通过继承实现行为多样性
- 主人-宠物关系建模:支持主人对象管理多个宠物,体现类之间的组合关系
- 宠物配对与繁育系统:实现宠物之间的配对繁殖与家族追踪逻辑,通过运算符重载提升对象操作的自然性
四、实验步骤
1. 领养一只宠物
目的:
- 理解如何定义类与创建对象
任务要求:
- 创建一个 Pet 类,具有以下属性:
- 名字(name)
- 年龄(age)
- 宠物编号(pet_id,由类变量递增生成)
- 要求:创建 1 个 Pet 对象并输出它们的基本信息
输出内容:
- 输出宠物对象的编号、名字与年龄
2. 宠物的行为与成长
目的:
- 掌握方法定义与状态更新的封装
任务要求:
- 在 Pet 类中添加以下方法:
- speak():返回默认叫声如 "我是一只宠物,我的名字是xxx,我今年xxx岁"
- grow():年龄加一
- feed(food):打印"xxx 吃了 food",并记录喂食历史
- 要求:创建1个新的Pet对象并调用grow()方法,输出宠物的成长后年龄,调用feed()方法,输出喂食记录列表
输出内容:
- 宠物的成长后年龄
- 喂食历史列表
3. 多种宠物类型(继承与多态)
目的:
- 实现继承结构与方法重写
任务要求:
- 创建三个子类:Cat、Dog、Bird,均继承 Pet
- 重写 speak() 方法:
- Cat:"喵喵,我的名字是xxx,我今年xxx岁"
- Dog:"汪汪,我的名字是xxx,我今年xxx岁"
- Bird:"叽叽,我的名字是xxx,我今年xxx岁"
- 为 Bird 类增加属性:can_fly(布尔值),添加方法 is_flyable(),返回True/False
- 要求:创建三个子类对象,调用 speak() 方法,输出不同宠物的叫声,调用 is_flyable() 方法,输出飞行动物的飞行能力判断
输出内容:
- 不同宠物的叫声
- 飞行动物的飞行能力判断
4. 宠物之家(类的组合设计)
目的:
- 实现多个类之间的组合关系与统一管理
任务要求:
- 创创建一个 Owner 类,具有以下属性与方法:
- 姓名(name)
- 宠物列表(pets,初始为空)
- 方法 adopt(pet):添加宠物
- 方法 list_pets():打印所有宠物信息
- 要求:创建一个 Owner 对象,调用 adopt() 方法,添加三个不同类型的宠物,调用 list_pets() 方法,输出所有宠物信息
输出内容:
- 主人名字与宠物清单(类型+名字+编号)
5. 宠物配对系统(高级封装)
目的:
- 掌握特殊方法(如 add)与对象关系建模
任务要求:
- 在 Pet 类中定义 add() 方法,实现两个宠物配对生成新宠物:
- 新宠物继承父母的类型
- 名字为 parent1.name + parent2.name 的组合
- 年龄为0
- 每个宠物记录其"父母"信息,可追踪祖先家族树
- 实现 str() 方法打印宠物的完整信息(包括父母)
- 要求:创建两个不同类型的宠物,调用 add() 方法生成新的宠物,输出新宠物信息,调用 str() 方法,输出新宠物的完整信息
输出内容:
- 新生成宠物的基本信息与家族来源
- 一个主人通过配对新生出的宠物树结构
五、实验提交内容
请将以下文件打包提交:
- 所有
.py实验代码文件(可附在报告后面) - 所有实验步骤中要求输出的内容(可附在报告对应位置中)
- 实验报告(使用模板填写)
六、注意事项
- 实验报告参考报告模板撰写,并将word格式的报告发到老师邮箱:zongchang@zust.edu.cn(报告文件名格式:姓名_学号_报告3)