第19讲概念模型.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 19章 概念模型 采用我们使用的相同的对象模型表示法来描述运行中程序的堆结构——即结构中有什么 对象,他们是怎样通过属性联系起来——可以更抽象地用来描述一个系统或由系统操作所处的 环境的状态空间。我把这些称为“概念模型”;在课本中,称其为“数据模型”。在练习4, 示范例子和对象建模表示法描述波士顿地铁系统结构的过程中,你已经动手建立了一些概念模 型。 表示法自身十分简单,并且一旦你以面向实现的观点看,将Java对象换为现实世界的实体, 将属性换为关系等等,模型会很容易理解。学习本课程之后,你应该能够读懂概念模型。 另一方面,通过编写概念模型,你会得到更多练习。这涉及到进行恰当的抽象——正如你 设计一个抽象数据类型的接口时必须做的。想做好很难,但障碍尤其与对象模型无关。要找到 问题的实质,并将其简洁地表达通常并不容易。 一旦越过这个障碍,并构造了一个概念模型,你就成功了一半。有个说法:如果你能准确 地描述要解决的问题,那么你就在解决这个问题上有了进展。在软件设计上,这个进展比成功 一半要好得多。 所以要学会建立概念模型必须多加练习。在这个过程中有很多乐趣,当你的建模技术有所 提高时,你会发现自己已成为一名优秀的设计师了。当你的概念结构清晰时,代码的结构也会 变得简单和清晰,这样写代码会更有建设性。 在本讲中,我会给出关于如何建增量模型的一些见解。在这些部分,模型会以最终形式出 现。 19.1 原子、集合、关系 我们将从集合、关系和原子开始建立模型结构。原子是一个原始的实体,有如下性质: 不可分割性:不能分解为更小的部分; 不变性:属性永远不变; 不可解释性:没有任何内置属性,比如“数”。 除了基本粒子,现实世界很少有东西是原子的。但这不影响我们将它们以原子建模。事实 上我们的建模方法完全没有内置复合的概念。建立一个模型x,x由y和z两部分组成,我们会将 x、y和z都视为原子的,并将制约关系用它们之间的外在的关系表示。 一个集合仅仅是原子的汇集,没有重复计数和次序的概念。关系是联系原子的结构。数学 上,它是一系列对子,每一对由两个原子以指定顺序组成。你可以将关系想象为一个有两列的 表,其中每个表目是一个原子。列的顺序很重要,行的顺序无关紧要。行中的每个列必须有一 个表目。 在集合和关系上定义一些操作符会更方便些。我们将用它来说明我们的图形化模型,但它 们也能被用在更多易表现的约束上。 给出两个集合,s和t,可以将它们的并集写成s+t,交集写成st,差集写成s-t。我们用 no s表示s为空集,用some s表示s为非空集合。用s in t表示s中的每个元素也是t中的元素。 1 s=t表示s中的每个元素都是t中的元素,且反之亦然。 给出一个集合s和一个关系r,s.r表示s在r下的映射——即s中的元素通过r映射形成的集 合。我们可以将它定义成这样的形式: s.r = {y | some x: s | (x,y) in r} 给出一个关系r,我们将r的转置写成~r ——即镜像关系,将其这样定义: ~r = {(y,x) | (x,y) in r} 最后,我们将r的传递闭包写成+r :它是将x与y联系的关系,如果存在一些原子 z1,z2,…,zn的有限序列如下: (x,z1) in r (z1,z2) in r (z2,z3) in r (zn,y) in r 并将r的自反传递闭包记为*r ,即把传递闭包作补充,将每个原子与它自己关联。你可以 将传递闭包设想为将某关系做1,2,3…次应用时的映射;自反传递闭包则包括0次应用。 让我们看一些例子。假设有一个存在或曾经存在过的人的集合Person;男人和女人的集合 Man和Woman;一个将父辈和子辈联系起来的关系parents;还有一个将一个人和配偶联系起来 的关系spouse。 你能解释以下语句么?在现实世界中哪些是正确的? no (Man Woman) Man + Woman = Person all p: Person | some p.spouse = p.spouse.spouse = p all p: Person | some p.spouse all p: Perso

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档