基于Scala的梦想清单管理实训:从类定义到功能实现

54 阅读3分钟

导入

在面向对象编程中,类的继承和方法重写是核心概念之一,它们不仅能提升代码的复用性,还能增强程序的扩展性。本文将以一个实际的“梦想清单管理”实训项目为例,演示如何通过Scala语言中的case class、可变集合和排序操作来实现一个简单的任务管理系统。通过该项目,我们将理解继承的基本思想在实际编码中的应用,并掌握集合操作的基本方法。

一、继承的概念和基本语法

定义

继承是面向对象编程中的一个重要特性,允许一个类(子类)基于另一个类(父类)来构建,从而复用父类的属性和方法。

好处

  • 提高代码复用性
  • 增强程序的可扩展性
  • 便于代码的维护和管理

语法

在Scala中,继承使用extends关键字:

class 子类 extends 父类 {
    // 子类特有属性和方法
}

二、继承的好处之复用代码

示例

假设我们有一个基础的“任务”类,所有特定类型的任务(如梦想清单)都可以继承自它,从而共享基础属性和方法。

代码说明

通过继承,我们可以减少重复代码,让程序结构更清晰。

继承的特点

  • 子类拥有父类的非私有属性和方法
  • 支持方法重写(override)
  • 支持多态性

三、继承的方法重写

格式

在子类中使用override关键字重写父类的方法。

示例

如果父类有一个display方法,子类可以重写它以提供不同的行为。

代码说明

方法重写允许子类根据自身需求调整父类行为,增强灵活性。

四、实训内容:梦想清单管理

任务背景

实现一个简单的梦想清单管理程序,支持添加、修改、排序和输出梦想项。

功能点概述

  1. 使用case class定义梦想项
  2. 可变集合存储梦想项
  3. 实现状态修改、优先级调整、排序和筛选功能
  4. 控制台输出格式化展示

案例:梦想清单管理实现

题目

Snipaste_2025-12-09_11-00-52.png

代码

package 实训内容

import scala.collection.mutable.ArrayBuffer

object daydream {
  case class DreamItem(content: String, var isDone: Boolean, deadline: String, var prior: Int)

  def main(args: Array[String]): Unit = {
    val dreamList = ArrayBuffer(
      DreamItem("学习Scala", false, "2026-09-01", 1),
      DreamItem("旅行计划", false, "2026-12-30", 2),
      DreamItem("健身减重5公斤", false, "2026-07-10", 3)
    )

    dreamList(1).isDone = true
    dreamList(2).prior += 1

    val sortedByPrior = dreamList.sortBy(-_.prior)
    val top5Dreams = sortedByPrior.take(5)

    println("梦想清单:")
    top5Dreams.foreach(ele => {
      println(s"内容:${ele.content} | 状态:${if (ele.isDone) "已实现" else "未实现"} | 截止日期:${ele.deadline} | 优先级:${ele.prior}")
    })
  }
}

结果展示

11.png

代码分析

  1. DreamItem定义:使用case class简化类的定义,支持模式匹配和默认toString等方法。
  2. 可变集合ArrayBuffer提供动态增删能力,适合清单类应用。
  3. 状态与优先级修改:直接通过索引访问并修改可变属性。
  4. 排序逻辑sortBy(-_.prior)实现按优先级降序排列。
  5. 输出格式化:通过字符串插值和三元表达式增强可读性。

总结

通过本次实训,我们不仅实践了Scala中case class、可变集合和排序操作的使用,也体会到了面向对象中继承与封装思想在实际项目中的应用。这种从定义到实现、从结构到功能的完整流程,有助于我们更好地理解如何将编程基础转化为实际可运行的系统。