4.2 面向对象分析(二) CRC方法标识概念类
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