抽象之美——万物皆可设计
目录
前言
抽象的层次性
软件设计中的分层抽象
容器虚拟化技术,“抽象维纳空”
化繁为简,抽象思维让万物皆可设计
前言
美好的事物大家都喜欢,人是视觉动物,天生都倾向于看得见和摸得着的具象之美。蓝天白云、浩瀚星空、汪洋大海、崇山峻岭大自然从不吝啬,把它的美一览无余的展现在我们的眼前。人类在追求美的道路上也从不停歇,我们感叹大自然的鬼斧神工的同时,也在设计属于自己的美的艺术。
科学技术是人类的第一生产力,技术不光发展日新月异,也在变得越来越美。艺术源于生活,可以高于生活,技术的美同样也源自生活,甚至超越生活。“若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽。”——来自大卫*林奇的《钓大鱼:大卫*林奇的创意之道》,这句话把抽象和美丽展现的淋漓尽致。技术的美可以无限延伸,可以简洁无比,这一切都源自技术的抽象。技术的抽象之美到底在软件设计中是如何体现的呢?下面从我个人理解的角度与大家一起探讨一下技术的抽象之美!
还记得读的第一本有关编程的书籍中教会我们的是什么吗?没错,就是面向对象编程。面向对象编程中有四个基本特性分别是:封装 继承 多态 抽象,抽象思维是面向对象中一个很重要的思维,工程师们每天都要动用抽象思维,对问题进行分析、归纳、综合、判断、推理。从而抽象出各种概念,挖掘概念和概念之间的关系,设计出具体的软件模型,最后通过编程语言实现业务功能。我们面向某个问题通过抽象思维设计出模型,解决这个问题;回到问题最初产生的原因,试着跳出这个圈层,站在更高层次来分析问题;将会得到10个不同的模型,而这10个模型都可以解决这个问题;化繁为简,变抽象为具体,一个问题可以得到10个不同的答案,这就是技术的抽象之美!而具体实现软件设计和开发的编程语言里面同样存在着抽象之美。
还记得Java编程语言里面如何新建一个对象吗?没错,就是用new关键字,一个用Java语言编写的软件系统或应用里面,可以看到无数个对象,当我们需要某个功能的时候只需要new一个对象出来,或许我们仅仅只是想要得到该对象的某个属性或方法,回到实际业务需求本身,我们可以设计10个不同的对象来实现这个功能。再往更高一层,某个对象又可以抽象出多个不同的模型来,这就涉及到抽象的另一个话题:抽象的层次性。
抽象的层次性
穿越时光再一次回到大学第一节编程课堂,映射到面向对象编程,抽象狗就是抽象类(Abstract Class),代表了所有狗的抽象。抽象狗可以泛化成更多的狗,比如宠物狗、猎狗、狼狗、牧羊犬等,每一种狗都代表了一类(Class)狗,对于每一类狗,我们可以通过实例化,得到一头具体的狗实例(Instance)。
从这个简单的案例中,我们可以到抽象的三个特点:
1. 抽象是忽略细节的。抽象类是最抽象的,忽略的细节也最多,就像抽象狗,只是一个模型而已。在代码中,这种抽象可以是 Abstract Class,也可以是 Interface。
2. 抽象代表了共同性质。类(Class)代表了一组实例(Instance)的共同性质,抽象类(Abstract Class)代表了一组类的共同性质。对于我们上面的案例来说,这些共同性质就是抽象狗的那个模型。
3. 抽象具有层次性。抽象层次越高,内涵越小,外延越大,也就是说它的涵义越小,泛化能力越强。比如,狗就要比猎狗更抽象,因为它可以表达所有的狗,猎狗只是狗的一个种类(Class),再往上狗、猫、羊等都是动物,这时候动物的抽象层次更高一级了。
抽象的这种层次性,是除了抽象概念之外,另一个我们必须要深入理解的概念,因为小到一个方法要怎么写,大到一个系统要如何架构,以及系统与系统之间各个模块与模块之间,都离不开抽象层次的概念。
可以看到,抽象层次越高,内涵越小,外延越大,泛化能力越强。软件设计中,抽象的层次性给了工程师们可以发挥无限想象力和创造力的空间。
软件设计中的分层抽象
在软件设计里面都强调“高内聚低耦合”,我们所熟知和常用的23种设计模式中,抽象工厂模式(Abstract Factory)就是“低耦合”很具代表性的例子。抽象工厂模式以一个超级工厂创建其他工厂,它属于创建型模式。抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。
使用抽象工厂模式的系统普遍符合以下几个条件:
①一个系统不要求依赖产品实例如何被创建、组合和表达,也就是含有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
②这个系统有多个系列产品,而系统中只消费其中某一系列产品,也就是多个具体产品类都衍生自同一个接口或抽象类。
③系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现类
从上面这些条件不难看出,抽象工厂模式可以简单理解为:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。在面对复杂和抽象的业务时,运用这种分层抽象的设计模式,可以一步步把庞大又繁杂的整体支解为一系列具有同一特征的模块。说到庞大又繁杂的整体,我们站到软件设计的更高一层来分析抽象思维。大部分软件系统大致可以分为以下几个层面,“从内到外”依次是:
I存储数据的数据库层
II连接数据库与系统代码的数据持久层
III实现业务逻辑的代码层
IV系统间交互和通信的网络层
V部署和装载应用的服务层
VI展现给用户的界面和APP前端层
这些大的分层下面又抽象出了很多个小的分层,比如底层的数据库存储层,无论是在传统的单体架构时代还是在微服务分布式架构时代,到时下盛行的云原生时代,数据一直都是企业的核心,也必然是技术所关注的焦点。从数据的存储层面的抽象来讲,可以分为单库单表、分库多表、缓存中间件、以及云原生数据存储。根据业务量的大小以及场景,选择合适的数据存储方式显得尤为重要。可以想象当企业的业务发展到一定阶段,体量足够大的时候,原来技术无法再满足和支撑现有业务量的时候,就需要升级系统和技术。正如前阵子很多互联网大厂都在设计各自的数据中台。而数据中台的设计更是少不了抽象分层的应用。
1.数据汇聚
数据汇聚是数据中台数据接入的入口。所有数据来自于业务系统、日志、文件、网络等,这些数据分散在不同的网络环境和存储平台中,数据汇聚把各种异构网络、异构数据源的数据方便地采集到数据中台中进行集中存储,为后续的加工建模做准备。
2.数据开发
数据开发是一整套数据加工以及加工过程管控的工具,有经验的数据开发、算法建模人员利用数据加工模块提供的功能,可以快速把数据加工成对业务有价值的形式,提供给业务使用。
3.数据体系
有了数据汇聚、数据开发模块,中台已经具备传统数据仓库(后面简称:数仓)平台的基本能力。大数据时代,必须考虑数据的一致性和可复用性,垂直的、烟囱式的数据和数据服务的建设方式注定不能长久存在。按照贴源数据、统一数仓、标签数据、应用数据的标准统一建设更好。
4.数据资产管理
数据资产管理包括对数据资产目录、元数据、数据质量、数据血缘、数据生命周期等进行管理和展示,以一种更直观的方式展现企业的数据资产,提升企业的数据意识。
5.数据服务体系
数据服务体系就是把数据变为一种服务能力,通过数据服务让数据参与到业务,激活整个数据中台,数据服务体系是数据中台存在的价值所在。
6.运营体系和安全管理
通过前面的数据汇聚、数据开发、数据体系、数据资产管理、数据服务体系,已经完成了整个数据中台的搭建和建设。一个健康地、持续运营的数据中台还需要有一整套完善的运营体系和安全管理体系,这样的抽象分层设计才算是完整地和可持续健康运营的数据中台。
数据中台可谓是治理超大体量数据问题的杀手锏,越是复杂的问题越需要分层抽象,分层是分而治之,抽象是问题域的合理划分和概念语义的表达。不同层次提供不同的抽象,下层对上层隐藏实现细节,通过这种层次结构,我们在应对像网络通信、云计算、人工智能AI等超级复杂的问题时也能轻松自如。
容器虚拟化技术,“抽象维纳空”
在计算机科学中,虚拟化技术(Virtualization) 是一种资源管理优化技术,将计算机的各种物理资源(如:CPU、内存、磁盘网卡等 I/O 设备)进行抽象、转换,呈现出一个可以供分割和组合的一个或多个虚拟机计算机环境。近50年来的虚拟化技术原型和准则发展演进如下所示:
随着微服务的兴起,在过去的几年里,一种新的抽象方式席卷了整个行业,那就是容器,容器也是虚拟化技术的一种抽象形式。容器不是新技术,几年前 Docker 兴起的让更多的工程师和团队开始使用容器。你可以把容器看作是具有软边界的独立环境,其中包含你自己的应用程序以及运行它的软件依赖项。而实例(或 VM)虚拟化硬件,以便运行专门的操作系统,容器技术又可以虚拟化操作系统,这样你可以运行具有不同(通常是不兼容)软件依赖性的独立应用程序。
谈到容器和虚拟化技术,不得不提AWS的虚拟化技术, AWS 最具代表性的一款轻量级虚拟机 AWS Firecracker ,它的底层原理也是抽象分层的应用:
- 基于 VirtIO 的网络,磁盘和套接字驱动(virtio-net,virtio-blk,virtio-vsock),分别用于 MicroVM 的网络与磁盘 IO 访问,以及 MicroVM 上的 AF_VSOCK 套接字与宿主机的 AF_UNIX 套接字通信,从而实现 MicroVM 内运行的应用传递 vhost 内核代码到宿主机的通信
- 可编程的间隔计时器
- KVM 时钟
- 串口终端控制台(例如 /dev/ttyS0)
- 仅包含关机键的键盘
AWS基于虚拟化抽象分层技术的应用发布了一系列产品级的容器控制平面:AWS ECS、基于 Kubernetes 的新服务EKS(Amazon Elastic Container Service for Kubernetes)更有基于代码的抽象层AWS Lambda它允许工程师上传代码,而允许的环境和规则则可以交给AWS。
虚拟化技术从诞生到如今已经历经了近五十年,芯片硬件,虚拟化软件,操作系统厂商都在不断迭代自己技术,从而共同推动虚拟化技术的发展。近年来随着云计算的崛起,云厂商充分整合优化硬件、软件、系统三条线上独立发展的技术,在此基础上又结合业务需求进行了优化和剪裁,让大家已经看到了虚拟化的老树又开出了新花,AWS运用其先进的云平台和抽象化虚拟容器技术,给广大用户展现出了一个妙曼地“抽象维纳空”。
化繁为简,抽象思维让万物皆可设计
像AWS这样的高科技企业,一直走在技术发展的前沿,产品的足迹遍布了世界各地,用技术实力和产品完美的服务赢得了广大客户和技术团队的信赖及支持。
抽象的思维,抽象的应用无处不在,小到一行代码大到一个系统,再到今天普及的云计算云原生,人工智能AI,万物互联5G,技术已经渗透到我们生活的方方面面:商业体系 医疗医药 轨道交通 航天航空等。如果说一定要用一个词来形容枯燥和虚拟的技术的美的话,我想那一定是“抽象之美”。作为一名技术人员、IT工程师很重要的能力是抽象思维的能力。化繁为简,抽象思维让万物皆可设计!
抽象之美——万物皆可设计相关推荐
- 美的微晶冰箱#万物皆可微晶#开箱生活节,跨界玩转高端生活
美的微晶冰箱自2018年产品上市,就以首创的微晶一周鲜科技引领口感时代.近日,美的微晶冰箱与全球知名豪华汽车品牌MINI跨界联合,打造首个开箱生活节,正式启动原鲜口感开"箱"挑战, ...
- arduino 机器视觉编程_万物皆可仿真的MATLAB/Simulink神奇在哪?解析如何将其应用于一整套机器人设计开发流程...
MATLAB/Simulink:万物皆可仿真 MATLAB是由美国MathWorks公司出品的一款商业数学软件.它是一个多功能的科学计算平台,将算法开发.数据分析.矩阵计算等诸多强大功能集成在一个易于 ...
- 万物皆可做鞋服:阿迪达斯将菌菇丝、木纤维、海洋塑料和废旧鞋子变废为宝...
上海2022年4月22日 /美通社/ -- 在这个充满突破.变幻和不可思议的时代,一切皆有可能.但很多人是否知道菌菇丝.木纤维等天然材料.海洋塑料和废旧鞋子再循环后,也能摇身一变成为有颜又有料的日常穿 ...
- 培训师升华:万物皆着我之色彩
职业培训师在职业训练中,如何呈现自己的思想,在感悟生活和工作的同时,还能够给到学员以启迪?如何"点评"."点破"."点化",使学员不仅收获知 ...
- 【第18期】未来的计算世界里,将会是“万物皆流”?
导读:最近,笔者有幸受邀参加了由OSCHINA举办的<高手问答>活动.在第250期项目中,笔者有关实时流计算技术的一些问题与读者进行了互动.在一问一答的过程中,笔者发现大家对"流 ...
- 万物皆可embedding,AI 应用神器 Milvus 登顶数据库顶会 SIGMOD
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 AI 科技评论报道 编辑 | 陈大鑫 想象一下,一位计算神经科学家正 ...
- 万物皆可JOJO:这个GAN直接让马斯克不做人啦 !Demo在线可玩!
来源:量子位 这下真的是万物皆可JOJO化了! 本来就神采飞扬的马斯克,下一刻更是仿佛要直接"我不做人啦!" 世界名画蒙娜丽莎神秘优雅的微笑,似乎也变得JO灼了起来-- 再来个同一 ...
- 梅宏院士:软件定义的未来——万物皆可互联,一切均可编程 | CNCC 2017
作者:杨文 摘要:结合当下的人工智能热潮,梅宏教授认为我们正在进入一个软件定义的时代.软件定义的技术本质是把原先一体化的硬件设施打破,将基础硬件虚拟化并提供标准化的基本功能,然后通过管控软件,控制其基 ...
- Nature:万物皆可“编程”,结构材料也能实现数据存储,华人科学家一作
晗峰 发自 凹非寺 量子位 报道 | 公众号 QbitAI 最新的Nature研究向我们展示了,原来直接原来用力学的方法也能存储信息,这打破了机械装置和数字存储终端存在的界限. 熟悉计算机编程的朋友 ...
最新文章
- 在VM6.5正式版中安装ESX Server 3.5的办法
- python最新版本-Python 3.8 已发布 现在是切换至新版本的好时机吗?
- 你好,脂肪肝!来自22岁的大学生的体检报告
- .net集合类的研究--链表—ListDictionary,LinkedListT
- 【Spring源码分析】Bean加载流程概览
- SQL Server遍历表(临时表)
- 使用AJAX 按需求建立【一棵】树 Building Tree View on demand using AJAX【转载】
- 线序及模式配置Linux,[CCNA图文笔记]-1-水晶头线序及设备互联法则
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)
- Conflux人物志 | 柠檬树上柠檬果,柠檬树下他和他
- nbminer内核附加参数详解
- 如何把晨光计算机调成音乐模式,伴着晨光走向你——广播《晨光音乐行》栏目运作心得...
- C#体贴之处点滴 - extention method, lambda expression, anonymous method
- 最新有效的微视频号视频下载丨vx视频号视频怎么免费下载?
- Flutter一键自动生成并替换图标 Android iOS图标(
- 项目可行性研究报告详解
- GSM sim900a mini模块用法
- 字符串指针与字符串数组
- STM32F401RCT6基于Arduino框架点灯程序
- 夜神连接android studio超完整教程
热门文章
- vue 常用的 Echarts 示例
- C语言 基础数字输出左直角三角形
- 云计算和虚拟化的课程介绍
- 手把手带你玩转情人节网站推广
- httpclient+testng接口自动化框架二次封装Java
- 简述TCP的三次握手和四次挥手过程
- proxmox ve win7/windows7安装过程分享
- 误删除oracle目录,LINUX下误删除Oracle数据库恢复方法
- 关于我的木马没有上传莫名其妙的上线三台主机
- 微信小程序开发——消除Now you can provide attr `wx:key` for a `wx:for` to improve performance.