HarmonyOS6.0之OOP入门:用“蛋糕模具”讲透类与对象,新手也能秒懂!

73 阅读8分钟

大家好,我是Feri,13年+开发老兵,带过团队创过业,深耕嵌入式、鸿蒙、AI和Java,专注帮程序员少走弯路!

在鸿蒙开发中,很多新手会陷入“代码堆一堆,改时泪两行”的困境——其实只要用好面向对象编程(OOP),把数据和逻辑“打包”起来,代码就能变整洁、好维护。

今天就用最生活化的例子,带你吃透OOP的核心:类与对象,搭配鸿蒙实战场景,趣味拉满,君志所向,一往无前!

一、先搞懂:OOP的核心就是“少重复、好管理”

面向对象编程哪有那么玄乎?本质就是把现实世界的“东西”,搬进代码里变成“对象”,再用“类”做模板批量生产——核心目的就两个: ✅ 减少重复代码:比如多个用户的信息结构一样,不用写多套代码; ✅ 让代码更规整:数据(比如用户账号)和功能(比如登录)绑在一起,找的时候一眼就能看到。

在鸿蒙开发里,不管是做记账App、学生管理工具,还是复杂的智能家居控制,OOP都能帮你把杂乱的逻辑理清楚,后续改需求、加功能也不用“牵一发而动全身”。

二、类与对象:像“蛋糕模具”和“成品蛋糕”一样好理解

很多人分不清“类”和“对象”,其实用一个生活例子就能秒懂:

  • = 蛋糕模具:定义了蛋糕的“统一标准”——比如都是圆形、有3层、能加奶油(对应类的属性和功能);
  • 对象 = 成品蛋糕:用模具做出来的具体蛋糕,每个都有自己的口味(比如草莓味、巧克力味)、装饰(对应对象的独立属性值),但都能实现“被吃掉”的功能(对应类的方法)。

在鸿蒙开发中:

  • 比如做记账App,“账单类”就是模具——定义了所有账单都要有“金额、时间、消费类型”这些属性,以及“添加、删除、统计”这些功能;
  • 你今天花20元买奶茶的账单、明天花100元吃火锅的账单,就是“账单类”的两个对象——各自有独立的金额、时间,但都能调用“添加到账本”的功能。

三、类的语法:3部分搞定“万能模板”

一个完整的类,就像一个“装备齐全的模具”,包含3个核心部分:属性(字段)、构造函数、方法(函数) ,用ArkTS(鸿蒙主力语言)写起来超简单,咱们用“学生类”做例子,逐部分拆解:

3.1 属性(字段):对象的“专属装备”

属性就是类里存储数据的变量,比如学生的学号、姓名、年龄——相当于蛋糕模具上的“凹槽”,决定了成品蛋糕能有哪些“特征”。

语法:属性名: 数据类型 = 初始值;(鸿蒙用强类型,必须指定数据类型)

示例:

export class Student {
  // 学号(字符串类型,初始为空)
  studentNo: string = '';
  // 姓名(字符串类型,初始为空)
  name: string = '';
  // 年龄(数字类型,初始为0)
  age: number = 0;
  // 性别(字符串类型,初始为"未知")
  gender: string = '未知';
}

3.2 构造函数:对象的“出生说明书”

构造函数是用来“创建对象”的特殊方法——相当于用模具做蛋糕时,往模具里加原料(比如面粉、鸡蛋)的步骤,能在对象创建时,直接给属性赋初始值,不用后续再一个个设置。

语法:constructor(参数名: 数据类型, ...) { this.属性名 = 参数名; }

示例:给学生类加构造函数,创建学生时直接传入学号、姓名等信息:

export class Student {
  studentNo: string = '';
  name: string = '';
  age: number = 0;
  gender: string = '未知';

