# 智能仓储管理系统——继承与多态实现分类货物管理 教学设计

| **课题** | **智能仓储管理系统——继承与多态实现分类货物管理** |
|---------|------------------------------------------|
| **课时** | 1课时(45分钟) |
| **教学目标** | **知识目标**:理解继承的概念、作用及语法,掌握基类与派生类的关系,了解多态的基本原理及其在项目中的应用价值。<br>**技能目标**:能够设计RefrigeratedGoods(冷藏货物)、HazardousGoods(危险品)等派生类继承自Goods基类,重写方法实现不同存储策略,完成项目的分类管理功能。<br>**素养目标**:培养代码复用与扩展意识,体会面向对象设计对复杂业务建模的适应性,养成灵活应对需求变化的设计思维。 |
| **教学重难点** | **重点**:继承语法(base关键字)、方法重写(override)、多态的概念与应用。<br>**难点**:理解基类引用指向派生类对象的多态机制,设计合理的类层次结构以适应项目需求。 |
| **教学资源准备** | 已完成Goods类的项目代码;Visual Studio开发环境;不同类型货物的业务需求文档;类图设计工具或PPT;教学课件。 |

**教学过程**

| 教学环节 | 教学内容 | 教师活动 | 学生活动 | 设计意图 |
|:---------|:---------|:---------|:---------|:---------|
| 1. **项目需求升级**<br>(5分钟) | 回顾Goods类的基本功能。提出新需求:仓库需管理冷藏货物(需温度监控)、危险品(需特殊标识),不同类型有不同存储要求。 | **需求展示**<br>展示三种货物类型的差异化需求表;**问题引导**<br>"如果为每种货物都写一个完全独立的类,会遇到什么问题?"(代码重复、难维护)。 | **需求分析**<br>阅读需求文档,对比不同货物的共性与差异;**讨论交流**<br>讨论重复开发的弊端,感受代码复用的需求。 | 通过项目需求的自然演进引出继承的必要性,让学生认识到继承是解决"有共性又有差异"问题的设计工具,而非孤立的语法知识。 |
| 2. **继承概念与语法**<br>(8分钟) | 讲解继承的核心概念:基类(父类)、派生类(子类)、代码复用、is-a关系。讲解继承语法和base关键字。 | **概念讲授**<br>用"生物分类"类比讲解继承关系;**语法演示**<br>在白板演示继承语法:`class RefrigeratedGoods : Goods`<br>讲解base关键字调用父类构造方法;**UML图示**<br>展示Goods作为基类,三种货物派生的类图结构。 | **聆听理解**<br>理解继承的"复用+扩展"本质;**记录要点**<br>记录继承语法和base用法;**分析类图**<br>理解类层次结构在项目中的意义。 | 通过类比和可视化类图帮助学生建立继承的概念模型,明确基类与派生类的职责划分,为代码实现做好认知准备。 |
| 3. **方法重写与多态**<br>(10分钟) | 讲解virtual和override关键字实现方法重写。演示多态:基类引用指向派生类对象,调用重写方法。 | **代码演示**<br>在Goods中添加virtual方法:<br>```csharp<br>public virtual string GetStorageInfo()<br>{<br>    return $"货物{Name}存储在常温区";<br>}<br>```<br>在RefrigeratedGoods中重写:<br>```csharp<br>public override string GetStorageInfo()<br>{<br>    return $"冷藏货物{Name}存储在冷库,需保持0-4℃";<br>}<br>```<br>演示多态调用:<br>```csharp<br>Goods g = new RefrigeratedGoods(...);<br>MessageBox.Show(g.GetStorageInfo()); // 调用子类方法<br>```<br>**关键点拨**<br>强调多态的运行时决定机制。 | **观察学习**<br>观察virtual/override的配合使用;**同步操作**<br>在项目中创建RefrigeratedGoods类并重写方法;**测试验证**<br>编写测试代码验证多态效果。 | 通过完整代码示例和运行结果展示,让学生直观理解多态的"同一接口,不同实现"特性,体会其在项目扩展中的灵活性。 |
| 4. **项目实践**<br>(17分钟) | 项目任务:设计并实现HazardousGoods类,添加危险等级属性,重写存储信息方法;在主窗体中实现分类管理,使用List<Goods>统一管理三种货物。 | **任务发布**<br>明确任务:设计危险品类、实现多态管理;**技术提示**<br>提示使用List<Goods>存储不同类型对象,遍历时利用多态调用各自的方法;**巡视指导**<br>解答学生在类设计、方法重写、集合遍历中的问题;**安全提醒**<br>如涉及硬件模拟显示,强调操作规范。 | **设计编码**<br>创建HazardousGoods类,添加DangerLevel属性,重写GetStorageInfo方法;**集成测试**<br>在主窗体创建三种类型对象,添加到统一集合,通过循环调用方法显示存储信息;**调试优化**<br>测试多态效果,调试代码逻辑。 | 以完整的分类管理功能开发驱动继承和多态的综合应用,让学生在实践中体会类层次设计的价值,完成项目复杂业务建模的核心环节。 |
| 5. **总结与反思**<br>(5分钟) | 总结继承与多态在项目中的应用,展示学生成果,引导反思面向对象设计思想。 | **成果展示**<br>选取优秀案例展示分类管理效果;**知识总结**<br>总结继承的三大优势(复用、扩展、多态),强调其在应对需求变化时的优势;**设计反思**<br>引导思考:"如果未来新增货物类型,需要修改多少代码?"(体会开闭原则)。 | **演示交流**<br>展示自己实现的多态管理功能;**归纳提炼**<br>总结继承在项目中解决的实际问题;**思考延伸**<br>思考面向对象设计的可扩展性。 | 通过成果展示和设计反思,帮助学生将具体技能上升为设计思想,认识到继承不仅是语法特性,更是应对复杂项目的设计策略。 |

**板书设计**

```
智能仓储管理系统 - 分类管理模块
继承体系设计
       Goods(基类)
          ├─ GetStorageInfo() [virtual]
          │
    ┌─────┴─────┬─────────┐
    │           │         │
RefrigeratedGoods  Goods  HazardousGoods
[冷藏:0-4℃]   [常温]   [危险等级]
└─ override    └─ base  └─ override

多态应用: List<Goods> 统一管理,调用时自动匹配
```

**教学成效与反思**

| | |
|:---|:---|
| **教学成效** | 结合"分类货物管理"这一项目阶段目标,约75%学生能够设计派生类并实现方法重写,成功运用多态机制在统一集合中管理不同类型货物。学生对继承的代码复用价值有了深刻认识,但对多态的运行时绑定机制理解仍需加强。通过完成本课时任务,项目的业务建模能力显著提升,为后续异常处理等功能打下扎实基础。 |
| **教学反思** | 本课时成功地将继承与多态融入到仓储系统分类管理的实际需求中,通过"需求升级-概念引入-代码实现-项目集成"的完整路径,让学生体会了面向对象设计的适应性优势。类图的使用对学生理解类层次帮助很大,但在实践环节发现,部分学生对virtual/override的配对关系容易遗漏,导致编译错误,反映出语法细节掌握不牢。建议在演示时制作virtual/override的对照表格,并在巡视指导时特别关注此类错误。另外,多态的运行时决定机制较为抽象,少数学生仍理解困难,后续可增加调试演示环节,通过断点跟踪让学生直观看到方法调用的动态过程。整体上,项目驱动的设计使抽象概念具象化,学生参与度和成就感较高。 |