说明
给定学生的名字以及他们所在的年级,为学校创建一份花名册。
最终,你应该能够:
- 把学生的名字添加到某个年级的花名册中:
- "Add Jim to grade 2."
- "OK."
- 获取某个年级里所有学生的列表:
- "Which students are in grade 2?"
- "We've only got Jim right now."
- 获取一份包含所有年级所有学生的排序列表。
年级应按 1、2、3 等排序,同一年级内的学生应按名字的字母顺序排序。
- "Who is enrolled in school right now?"
- "Let me think.
We have Anna, Barb, and Charlie in grade 1, Alex, Peter, and Zoe in grade 2, and Jim in grade 5.
So the answer is: Anna, Barb, Charlie, Alex, Peter, Zoe, and Jim."
注意,我们这里的学生都只有一个名字(小镇嘛,还能怎样?),而且每名学生都不能在同一个年级或整份花名册里被重复添加。
如果测试试图把同一名学生添加多次,你的实现应当表明这种做法是错误的。
注意
并不是非要把学生建模成一个独立的对象,需求本身相当简单,你完全可以用一个方便的内部数据结构来表示(只要它不会泄漏到结果里)。
这个练习对问题规范做了小幅修改,因为把添加学生和查询学生分开放在不同的方法里更合理(而不是用一个方法同时完成这两件事,那样不太像 Pharo/Smalltalk 的风格)。
来源
与 Phil Battos 在 gSchool 的一次结对编程