模型中到底包含什么呢?

模型包含两个主要方面:语义方面的信息(语义)和可视化的表达方法(表示法)。

 

语义方面用一套逻辑组件表达应用系统的含义,如类、关联、状态、用例和消息。语义模型元素携带了模型的含义即,它们表达了语义。语义建模元素用于代码生成、有效性验证、复杂度的度量等,其可视化的外观与大多数处理模型的工具无关。语义信息通常被称作模型。

一个语义模型具有一个词法结构、一套高度形式化的规则和动态执行结构。这些方面通常分别加以描述(定义UML 的文献即如此),但它们紧密相关,并且是同一模型的一部分。可视化的表达方式以可使人观察、浏览和编辑的形式展示语义信息。表示方式元素携带了模型的可视化表达方式,即语义是用一种可被人直接理解的方式来表达的。它们并未增添新的语义,但用一种有用的方式对表达式加以组织,以强调模型的的排例。因此它们对模型的理解起指导作用。表达式元素的语义来自于语义模型元素。但是,由于是由人来绘制模型图,所以表达式元素并不是完全来自于模型的逻辑元素。表达式元素的排列可能会表达出语义关系的另外含义,这些语义关系很不明显或模棱两可,以至于在模型中不能形式化地表达,但可给人启迪模。
上下文(语境)。模型自身是一个计算机系统的制品,被应用在一个给出了模型含义的大型语境中。这个包括模型的内部组织、整个开发过程中对每个模型的注释说明、一个缺省值集合、创建和操纵模型的假定条件以及模型与其所处环境之间的关系。模型需要有内部组织,允许多个工作小组同时使用某个模型而不发生过多的相互牵涉。这种对模型的分解并不是语义方面所要求的—与一个被分解成意义前后连贯的多个包的模型相比,一个大的单块结构的模型所表达的信息可能会同样精确,因为组织单元的边界确定会使准确定义语义的工作复杂化,故这种单块模型表达的信息可能比包结构的模型表达得更精确。但是要想有效地工作于一个大的单块模型上的多个工作组不彼此相互妨害是不可能的。其次,单块模型没有适用于其他情况的可重用的单元。最后,对大模型的某些修改往往会引起意想不到的后果。如果模型被适当分解成具有良好接口的小的子系统,那么对其中一个小的、独立的单元所进行的修改所造成的后果可以跟踪确定。不管怎样,将大系统分解成由精心挑选的单元所构成的层次组织结构,是人类千百年来所发明的设计大系统的方法中最可靠的方法。

模型捕获一个应用系统的语义信息,但还需记录模型自身开发过程中的各种信息,如某个类的设计者、过程的调试状态和对各类人员的使用权限的规定。这些信息至多是系统语义的外围信息,但对开发过程非常重要。因此,建立一个系统的模型必须综合考虑两方面。最简便的实现方法是将项目管理信息作为注释加入到语义模型中—,即可以对模型元素用非建模语言进行任意描述。在UML 中用文本字符串来表示注释。文本编辑器或浏览器所使用的命令不是程序设计语言的一部分,同样,用于创建和修改模型的命令也不是建模语言语义的一部分。模型元素的属性没有缺省值,在一个特定的模型中,它们均具有值。然而,对于实际的开发过程,人们要求建立与修改模型时无须详细说明有关的所有细节。缺省值存在于建模语言和支持这种语言的建模工具的边界处。在建模工具所使用的创建模型的命令中,它们是真正的缺省值,尽管它们可能会超过单个的建模工具并用户所期望的那样成为建模工具所使用的通用语言。

模型不是被孤立地建造和使用的。它们是模型所处的大环境中的一部分,这个大环境包括建模工具、建模语言和语言编译器、操作系统、计算机网络环境、系统具体实现方面的限制条件等等。系统信息应该包括环境所有方面的信息。系统信息的一部分应被保存在模型中,即使这些信息不是语义信息,例如项目管理注释(在上面已经讨论过)、代码生成提示、模型的打包、编辑工具缺省命令的设置。其他方面的信息应分别保存,如程序源代码和操作系统配置命令。即使是模型中的信息,对这些信息的解释也可以位于多个不同地方,包括建模语言、建模工具、代码生成器、编译器或命令语言等等。本书用UML 自身对模型进行解释。但是当进行系统的具体物理实现时,要用到其他用于解释的资源,这些资源对UML 来说是不可见的。

时间: 2024-09-03 12:12:12

模型中到底包含什么呢?的相关文章

模型中所包含的信息是什么呢?

