首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

抽象模型中的“class”描述了一组相似对象的共同特性。例如,名为“Student”的类可能被用来描述学生选课系统中的所有学生对象。

类定义以下要素:

l      定义该类的对象所需要的数据结构(attribute的名称和类型)

l      这些对象要执行的操作,尤其是有哪些操作,类的对象如何被调用执行这些操作,以及对象执行这些操作时的“后台动作”

例如,Student类可能包括表3-1所示的九种attribute

3-1  创建学生类的建议attribute

attribute                           类型

name                                 string

studentid                            string

birthdate                            DateTime

address                               string

major                                 sting

gpa                                    double

advisor                               ???

courseLoad                        ???

transcript                           ???

也就是说,每个Student对象都将拥有同样的九种attribute。注意,其中许多attribute可以用C#预定义类型体现(如String double,和 DateTime),但小部分attribute——advisor, courseLoadtranscript——则过于复杂,预定义类型就不够用了;稍后你将学习如何处理这样的attribute

从操作的角度来看,Student类可能会定义下列五种方法:

l     RegisterForCourse

l     DropCourse

l     ChooseMajor

l     ChangeAdvisor

l     PrintTranscript

注意,对象只能做所属类已定义的方法所规定的操作。从这个角度来看,对象就像用具,只能执行设计好的操作(如DVD播放机提供播放、暂停、停止和搜索特定场景的按钮),除此之外别无所能(不能要求DVD播放机烤面包圈——至少成功机会微乎其微)。所以,成功设计一个类的重要因素,就是确保它赖以完成任务的行为能被执行。在本书的第二部分,我们将看到如何在系统需求的基础上确定对象的任务、数据结构和行为。

术语“feature(特征)”和“member(成员)”可以互换,被用来描述类的attribute和方法。即,一个类定义如果包括三个attribute声明和五个方法声明,则可以说它有八个特征/成员。“特征”是普通OO意义上的术语,而“成员”则是C#的特定术语。在本书的第一和第二部分,我们将使用普通OO意义,在第三部分切换为C#的特定意义。

特征是类的构建块:实际上一个类定义中能找到的东西,要么是该类的attribute,要么就是该类的方法。

C#语言中,有些其他类型也是类定义的特征,不过在读到本书第三部分之前无需多虑。概念上,现在认为类只包括attribute和方法,已经足够。

3.4.1  关于命名惯例的说明

命名一个类时,建议用大写字母开头,整个名称使用混合大小写的方式:Student, Course, Professor,等等。当类名可以用词组来体现其含义时,如“course catalog”,每个单词第一个字母用大写,所有单词直接连接,不使用空格、连接线或下画线分隔:例如,CourseCatalog。这种方式被称之为Pascal命名法(Pascal casing)。

对于方法名,C#的惯例也是使用Pascal 命名法。典型的方法名形如Main, GetNameRegisterForCourse

反之,attributeC#命名惯例却是以小写字母开头,后面跟随的每个单词都以大写字母开头。典型的attribute名形如name, studentIdcourseLoad。这种风格被称之为Camel命名法Camel casimg)。

后面的章节中,我们将探讨如何使用Pascal命名法和Camel命名法。

3.4.2  实体化(Instantiation

类定义可以看作是创建软件对象的模板——一种“模型”,用来

l      在内存中开辟一个数据区,储存新对象的attribute

l      把一系列行为和对象关联起来

术语“实体化(instantiation)”指对象在类声明基础上被创建(构造)的过程。从单个类声明——例如,Student类——可以创建许多对象,如同使用同一把曲奇饼模刀能切出许多曲奇饼。对象,也可以说成是特定类的实体(instance)——如Student对象是Student类的一个实体。在本章的后面部分,我们将讨论C#中对象在被实体化时的物理过程。

类与对象的不同之处在于:

l      定义特征——attribute、方法等——该类的所有对象都拥有这些特性,可以把类看作是对象模板(template),如图3-1所示。

l      对象是模板的单一实体,attribute值已经给出,方法可以被调用,如图3-2所示。

3-1  类定义了attribute名称和类型

3-2  对象给出attribute

3.4.2.1  封装(Encapsulation)

封装(Encapsulation)是一个正式术语,表示将对象状态和行为绑到单一逻辑单元中的机制。理论上,对于某个特定学生,我们需要了解的情况,要么直接表现为对象的字段(field),要么间接表现为给出问题的答案或影响对象状态的方法(method)

封装不是OO语言所独有的,但从某种意义上说,被OO语言完善了。如果你熟悉C语言,会知道一个C struct这样封装数据:

struct employee {

     char name[30];

     int age;

}

下例中,C语言函数封装了操作逻辑—数据被传入、计算,给出(可选的)返回值:

float average(float x, float y){

     return (x + y)/2.0;

}

但是,把数据和行为封装到单一构造,用来表示真实世界实体的抽象模型,这样的概念只有在OO编程语言中得到真正采用。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论