Harmony 开发的艺术 面向对象

简介: Harmony 开发的艺术 面向对象

聊聊应用的开发范式

Harmony应用的主要开发范式,是采用了类似面向对象的范式。

struct 在java语言中表示结构体。

前端工程师可以将其看成是class即可

WT6VKZ3U]J_3C~6)9}S9A85.png

其实这个开发风格会给大部分的前端工程师不太适应的感觉。因为目前主流的前端开发框架,在开发组件*(一个应用由各种各样的组件组成)*的时候不管是React、还是Vue,都比较推崇函数式的写法。我们这里可以大概对比下类写法函数式写法开发应用的优劣。

函数式组件

优点

  1. 简洁性:函数式组件通常更简洁,因为它们只关注渲染逻辑,不处理状态或生命周期方法。
  2. 性能:函数式组件在更新时,其性能与类组件相当或更好
  3. 易于测试:由于没有类继承或复杂的生命周期方法,函数式组件通常更容易编写单元测试。
  4. 可组合性:Hooks和其他函数式编程特性使得函数式组件更加可组合和重用。
  5. 符合现代JavaScript趋势:随着JavaScript ES6+的普及,函数式编程和不可变数据等概念变得越来越流行。

劣势

  1. 状态管理:在React中,函数式组件本身不支持状态(state)。但是,通过useState Hook,可以在函数式组件中添加状态。
  2. 生命周期方法:在React中,函数式组件没有内置的生命周期方法。但是,可以使用useEffect Hook来模拟生命周期方法。
  3. 复杂性限制:当组件变得非常复杂,涉及多个状态、生命周期方法和复杂的逻辑时,函数式组件可能会变得难以管理。

类组件

优势

  1. 状态管理:类组件内置了状态(state)的概念,使得状态管理更加直观。
  2. 生命周期方法:类组件提供了丰富的生命周期方法,可以方便地处理组件的挂载、更新和卸载等过程。
  3. 继承:类组件支持继承,这使得创建可重用的组件逻辑变得更加容易。

劣势

  1. 复杂性:类组件通常需要处理更多的概念,如this关键字、构造函数、继承等,这可能会增加代码的复杂性。
  2. 性能:在React中,类组件通常比函数式组件在更新时性能稍差,因为React需要遍历整个组件树来确定哪些部分需要重新渲染
  3. 不符合现代JavaScript趋势:随着函数式编程的普及,类组件可能不再是现代前端开发的最佳实践。

以上对比来自AI工具。

但是对于普通的开发者来说,要考虑并不是用榔头搬砖还是用挖掘机搬砖,而是你目前的工作需要用到哪个,你都需要得心应手的上手开干。资本家可不会关心你搬砖的工具好用不好用。

聊聊ArtTs

早期纯前端开发者应该聊到面向对象、原型、this 那一堆关键字的时候应该都有个不好的会议。归根到底是早些时代,前端开发使用的是ES3 版本的 JavaScript,这个版本的JavaScript语言层面就没有支持面向对象的设计。并不像java这门语言天生就支持。

所以面向对象的三大特征(封装、继承、多态)在java语言中很容易实现的设计,搬到早期的JavaScript中,就变噩梦一样的存在。有不少还在入门阶段的小伙子在看到强行使用JavaScript的原型、this实现的面向对象设计,那是疯了的心都有了。

Harmony应用开发 采用的是ArtTs语言。 Typescript是JavaScript的超集、ArtTs是TypeScript的超集。也就是JavaScript爸爸的爸爸。所以在开发Harmony应用时,ArtTs是对前端工程师友好的,对后端工程师尤其是java工程师不友好。这个很有意思,因为安卓原生开发语言(java、Kotlin)是对java工程师友好的。 -- 评论区内可以对号入座一下。


虽然ArtTs是TypeScript的超集,但是也不是完全兼容。从TypeScript到ArkTS的适配规则

