软件工程2021:第2次作业—— 谈谈鸿蒙操作系统
一、概述鸿蒙操作系统
- 开发背景
为了打破国外操作系统霸占国产电子产品的局面,鸿蒙系统应运而生。
- 需求
鸿蒙OS发布于2019年,但是最早可以追溯到2012年,彼时任正非与华为2012实验室的专家座谈时提出,华为要自研操作系统做备份,哪怕几十年都用不上也一定要做。否则一旦操作系统“断粮”对华为就是数千亿美元的损失。华为根据实际情况,研发鸿蒙操作系统,满足不同用户的不同需求,打破对国外产品的过度依赖。
- 开发历史
- 应用场景
华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,可以运行在智能手机、智能扬声器、计算机、智能手表、无线耳塞、汽车与平板电脑上,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
- 发展趋势
华为的鸿蒙操作系统宣告问世,在全球引起反响。人们普遍相信,这款中国电信巨头打造的操作系统在技术上是先进的,并且具有逐渐建立起自己生态的成长力。它的诞生将拉开永久性改变操作系统全球格局的序幕。它不是要在安卓和IOS已经垄断的市场上分一杯羹,而是瞄准万物互联的更广阔市场。
二、关于鸿蒙是否套壳的争议
- 什么是创新
创新是指以现有的思维模式提出有别于常规或常人思路的见解为导向,利用现有的知识和物质,在特定的环境中,本着理想化需要或为满足社会需求,而改进或创造新的事物、方法、元素、路径、环境,并能获得一定有益效果的行为。以鸿蒙系统为例,它在以下方面有创新之处:分布式架构首次用于终端OS,实现跨终端无缝协同体验;确定时延引擎和高性能IPC技术实现系统天生流畅;基于微内核架构重塑终端设备可信安全。而有些言论认为鸿蒙是套皮安卓,其实不然,鸿蒙OS的部分代码基于ASOP,在可以兼容大部分安卓软件的基础上进行相关技术的创新,在不大量流失从前的安卓系统的用户基础上保证用户体验,推广自己的系统。
- 代码复用与创新的关系
代码复用可以降低软件开发成本、增加代码的可靠性并提高它们的一致性。以鸿蒙系统为例,鸿蒙系统基于ASOP这个开源项目进行二次开发,在保证了系统基本的稳定性的同时一定程度上能够降低开发难度,同时也保证了老安卓用户的使用体验。
三、代码风格分析
1.好的代码风格1:
代码:
1 Observer.prototype.update = function() { 2 const lastValue = this._lastValue; 3 const nextValue = this._get(); 4 const context = this._ctx; 5 const meta = this._meta; 6 7 if (nextValue !== lastValue || canObserve(nextValue)) { 8 this._fn.call(context, nextValue, lastValue, meta); 9 this._lastValue = nextValue; 10 } 11 };
分析:实现了数据更新时的脏检查(Dirty checking)机制。比较更新后的值和当前值,如果不同,那么就执行回调函数。如果值相同,那么再检查设置
的新值是否可以被观察,再决定到底要不要执行回调函数。同时在5、7两行之间空出一行,使代码块更加美观,方便后续检查。
2.好的代码风格2:
代码:
1 // vfs 接口实现 2 static const struct file_operations_vfs g_memDevOps = { 3 MemOpen, /* open */ 4 MemClose, /* close */ 5 MemRead, /* read */ 6 MemWrite, /* write */ 7 NULL, /* seek */ 8 NULL, /* ioctl */ 9 MemMap, /* mmap */ 10 #ifndef CONFIG_DISABLE_POLL 11 NULL, /* poll */ 12 #endif 13 NULL, /* unlink */ 14 };
分析:定义结构体时善用注释,可以在之后的编写中防止对所写代码功能的混淆,也方便多人团队协作的效率提高。
3.好的代码风格3:
代码:
1 if (!err) { 2 ss.read(new ArrayBuffer(4096), {}, function (err, buf, readLen) { 3 if (!err) { 4 console.log('readLen: ' + readLen) 5 console.log('data: ' + String.fromCharCode.apply(null, new Uint8Array(buf))) 6 } else { 7 console.log('Cannot read from the stream ' + err) 8 } 9 ss.close(function (err) { 10 console.log(`Stream is ${err ? 'not' : ''}closed`) 11 }); 12 }) 13 } else { 14 console.log('Cannot open the stream ' + err) 15 }
分析:嵌套使用if else语句时符合空格标准,代码块干净易懂,使用了驼峰命名法。