一起来看看大道至简的一些基本设计思想,首先我们来看一下什么是封装。

封装:也叫做信息隐藏,或者数据访问保护。放到程序上来讲,就是隐藏类的属性,还有实现细节,仅对外公开一些接口。那么外部,就只能通过这个类暴露的这些访问接口,按照这个类提供的方式来访问类的内部信息或者数据。这样子的一种情况就叫做封装。

作为做Java的我们来讲,封装,我们是非常非常熟悉的,因为一开始学Java,学面向对象,就会讲封装、继承和多态。

接下来,我们就来谈一谈,到底面向对象当中封装的本质是什么。其实从字面意义上理解封装,就是把什么东西包装起来,进一步说就是一个封装体。事实上大家想,面向对象当中,类是不是就是一个封装体?

大家想想,类里面封装的什么呢?无外乎就是一些属性,就是一些数据,然后是方法,其实可以代表它的功能。

也就说一个类,它就是封装了一定功能的这么一个封装体

当然,封装并不仅仅只是对一个类而言,你可以扩大一点,以此类推,从设计的角度来看:一个组件是不是一个封装?只不过它封装的,不再是属性、方法,它里头封装的就是一个一个的,其它组件或者模块,或者是类。

以此类推,组件是一个封装体,那模块是不是一个封装体? 子系统是不是一个封装体?系统是不是还是一个封装体?

只是范围大小不同而已,所以大家会发现,封装是咱们做架构设计一个非常非常基础的、非常重要的思想。

咱们再从另外一个角度来看一看,类,它其实是代码功能的一个封装,或者说是一个聚合方式。

没有面向对象之前,咱们叫做面向过程设计,或者叫过程化设计。大家可以理解成是这样,这里面有一堆的代码,我们称之为函数,或者说是一些过程。

在过程化设计里面,这些功能都是比较散乱的堆放在一起,也就说每一个功能只管自己,跟其它功能没有什么联系。但后来大家觉得,这样子去摆放代码非常的不友好。要想找一个功能,尤其是带流程的,那就在里头跳来跳去,非常的乱。

大家就想到一个办法:把相关的一些功能,比方说发现这里的功能是相关的,都是用来做,比方说用户数据的管理。我们就可以把这个东西封装起来,然后就演化成,可以用一个类来封装这些东西,就开始面向对象设计了。

这些功能都是相关的,都是用户这个对象应该要实现的功能,也就说从代码的角度,也能够感觉得到,面向对象设计实际上就是把原来这些过程化设计当中,杂乱无章的这些函数或者是功能,按照一定的方式重新进行组织,把它们封装到一起。所以说呢,从某种意上说,类是代码的一种聚合方式。

咱们一个完整的软件系统,就是由大大小小的,各种不同的这种封装体聚合起来的。就好比说一个大的软件系统,又分成了很多的子系统,这个子系统其实也是一种封装。

这个子系统又包含另外的子系统,每个子系统里面可能有很多的模块或者是组件,这些组件里面又有很多具体的功能,也就是它封装的是一定的功能。 这不就是大大小小的封装,最终合起来就是你的这个系统。

所以说大家要从架构设计的眼光来看待这些问题。你看一个大的软件系统不就是大大小小的各种各样的封装体吗?至于这里头到底封装的是什么。这个东西就看你怎么划分了,直到最后落实到具体的功能上。

从设计上来讲,到底封装什么呢?对于每一个封装体来说,主要就是为了把核心业务部分,或者是核心功能部分封装起来。那么这么封装起来有什么样的好处呢?也就是为什么要封装呢?

大家想想,当你把这些核心功能封装起来过后,首先对核心功能是一个安全保护。另外呢,也是为了复用这些核心的功能,除了这些呢,把这包装起来的目的,是为了可修改,可维护,可扩展。

有些人说,怎么还会可修改可维护呢?很简单,你把这些功能封装在这个,比方说椭圆里面封装了一堆的功能,事实上,这内部的功能和外部是不是就分开了?你封装的这些功能是不是就可以单独的进行修改,进行维护,并且进行扩展。

只要对外提供的接口不发生变化,那你封装起来的这一块,是不是就可以随便改了。所以说呢,从某种意义上来说,也是封装了变化。

当你觉得这一块以后可能会变,就可以把这块先包装起来,那么以后的变化,就可以在封装体内来实现,而不会影响到外部。当然这个了,跟咱们接下去要讲的一个思想:隔离,是息息相关的,或者是有类似之处的。总之呢,大家会发现封装对我们来讲,是一个非常非常重要的思想,我们一定要重视对他的理解。

为了大家更好的交流架构设计的思想和知识,大家可以加sishuok,拉你进架构设计群,一起共同学习,共同进步。

