产生式编程(Generative Programming)方法介绍

简介:

软件业对软件工程期望之高,涉及高度的复杂性,高效的生产效率和质量,以及便于有效地维护和改进。但是,当前的软件工程并不能满足这些目标,现在很多开发更像手工作坊的“一种一个”的解决方案,而不像一个成熟的工程,而模型驱动和产品线工程就是应对这些问题的方法。在模型驱动开发(MDD)介绍中介绍过现在存在多种模型驱动开发方法,而Generative Programming - Mehtods,Tools and Applications这本书主要介绍这个方法,我觉得该书的第一部分不错,提出了非常值得注意到领域工程和元程序设计,让我对产品线工程有更好的认识,所以本篇主要结合这本书来给大家介绍一下产生式编程这个方法。

  在软件中,向自动化制作软件的方向转变需要经历两个步骤:

  1. 把焦点从开发一个系统转移到开发一个系统族上来:开发出正确的共性组件
  2. 使实现组件的装配自动化:使用产生器达到自动化

  我感觉它可以作为产品线工程的一种软件工程方法,产生式编程就是设计实现组件,使之适应于通用产品线结构,同时对配置知识建模,强调如何把抽象的需求转变成特定的组件群,并且使用产生器实现配置知识,通过这些工作来解决前面说的高复杂性、高效率和高质量等问题。

产生式编程是什么?

  Generative Programming is a software engineering paradigm based on modeling  software  system  families  such  that,  given  a  particular  requirements specification, a highly customized and optimized intermediate or end-product can be automatically manufactured on demand from elementary, reusable implementation components by means ofconfigurations knowledge [CE00]. 

  • 产生式领域模型

  GP的目标集中于系统族,而不是一种一个的系统(one-of-a-kind system),它不是从头构造一个单独的系统族成员,而是基于一个通用的产生式领域模型。模型由三部分组成:

  1. 指定系统族成员(问题空间 problem space
  2. 组装出每一个成员的实现组件(解空间 solution space
  3. 在问题空间和解空间之间的配置知识映射关系(配置知识
  • 为重用而开发以及使用重用的开发

  框架和组件现在被认为是获取软件重用的最有效的技术,但不幸地是,没有一种OO的分析和设计方法来支持它们的开发。GP包含了两个重要的完整开 发循环:一个设计和实现一个产生式领域模型(为重用而开发);另一个是使用产生式模型制作具体的系统(使用重用的开发),这个其实在我之前的产品线系列blog中也介绍过。

  • 确定一个系统族范围

  为重用而进行的开发目标集中于系统族,它的第一步包括确定感兴趣的家族范围,就是说,决定应该包括哪个特征,不应该包括哪些特征。这就要求分析项目风险承担者和他们的目标、当前和潜在的市场、技术预测等等。

特征建模

  特征模型代表了领域工程对软件工程的重要贡献,并且对产生式程序设计来说是必须的。确定系统族范围的下一步就是确定家族成员的共同特征和差异特征,以及差异特征之间的依赖,也就是分析出产品的721。特征建模可以让我们以一种结构化的方式来记录分析的结果,支持可变性管理。它具有以下优点:

  1. 以明确的方式表示可变点(variation point)和它们之间的依赖性。这种表示提供了取得一个系统族的视线组件类别的基础,并提供了指定家族成员和配置知识的方法。
  2. 区分在一个家族成员内部和家族成员之间的差异
  3. 提供了一种与实现无关的表示差异性的方法,这使得可以在分析模型之外做出关于差异性机制的决策

领域工程是什么

  • 领域工程

1.        纵向领域(verticaldomain):根据系统类别而组织的领域。如预算软件、材料管理、合同管理、企业报表系统等。

2.        横向领域(horizontaldomain):根据软件部件的类别而组织的领域。比如数据关系计算引擎、报表引擎、工作流系统等。

3.        领域之间有3中类型的关系:

a)        包含:比如成本管理软件包含了材料管理系统

b)        使用:比如公司大部分软件都使用了报表引擎

c)        类似:领域之间侧重点不同,但有很多的相似性,通过深入研究一个领域,可以取得对另一个领域的更好理解。比如报表引擎中对于表达式解析和索引部分可能与数据关系计算引擎类似。

  • 应用工程