面向对象 OOP

接下来我们还是新人角度讲解Harmony应用中的面向对象的体现。

面向对象程序设计(OOP)的三大特性,指的是封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。

封装 Encapsulation

封装就像是一个“黑盒子”。在这个盒子里,你有一堆零件(变量和方法),但外界只能看到盒子上的几个小孔(公开的接口)。通过这些小孔,外界可以与盒子里的零件进行交互,但无法直接看到或修改盒子里的具体零件。

封装的主要目的是隐藏对象的内部细节,只暴露必要的接口给外界使用。这样可以保护数据不被随意修改,同时简化对象的使用。

举个例子:想象你有一个电视遥控器。你不需要知道遥控器内部是如何工作的,只需要知道如何按“开/关”、“音量+”和“音量-”等按钮即可。这些按钮就是遥控器的“接口”,而遥控器内部的电路和芯片则是被“封装”起来的。

{Y7TNHN3BOAEC7P@B%KBIZ1.png

上述左图,代码是散列分布的,而且也容易污染全局命名空间。因为可能存在多个eat功能

上述右图,代码是组合到了一个类中,是聚合在一起的。这样不同类中也可以有同样的eat方法,不冲突。这个就是简单的封装的理解了

继承 Inheritance

继承就像是一个孩子继承了父母的某些特性。在面向对象编程中,一个类(子类)可以继承另一个类(父类)的属性和方法。这样,子类就可以拥有父类的所有功能,同时还可以添加或覆盖自己的功能。

实现继承的目的是实现代码重用。通过继承,我们可以避免重复编写相同的代码,只需要在父类中定义一次,然后在子类中继承即可。

举个例子:假设你有一个“动物”类,它有一些基本的属性和方法(如“吃”和“睡”)。然后你可以创建一个“狗”类,它继承自“动物”类,并添加或覆盖一些特定的属性和方法(如“叫”和“摇尾巴”)。这样,“狗”类就既具有“动物”类的通用功能,又具有自己的特殊功能。

7BEL(06{9HZCB)`JI@V@K3Y.png

继承通过关键字extends来实现。 class 子类 extends 父类

如上图所述,现实中不管是 I人还是E人,都存在吃饭和跑路的功能。因此可以采用继承的方式来管理它们。如果后期要调整,也只需要调整父类内的一个部分即可,其他的子类自动跟着发生改变。

多态 Polymorphism

多态就是“多种形态”或“多种可能性”。在面向对象编程中,多态指的是不同的对象对同一消息做出不同的响应。具体来说,就是父类引用可以指向子类对象,并且当通过这个引用调用方法时,会调用实际对象(可能是子类对象)的方法。

实现多态的目的是提高代码的灵活性和可重用性。通过多态,我们可以使用父类引用来操作子类对象,而无需关心具体的子类类型。这使得代码更加灵活和易于扩展。

比如:想象你有一个“形状”类,它有一个“绘制”方法。然后你可以创建多个子类,如“圆形”、“矩形”和“三角形”,它们都继承自“形状”类并实现了自己的“绘制”方法。尽管每个对象的类型可能不同(圆形、矩形、三角形等),但由于它们都继承了“形状”类并实现了相同的“绘制”方法,因此你可以通过父类引用来统一调用它们的方法。这就是多态性的体现。


多态在代码中的具体体现可以视为变量多态 *(简称变态)*和 函数多态

变量多态:程序运行时需要的某种类型,你可以传递它的子类型来代替。

W8}7[HAI4Q2U2YRVB3AY6@H.png

函数多态:同一个函数,可以声明多次,只要它的参数个数、参数类型、返回值类型、随便一处不相同都可以同时存在。

@_IJK[6ZQMB{GIE(VRH(T0F.png

面向对象的难点

其实在实际编程中,面向对象技术的运用,很多小伙伴会感觉到陌生或者别扭。此时要给自己信心,确认下自己是哪个环节缺失,再去提高即可。

  • 基础语法不够熟悉,如class、extends、interface、function的基本用法等。
  • 业务锻炼的比较少,比如在实际开发中缺少这部分的经验、或者看别人的封装太少了,导致碰到类似场景无法反应过来
  • 缺少对业务的抽象能力,如没有看出某些业务和具体语法之间的联系,导致无法在实际应用中灵活使用。

对此,我给出一点学习建议。

将上述的三个部分能力作为一个需要持续投入精力提高的部分。如

  1. 看到好的资料, 花时间尽量去理解,实在不能看透了,先放着
  2. 当你感觉自己代码能力好像得到提高了,继续钻研这部分代码。
  3. 反复重复上述两个步骤。

HOE2EJ3RX0%1878HYUR517H.png

目录
相关文章
|
开发框架 API 开发者
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 二)
在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。
|
3月前
|
安全 编译器 Swift
探索iOS开发之旅:Swift编程语言的魅力与挑战
【9月更文挑战第5天】在iOS应用开发的广阔天地中,Swift作为苹果官方推荐的编程语言,以其简洁、高效和安全的特点,成为了开发者的新宠。本文将带领你领略Swift语言的独特魅力,同时探讨在实际开发过程中可能遇到的挑战,以及如何克服这些挑战,成为一名优秀的iOS开发者。
|
4月前
|
存储 移动开发 Swift
使用Swift进行iOS应用开发:探索现代移动开发的魅力
【8月更文挑战第12天】使用Swift进行iOS应用开发,不仅能够享受到Swift语言带来的简洁、快速、安全的编程体验,还能够充分利用iOS平台提供的丰富资源和强大功能。然而,iOS应用开发并非易事,需要开发者具备扎实的编程基础、丰富的实践经验和不断学习的精神。希望本文能够为您的iOS应用开发之旅提供一些有益的参考和帮助。
|
4月前
|
存储 开发者 Ruby
【揭秘Ruby高手秘籍】OOP编程精髓全解析:玩转类、继承与多态,成就编程大师之路!
【8月更文挑战第31天】面向对象编程(OOP)是通过“对象”来设计软件的编程范式。Ruby作为一种纯面向对象的语言,几乎所有事物都是对象。本文通过具体代码示例介绍了Ruby中OOP的核心概念,包括类与对象、继承、封装、多态及模块混合,展示了如何利用这些技术更好地组织和扩展代码。例如,通过定义类、继承关系及私有方法,可以创建具有特定行为的对象,并实现灵活的方法重写和功能扩展。掌握这些概念有助于提升代码质量和可维护性。
42 0
|
开发框架 前端开发 JavaScript
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 三)
页面和自定义组件生命周期 在开始之前,先明确自定义组件和页面的关系
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 三)
|
开发框架 前端开发 JavaScript
HarmonyOS学习路之方舟开发框架—基于ArkTS的声明式开发范式
基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建HarmonyOS应用UI所必需的能力
|
开发框架 前端开发 开发者
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)
如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器@Styles。
|
开发框架 开发者
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 四)
当创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引入了@BuilderParam装饰器,@BuilderParam用来装饰指向@Builder方法的变量,开发者可在初始化自定义组件时对此属性进行赋值,为自定义组件增加特定的功能。该装饰器用于声明任意UI描述的一个元素,类似slot占位符。
|
开发框架 JavaScript 开发者
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 一)
ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。
|
数据库 iOS开发 设计模式
iOS-《编写高质量代码》笔记-第七章 设计模式与Cocoa编程
建议45:设计模式是特定环境下的特定问题的解决方案 设计模式是某种特定设计的模板或指导原则。 建议46:MVC模式是一种复合或聚合模式 MVC 是一种高级别的模式,关注的是应用程序的全局架构,并根据各种对象在程序中发挥的作用对其进行分类。
1045 0

热门文章

最新文章