详细教程 - 进阶版 鸿蒙harmonyOS应用 第十五节——鸿蒙C++面向对象开发详解

1. 概述

        面向对象编程(OOP)是一种程序设计思想,相比面向过程编程,它具有封装、继承、多态等特性,可以更好地抽象化复杂问题,并提高代码的复用性与维护性。

        在鸿蒙HarmonyOS系统开发中,C++作为主要编程语言,同样贯彻了面向对象的设计理念。正确运用各种面向对象技术,能够建立灵活稳定的系统架构,构建易维护、易扩展的应用程序。

2. 类和对象

        类是对一群具有相同属性和行为的对象的抽象,类似与生活中对一类事物的归纳。例如我们可以定义“人”这个类,用于描述人的共性。

而对象则是类的具体实例,即根据类创建的一个具体存在,例如具体某一个人。对象包含了两部分:

  • 属性:对应类中的数据成员,描述状态信息
  • 方法:对应类中的成员函数,定义对象的行为功能

代码示例:

class Person {
  // Attribute
  string name_; 
  int age_;
  
  // Method 
  void Introduce() {
    //...
  }
}

// Create Object
Person p1; 
p1.name_ = "Lee";
p1.Introduce();

        可见面向对象可以通过类与对象映射抽象概念与具体事物,非常直观。后面几章将详细解释其核心机制与好处。

3. 封装

        封装是面向对象编程的一大特性,是指将对象的属性和方法封装在类的内部,在类的外部无法直接访问。

        这里我们可以类比于“胶囊”,外部调用者只能通过类提供的公共接口与“胶囊”内部交互,而不必关心内部的具体实现逻辑。

代码示例:

class BankAccount {
private:
  string password_; // 私有成员  
public:
  void setPassword(string pwd) { // 公共接口
    password_ = pwd;
  }
};

BankAccount account;
account.setPassword("123456"); // 调用公共接口

这种机制的好处在于:

  1. 隐藏实现细节,对调用者透明
  2. 可轻松更改内部实现而不影响外部调用
  3. 避免外部任意篡改对象内部状态

综上所述,封装有助于构建稳定、安全的系统。

4. 继承

        继承实现了代码的重用,允许新的子类继承父类的属性和方法。

        我们仍以类比的方式,假设父类Employee代表了“雇员”,子类Programmer代表“程序员”,显然Programmer也是Employee(雇员)的一种,所以可以让Programmer继承Employee的共性,而专注于编程能力的区分性。

class Employee {
public:
   string name_;
   float salary_;  
};

class Programmer : public Employee { 
public:
  string language_;
};  

// 程序员类自动获得name和salary属性
Programmer p; 
p.language_ = "C++";

通过这种关系,子类获得父类数据和接口的同时,还可以扩展个性化特征,复用性强。

5. 多态

        多态指一个引用变量在不同时刻可以引用不同类的对象,调用同一个函数可以产生不同的执行效果,能够产生更灵活变化的对象组合。

这是继承的进一步应用,代码示例如下:

class Shape {
public:
  virtual void Draw() {
    //...
  }
}

class Circle : public Shape {
public:  
  void Draw() {
    // 绘制圆形 
  }
}

class Rect : public Shape {
public:
   void Draw() {
     // 绘制矩形
   }
}

// 多态效果
Shape *s = new Circle(); 
s->Draw(); //调用Circle::Draw,绘制圆形

s = new Rect();
s->Draw(); //调用Rect::Draw,绘制矩形

可见通过统一的Shape接口,调用者可以灵活复用不同子类对象,无需关心具体类型。

6. 智能指针

智能指针能够自动管理对象内存,避免复杂的手动释放内存操作。

shared_ptr通过引用计数实现共享对象:

shared_ptr<Obj> ptr1(new Obj()); 
shared_ptr<Obj> ptr2 = ptr1; // 引用计数+1

ptr1.reset(); // 引用计数-1
ptr2.reset(); // 引用计数-1,自动删除Obj

Weak_ptr则实现了弱引用,不增加引用计数。

智能指针大规模应用后,内存问题明显减少,运行更加可靠。

7. 设计模式

        设计模式是面向对象开发中成熟的架构解决方案,使用设计模式可以有效提高代码的扩展性和维护性。

以工厂模式为例,它将对象创建的过程封装起来,客户端无需关心如何实例化对象:

class Shape {
public:
  virtual void Draw() = 0; 
};

class ShapeFactory {
public:
  static Shape* Create(string type) {
    if (type == "circle") {
      return new Circle();
    } else if (type == "rect"){
      return new Rect();
    }  
  }
};

// 客户端调用
Shape* s = ShapeFactory::Create("circle");
s->Draw();

灵活性更强,新增类型无需修改原代码。

        此外,单例、适配器、观察者等模式也广泛运用。合理应用各种设计模式,可以构建更优秀的应用程序。

8. 最佳实践

在鸿蒙OS面向对象开发中,还需要注意如下最佳实践:

  • 遵循统一的编程规范和风格
  • 尽量使用组合优于继承
  • 区分接口抽象类的适用场景
  • 加强泛型编程与参数化
  • 设计小而美的类,高内聚松耦合

养成良好的编程习惯很重要,既能提高效率,也有助于团队协作。

9. 总结

        面向对象技术是现代程序设计的主流思想,在鸿蒙开发中有着广泛的运用。

        本文主要介绍了类与对象、封装、继承、多态等面向对象的核心概念,通过大量直观示例加深了理解。此外,设计模式、最佳实践等内容也有助于掌握面向对象编程的精髓。

        面向对象编程技术能够带来高效的软件开发过程、良好的系统扩展性以及可维护性。希望本文能够成为鸿蒙OS应用开发者理解和运用面向对象技术的指导。

        有不对的地方,欢迎大家评论区指正讨论

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱蹦跶的大A阿

你的打赏就是我蹦跶的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值