- 论坛徽章:
- 0
|
稍微解释一下,这是我个人对于现有编程模型的一个简要概括,希望写出来给大家看看,并且期待一些意见反馈。
6.2 主流编程模型分析
6.2.1 现有模型
* 数据流驱动
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 一般过程是关闭机器,确认处于安全状态下,升级软件,重启工业控制器,软件运行正常后重新启动机器
6.2.4 模型比较
数据流 数据加算法 面向对象
执行树唯一 是 否 否
动态结构对象管理 否 是 是
程序无限循环 是 否 否
程序入口 第一个顺序执行的模块 指定函数名(main) 指定函数名(main)
6.3 现有编程开发过程
6.3.1 文本编程
* 开发更新过程
o 加入新的原代码文件,更新项目组织文件
o 编译运行调试
o 发布最终版本
* 版本系统协作
o 利用现有版本系统跟踪文本文件改变,进行比较合并
o 利用版本系统进行自动编译
6.3.2 图形编程
* 系统架构
o 纯图形编程
o 图形编程作为程序跨架,可以与模块共同工作
o 文本编程语言环境作为框架,图形模块编译嵌入框架
* 开发更新过程
o 加入新的模块,和现有系统模块连接
o 编译运行调试
o 发布最终版本,包括源代码和编译版本
* 版本系统协作
o 大系统分拆为组件,以组件文件级别进行更新
o 其修改无法直接比较,通过更改日志和文档进行说明,可控性由个人负责 |
|