  // 构造函数:创建对象时必须传入这4个参数
  constructor(studentNo: string, name: string, age: number, gender: string) {
    this.studentNo = studentNo; // 把传入的学号赋值给类的studentNo属性
    this.name = name;           // 把传入的姓名赋值给name属性
    this.age = age;             // 把传入的年龄赋值给age属性
    this.gender = gender;       // 把传入的性别赋值给gender属性
  }
}

💡 小技巧:如果没写构造函数,系统会自动给一个“无参构造函数”,创建对象时再手动给属性赋值也可以~

3.3 方法(函数):对象的“专属技能”

方法是类里封装的功能,比如学生能“学习”、能“展示自己的信息”——相当于蛋糕能“被吃掉”、能“被装饰”,是对象能执行的操作。

语法:方法名(参数名: 数据类型, ...): 返回值类型 { 功能代码; }

示例:给学生类加两个方法,学习和展示信息:

export class Student {
  studentNo: string = '';
  name: string = '';
  age: number = 0;
  gender: string = '未知';

  constructor(studentNo: string, name: string, age: number, gender: string) {
    this.studentNo = studentNo;
    this.name = name;
    this.age = age;
    this.gender = gender;
  }

  // 学习方法:无参数、无返回值,打印一句话
  study(subject: string) {
    console.log(`${this.name} 正在疯狂学习 ${subject}!真的没有摸鱼哦~`);
  }

  // 展示信息方法:无参数、返回字符串,返回学生的完整信息
  getStudentInfo(): string {
    return `学号:${this.studentNo},姓名:${this.name},年龄:${this.age}岁,性别:${this.gender}`;
  }
}

完整类模板:直接复制能用

把上面三部分整合,一个标准的鸿蒙类模板长这样,直接套就行:

export class 类名 {
  // 1. 属性(字段)
  属性1: 数据类型 = 初始值;
  属性2: 数据类型 = 初始值;
  ...

  // 2. 构造函数(可选)
  constructor(参数1: 数据类型, 参数2: 数据类型, ...) {
    this.属性1 = 参数1;
    this.属性2 = 参数2;
    ...
  }

  // 3. 方法(可选)
  方法1(参数1: 数据类型, ...): 返回值类型 {
    功能代码;
  }

  方法2(参数1: 数据类型, ...): 返回值类型 {
    功能代码;
  }
  ...
}

四、类的使用:3步搞定“创建对象+调用功能”

定义好类之后,用起来超简单,就像“拿模具做蛋糕+用蛋糕做事情”,分3步:

4.1 第一步:导入类(把模具拿到手)

在需要使用类的文件里,用import导入定义好的类,路径要写对(比如类在model/Student.ts里):

// 导入Student类,路径根据自己的项目结构调整
import { Student } from '../model/Student';

4.2 第二步:创建对象(用模具做蛋糕)

new关键字调用构造函数,创建类的实例(对象),就像用模具做出具体的蛋糕:

// 创建一个学生对象:学号001、姓名"小明"、年龄18、性别"男"
const xiaoMing: Student = new Student('001', '小明', 18, '男');

4.3 第三步:调用属性和方法(用蛋糕做事)

通过“对象名.属性名”访问/修改属性,“对象名.方法名()”调用方法,就像给蛋糕加装饰、吃蛋糕:

// 1. 修改属性:小明年龄长了1岁
xiaoMing.age = 19;

// 2. 调用方法:让小明学习鸿蒙开发
xiaoMing.study('HarmonyOS开发');

// 3. 调用方法:获取小明的完整信息并打印
const xiaoMingInfo = xiaoMing.getStudentInfo();
console.log('小明的信息:', xiaoMingInfo);

鸿蒙实战:在页面中使用类(学生信息录入)

结合鸿蒙UI组件,做一个简单的学生信息录入页面,完整代码示例:

import { Student } from '../model/Student';

@Entry
@Component
struct StudentManagerPage {
  @State message: string = '学生信息管理';
  // 定义学生对象(用无参构造函数创建)
  @State currentStudent: Student = new Student('', '', 0, '未知');