大道至简的架构设计思想之:封装(C系架构设计法,sishuok)的更多相关文章

  1. 大道至简---软件工程实践者的思想------------java伪代码形式读后感第一章

    import.java.大道至简.*; 1.编程的精义----愚公移山 /* 原始需求的产生:惩山北之塞,出入之迂 项目沟通的基本方式:聚室而谋曰 项目的目标:毕力平险,指通豫南,达于汉阴 技术方案: ...

  2. 读<大道至简>--软件工程实践者的思想有感

    初闻其名,<大道至简>,大多人都会觉得这是一本满腹人生哲理的书籍,作者洋洋洒洒的谈论大道理,其实不然,作者以古典文化为引,以作者的所思所想为线,启蒙了我作为一个软件工程初学者的实践思想. ...

  3. Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第27篇. 本篇文章我们先来 ...

  4. FPGA设计思想与技巧(转载)

    题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢.这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一 ...

  5. FPGA/CPLD设计思想与技巧

    本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作.串并转换.流水线操作.数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作 ...

  6. 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记

    1.前言: 异常.本该是多么优雅的东西,然而,得全靠自己在零散的信息中汇集. 学习笔记保持更新. 2.教材(参考资料) 其他 ①受检异常与非受检异常:https://www.cnblogs.com/j ...

  7. Python学习笔记之 Python设计思想&设计原则

    Python设计思想&设计原则 设计思想 1.封装 数据角度 多种数据合为一种数据 优势:代码可读性高            将数据与行为相关联 例如:电脑(内存,储存空间,...) 行为角度 ...

  8. java设计模式--基础思想总结--抽象类与架构设计思想

    抽象类?这个东西我感觉没什么卵用啊,又不能拿来new对象,没有具体的对象的抽象类,有什么实际的意义呢?这是很多刚刚接触java抽象类语法时的第一反应(当然,包括我).确实,很多刚刚接触抽象类这个概念的 ...

  9. CSS组件架构的设计思想

    不管是设计思想,还是架构,都可以总结为一个词:AO模式.A表示Append,即“附加”的意思,O表示Overwrite,即“重写”的意思.所有的CSS组件都是沿用这种思想来设计的.这也是CSS的特性, ...

  10. 从一般分布式设计看HDFS设计思想与架构

     要想深入学习HDFS就要先了解其设计思想和架构,这样才能继续深入使用HDFS或者深入研究源代码.懂得了"所以然"才能在实际使用中灵活运用.快速解决遇到的问题.下面这篇博文我们就先 ...

随机推荐

  1. 发送http2请求

    有时服务器会检测http协议版本,有http/1.1和h2,requests发送的是http1.1的请求 # pip install httpx client = httpx.Client(http2 ...

  2. vue-cli3打包时vue-cli-service build怎么分不同环境(npm run build:stage和npm run build:prod)

  3. windows7系统中安装deepin系统虚拟机

    在windows系统中安装虚拟机首先需要在widows上下载并安装虚拟机创建工具VMware.这里用的工具版本是 VMware-workstation-full-9.0.2-1031769_www.s ...

  4. java中String类型的相关知识的简单总结

    java中String类型的相关知识总结 一.常用方法: 1.构造方法: byte数组 可指定offset和length 可指定charset char数组 可指定offset和count 字符序列 ...

  5. python之路 57 linux 基础 命令与执行效果

    虚拟环境的安装与配置 1.VMware软件安装 这里有一个15版本和一个16版本的 链接:https://pan.baidu.com/s/1vkNxxQ6NS9q7XYJ6qiVMaQ 提取码:t3l ...

  6. [LeetCode]至少是其他数字两倍的最大数

    题目 代码 class Solution { public: int dominantIndex(vector<int>& nums) { vector<int> so ...

  7. [C#]简单的理解委托和事件

    委托 在C++中可以利用"函数指针"将对方法的引用作为实参传递给另一个方法,而C#中可以利用委托提供相同的功能. 委托-内部机制 但是委托实际上是一个特殊的类.委托必须直接或间接的 ...

  8. HHKB Programming Contest 2022 Winter(AtCoder Beginner Contest 282)

    前言 好久没有打 AtCoder 了.有点手生.只拿到了 \(\operatorname{rk}1510\),应该上不了多少分. 只切了 \(\texttt{A,B,C,D}\) 四题. A - Ge ...

  9. 单例 pickle模块

    今日内容 单例模式实现的多种方式 方式一: class C1: __instance = None def __init__(self,name,age): self.name = name self ...

  10. 刷题笔记——2758.打印ASCII码 & 2759.打印字符

    题目 2758.打印ASCII码 2759.打印字符 代码 while True: try: a = input() print(ord(a)) except: break while True: t ...