赞
踩
面向对象编程(OOP)是一种程序设计思想,相比面向过程编程,它具有封装、继承、多态等特性,可以更好地抽象化复杂问题,并提高代码的复用性与维护性。
在鸿蒙HarmonyOS系统开发中,C++作为主要编程语言,同样贯彻了面向对象的设计理念。正确运用各种面向对象技术,能够建立灵活稳定的系统架构,构建易维护、易扩展的应用程序。
类是对一群具有相同属性和行为的对象的抽象,类似与生活中对一类事物的归纳。例如我们可以定义“人”这个类,用于描述人的共性。
而对象则是类的具体实例,即根据类创建的一个具体存在,例如具体某一个人。对象包含了两部分:
代码示例:
- class Person {
- // Attribute
- string name_;
- int age_;
-
- // Method
- void Introduce() {
- //...
- }
- }
-
- // Create Object
- Person p1;
- p1.name_ = "Lee";
- p1.Introduce();
可见面向对象可以通过类与对象映射抽象概念与具体事物,非常直观。后面几章将详细解释其核心机制与好处。
封装是面向对象编程的一大特性,是指将对象的属性和方法封装在类的内部,在类的外部无法直接访问。
这里我们可以类比于“胶囊”,外部调用者只能通过类提供的公共接口与“胶囊”内部交互,而不必关心内部的具体实现逻辑。
代码示例:
- class BankAccount {
- private:
- string password_; // 私有成员
- public:
- void setPassword(string pwd) { // 公共接口
- password_ = pwd;
- }
- };
-
- BankAccount account;
- account.setPassword("123456"); // 调用公共接口
这种机制的好处在于:
综上所述,封装有助于构建稳定、安全的系统。
继承实现了代码的重用,允许新的子类继承父类的属性和方法。
我们仍以类比的方式,假设父类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++";
通过这种关系,子类获得父类数据和接口的同时,还可以扩展个性化特征,复用性强。
多态指一个引用变量在不同时刻可以引用不同类的对象,调用同一个函数可以产生不同的执行效果,能够产生更灵活变化的对象组合。
这是继承的进一步应用,代码示例如下:
- 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接口,调用者可以灵活复用不同子类对象,无需关心具体类型。
智能指针能够自动管理对象内存,避免复杂的手动释放内存操作。
shared_ptr通过引用计数实现共享对象:
- shared_ptr<Obj> ptr1(new Obj());
- shared_ptr<Obj> ptr2 = ptr1; // 引用计数+1
-
- ptr1.reset(); // 引用计数-1
- ptr2.reset(); // 引用计数-1,自动删除Obj
Weak_ptr则实现了弱引用,不增加引用计数。
智能指针大规模应用后,内存问题明显减少,运行更加可靠。
设计模式是面向对象开发中成熟的架构解决方案,使用设计模式可以有效提高代码的扩展性和维护性。
以工厂模式为例,它将对象创建的过程封装起来,客户端无需关心如何实例化对象:
- 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();
灵活性更强,新增类型无需修改原代码。
此外,单例、适配器、观察者等模式也广泛运用。合理应用各种设计模式,可以构建更优秀的应用程序。
在鸿蒙OS面向对象开发中,还需要注意如下最佳实践:
养成良好的编程习惯很重要,既能提高效率,也有助于团队协作。
面向对象技术是现代程序设计的主流思想,在鸿蒙开发中有着广泛的运用。
本文主要介绍了类与对象、封装、继承、多态等面向对象的核心概念,通过大量直观示例加深了理解。此外,设计模式、最佳实践等内容也有助于掌握面向对象编程的精髓。
面向对象编程技术能够带来高效的软件开发过程、良好的系统扩展性以及可维护性。希望本文能够成为鸿蒙OS应用开发者理解和运用面向对象技术的指导。
有不对的地方,欢迎大家评论区指正讨论
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。