  build() {
    Column() {
      Text(this.message)
        .fontSize(24)
        .fontWeight(700)
        .margin(20);

      // 录入学号
      Row({ space: 10 }) {
        Text('学号:')
          .fontSize(16);
        TextInput({ placeholder: '请输入学号' })
          .type(InputType.Number)
          .width('80%')
          .onChange(value => {
            // 实时更新对象的学号属性
            this.currentStudent.studentNo = value;
          });
      }
      .margin(10);

      // 录入姓名
      Row({ space: 10 }) {
        Text('姓名:')
          .fontSize(16);
        TextInput({ placeholder: '请输入姓名' })
          .width('80%')
          .onChange(value => {
            // 实时更新对象的姓名属性
            this.currentStudent.name = value;
          });
      }
      .margin(10);

      // 查看学生信息按钮
      Button('查看学生信息')
        .width('80%')
        .margin(20)
        .onClick(() => {
          // 调用对象的方法,获取信息并打印
          const studentInfo = this.currentStudent.getStudentInfo();
          console.log('当前学生信息:', studentInfo);
          // 调用学习方法
          this.currentStudent.study('ArkTS编程');
        });
    }
    .height('100%')
    .width('100%')
    .padding(20);
  }
}

运行之后,输入学号和姓名,点击按钮就能在控制台看到学生信息和学习日志,是不是很直观?

五、鸿蒙开发中的实际应用场景:不止是学生类

类与对象在鸿蒙里的用法太多了,举两个高频场景,你一看就懂:

场景1:记账App(账单类)

// 定义账单类
export class Bill {
  id: string = '';       // 账单ID
  amount: number = 0;    // 金额
  time: string = '';     // 消费时间
  type: string = '';     // 消费类型(比如餐饮、交通)

  constructor(id: string, amount: number, time: string, type: string) {
    this.id = id;
    this.amount = amount;
    this.time = time;
    this.type = type;
  }

  // 添加账单到本地存储
  saveBill() {
    // 调用鸿蒙本地存储API,保存账单数据
    console.log(`账单${this.id}已保存:${this.amount}元,${this.type}`);
  }

  // 统计本月该类型的总消费
  static getTotalByType(bills: Bill[], type: string): number {
    return bills.filter(bill => bill.type === type).reduce((sum, bill) => sum + bill.amount, 0);
  }
}

使用时,每次添加账单就创建一个Bill对象,调用saveBill()保存,统计时调用静态方法getTotalByType(),逻辑清晰又好维护。

场景2:智能家居控制(设备类)

// 定义智能灯类
export class SmartLight {
  deviceId: string = '';  // 设备ID
  name: string = '';      // 设备名称(比如客厅灯)
  isOn: boolean = false;  // 是否开启

  constructor(deviceId: string, name: string) {
    this.deviceId = deviceId;
    this.name = name;
  }

  // 开灯
  turnOn() {
    this.isOn = true;
    console.log(`${this.name}已开启`);
  }

  // 关灯
  turnOff() {
    this.isOn = false;
    console.log(`${this.name}已关闭`);
  }
}

创建多个SmartLight对象(客厅灯、卧室灯),分别调用turnOn()turnOff(),就能实现多设备控制,这就是鸿蒙智能家居App的核心逻辑之一!

六、总结:类与对象的核心要点(记住3句话)

  1. 类是“模板”,定义属性和方法;对象是“成品”,是类的具体实例;
  2. 用构造函数创建对象,用“对象名.属性”“对象名.方法()”操作对象;
  3. 鸿蒙开发中,用类封装数据和逻辑,能让代码更整洁、易复用,后续改需求不用乱翻代码。

如果大家想考取鸿蒙开发者认证的,欢迎加入我的专属考试链接中:developer.huawei.com/consumer/cn…

类与对象是面向对象编程的基础,掌握之后,后续学习继承、多态这些高级特性会轻松很多。

我一直觉得:编程不是死记语法,而是把现实逻辑翻译成代码——类与对象,就是最直观的“翻译工具”。