编程语言的本质
编程语言的实质
目的:计算机解决现实世界的问题。
编程过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系。
编程语言是一种“抽象”机制,问题是对“谁”来抽象。
分析,抽象(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 调用应用程序。
架构师使用框架保证架构的落地。
架构师使用工具提高开发效率。
评论