1 概述
软件和硬件的区别
- 软件的复制成本为0。软件要想方设法地复制,重复利用,以复用为核心。
复用的重要手段:抽象设计
- 软件屏蔽物理差异。
中间件的定义
- 处于系统软件(操作系统和网络软件)与应用软件之间
- 为程序提供程序时互操作的软件
互操作:互相操作
- 允许各应用软件之下所涉及的“系统结构、操作系统、通信协议、数据库和其它应用服务”各不相同
现代应用系统的基本特征
分布
任务已不只是在单机上运行,而是由网络中多台计算机上的相关应用共同协作完成,需考虑网络传输、数据安全、数据一致性、同步等诸多问题;
异构
计算机硬件、操作系统、网络协议、数据库系统以及开发工具种类繁多,需考虑数据表示、调用接口、处理方式等诸多问题;
cobol:跨平台性、异构型强;学习曲线比较陡峭
动态协作
参与协作的应用允许位置透明性、迁移透明性、负载平衡性等需求。
层层抽象 解耦(方法例子) 左右分块(上下分层) 面向接口的编程 高内聚 低耦合
层层抽象的原因:
·将复杂问题划分,降低复杂度
·符合抽象设计,把共性的部分提取出来
·迭代式分层
解耦:把多对多变成1对多
接口:定义模块交互的方式
组成部分
执行环境(Execution Environment)软件
如果一个网络的各个节点安装了EE软件,各节点的应用软件就可以实现相互合作
应用开发(Application Development)工具
一组工具,用来帮助开发内含“透明动用对方”成分的应用软件,或改造原有的无透明动用能力的应用软件
软件发展历程:单机→C/S→B/S→多层架构→云计算→边云协同→端管边云协同
中间件对于应用之间协同工作的贡献
提供了合作对象透明设施 T1
合作一方不必知道另一方是谁和在何处,只说明自己需要怎样的服务,T1就能为其物色一个合适的合作方
提供了下层设备透明设施T2
合作一方不必关心合作的另一方所用的节点设备(机器和操作系统)与本节点的差异
软件发展面临的挑战、发展的源动力
软件危机解决的出路
编程的自动化(程序代码的自动生成: 开发工具)
应用的框架代码由开发工具自动生成,程序员只需要编写功能代码;
实现程序的通用性 (操作系统与机器)
操作系统级的源程序;(一个程序要写多遍,多次编译链接);
与操作系统无关的源程序;(一个程序写一遍,基于操作系统和机器要进行多次编译链接);
与机器无关的源程序;(一个程序只要写一遍,编译链接一遍);
实现软件之间的互操作:
二进制级的软件互操作:同构软件的互操作,异构软件之间的互操作;
一个机器中,同进程内互操作;
同一机器中,不同进程间的互操作;
不同机器间的软件互操作;
软件开发的知识面
发展趋势的归纳
- 应用程序之间的整合受到愈来愈多的重视。
- Internet/Intranet,Web的影响非常深远;
- 百花齐放的软件技术和程序语言,没有考虑日后整合;
- 整合/集成要使用一种松耦合(loose coupled)构架并借助标准的沟通方式和数据来整合已有系统是必经之路。
- Web Service 提供了跨平台的能力,XML则是跨平台的数据交换标准。整合分散应用的最终选择是Web Services和XML.
web service基于http协议,http是网络上唯一能穿越广域网服务器防火墙的协议
- 整合应用系统须要自动化工具以及一个整体构架(SOA Service-oriented Architecture)——(开发工具和系统支持环境)。
开发≠写代码
我写的≠写代码
配置式的开发、编程式的开发
实现源程序的通用性
层层抽象,抽象提供通用性。
互操作的基本概念
互操作性定义:在一个由异质实体构成的网络环境中,当应用程序在网络结点上运行时,它可以透明地动用网络上其它结点上的资源,并借助于这些资源共同来完成某个或某组任务,这种能力被称为互操作性。
经纪人:
·程序接口
·配置文件接口
中间件特性
- 二进制级的互操作;
- 服务程序有多个客户;
- 客户和服务都会升级进化,无约束,可组合性;
- 对应用程序员,保持编程模式的不变性;
- 客户和服务之间的契约既要具有永恒性,又具有可延伸性;
J2EE平台(中间件)的意义:使得程序员把精力放在业务逻辑上
链路质量问题、安全问题
陈述的量、响应速度
互操作的范围
有三种形式:它们都要考虑服务程序的标识, 动态适配
同一进程内不同模块之间的互操作;
可以直接完成;
同一机器中不同进程之间的互操作;
要求进程之间通信,不用考虑Data encoding;
不同机器之间模块之间的互操作;
要求机器间通信,要考虑不同Data encoding之间的转换,因此须要中间翻译;还要事先约定传输协议;
从共享的角度
从传递的角度