CRC

   又称为CRC索引卡片:CRC card

   每张卡片代表一个类 Each card represents one class

   每张卡片上写出这个类承担的职责、与其合作交互的其他类名

     CRC cards are paper index cards on which one writes the responsibilities and collaborators of classes

   CRC建模讨论会

     a group sitting around a table, discussing and writing on the cards as they play "what if" scenarios with the objects

     considering what they must do and what other objects they must collaborate with

     例如,废品回收机
   CRC 的特点

     非正式的、不是很细节的 Informal, non-detailed

     采用小组“头脑风暴”的形式提出概念 Used for group brain-storming

     CRC的目标不是提供完整的设计 Not intended to provide a complete design

     CRC产生的结果需要进一步精化 End result is a first cut at classes for an object-oriented model
CRC 的输入信息: 用例模型

   用例模型

     用例图、边界、用例描述,清楚 地描述了系统需求,作为CRC概 念类分析的起点

    A good starting point for CRC analysis is a clear statement of all of the use-cases

       Use-cases drive the introduction of CRC cards

     用例描述的正常事件流、异常事件流, 可以作为CRC的“角色扮演”的脚本

       Use-cases, or their accompanying scenarios, can be used as a kind of script for the role-playing method (角 色扮演)of checking the CRC cards

     “角色扮演”也可以用顺序图来代替 The role-playing could be replaced with sequence diagrams

CRC方法建模的一些规则

  CRC指导

     Who Writes CRC Cards?

       No one individual has all needed knowledge

       Best to write CRC cards as a team, rather than individually

       Analysis team should consist of five or six experienced individuals :

         one or two user domain experts

         one or two systems analysts

         one OO software designer

         one team facilitator and leader 一位引导者

         The team can include clients 客户 as well as developers

       小的团队关注点比较集中,大的团队很难给出一致意见 Smaller teams lack diversity, larger teams make consensus difficult to achieve        仲裁者具备OO技能以及团队引导能力,不是“老板”型

        Facilitator should be skilled at OO and group techniques, not be a "boss" of team

       围绕团队的提议来写CRC Writing of CRC cards focuses team activities

         切忌跑题:参见1994年春晚_相声《跑题》关于开会的会风问题…
     头脑风暴 Brainstorming

       Groups work by

         收集各种各样的想法,比较这些想法并进行合成

       A "brainstorming" session is a good way to collect the ideas quickly and creatively

     头脑风暴的原则 Brainstorming principles

       All ideas are potentially good ideas

         Don't censure(责难) yourself or others -- all ideas are equal

       Think fast and furiously激烈; ponder(沉思)later

         A fast-paced discussion encourages individual creativity

       Give every voice a turn

         Include everyone in the group. Don't let the loudmouths dominate.

       A little humor can be a powerful force

         Humor can help break down barriers, relieve tension, and build trust needed for a cohesive and effective group
     头脑风暴的步骤

       会议分阶段,每阶段目标明确 State session objectives.

        Each session should have a precise objective--clear to all and narrow enough to accomplish in the session

         Avoid digression (离题) from the objective

       使用“轮转”机制 Use a round-robin technique

         Go around the group from individual to individual

         Individuals may "pass" if they have nothing to contribute

         Stop when no one has anything to contribute

       讨论与选择 Discuss and select

         一致同意的 Restate the objective, then identify those items that everyone agrees are "winners"

         一致反对的 Then select those items that everyone disagrees are "losers"

         需要进一步讨论的 Then discuss the items remaining--the "maybes"

       设置“时间盒”

         在规定的时间间隔内有结论:或者完成、或者延迟到有进一步的信息到来,等等
     在“头脑风暴”开始之前,收集概念类可能的来源

       每个参与者要完成一些调查、分析任务

       阅读所有的需求文档 Read all requirements documents

         Examine the formal requirements document (if any)

         Don't overlook the indirect sources -- memos, meeting minutes, etc.

         Circle nouns and noun phrases -- these are potential classes

       仔细阅读各类报告 Look carefully at reports

         Examine the reports generated in the system being replaced (manual or automated)

         Examine the profiles for the reports desired in the new system

         Again circle nouns and noun phrases -- these are potential classes

       做一些访谈 Conduct interviews

         Talk to experienced users of the current system

         Record interview or take careful, precise notes

         Again identify nouns and noun phrases as candidate classes
     概念类可能的来源 Sources for the Candidate Classes

       检查其他的文档和文件 Examine documentation and files

         当前系统的有关文件 Review the documentation on the current system

         尝试收集用户、维护人员手里所拥有的非官方的、或者私人的笔记等

          Try to review any unofficial or personal notes users or maintainers of the system have

         同样的,在里面寻找名称 Again identify nouns and noun phrases as candidate classes
  CRC寻找结束后 …

     “角色扮演”验证 概念类 Team can engage in role-playing to verify that use-case scenarios make sense for chosen CRC

     每个人可以扮演1到多个类 Each person can role-play one or more class cards

     如果哪里不顺畅,立即修改 If something doesn’t work, change the class accordingly

     或者,去修改用例!(需求定义错了哦)Revision of use-cases might also be indicated

