软件工程2021:第2次作业—— 谈谈鸿蒙操作系统
一、概述鸿蒙操作系统
· 开发背景
2019年,美国政府禁止美国对华出口,谷歌也因此终止向华为授权GMS服务,而海外用户对谷歌GMS服务的依赖程度非常高,由此导致华为手机在海外市场销量大幅度下滑,为解决遇到的“卡脖子”挑战,同时顺应数字化新时代的发展背景,华为于2019年将鸿蒙OS推向台前,并于2020年发布可用于智能手机的鸿蒙OS 2.0版本。
·需求
人工智能的兴起,越来越多的智能设备进入人们的日常生活,多设备的智能协同需要一个适用于各类型机器的操作系统。鸿蒙OS的开发理念则是面向万物互联的全场景操作系统,即手机、电视、平板、汽车等终端只要搭载鸿蒙系统,软件在不同平台之间都可以适配,不再需要单独开发。打造鸿蒙也是为了解决所有硬件设备装载系统问题,一旦应用和软件实现无缝连接,开发者面对不同硬件、不同系统要开发不同应用的困难就会迎刃而解。鸿蒙OS的出现,使人们在IOS,安卓之外,有了“第三个选择”,在市场关系中,竞争者参与越多,越充分,市场的创新活力越强,生态机制则会更完善。
·开发历史
2012年,在华为专家座谈会上,任正非提出,华为要自研操作系统,哪怕几十年都用不上也一定要做。否则一旦操作系统“断粮”对华为就是数千亿美元的损失。
2017年,鸿蒙OS内核1.0完成技术验证,并逐步开展内核2.0研发。
2018年,鸿蒙内核2.0已被应用于终端TEE。
2019年,鸿蒙OS 1.0版本正式亮相,1.0版本基于开源框架,其关键模块均为自研,同时具备分布式架构、方舟编译器、确定时延引擎、TEE微内核形式化验证以及多终端开发IDE。
2020年,发布可用于智能手机的鸿蒙OS 2.0版本。
2021年,鸿蒙OS正式开启大规模商用。
·应用场景
鸿蒙操作系统可应用于智慧屏、可穿戴设备、PC、音响、机器人、工业应用、生活智能家电等。
·发展趋势
鸿蒙OS的发展潜力是立足于架构全域物联网服务体系的平台,是面向万物互联的全景操作系统,基于鸿蒙的开放体系,未来的鸿蒙应用,不仅仅是智能手机,而是整个物联网。鸿蒙OS希望通过将任意个单独设备连接成“超级终端”,提供流畅、安全的无缝衔接跨平台能力,让用户能够像使用一台设备一样任意调用“超级终端”内的设备与服务。而且随着鸿蒙生态产品的推出,越来越多的伙伴加入,使得鸿蒙生态能力与体验呈几何级数爆发。
二、关于鸿蒙是否套壳的争议
·什么是创新
创新指创立或创造新的。华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,就研发理念来说,其突破在于创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。基于物联网,华为鸿蒙创造新内核系统,其最主要的特点是全场景、分布式、微内核,能够为不同设备的智能化、互联和协同提供统一语言,带来简洁、流畅、连续安全可靠的全场景交互体验。鸿蒙系统通过各种智能终端设备的互联互通,突破了先前不同属性终端设备的“兼容性”难题。而它最大的创新变化在于微内核,这种创新,只有在万物互联的全场景下,才能切实体验到。而关于鸿蒙是ASOP套壳,这个说法是不正确的。ASOP是由谷歌主导的一个开源项目,通过ASOP可以编译出一个比较纯净的,可以用于智能设备的操作系统。另外使用ASOP的代码、兼容安卓应用是为了保证用户体验。在我看来,鸿蒙系统要远比安卓系统更加优秀,特别是在跨终端应用时,鸿蒙系统的优越性是安卓无法比拟的。
·代码复用与创新关系
代码复用是指将重复的代码提炼成可复用的代码。它的初衷是为了提高效率,节约重复开发的时间。ASOP是开源项目,意味着可以自由复用开源代码、贡献代码以及修复项目仓库,只要遵守开源协议,便可以在此基础上,开发自己的东西。虽说鸿蒙系统是基于ASOP开发的,但它还是有属于自己的独特代码的,鸿蒙OS是由这类代码和开源代码共同组成的。正如吴东副教授所认为的,这种行为相当于“二次创新”。鸿蒙系统在交互界面上没必要另起炉灶,“套壳”追随,开展“二次创新”是比较适宜的创新战略。而且创新指的是以现有的思维模式提出有别于常规或常人思路的见解导向,可见代码复用与创新并无直接关联。
三、代码风格分析
1.好的代码风格:
"···
Class Order{ public void printOrder(){ System.out.println("订单"); } } Class Goods{ public void printGoods(){ System.out.println("商品"); } } Class Points{ public void printPoints(){ System.out.println("积分"); } } }
···"
分析:该代码使用Class把代码划分开,使得各类按单一职责运行,避免了一个类做太多事造成的可读性和功能性下降,该代码读起来简单直接,可以直接明白其目的。
2.好的代码风格:
"···
# bad
def copy(a_list, b_list):
pass
# good
def copy(source, destination):
pass
···"
分析:代码不仅仅是写给机器执行的,也是给人阅读的,因此概念要有区分度,上述的代码就具有明确的区分,让人读起来不会很费解。
3.不好的代码风格:
"···
public class Test { private String name; private Vector<Order> orders = new Vector<Order>(); public void printOwing() { //print banner System.out.println("****************"); System.out.println("*****customer Owes *****"); System.out.println("****************"); //calculate totalAmount Enumeration env = orders.elements(); double totalAmount = 0.0; while (env.hasMoreElements()) { Order order = (Order) env.nextElement(); totalAmount += order.getAmout(); } //print details System.out.println("name:" + name); System.out.println("amount:" + totalAmount); ...... } }
···"
分析:该代码使用了长函数,使得其显得不够简洁明了,可读性大大降低,性能也得不到提高,不便于理解。