当前位置:   article > 正文

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

鸿蒙 c++

1. 概述

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

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

2. 类和对象

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

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

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

代码示例:

  1. class Person {
  2. // Attribute
  3. string name_;
  4. int age_;
  5. // Method
  6. void Introduce() {
  7. //...
  8. }
  9. }
  10. // Create Object
  11. Person p1;
  12. p1.name_ = "Lee";
  13. p1.Introduce();

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

3. 封装

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

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

代码示例:

  1. class BankAccount {
  2. private:
  3. string password_; // 私有成员
  4. public:
  5. void setPassword(string pwd) { // 公共接口
  6. password_ = pwd;
  7. }
  8. };
  9. BankAccount account;
  10. account.setPassword("123456"); // 调用公共接口

这种机制的好处在于:

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

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

4. 继承

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

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

  1. class Employee {
  2. public:
  3. string name_;
  4. float salary_;
  5. };
  6. class Programmer : public Employee {
  7. public:
  8. string language_;
  9. };
  10. // 程序员类自动获得name和salary属性
  11. Programmer p;
  12. p.language_ = "C++";

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

5. 多态

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

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

  1. class Shape {
  2. public:
  3. virtual void Draw() {
  4. //...
  5. }
  6. }
  7. class Circle : public Shape {
  8. public:
  9. void Draw() {
  10. // 绘制圆形
  11. }
  12. }
  13. class Rect : public Shape {
  14. public:
  15. void Draw() {
  16. // 绘制矩形
  17. }
  18. }
  19. // 多态效果
  20. Shape *s = new Circle();
  21. s->Draw(); //调用Circle::Draw,绘制圆形
  22. s = new Rect();
  23. s->Draw(); //调用Rect::Draw,绘制矩形

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

6. 智能指针

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

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

  1. shared_ptr<Obj> ptr1(new Obj());
  2. shared_ptr<Obj> ptr2 = ptr1; // 引用计数+1
  3. ptr1.reset(); // 引用计数-1
  4. ptr2.reset(); // 引用计数-1,自动删除Obj

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

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

7. 设计模式

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

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

  1. class Shape {
  2. public:
  3. virtual void Draw() = 0;
  4. };
  5. class ShapeFactory {
  6. public:
  7. static Shape* Create(string type) {
  8. if (type == "circle") {
  9. return new Circle();
  10. } else if (type == "rect"){
  11. return new Rect();
  12. }
  13. }
  14. };
  15. // 客户端调用
  16. Shape* s = ShapeFactory::Create("circle");
  17. s->Draw();

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

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

8. 最佳实践

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

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

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

9. 总结

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/235465
推荐阅读
相关标签
  

闽ICP备14008679号