软件工程2021:第2次作业—— 谈谈鸿蒙操作系统

一、概述鸿蒙操作系统

  • 开发背景

            ①华为被美国政府制裁,导致其硬件的供应链受到限制、芯片被断供、软件方面等被美国控制着。在2019年5月,谷歌禁止华为使用谷歌的移动服务GMS,种种逼迫下,华为的对策便是打造自主研发的鸿蒙操作系统;

             ②5G物联网时代的到来对操作系统提出了新的要求;

             ③网络安全威胁呈现多元化、复杂化、频发高发趋势,需要一个足够安全的系统进行保障。

  • 需求

            ①5G物联网时代的到来;

            ②让消费者根据自己的需要,组装不同的硬件,调用不同设备的能力;

            ③AIoT场景天然要求多设备智能协同,需要一个适用于各类型机器的操作系统;

  • 开发历史

 

                 

 

 

  • 应该场景

           ①智慧屏(可联控智能家居,实现智慧双投、魔法闪投、魔法控屏等);

     ②智能座舱(鸿蒙OS智能座舱搭载有一芯多屏、多用户并发、运行时确定性保障、分布式外设、车载网络等多种应用,提供差异化启动恢复、极速启动、多用户切换、声场控制、多部件协同等功能。);

     ③智能家电(美的家用智能蒸烤箱S5mini,该智能蒸箱搭载了华为鸿蒙系统,可以快速完成配网。配网成功后,手机会自动跳转到鸿蒙系统内置的轻量化产品页面,用户可在页面中获取跟产品搭配的定制食谱,根据菜谱准备食材,即可一键启动机器、机器自动烹饪。);

 

     ④智能手机、平板等;

  • 发展趋势 

      ①随着越来越多鸿蒙OS生态产品的推出,HarmonyOS Connect硬件生态产品“朋友圈”正逐步扩大,并且随着各行各业越来越多的商家的加入,鸿蒙生态能力与体验将会呈几何级数爆发。

     ②华为鸿蒙OS系统应用于智能手机、平板、车机等,5G基站、数据中心、工业互联网等领域也在加快建设。

     ③就用户升级数量来看,短短三个月的时间,目前鸿蒙OS的用户数已经突破了7000w人,照如此情况发展,九月底升级用户破亿不是问题。

 

二、关于鸿蒙是否套壳的争议   

  • 什么是创新

    作为一款承载着“国产替代”梦的国产软件系统,鸿蒙系统由4000多名研发人员耗时十年研发,如同盘古开天辟地破鸿蒙一般,不仅打破了国外操作系统长期垄断市场的局面,还开创一个属于鸿蒙的万物互联新时代。浙江大学管理学院创新创业与战略学副教授吴东认为,与其说是“套壳”,不如说是“二次创新”。美国产业经济学家James M. Utterback在创新动态过程理论中指出,一个新兴产业的建立初期,称为产业流动阶段,大量企业涌入,新产品设计多样,竞争非常激烈,但随着竞争活动的持续,到一定阶段后,产业中“主导设计”开始涌现,并推动产业逐步走向成熟。吴东认为,鸿蒙系统底层技术创新的更大目标是抓住新一轮技术范式兴起的机会窗口,抢占物联网操作系统的主导设计,这才是创新。只有在充满不确定性与多样性的产业新兴阶段,后来者才有致胜的机会。我们也坚信,鸿蒙系统正以“超越追赶”的战略努力穿越技术周期,成为真正能够引领全球未来产业发展的创新领导者。

  • 代码复用与创新的关系

   所谓的“代码复用”,我们要清楚何为开源代码,它们是那些源代码或源设计可以被大众适用、修改发行的软件或设计体。与其说是“套壳”,不如说是“二次创新”。开源代码有点类似于大众的烹饪食材,烹饪步骤与技巧方法已经公之于众了,那所选择的代码也是众所周知的,类比,鸿蒙OS没有必要为了彰显独特性再去研发类似的代码。鸿蒙OS的部分代码基于ASOP不假,但是华为有权使用ASOP的代码。在ASOP这个项目里,任何机构和企业都有义务为开源社区贡献代码,也能够使用和下载开源代码,并基于开源项目做二次开发,所以ASOP的代码并不全是谷歌写的,华为也是ASOP的重要贡献者。除开这部分代码,鸿蒙OS也有一些自主研发的独特代码鸿蒙OS便是由这类代码和基于ASOP的开源代码所共同组成,所以这样的法并不存在抄袭、套壳一说。此前,华为曾在开发者大会上宣布将HarmonyOS代码捐赠给中国开放原子开源基金会,公布了鸿蒙OS的开源路线OpenHarmony。

   由此可见,适度的代码复用对创新的发展是乐观可见的,也是“二次创新”。

三、代码风格分析

(1)好的代码风格:

°代码示例:

 "...

 private:

 int m_epoller;               // epoller句柄

 pthread_mutex_t m_lock;      // 中间队列的锁
 pthread_cond_t m_cond;      // 条件变量锁
 sem_t m_sem;              // 主轮循等待线程处理的信号量

 Queue<EpollerEvent, EmptyLock>  m_queue;  // 中间的数据结构缓冲队列 

public:

Epoller();
~Epoller();
 
public:
/*
初始化epoller
queuesize : 初始化的时候我们的缓冲队列默认的大小
number    : 处理的数目
*/
bool init_epoller(size_t queuesize, size_t number);
/*
向epoller注册套接字需要监听事件

sock   :   指定的套接字

iMsg   :   注册到Epoller上的消息

pEvent :   指定的事件数据体
*/

..."

  • 分析:  缩进良好,格式正确,没有过多嵌套;

          必要的注释,让读者更易理解,通俗易懂;

          成员变量的初始化设置,public修饰类允许其他可访问这个函数;整体的代码模块化,层次分明。

(2)好的代码风格2:

°代码示例

"...

#include "foo/public/fooserver.h" // 优先位置
#include <sys/types.h>
#include <unistd.h>
#include <hash_map>
#include <vector>
#include "base/basictypes.h"
#include "base/commandlineflags.h"

..."

  • 分析:使用标准的头文件包含顺序可增强可读性,避免隐藏依赖,项目内头文件应按照项目源代码目录树结构排列。

(3)坏的代码风格1:

°代码示例

"...

public class x2{

   public static void main(String args[]){

     int 1bbbb=88;

                              }

          }

..."

  • 分析:    变量命名的首字母不能为数字;

           变量命名简短且能清楚的表明变量的作用,通常第一个单词的首字母小写,实际开发中,为了易于维护,尽量使用有意义变量名——见名知意。

(4)坏的代码风格2:

°代码示例

"...

public void doSomething(){

 

//构造参数(后无空格)

//调用二方服务(后无空格)

if(result.success && result.get

//执行一大段逻辑

}

}

..."

  •  分析:     if判断部分有点复杂,不太能懂;

          构造参数,调用二方服务,结构判断并执行一大段逻辑之前没有空行,看着很难受,不够清晰。

 

 

posted @ 2021-09-08 16:06  大数据192田欣  阅读(513)  评论(1编辑  收藏  举报