一.指导设计思路.在项目早期所建立的高层模型用于集中利益相关者的思路和强调一些重要的选择方案.这些模型描述了系统的需求并代表了整个系统设计工作的起点.早期的模型帮助项目发起者在把精力放在系统的细节问题之前研究项目可能的选择方案.随着设计工作的进展,早期模型被更为精确的模型所替代.没有必要详细保存早期研究过程中的种种选择方案和返工情况.早期模型的目的是帮助获得思路.但最后得到的"思路模型"要在进行详细设计前记录下来.早期模型不需要达到实现阶段的模型的精确程度,无须涉及有关系统实现的一套概

maxent-问下最大熵模型中gis和iis到底有什么区别!!

问题描述 问下最大熵模型中gis和iis到底有什么区别!! 想请问下最大熵模型迭代算法最终公式中gis和iis都是一样的啊.我看了opennlp中maxent的java代码,也是这个公式,请教下gis和iis的区别到底在什么地方呢 -----------------gis论文 ------------------iis论文 解决方案 GIS 最早是由 Darroch 和 Ratcliff 在七十年代提出的.但是,这两人没有能对这种算法的物理含义进行很好地解释.后来是由数学家希萨(Csiszar)

Python检测字符串中是否包含某字符集合中的字符

  这篇文章主要介绍了Python检测字符串中是否包含某字符集合中的字符,需要的朋友可以参考下 目的 检测字符串中是否包含某字符集合中的字符 方法 最简洁的方法如下,清晰,通用,快速,适用于任何序列和容器 代码如下: def containAny(seq,aset): for c in seq: if c in aset: return True return False 第二种适用itertools模块来可以提高一点性能,本质上与前者是同种方法(不过此方法违背了Python的核心观点:简洁,清

PHP网站开发中关于包含路径问题的解决方案

引言: 关于PERL与PHP中的包含路径一直是一个比较难解的问题,主要是与操作系统和WEB服务器有关,不可能非常智能化的解决这个路径问题.相对于PERL,PHP的路径好得多,解决起来也容易得多,因为PHP的相对路径在PHP程序中的任何场合都可以使用,而不象PERL在某些语句中必须用绝对路径而导致移植的极其复杂. 基于此,在PHP中,我设计了一个绝对稳妥的解决方案,如下所述. 原则: 使用相对路径,但在相对路径中用绝对路径(有点绕,待会儿详解),一是可以保证可移植性,二是可以方便地修改,三是公式化

ASP.NET中实现Form表单字段值自动填充到操作模型中

  这篇文章主要介绍了ASP.NET中实现Form表单字段值自动填充到操作模型中,本文模仿MVC模式中的自动映射表单了模型,使用泛型和反射实现,需要的朋友可以参考下 我们知道ASP.NET MVC有个强大的地方就是Form表单提交到action的时候,可以直接将Form的参数直接装配到action的参数实体对象中 比如 代码如下: action方法 Register(UserModel userModel) { ............................. } 在提交表单的时候,会

php 判断字符串中是否包含html标签

 本篇文章主要是对使用php判断字符串中是否包含html标签的实例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 function judgeHtml($str){  if($str != strip_tags($str)){   echo '有';  }else{   echo '无';  } } judgeHtml('<p>a'); echo '<br />'; judgeHtml('a'); 输出:有        无   

Lua检测数组(tabble)中是否包含某个值

  这篇文章主要介绍了Lua检测数组(tabble)中是否包含某个值以及lua 判断一个字符是否存在某个数组两个方法,需要的朋友可以参考下 一.检测数组中是否包含某个值 ? 1 2 3 4 5 6 7 8 9 -- 遍历数组 function IsInTable(value, tbl) for k,v in ipairs(tbl) do if v == value then return true; end end return false; end 二.lua 判断一个字符是否存在某个数组 判

在Word2010中创建包含上下标的公式

带有上下标的公式非常普遍,要想在Word2010公式框架中设置上下标,使用"字体"对话框中的上标.下标效果已无法实现,如图1所示. 图1 "字体"对话框上标.下标效果 在Word2010文档中创建包含上下标的公式可以借助Word2010公式工具提供的上下标结构实现,具体操作步骤如下所述: 第1步,打开Word2010文档窗口,切换到"插入"功能区.在"符号"分组中单击"公式"按钮(非"公式&quo

thinkphp在模型中自动完成session赋值示例代码

  相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比如自动验证.自动完成等,今天在开发中遇到自动完成中需要获取session值然后自动赋值的功能,具体看代码; 01class ArticlelModel extends Model { 02 03protected $_auto = array ( 04array('addtime','time',1,'function'), 05array('username','getName',1,'callback')