应用工程是基于领域工程的结果构建系统的过程。对一个新的具体应用做需求分析的时候是利用已有的领域模型,通过领域分析提供的各种通用功能、支持的 变量配置、提供的扩展等来描述客户需要。如果新的需求在领域模型中不存在,则可以定制,或者反馈到领域工程来扩充领域的支持范围。

基于领域工程的软件开发(基于MBSE97)

  • 领域分析
    •   目的
      • 选择和定义要解决的领域
      • 收集相关的领域信息,把它整合成一个一致的领域模型
    • 通常的领域分析活动
  • 领域设计
    • 目的:开发用于领域中系统族的一个架构,并设计一个制作计划。生产计划的实现可能需要编写开发人员指南、实现领域特定的语言和订购GUI、产生器和一个支持组件检索、鉴定、分发等结构的重用结构,并且建立应用程序的生产过程
  • 领域实现
    • 使用合适的技术来实现架构、组件和过程计划

主要开发步骤

  1. 领域范围界定
  2. 特征建模和概念建模
  3. 设计一个通用架构和识别实现组件
  4. 为”定制“系统指定领域规范意义
  5. 指定配置知识
  6. 实现那些实现组件
  7. 实现领域特定符号
  8. 使用产生器实现配置知识

书中提到的其他技术

GP还提供的其他一些技术,这些东西我有些看不懂,下面知识罗列一下备忘而已:

  • 动态库和可扩展编程环境
  • 元程序设计和产生器
  • 面向方面的变成
  • 泛型编程
  • 协同工作的产生器










 本文转自 jingen_zhou 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/403114,如需转载请自行联系原作者

相关文章
|
4月前
|
Java Windows
UGNX2512简体中文安装激活教程(附UGNX2512安装包下载)方法
UG NX2512正式发布:界面焕新暗黑风格,右上角标识更名“DC”,标题栏改为紫黑色;操作流畅度媲美NX2506。安装需管理员运行Setup,选中文/完整模块,注意路径无中文;关键步骤包括复制ProgramData至C盘、导入许可证、覆盖补丁文件。新增后处理配置器、NX真-MTS工件检测等优化功能。(239字)
7770 6
|
Linux
linux启动卡一会在random: nonblocking pool is initialized之前
linux启动卡一会在random: nonblocking pool is initialized之前
1252 1
|
人工智能
cdr2023绿色版一键安装下载CorelRAW2023
CDR全称是CorelRAW2023,它不同于Photoshop,PS是一款图片处理软件,而CDR是一款较为常用的矢量绘图设计软件,该软件给设计师提供了矢量动画、页面设计、网站制作、位图编辑和网页动画等多种功能,使用的比较多的版本是2022版的和X8版,不过呢我这里都有呢~
7995 0
|
4月前
|
存储 API Docker
告别“金鱼脑”!OpenClaw记忆系统完全手册(阿里云/本地部署+记忆优化+避坑指南)
“昨天聊完的需求,今天再问就忘;反复强调的偏好,每次都要重新说明”——这是2026年无数OpenClaw用户的痛点。参考文章精准指出核心问题:AI智能体的记忆能力直接决定使用体验,而OpenClaw的记忆系统并非“自动生效”,需要理解其底层逻辑才能充分利用。
2942 1
|
搜索推荐 JavaScript 前端开发
博客添加Aplayer音乐播放器
本文介绍了如何在博客网站中添加一个美观且功能强大的音乐播放器APlayer.js,从基本设置到高级定制,包括单曲播放、播放列表以及第三方歌单的集成方法。通过简单的HTML和JavaScript代码,即可实现个性化的音乐播放体验,让访客在浏览文章的同时享受美妙的音乐。
1064 12
博客添加Aplayer音乐播放器
|
10月前
|
Linux 虚拟化 iOS开发
macOS Tahoe 26 (25A354) Boot ISO 原版可引导镜像下载
macOS Tahoe 26 (25A354) Boot ISO 原版可引导镜像下载
4404 0
macOS Tahoe 26 (25A354) Boot ISO 原版可引导镜像下载
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
17068 81
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
搜索推荐 算法 索引
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
903 4