Skip to content

实验要求 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)