4.2 面向对象分析(二) CRC方法标识概念类的更多相关文章

  1. 面向对象相关概念与在python中的面向对象知识(魔法方法+反射+元类+鸭子类型)

    面向对象知识 封装 封装的原理是,其成员变量代表对象的属性,方法代表这个对象的动作真正的封装是,经过深入的思考,做出良好的抽象(设计属性时用到),给出“完整且最小”的接口,并使得内部细节可以对外透明( ...

  2. python面向对象双下划线方法与元类

    目录 双下划线方法(__) 元类简介 产生类的两种表现形式 元类的基本使用 元类进阶操作 __new__方法 双下划线方法(__) 面向对象中的双下方法也有一些人称之为是魔法方法,有些双下方法不需要刻 ...

  3. Python 基础之面向对象之类中的方法和与类相关的魔术属性以及反射

    一.类中的方法 普通方法: 没有参数,只能类调用绑定方法: (1)绑定到对象(自动传递对象参数) (2)绑定到类(自动传递参数)静态方法: 无论是类还是对象,都能调用的方法#例:class Dog() ...

  4. 101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联——方案二

    101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联--方案二 本文知识点:通过方法实现学生类与 ...

  5. <二>面向对象分析之几个关键的概念

    一:建模        --->建模,是指通过对[客观事物]建立一种抽象的方法用以表征事物并获得对事物本身的理解.同时把这种理解概念化,将这些逻辑概念组织起来,构成一种对所观察对象的内部结构和工 ...

  6. 面向对象分析方法(I)

    找出最关键的一些业务场景:一般通过动词来寻找,比如招聘系统中,一个应聘人投递一个职位就是一次应聘,应聘就是一个业务场景:一个学生参加某门课的考试,那么考试就是一个业务场景:一个学生去图书馆借书,那么借 ...

  7. <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性

    设计类

  8. 面向对象分析设计-------02UML+UML各种图形及作用

    一.UML是什么?UML有什么用? 二.UML的历史 三.UML的上层结构(Superstructure) 四.UML建模工具 五.UML的图(重点) 1.用例图(use case diagram) ...

  9. SNMP报文抓取与分析(二)

    SNMP报文抓取与分析(二) SNMP报文抓取与分析(二) 1.SNMP报文表示简介 基本编码规则BER 标识域Tag表示 长度域length表示 2.SNMP报文详细分析(以一个get-respon ...

随机推荐

  1. 【做题】TCSRM592 Div1 500 LittleElephantAndPermutationDiv1——计数&dp

    题意:定义函数\(f(A,B) = \sum_{i=1}^n \max(A_i,B_i)\),其中\(A\)和\(B\)都是长度为\(n\)的排列.给出\(n\)和\(k\),问有多少对\((A,B) ...

  2. HDU 4918 Query on the subtree(动态点分治+树状数组)

    题意 给定一棵 \(n\) 个节点的树,每个节点有点权.完成 \(q\) 个操作--操作分两种:修改点 \(x\) 的点权.查询与 \(x\) 距离小于等于 \(d\) 的权值总和. \(1 \leq ...

  3. 自定义Exception:MVC抛出自定义异常,并以Json方式返回

    相关链接 优点: 可以统一处理所有页面的异常,对所有需要返回json数据的异常,都用同样的方法throw new DVMException().页面展示,controller的错误处理方式一样 节省编 ...

  4. react native 渐变组件 react-native-linear-gradient

    github:  https://github.com/react-native-community/react-native-linear-gradient 安装:yarn add  react-n ...

  5. _gift

    time 本次上线后在线时长,单位:秒 rewId 奖励模板ID,对应_rew表中rewId notice 弹窗内容,为空不弹窗

  6. MD5加密与Hash加密

    一.Md5加密 MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的. 2.容易计算:从原数据计算出MD5值很容易. 3.抗修改性:对原数据进行任何改动,哪怕只修改1个字 ...

  7. Spring boot @Scheduled(cron = "* * * * * *") cron表达式详解

    //@Scheduled(cron = "0 0/15 * * * ?") //每15分钟触发一次 //@Scheduled(cron = "5/10 * * * * ? ...

  8. 使用lombok 找不到方法

    在setting里面查找并设置就好了

  9. cordova + Vue 开发 APP 上手指南

    什么是 cordova cordova 是由 Apache 基金会支持的,使用 HTML5 + CSS3 + JS 来构建多平台 APP 程序的开发框架.其支持调用手机系统(Android.IOS.W ...

  10. Spring的AOP配置文件和注解实例解析

    1.1           Spring的AOP配置文件和注解实例解析 AOP它利用一种称为"横切"的技术,将那些与核心业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减 ...