编程语言的本质

用户头像
张荣召
关注
发布于: 2020 年 09 月 27 日
  • 编程语言的实质



目的:计算机解决现实世界的问题。

编程过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系。

编程语言是一种“抽象”机制,问题是对“谁”来抽象。



             分析,抽象(OOA)          设计,抽象(OOD)

领域问题-------------------->模型<---------------------->软件系统

                                                     开发,实现(OOP)



比如:

现实中人与人之间的商务活动---------------> 电子商务(京东,天猫,淘宝)

现实中人需要查询资料--------------------->  搜索引擎(google,baidu)

现实中人与人之间的交互沟通---------------> 聊天工具(QQ,微信)



架构师思考问题要深度/高度:(不浮于表面,看到技术背后的本质)透过现象看本质

1.技术解决的本质问题是什么?

   设计原则,设计模式,领域驱动背后的本质是什么。

   spring framework各个模块解决的问题是什么。

   spring framework,spring boot,spring cloud解决的本质问题是什么。

   数据库中间件,缓存中间件,消息队列中间件解决的本质问题是什么。

   分层,分割,分布解决的问题是什么。



   spring 仅仅处在会用的层次,表面现象级的东西,抓不住事物的本质。跳出技术的表面,抓住技术背后的本质。多思考,不仅会用,能用,更应该知道背后的本质。架构师要深入的思考。



2.技术本身的关注点在哪里?



3.技术是怎么解决?(先猜想,再验证,如果和作者想法相同,英雄所见略同,如果不同,再看作者的思路)。



问题---------->技术------->如何解决的



面向对象的本质是什么? ---->更能真实的反映现实问题领域,更好的对问题领域抽象。

现实中某种问题---->(直接)抽象-------->二级抽象(面向对象oo)--->解决方案。

                            (可扩展性差)          oo设计原则提升可扩展性  

                              很难应对变化           快速适应变化



领域驱动设计(DDD),微服务,中台化

====>都是针对面向对象讨论

====>面向对象的本质是什么,解决的问题是什么,要达到的目标是什么



万物皆对象。(只关注问题领域的对象)

面向对象三要素:

No.1 封装性---隐藏实现:对象的封装,构建对象的边界。对象之间的依赖和调用进行交互,不能拥有对方的代码,不能侵入对方的对象里面去。

                      内部按照自己的意愿进行控制,

                      private,protected位于边界内部,public对外暴露。



No.2继承性---接口的重用:



No.3多态性---对象互换的魔法

                      子类实现父类或者接口中的抽象方法,程序使用抽象父类或者接口编程,运行期注入不同的子类,程序表现出不同的形态---多态。



面向对象编程不是使用面向对象的编程语言编程,而是利用多态特性进行编程。



面向对象分析的是客观世界,即编程的业务领域进行对象分析。

  • 充血模型和贫血模型

  • 领域驱动设计DDD

OOA:面向对象分析,将客观世界(业务领域对象)分析,抽象出业务领域中对象与与对象之间的关系,程序中实现对象,以完成程序设计和编程。

OOD:面向对象设计,使用设计原则(设计模式),对模型再次设计。

OOP:面向对象编程,使用面向对象的编程语言实现模型。

(注:模块拆解部分讲解)



面向对象设计的目的和原则:

OOD目的:强内聚,低耦合从而使系统 

                  易扩展 ---易于增加新的功能

                  更健壮 ---不容易被粗心的程序元破坏

                  可移植 ---能够在多样的环境下运行

                  更简单 ---容易理解,容易维护



设计原则:五大设计原则

设计模式:GoF23中设计模式



框架frameworks:实现某一类应用的结构性程序,是对某一类架构方案可复用的设计与实现。

不同领域框架:MFC,AWT,MyBatis,Spring,Tomcat



框架支撑系统整体结构,控制整个应用程序。框架调用代码,框架控制整体的程序运行结构,代码依附于框架。Tomcat,Spring。程序是孤立的,由框架来调用,最后来完成系统行为。



框架设计:是架构师基本能力之一。



超越应用,能够理解框架背后的规律,框架背后的设计方法,才能真正用好这些技术。

最重要的是开发出自己的框架,或者对现有框架进行扩展改进。基于框架的特点,使框架更加符合系统的应用场景。---------架构师工作主要的点,架构师必须做到这一点。



框架调用应用程序代码,应用程序代码调用工具。

比如:log4j日志工具。应用依赖日志工具,框架调用应用程序。

         Tomcat,Spring是框架,但是应用不调用Tomcat,Spring。而是反过来,  Tomcat,Spring调用应用程序。



架构师使用框架保证架构的落地。

架构师使用工具提高开发效率。



用户头像

张荣召

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
编程语言的本质