ADL (体系结构描述语言)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADL应具备的特点: 1.ADL首先应有一个形式化理论基础,如Petri网、状态 图、z、 CSP等。有了形式化理论基础,才能对所描述的系 统进行分析和验证。 2.作为一种描述语言,ADL应具有严谨的语法和语义。 描述能力应足够强,至少应能描述的基本构件如组件、连接 件及有关配置规范。同时,为了更好的应用,一种ADL, 应有相应的支持工具,支持工具的能力直接反映了该ADL 的可使用程度和范围。 3.描述软件体系结构的一个很重要的目的是为了便于软 件开发者的理解和交流,因此,ADL描述应简单易懂,最 好有图表辅助理解。对于同一个体系结构,不同的软件开发 者需要从不同的抽象层次上理解,这就要求ADL能描述不 同抽象程度的软件体系结构
ADL (体系结构描述语言)
ADL 是什么?
ADL:是这样一种形式化语言,为软件系统的概念体系结构建 模提供了具体语法与概念框架 作用:基于底层语义的工具为体系结构的表示、分析、进化、 细化、设计过程等提供支持。 其三个基本构成元素是:
1)组件:计算或数据存储单元; 2)连接件:用于组件问交互建模的体系结构构造块及其支配这些 交互的规则 3)体系结构配置:描述体系结构的组件与连接于的连接图。
Graphical Visualization
Canonical Textual Visualization
XYZ/ADL
针对国内唐稚松院士提出基于时序逻辑的XYZ语言进行 扩充,用来描述验证具有实时性、可靠性要求的软件体 系结构
RAPIDE
Language and tool-set for exploring dynamic properties of systems of components that communicate through events Advantages Unique and expressive language for describing asynchronously communicating components Tool-set supports simulation of models and graphical visualization of event traces Disadvantages No natural or explicit mapping to implemented systems High learning curve Important tool support is difficult to run on modern machines Has morphed into the CEP project, however
8
Software Architecture: Foundations, Theory, and Practice; Richard N. Taylor, Nenad Medvidovic, and Eric M. Dashofy; © 2008 John Wiley & Sons, Inc. Reprinted with permission.
几种ADL
Darwin
采用π演算来分析、描述带有演化通信结构的并发系统。在 π演算中,一个系统被表述成一组具有独立功能的进程集, 集合中的每个进程可以与其它进程建立连接,每个连接都 有一个连接名。Darwin采用π演算对系统行为进行建模, 利用其强类型系统进行静态检查。
பைடு நூலகம்
DARWIN EXAMPLE
type DataStore is interface action in SetValues(); out NotifyNewValues(); behavior begin SetValues => NotifyNewValues();; end DataStore; begin (start or UpdateStatusDisplay) where \ type Calculation is interface ($TurnsRemaining > 0) => \ action in SetBurnRate(); if ( $TurnsRemaining > 0 ) then \ out DoSetValues(); TurnsRemaining := $TurnsRemaining - 1; \ behavior DoSetBurnRate(); \ action CalcNewState(); end if;; begin NotifyNewValues => UpdateStatusDisplay();; SetBurnRate => CalcNewState(); DoSetValues();; UpdateStatusDisplay where $TurnsRemaining == 0 \ end Calculation; => Done();; end UserInterface; type Player is interface action out DoSetBurnRate(); architecture lander() is in NotifyNewValues(); P1, P2 : Player; behavior C : Calculation; TurnsRemaining : var integer := 1; D : DataStore; action UpdateStatusDisplay(); connect action Done(); P1.DoSetBurnRate to C.SetBurnRate; P2.DoSetBurnRate to C.SetBurnRate; C.DoSetValues to D.SetValues; D.NotifyNewValues to P1.NotifyNewValues(); D.NotifyNewValues to P2.NotifyNewValues(); end LunarLander;
component DataStore{ provide landerValues; } component Calculation{ require landerValues; provide calculationService; } component UserInterface{ require calculationService; require landerValues; } component LunarLander{ inst U: UserInterface; C: Calculation; D: DataStore; bind nderValues -- nderValues; nderValues -- nderValues; U.calculationService -- C.calculationService; }