依睛(IT blog) 我回来了,PHP<-->C/C++ LINUX

笨鸟

统计

积分与排名

友情连接

最新评论

概念模型

概念模型
作者:浩瀚天涯  来源:   发布日期:2007-04-19  
     概念模型是对真实世界中问题域内的事物的描述,不是对软件设计的描述。概念的描述包括:记号、内涵、外延,其中记号和内涵(视图)是其最具实际意义的。 

      由于概念模型在此次的迭代过程非常简单,所以本来计划PASS掉其中的具体分析,不过概念模型的确非常之重要,他是OOD的一个基石。 

      除了用例,应该说概念模型是OO开发过程中另一个充满主观色彩的工件。 

      不同的十个人对同一个场景进行研究,可能提炼出来的概念模型都不一样,所以说这是颇受主观认识影响的一个过程。然而,概念模型的质量对整个系统的影响至关紧要,因为,所谓的面向对象,就是从这里开始。 

      一般来说,构建概念模型的过程与程序员的关系并不大。最适合进行这项活动的人,应该是那些有较深资历的领域专家,极端一点,甚至可以就是最为熟悉自身业务流程的客户代表。只要稍稍学习简单的建模知识,他们就可以胜任了。技术出身的人要做好这个工作,在开始之前他可能首先需要做的就是:忘掉VB,忘掉JAVA,忘掉.Net, 忘掉C++ 。。。 

      不过,现在作为开发人员,我倒是觉得有一个使自己的思维跳出技术的条框,学习真正从“映射现实世界”的角度考虑问题的好办法,就是——假想一下,自己正在通过某部电影的故事来制作一个RPG游戏,电影里的桥段与游戏中的场景相对应,然后思考,其中需要表达哪些不同概念。好吧,试着弄一个简单的例子,这里,我用《无间道》来试试(不要笑我eld啊)。 

      构建概念模型,需要从场景中提取各种“对系统目标有用”的概念。通常的方法是通过识别主要的领域词汇,或者通过已有的概念目录检查表来查找。由于时间关系,我已经预先想好了一些。看过的朋友知道,像“卧底”、“警察”、“黑社会”、“情报”等等,都是《无间道》这部电影里的一些核心概念。很自然地,开始时我会倾向于发展这样一个模型: 




      这样看起来比较直观。“警察”和“黑帮成员”是两个较大的概念,下面分别有较小的两个子概念。像黄Sir和韩琛这样的角色,是可以很直接地归入到“正规警察”和“普通黑帮成员”的范围中去的,而陈永仁和刘健明都分别属于不同的卧底角色。但这样出现了一个问题,就是陈和刘都是同时具有警察、黑帮的双重身份(尽管一个在明,一个在暗)的人,他们都有可能同时拥有警察和黑帮的某些行为。比如陈永仁在拥有黑帮“劈友”,“收数”的行为时,也有可能执行警察“逮捕”,“救死扶伤”这样的责任,刘健明表面上是警察,暗中也有进行黑帮“洗钱”的行为。两个人的行为相似,但本质立场不同,怎样在模型中表达出这样的概念呢? 

      曾经也想过将“卧底”同时作为“警察”和“黑帮成员”的子概念,但觉得这样比较复杂且僵硬,实现起来也不容易(对不起,我又想到实现了)。后来觉得可以试试将“身份”和“行为”概念提取出来,于是建立下面这样的一个模型: 




      在这个模型中,每个人物可以机动地拥有1个以上的身份,多个行为。每个行为也可以与特定的身份挂钩。这样的话,对表达不同角色的复杂身份就可以比较灵活了。对陈、刘之间的本性问题,又引入“价值观”这样的概念描述。但可以看到,改变后的模型复杂度提高了,尤其当人物的“行为”很多的时候,就可能会在其下面出现比较大的概念群了。 

      系统的灵活性和复杂度的矛盾,是在提炼概念模型时必须慎重思考的问题。 

      可想而知,如果真的要做成RPG的话,更多的概念需要被提取出来。譬如“情感”、“人际关系”、“情报”、“武器”、“女朋友”。。。。。。由于时间关系,就不在这里乱唱了。这次做的这个粗陋的模型,就权当抛砖引玉吧。 

如何找出概念? 

      最好是能够尽量充分地使用细粒度的概念来描述模型,而避免粗略描述。 

      这是书中推荐的一条指导原则,我没有从正面理解也没有找到论据去推翻他,这是让我困惑的地方。其他一些指导性的原则包括:不能简单地因为需求说明中没有明显的要求保留某个概念的信息或是概念中没有属性,就去掉概念,在问题领域中,那些只担当纯行为的概念也是存在的。其后便是一个用于搜索概念的‘黑名单’,这让我更觉得不可思议,为什么是这样一个长长的黑名单而不是几条简洁的依据。最后我还是决心把他抄一遍: 

概念类目 举例  
物理的或实在的对象 销售点终端、飞机  
规格说明、设计或者事物的描述 产品规格说明、航班描述  
地点 商店、机场  
事务 销售、支付、预定  
在线事务处理项 在线销售项  
人的角色 出纳员、飞行员  
包含其他事物的包容器 商店、银行识别号、飞机  
被包含在包容器内的事物 销售商品项、乘客  
系统外部的其他计算机系统或机械电子设备 信用卡授权系统、空中交通控制系统  
抽象的名词性概念 饥饿的人、恐高症  
组织 销售部、对象航线  
事件 销售、抢劫、会议、出航、坠机、着陆  
过程(通常不用概念来表达,但有时也会用概念来表达过程) 出售一个产品的过程、预定一个座位的过程  
规则和策略 退货政策、取消政策  
目录 产品目录、零件目录  
财政收支、工作情况、合同等的记录 收据、分类帐目、雇佣合同、维护日志  
金融工具和服务机构 信用卡、股票  
手册、书籍 雇员手册、修理手册  
 抄完了一遍,没有找出一个通用性的指导原则,书中接下来给出的是根据名词性短语找出概念,这让我想起了某一期的程序员中有关于建模的文章,其中的概念模型的建立就是说根据名词来找,想来这是一种极其幼稚的做法了,其中还有这样一种情况,某些名词只作为对象的属性。 

      概念模型的建模过程: 

      1,运用概念目录列表或名词性短语找出问题领域中的后选概念 
      2,绘制概念到概念模型图中 
      3,为概念添加关联关系 
      4,为概念添加属性 

概念模型设计  

      概念模型不依赖于具体的计算机系统,他是纯粹反映信息需求的概念结构。 

      建模是在需求分析结果的基础上展开,常常要对数据进行抽象处理。常用的数据抽象方法是‘聚集’和‘概括’。 

      ER方法是设计概念模型时常用的方法。用设计好的ER图再附以相应的说明书可作为阶段成果 

      概念模型设计可分三步完成。 

      (1) 设计局部概念模型 

            ① 确定局部概念模型的范围 
            ② 定义实体 
            ③ 定义联系 
            ④ 确定属性 
            ⑤ 逐一画出所有的局部ER图,并附以相应的说明文件 

      (2) 设计全局概念模型 

      建立全局ER图的步骤如下: 

            ① 确定公共实体类型 
            ② 合并局部ER图 
            ③ 消除不一致因素 
            ④ 优化全局ER图 
            ⑤ 画出全局ER图,并附以相应的说明文件。 

      (3) 概念模型的评审 

      概念模型的评审分两部分进行: 

            第一部分是用户评审。 
            第二部分是开发人员评审。 

用例的概念模型 

posted on 2009-01-03 15:50 向左向右走 阅读(135) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。