在初次谈及与Student类相关的attribute和方法时,我们曾提到,该类的一些attribute可以用C#语言的预定义类型来表示,但另外一些(advisor、courseLoad和transcript)则没有做说明应该怎样处理。现在我们来把学到的关于预定义类型的知识付诸使用。
我们把Student类的advisor attribute声明为用户定义类型Professor(见表3-2),而不是简单地用string类型来表示导师姓名。
表3-2 Student类的attribute,第2版
attribute 类型
name string
studentID string
birthdate DateTime
address string
major string
gpa double
advisor Professor
courseLoad ???
transcript ???
通过声明advisorattribute的类型为Professor——即,使advisor attribute成为引用变量——使得Student对象得到一个真实Professor对象的句柄,该对象表示学生的导师。对于courseLoad和transcript类型,稍后再作理会。
现在轮到Professor类了,表3-3列出了该类的attribute定义。
表3-3 Professor 类的attribute
attribute 类型
name string
employeeID string
birthdate DateTime
address string
worksFor string (或Department)
studentAdvisee Student
teachingAssignments ???
将Professor类的studentAdvisee attribute声明为Student类型——即,使studentAdvisee attribute成为引用变量——我们让Professor对象能够抓住/指向一个Student对象,该对象表示教授指导的学生。teachingAssignments attribute类型放到后面讨论。
Professor类的方法大概如下所示:
1. TransferToDepartment
2. AdviseStudent
3. AgreeToTeachCourse
4. AssignGrades
关于Professor类,需要说明几点:
l 一位教授应该会同时指导数名学生,而类似studentAdvisee这样的attribute只能指向单个Student对象,不十分管用。我们将在第6章谈到群集(collections)时讨论处理这种情况的技术,它对于定义Professor类的teachingAssignments attribute,Student类的courseLoad和transcript attribute非常有用。
l worksFor attribute表示教授任职的院系。可以选择使用简单的string类型来表示院系名,如“MATH(数学系)”;或将其定义为指向一个Department对象的引用变量,特别地,Department对象代表“真实世界”中的数学系。当然,这需要定义一个名为Department的新类,以及其attribute和方法。如你将在本书第二部分所看到的那样,是否应该创造用来表示真实世界概念/抽象模型的用户定义类型/类,并非简单的决定。





