* 数据流驱动
o 数据流驱动,基于模块输入输出架构,每周期定时调用所有模块
o 简单直观的编程,适合工业应用
o 对于复杂逻辑序列事件编程复杂而且调试困难
o 应用模型通常基于单线程分时,类似伪纤程,算法等价为为一棵定时器触发跟节点的执行树
o 对于IO使用轮询,中断一般有底层驱动或者操作系统服务处理
o 作为一般的应用情况,数据流驱动的程序可以是无限循环运行的
* 数据加算法
o 函数方式编程
o 实现代价换取最高的灵活性
o 作为冯诺依曼和图灵机体系下的工作计算机里面,可以实现任何编程模型
o 纯函数调用等价于一颗调用树(除了setrun,setlong run,jump等特殊接口)
o 大部分情况编译时确定执行树,也存在动态节点,可以通过函数指针和dll装载实现
* 面向对象
o 高阶编程模型,通常向下兼容函数式编程
o 以类和对象为基础通过方法(消息)交互,对象一般具有封装,继承,多态等特性
o 面向对象同时暗含了自指,元和衍生对象概念
o 衍生的编程概念包括事件处理
o 面向对象是更为高阶的设计模式的基础,包括用途,契约式设计,UML等
o 通常和运行环境和库紧密相关
6.2.2 动态对象复杂应用分析
* 操作系统管理进程
o 主要对象:操作系统和进程
o 操作系统负责创建销毁进程,调度进程,改变进程状态,内部维护有进程列表,指定/替换进程执行内容,但是不关心进程具体实现
o 进程通过系统调用和操作系统通信
o 进程通过父子关系,间接操作系统核心对象(管道,socket等等)和其他进程建立删除连接,并交换信息
* 网络服务守护任务
o 主要对象:守护进程和任务进程
o 守护进程接受客户请求,管理任务进程,包括创建,销毁,改变任务进程状态
o 任务进程通过特定接口对象和客户通信
o 任务间进程通常彼此独立
* 多窗口GUI应用
o 主要对象:窗口对象和消息循环
o 程序静态或者动态创建窗口对象,由操作系统负责加入消息循环来响应外部事件
o 窗口通过暴露接口变量和回调函数和后台应用逻辑通信
o 窗口可以动态建立和销毁,窗口控件之间不直接耦合,但是可以通过后台应用逻辑联合显示信息
* 插件链条管理
o 一个典型的插件链条是媒体播放,包括demux,stream decoding, stream playback构成
o 根据用户配置和媒体文件不同,每播放一个文件,这个链条重置并重新建立
o 主程序根据不同的输入配置载入合适的动态库,并在过程中连接这些动态库的输入输出构成链条
o 当播放停止时,链条被解构
6.2.3 程序模型升级更新分析
* 一般IT升级
o 部分升级和全部升级
+ 程序的动态加载库升级
+ 程序包的完全升级
o 在线升级和线下升级
+ 程序运行时部分或者全部部分升级,可能对正在运行的软件构成影响,一般工业产品软件环境简单可以使用
+ 通常的做法是后台下载整个程序包,被动等待或者主动进行重启,下次重新启动前进行升级
* 工业软件升级
o 升级过程从属于产品操作流程的一部分
o 一般过程是关闭机器,确认处于安全状态下,升级软件,重启工业控制器,软件运行正常后重新启动机器