第1章面向对象程序设计概述

第1章面向对象程序设计概述
第1章面向对象程序设计概述

第1章面向对象程序设计概述

近年来,面向对象程序设计的思想已经被越来越多的软件设计人员所接受。它是在吸收结构化程序设计的一切优点的基础上发展起来的一种新的程序设计思想。这种新的思想更接近人的思维活动,人们利用这种思想进行程序设计时,可以很大程度地提高编程能力,减少软件维护的开销。面向对象系统最突出的特点是封装性、继承性和多态性。

1.1什么是面向对象程序设计

在软件设计和实现中,传统的被人们广泛使用的方法是面向过程的程序设计方法。在讨论面向对象程序设计之前,我们需要讨论一下面向过程的程序设计。

1.1.1面向过程程序设计的基本概念

面向过程的程序设计思想的核心是功能的分解:

第一步要做的工作就是将问题分解成若干个称为模块的功能块;

第二步根据模块功能来设计一系列用于存储数据的数据结构;

第三步编写一些过程(或函数)对这些数据进行操作。

显然,这种方法将数据结构和过程作为两个实体来对待,其着重点在过程。

设计人员首先考虑如何将功能分解,在每一个过程中又要着重安排程序的操作序列,但同时程序员在编程时又必须时时考虑数据结构,因为毕竟要将操作作用于数据上。数据结构和过程的这种分离,给软件人员造成沉重的负担。例如,我们不可能要求数据结构始终没有变化,且不说在软件维护的时候数据结构有可能发生变化,就是在软件开发的过程中也不能保证数据结构不变化。

面向过程的程序设计的缺点之一就是一旦数据结构需要变更的时候,必须修改与之有关的所有模块。因此,面向过程的程序的可重用性差,维护代价高。

下面,我们举一个实例来进一步讨论面向过程的程序设计方法。

考虑一个银行系统。该系统允许顾客开设不同类型的银行账户,其中包括现金账户、支票账户和贷款账户,同时允许顾客存款、取款和转账。根据面向过程的程序设计方法,首先我们将银行系统分解成三个模块分别负责存款、取款和转账三项工作。这三个过程是MakeDeposit、WithDraw和Transfer。接着,建立一个简单的数据结构:

struct account{

char name; /* 姓名 */

unsigned long accountld; /* 账号 */

float balance /* 余额 */

float interestYTD /* 年利息 */

char accountType./*账户类型(现金、支票和贷款) */

};

然后,对每个过程按照一定的操作顺序编写程序。

我们来分析一下,程序员所关心的是否与顾客一致。

(1)对于一个顾客来说,他最关心的是账户中还有多少钱,利息是多少,钱存在银行是否安全,而不会对存钱和取钱的程序执行的过程感兴趣。对他而言,只是需要知道存、取款

手续,并按照这些手续去做就足够了。

(2)程序设计人员所关注的是如何写存、取款的代码,如何在已经建立的数据结构中填写数据并管理它们。

可见,程序员与顾客关心的事情是不一致的,这是由于数据结构与“过程”的分离造成的。再进一步分析,顾客与他们的银行账户有没有特殊的关系。在软件系统中,由于顾客只不过是一串字符和数字,因而不用考虑到底是谁拥有该账户,账户里的内容是什么,而银行账号也只不过是一个整数。

另外,由于数据结构与“过程”的分离,程序员可以非常方便地修改账目,因为对他来说,只不过是在修改数据结构中的数字,实际上他可能通过修改数据而取走顾客的钱。

最后,我们考虑如果数据结构发生了一些变化会产生什么样的结果。对于accountType 数据项,原来只有现金账户、支票账户和贷款账户三种取值,程序只能识别这三种取值。由于账户类型的不同,我们在编写存款等过程时,将以不同的操作序列与之对应(在同一个过程中分情况处理)。对现金账户、支票账户和贷款账户的处理不会完全相同。假设现在需要增加一种账户类型——退休账户,后果如何?原来的程序肯定出错。因为在原来的程序中我们只考虑了以上三种账户的情况,对于新增加的账户类型,原来的程序不会处理。也就是说,每增加一种新的账户类型,都必须重新编写程序代码,可见其维护软件的开销是相当大的。

上述这些问题的出现都是由于面向过程程序设计的解决方法的着重点在功能,而我们通过分析发现,数据对于客户(尤其是顾客)似乎更重要。在这里,程序员关心的是如何做(how to do),而顾客则关心的是做什么(what t0 do),这是由于过程和数据的分离造成的。使用面向对象的程序设计技术是解决这些问题的最好方法。

1.1.2面向对象程序设计的基本概念

在面向对象的程序设计中,着重点在那些将要被操作的数据,而不是在实现这些操作的过程。数据构成了软件分解的基础,而不是功能。我们首先要分析顾客在账户(数据)中要做什么,然后提供相应的操作,更重要的是不能将数据和相应操作看成两个分离的实体,而是要把它们作为一个完整的实体来对待。数据与定义在它上面的用户需要的操作构成一个整体。同时,数据本身不能被外部程序和过程直接存取。如果想修改银行账户中的数据,惟一的办法是在该数据上提供修改操作,这些修改操作是以用户应得到的利益为根据。当我们把对银行账户的操作定义在数据上,银行账户就是一个类,称为银行账户类。作为其实例,我们可以建立许多具体的银行账户,而每一个具体的银行账户就是银行账户类的一个对象。

现在,我们给面向对象程序设计下一个定义。

面向对象程序设计是一种新的程序设计范型。面向对象程序的主要结构特点是:

第一,程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递息的规律;

第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作。

面向对象程序设计的最大优点就是软件具有可重用性。当人们对软件系统的要求有所改变时,并不需要程序员做大量的工作,就能使系统做相应的变化。

类与对象是面向对象程序设计中最重要的概念,也是一个难点,想要掌握面向对象程序设计的技术,首先就要很好地理解这两个概念。

1.2对象与类

1.2.1对象与类的概念

在现实世界中,人们是如何认识“对象”和“类”的。

在日常生活中对象就是我们认识世界的基本单元,它可以是人,也可以是物,还可以是一件事。整个世界就是由形形色色的“对象”构成的。例如一辆车、一个球、一个小学生、一次演出。对象既可以很简单,也可以很复杂,复杂的对象可以由若干简单的对象构成。

对象是现实世界中的一个实体,其特性是:

(1)每一个对象必须有一个名字以区别于其它对象;

(2)用属性(或叫状态)来描述它的某些特征;

(3)有一组操作,每一个操作决定对象的一种行为。

在日常生活中,“类”是对一组具有共同的属性特征和行为特征的对象的抽象。例如,由一个个的人构成人类,而一个人是人类的一个实例。

类和对象之间的关系是抽象和具体的关系。类是对多个对象进行综合抽象的结果,对象又是类的个体实物,一个对象是类的一个实例。

例如,教师黎明和学生李明都是一个对象。

对象名:黎明对象名:李明

对象的属性:对象的属性:

年龄:30 年龄:20

学历:博士学历:本科

职称:教授性别:男

专业:计算机软件专业:计算机科学与技术对象的操作:对象的操作:

说自己的年龄打篮球

吃饭睡觉

授课听课

一个个的像黎明这样的教师就构成教师类。一个个的像李明这样的学生就构成学生类。

我们前面说过,面向对象程序设计更接近人们的思维。面向对象程序设计中的对象和就来源于现实世界。以面向对象程序设计的观点看,一个对象是由描述其属性的数据和定义在其上面的一组操作组成的实体,是数据单元和过程单元的组合体。类是对一组对象的抽象,这组对象具有相同的属性结构和操作行为,在对象所属的类中要说明这些结构和行为。一个对象是类的一个实例。有了类,才可以创建对象。

现在我们给出类的更精确的定义:类是创建对象的样板,它包含对创建对象的状态描述和对操作行为的说明。

如果用面向对象的观点来分析银行账户问题,着重点在银行账户上,而不是在存款和取款的行为上,那么,银行账户就是一个类。

class BankAccount{

public:

void MakeDeposit(float amount);

float WithDraw(float amount);

bool Transfer(BankAccount&to,float amount);

private:

float balance;

float interestYTD;

char * owner;

int account_number;

);

在BankAccount类中,说明的行为是MakeDeposit、WithDraw和Transfer。这些行为对于任何客户来说是很重要的,他们在银行开户的目的就是要进行存款、取款以及转账。正因为每一个顾客(作为类的实例)都可能做这些操作,所以对行为的说明是public,即公有的。同时,在BankAecount类中,还说明了数据balance、interestYTD、owner和account—number,这些数据是私有的,只能在被定义的类中进行操作。

作为银行账户类的实例,银行的每一个银行账户都是一个对象。每个银行账户对象有相同的结构和行为。因此,任何一个银行账户对象都可以使用在类中说明的MakeDeposit等操作,而且每个银行账户对象有相同类型的数据结构balance等。

在面向对象程序设计中,一个类只在源程序的代码中出现,而并不会在一个正在内存运行的程序中出现,即类只是在编译时存在;对象作为类的实例在运行的程序中出现,并占有内存空间,它是在运行时存在的实体。所以一个类实际上是一种新的数据类型,当我们要用一个新的数据类型时,首先要在源程序中说明,而说明部分的代码是不在内存中运行的。在程序中运行的是该类的对象,对象在内存完成。

注意,我们在此必须严格区分说明和定义。前面我们用C++写的程序段是对类BankAccount的说明。在c++的类中,我们把那些行为称为成员函数,而把数据称为数据成员。

1.2.2对象的状态

在面向对象程序设计中,对象是类的实例。对象给类以生命,类想要做的事必须通过建立对象和在对象上进行操作而实现。创建类的对象的过程也叫实例化对象。对象知道什么能做和什么不能做,并且有能力修改和维护定义在对象上的数据。

可以将对象看成是一个带有状态和行为的活的实体。属于同一个类中的对象具有相同的行为,但是有各自独立的状态。什么是对象的状态?在现实世界中一个对象能独立存在的原因是它们有各自的特征,这些特征就是对象的状态。对于一个人来说,姓名、性别、身高都是其状态。

在前面的讨论中,对象的属性与对象的状态是相同的概念。这里,给对象的状态下一个定义:对象的状态是所有静态属性和这些属性的动态值的总和。,

以银行账户为例,BankAccount类对象有一项数据成员balance(余额)。假设银行不允许透支,那么每个账户的余额(balance)不应小于零。这是所有银行账户类对象的公共属性,也可以说是任何一个银行账户类对象的静态属性。这类属性是不需要检测的。然而,在BankAccount类对象的生存期的任何时刻,账户中的余额是包含在balance这个数据成员中的数值。当在对象上发生存款、转账、取款等行为时,会引起该数值的变化。因此,账户余额是一个动态变化的值,换句话说,数据成员balance的值是动态的。

对象的状态通常不仅仅是初等的数据类型(整型、实型、字符型等),而且许多对象将另一个对象作为它们状态的一部分。例如,一辆车有发动机、车轮、座位,发动机是另外一个对象,它可以作为车的状态的一部分,。又例如,一个银行对象可以将银行账户对象和顾客对象作为它的状态的一部分。

一辆车一个学校

1.2.3对象的交互

现实世界中的对象不是孤立存在的实体,他们之间存在着各种各样的联系,正是它们之间的相互作用、联系和连接,才构成了世间各种不同的系统。同样,在面向对象程序设计中,对象之间也需要联系,我们称为对象的交互。面向对象程序设计技术必须提供一种机制,允许一个对象与另一个对象的交互。这种机制叫消息传递。

在面向对象程序设计中的消息传递,实际是对现实世界中的信息传递的直接模拟。一个对象向另一个对象发出的请求被称为“消息”。消息是一个对象要求另一个对象执行某个功能操作的规格的说明,通过消息传递才能完成对象之间的相互请求或相互协作。例如,我们有一个银行账户对象和一个顾客对象,顾客对象可以请求银行账户对象的服务,如“存入300元”、“取出200元”等,当银行账户对象接到请求后,确定应执行的相应的操作并执行。

在此,我们有必要介绍一下方法的概念。方法是面向对象程序设计中的一个术语。我们知道,属于一个类的对象具有相同的行为,当某个行为作用在对象时,我们就称对象执行了一个方法。方法定义了一系列的计算步骤。所以,我们可以说一个对象请求另一个对象执行一个特定的方法,或者说一个对象发送一个消息给另一个对象,引起那个对象方法的执行。从这个意义上看,对象的行为是负责响应消息并进行操作。

一般情况下,我们称发送消息的对象为发送者或请求者,接收消息的对象为接收者或目标对象。对象中的联系只能通过消息传递来进行。接收者只有在接收到消息时,才能被激活,被激活的对象会根据消息的要求完成相应的功能。

消息具有三个性质:

(1)同一个对象可以接收不同形式的多个消息,做出不同的响应;

(2)相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;

(3)消息的发送可以不考虑具体的接受者,对象可以响应消息,也可以不响应。

实际上,对象之间的消息传递机制对应于面向过程程序设计的过程调用。消息传递并非真的传递信息,它的实质就是方法的调用。只不过方法的调用受到消息的控制,而过程调用是直接的。

消息的内容一般应包括接收者的名字、请求的方法、一个或多个参数。

由发送者向接受者发送一条消息,就是要求调用特定的方法。所调用的方法可能引起对象状态的改变,还可能会生成更多的消息,而导致调用其它对象中的方法。

在面向对象程序设计中,消息分为两类:公有消息和私有消息。假设有一批消息同属于一个对象,其中一部分消息是由其它对象直接向它发送的,称为公有消息;另一部分消息是它向自己发送的,称为私有消息。

公有消息与私有消息的确定,与消息要求调用的方法有关。如果被调用的方法在对象所属的类中是在public下说明的,则为公有;是在private下说明的,即为私有。当然,私有消息只能发送调用属于它自己的方法。

例如,一个银行账户对象的类定义是BankAccount,一个顾客对象可以发送一个公有消息WithDraw给银行账户对象,要求取款。这个消息是公有消息。

1.2.4类的确定与划分

我们知道,面向对象程序设计技术是将系统分解成若干对象,对象之间的相互作用构成了整个系统。而类是创建对象的样板,在整体上代表一组对象,设计类而不是设计对象可以避免重复的编码工作,类只需编码一次,就可以创建所有的对象。所以,当我们辑决实际问题时,需要正确地进行分“类”。我们必须理解一个类究竟表示的是哪一组对象,如何把实际问题中的事物汇聚成一个个的“类”,而不是一组数据。这是面向对象程序设计中的一个难点。

例如,考虑银行系统,我们至少应该有两类对象:顾客类和银行账户类。学校系统应至少包含两类对象:学生和教师。

如何确定和划分类?类的确定和划分并没有统一的标准和固定的方法,基本上依赖设计人员的经验、技巧以及对实际问题的把握。一个基本的原则是:寻求一个大系统中事物的共性,将具有共性的系统成分确定为一个类。

这里以模拟一个学校系统为例。系统想要达到的目标不同,确定和划分的类就不相同。若模拟的目的是为了管理教学,设置的类可能是学生、教师、教材、课程、教室、图书等。若模拟的目的是管理后勤工作,设置的类可能是宿舍、食堂、后勤工作人员、教室、图书馆等。

确定一个事物是一个类的第一步,是要判断它是否有一个以上的实例,如果有,则它可能是一个类;第二步,我们还要判断类的实例中有否绝对的不同点,如果没有,则它是一个类。因为类的每一个实例是相似的,具有相同的行为和属性结构。

例如,颜色(Color)与鲜花联系在一起只是鲜花的一种状态,因为表示颜色的是一些值:红、黄、紫、白等,所以,在此Color不是一个类。然而,如果我们把颜色同包括复杂颜色计算的图形处理系统联系在一起,则Color是一个类,因为这时的颜色是基于颜色三元素(红、绿、蓝)的成分比例和色度的变量,它不仅仅是一个数值,还可以附带很多的行为。

不能把一组函数组合在一起构成类。也就是说,不能把一个面向过程的模块直接变成类。如果简单地将模块中的函数变成成员函数而使其成为类是错误的。类不是函数的集合。

例如,考虑一个包含一组数学函数的模块,现在我们定义一个类Mathhelper:

class Mathelper{

public:

double sqrt(double aNumber),

double Power(double aNumber,int raiseto)‘

double Inverse(double aNumber);

private://任何数据项,也可能没有

};

确定Mathelper为一个类是错误的。问题在于该类中没有需要管理的私有数据。用户只需要提供参数对成员函数进行调用。这与面向过程的程序设计的函数调用没有根本的区别。

设计类要有一个明确的目标。一个好的类应该是容易理解和使用的。我们不能设计一个Color类来表示鲜花的颜色,但是可以在图形处理系统中将颜色Color设计为类。因为在两个系统中对颜色的要求不同。

1.3数据的抽象与封装

面向对象系统中最突出的特性是封装性、继承性和多态性。我们首先来讨论封装性,封装与数据抽象的概念密切相关。

1.3.1现实世界中的抽象与封装

抽象和封装的概念在现实世界中广泛存在,尤其在科学技术日益发展的今天,大量的电器被人们使用,对电器的使用体现了抽象与封装的概念。

以录音机为例,录音机上有若干按键,当人们使用录音机时,只要根据自己的需要,如放音、录音、停止、倒带等,按下与之对应的键,录音机就会完成相应的工作。这些按键安装在录音机的表面,人们通过它们与录音机交互。我们无法(当然也没必要)操作录音机的内部电路,因为它们被装在机壳里,录音机的内部情况对于用户来说是隐蔽的,不可见的。这就是所谓封装的原理。

那么,我们是如何知道放音按哪个键,停止又按哪个键的呢?是录音机的操作说明书告诉我们的,但操作说明书并不告诉我们录音机的内部将如何去做这些事。操作说明书在录音机做什么(what td do)与怎样做(how to do)之间做出了明确的区分。这就是所谓抽象的原理。抽象出来的是做什么,而不关心如何实现这些操作。

以一般观点而言,抽象是通过特定的实例或例子抽取共同性质以后形成概念的过程。抽象是对系统的简化描述或规范说明,它强调了系统中的一部分细节和特性,例如做什么,而忽略了其它部分,例如如何做。抽象的描述被称为它的规范说明,例如录音机的操作说明书,而对抽象的解释称为它的实现。

1.3.2数据的抽象与封装的基本概念

将上述观点用在数据结构上,就不难理解数据的抽象与封装。将数据结构和作用于数据结构上的操作组成一个实体,数据的表示方式和对数据的操作细节被隐藏起来,用户通过操作接口对数据进行操作。对于用户来说,只知道如何通过操作接口对该数据进行操作,而并不知道是如何做的也不知道数据是如何表示的。这就是数据的封装。

数据的抽象则是通过对数据实例的分析,抽取其共同性质的结果。数据的抽象和我们前面讨论的类的概念之间显然存在着很强的相似性。

在面向对象程序设计中,数据的抽象是在确定类时强调对象的共同点而忽略它们的不同点的结果。也可以说,在一个类的说明中我们只表示那些主要特性,而忽略次要的、引不起我们兴趣的东西。

数据的封装则是隐藏了抽象的内部实现细节的结果。封装是将数据抽象的外部接口与内部的实现细节清楚地分离开。抽象和封装是互补的。好的抽象有利于封装,封装的实体则帮助维护抽象的完整性。重要的是抽象先于封装。

以银行账户类为例,balance、interestYTD、owner、account—number等私有数据是被封装的数据,MakeDeposit、WithDraw、Transfer等成员函数的细节也同时被封装,用户看到的是MakeDeposit、WithDraw、Transfer操作提供的接口。

接口 实现细节(不可见)

在上面的讨论中,我们并没有严格区分银行账户是类还是对象,因为封装性不仅涉及到类的描述,也涉及到组成软件系统的对象。

从类的实例——对象——的角度来讨论封装似乎更合理,因为类并不真正占有存储空间。封装的单位实际是对象,但是对象的结构和行为是用它自己的类说明来描述的。对象的封装比类的封装更具体化。

可以从下面几点来理解对象的封装:

(1)对象具有一个清楚的边界,对象的私有数据、成员函数的细节被封装在该边界内;

(2)具有一个描述对象与其它对象如何相互作用的接口,该接口必须说明消息传递的使用方法; ,

(3)对象内部的代码和数据应受到保护,其它对象不能直接修改。

从用户(或应用程序员)的观点看,对象提供了一组服务,并提供了请求服务的接口。从系统设计员的角度看,封装能清楚地标明对象提供的服务界面,而水乡的行为和数据是隐蔽的,不可见。对象的这一封装机制,可以将对象的使用者和设计者分开。

1.3.3 对象的特性

(1) 封装性。

(2) 模块的独立性。

(3) 动态连接性。

(4) 易维护性

1.4 继承性

1.4.1继承的概念

上图说明了哺乳动物、狗、柯利狗之间的继承关系。图中箭头方向志向基对象。哺乳动物是一种热血、有毛发、用奶哺育幼仔的动物;狗是有犬牙、食肉、特定的骨骼结构、群居的哺乳动物;柯利狗是尖鼻子、身体颜色红白相闻、适合放牧的狗。在继承链中,每个类继承了它前一个类的所有特性。例如,狗具有哺乳动物的所有特性,同时还具有区别于其它哺乳动物(如猫、大象等)的特征。图中从下到上的继承关系是:柯利狗是狗,狗是哺乳动物。“柯利狗”类继承了“狗”类的特性,“狗”类继承了“哺乳动物”类的特性。

以面向对象程序设计的观点来看,继承所表达的是对象类之间相关的关系。这种关系使得某类对象可以继承另外一类对象的特征和能力。

若类之间具有继承关系.则它们之间具有下列几个特性:

(1)类间具有共享特征(包括数据和程序代码的共享);

(2)类间具有差别或新增部分(包括非共享的数据和程序代码);

(3)类间具有层次结构。

假设有两个类A 和B ,若类B 继承类A ,则属于类B 中的对象具有类A 的一切特征(包括数据属性和操作),这时,我们称被继承类A 为基类或父类或超类;而称继承类B 为类A 的派生类或子类。同时,我们还可以说,类B 是从类A 中派生出来的。

如果类B 从类A 派生出来,而类C 又是从类B 派生出来的,就构成了类的层次。这样,我们又有了直接基类和间接基类的概念。类A 是类B 的直接基类,是类c 的间接基类。类c 不但继承它的直接基类的所有特性,还继承它的所有间接基类的特征。

对于动物继承链,用面向对象程序设计的术语,我们称“哺乳动物”是“狗”的基类,“狗”是“哺乳动物”的派生类。“哺乳动物”、“狗”、“柯利狗”构成类的层次。“哺乳动物”是“狗”的直接基类,是“柯利狗”的间接基类。

如果类B 是类A 的派生类,那么,在构造类B 的时候,我们不必重新描述A 的所有特征,我们只需让它继承类A 的特征,然后描述与基类A 不同的那些特性。也就是说,类B 的特征由继承来的和新添加的两部分特征构成。

具体地说,继承机制允许派生类继承基类的数据和操作(即数据成员和成员函数),也就是说,允许派生类使用基类的数据和操作。同时,派生类还可以增加新的操作和数据。例如,子女类可以从父母类继承房子和汽车,当然可以使用房子和汽车,还可以对房子进行再装修。

继承的作用有两个:

其一,避免公用代码的重复开发,减少代码和数据冗余;

其二,通过增强一致性来减少模块间的接口和界面。

继承使程序不再是毫无关系的类的堆砌,而具有良好的结构。继承机制为程序员们提供了一种组织、构造和重用类的手段。继承使一个类(基类)的数据结构和操作被另一个类(派生类)重用,在派生类中只需描述其基类中没有的数据和操作。这样,就避免了公用代码的重复开发,增加了程序的可重用性,减少了代码和数据冗余。同时,在描述派生类时,程序员还可以覆盖基类的一些操作,或修改和重定义基类中的操作,例如子女对所继承的房子进行装修。

继承机制以相关的关系来组织事物,可以减少我们对相似事物进行说明和记忆的规模,为我们提供了一种简化的手段。程序员可以将相关的类收集在一起,生成高一级的、概括了这些类的共性的类。具有适应关系的类处于一个继承层次结构中,高层的类作为低层的类的抽象,使程序员能够忽略那些低层类的不同实现细节,而按照高层类编写通用程序,并且在掌握了高层类的特征以后,能够很快地掌握低层类的特征,给编程工作带来方便。

1.4.2继承的分类

继承有两种分类方法,一种是从继承源上分,另一种是从继承内容上分。

从继承源上分,继承分为单继承和多继承。

单继承是指每个派生类只直接继承了一个基类的特征。前面介绍的动物链,就是一个单继承的实例。图1.5也表示了一种单继承关系,即Windows操作系统的窗口之间的继承关系。

单继承并不能解决继承中的所有问题,例如,小孩喜欢的玩具车既继承了车的一些特性,又继承了玩具的一些特征,如图1.6所示。此时“玩具车”类不是继承了一个基类的特性,而是继承了“玩具”和“车”两个基类的特性,这是一种多继承的关系。

多继承是指多个基类派生出一个派生类的继承关系,多继承的派生类直接继承了不止一个基类的特征。

从继承内容上划分,继承可分为取代继承、包含继承、受限继承、特化继承。

取代继承:例如徒弟从师傅那里学到的所有技术,在任何需要师傅的地方都可以由徒弟来替代,这就属于取代继承。’

包含继承:例如“柯利狗”继承了“狗”的所有特征,任何一条“柯利狗”都是一条“狗”,这就属于包含继承。

受限继承:例如“鸵鸟”尽管继承了“鸟”的一些特征,但不能继承鸟会飞的特征,这就属于受限继承。

特化继承:例如“运动员”是一类特殊的人,比一般人具有更多体育特长,这就属于特化继承。

1.4.3继承与封装的关系

在面向对象程序设计中,对象具有封装性,对象之间的联系只能通过消息传递来完成,对象的私有数据和行为是被隐藏起来的。那么,继承机制的引入是否削弱了封装性?继承与封装是否产生矛盾?回答是否定的。继承与封装不但投有实质性的冲突,而且还有一定的相似性。

在面向对象系统中,封装的单位是对象,也就是说,把一个属于某一类的对象封装起来,使其数据和操作成为一个整体。如果该对象所属的类是一个派生类,那么,它只要把从基类那里继承来的操作和数据与自己的操作和数据一并封装起来,就可以了。对象依然是封装好

的整体,仍然只通过消息传递与其它的对象交互,而不是直接调用。所以,一个对象,无论它是基类的实例,还是派生类的实例,都是一个被封装的实体。因此,我们得出结论:继承机制的引入并不影响对象的封装性。

从另一角度看,继承与封装还有相似性,那就是它们都提供了共享代码的手段,因而增加了代码的重用性。

继承提供的代码共享是静态的,派生类对象在成为活动的实体以后,自动地共享其基类中定义的代码段,从而使基类对象与其派生类对象共享一段代码。

封装提供的代码共享是动态的,例如我们在一个类中说明了一段代码,那么属于该类的多个实例在程序运行时共享在类中说明的那段代码。

1.5多态性

1.5.1什么是多态性

多态性也是面向对象系统的重要特性。在讨论面向对象程序设计的多态性之前,我们还是来看看现实世界的多态性。现实世界的多态性在自然语言中经常出现。假设一辆汽车停在了属于别人的车位,司机可能会听到这样的要求:“请把你的车挪开”,司机在听到请求后,所做的工作应该是把车开走。在家里,一把凳子挡住了孩子的去路,他可能会请求妈妈:“请把凳子挪开”,妈妈过去搬起凳子,放在一边。在这两件事情中,司机和妈妈的工作都是“挪开”一样东西,但是他们在听到请求以后的行为是截然不同的,这就是多态性。对于“挪开”这个请求,还可以有更多的行为与之对应。“挪开”从字面上看是相同的,但由于用的对象不同,操作的方法就不同。

面向对象程序设计借鉴了现实世界的多态性。面向对象系统的多态性是指不同的对象收到相同的的消息时产生多种不同的行为方式。例如,我们有一个窗口(Window)类对象,还一个棋子(ChessPiece)类对象,现在我们来考虑对它们都发出“移动”的消息,“移动”操作在Window类对象和ChessPiece类对象上可以有不同的行为。

c++语言支持两种多态性,即编译时的多态性和运行时的多态性。编译时的多态性是通过重载来实现的,我们将在1.5.2介绍其概念。运行时的多态性是通过虚函数来实现的,程序运行的到底是哪个函数版本,需要在运行时通过对象发送的消息来确定。由于虚函数的概念略为复杂,并且涉及到c++的语法细节,在此不做进一步的讨论。

1.5.2重载的概念

重载一般包括函数重载和运算符重载。函数重载是指一个标识符可同时用于为多个函数命名,而运算符重载是指一个运算符可同时用于多种运算。也就是说,相同名字的函数或运算符在不同的场合可以表现出不同的行为。

下面我们给出一个函数重载的例子。

class A{

public:

void Print(int i) {语句段1;}

void Print(float f) {语句段2;}

void Print(const char*c) (语句段3;}

//其它语句

};

在上面的类定义中我们重载了三个函数,名字都是Print。它们有各自不同的功能,分别用语旬段1、语句段2、语句段3中的语句实现,在此略去语句的细节。函数名相同,而函数实现的功能不同。那么,当有要求使用Print函数的消息发送时,到底应该执行函数的哪一个呢?这就要看消息传递的函数参数是什么,根据参数来调用不同的同名函数。例如,发送的消息是Print(20),则执行的是语句段1,而发送的消息是Print(”welcome”),则执行的是语句段3。

为什么要使用重载?使用重载的目的是为了更好地表达行为共享,这种行为共享就像将相似的操作划分在一起。使用重载可以使程序员在只知道操作的一般含义,而不知道操作具体细节的情况下能正确地对某个对象使用一个操作。

另外,使用重载的直接益处是减少了程序员记忆操作名字的负担。

例如,考虑打印整数和实数这个操作,如果不能使用重载,我们必须为不同类的对象定义不同的操作名字,如PrintInteger和PrintFloat。如果需要打印的对象类非常多,程序员将需要记忆很多不同的名字,增加了程序员的负担。使用重载以后,就像我们前面定义的A类一样,我们只需记忆一个名字Print,在发送消息时给出对象的类型信息,编译器就能够确定惟一的打印这类对象所使用的方法。

1.6面向对象程序设计的语言

进行面向对象的程序设计,必须使用面向对象程序设计语言。面向对象程序设计语言应该具备下述特征:

(1)它支持对象的概念(包括对象所有的特性,如封装等);

(2)它要求对象属于类;

(3)它提供继承机制。

下面我们将通过程序设计语言的历史演变介绍一些面向对象程序设计语言。

程序设计的高级语言可以划分为四代。

第一代语言的显著特征是对数学表达式有很强的运算处理能力,其代表是50年代开发的FORTRAN和60年代开发的Algol 60。FORTRAN是第一个具有划时代意义的程序设计语言,许多重要的程序设计语言概念,如变量、数组、控制结构等被引入到程序设计语言中。

在Algol 60中人们提出了块结构的概念,块与块之间对变量实旋隔离,即在一个块中的变量可以与其它块中的变量同名而不产生混淆,这是程序设计语言中第一次尝试为数据提供保护和封装。

第二代语言的重点是如何有效地表达算法,其代表是Pascal和c。Pascal是第一个提出结构化程序设计的语言,但由于不适合推广到实用领域而成为比较理想的教学语言。70年代开发的c语言提供了丰富的数据结构和运算符,具有结构化的控制语句,用函数作为程序模块以实现程序的模块化,是面向过程程序设计的理想语言。

第三代语言是引入了抽象数据类型的程序设计语言,例如Ada。Ada语言包含一些常见的程序控制流,并具有定义新的类型、函数和子例程的能力。Ada被认为是基于对象的语言,因为它虽然支持抽象数据类型、函数和运算符重载以及多态性等面向对象的机制,但不支持继承。Ada语言中具有面向对象的构造:包。

第四代语言就是面向对象程序设计的语言了。这类语言包括Smalltalk、Object-C、Eiffel以及C++等。

提到面向对象程序设计语言,必须提到60年代开发的Simula 67,因为它被公认为是面向对象语言的鼻祖。它提供了对象、类,以及继承的概念,奠定了面向对象语言的基础,并提出了面向对象的术语。它的主要用途是进行仿真建模。

在70年代和80年代这一时期,来自于Simula和其它早期的原型语言中的面向对象的概念在Smalltalk语言中得到了完整的体现。Smalltalk是当今最有影响的面向对象语言之一。Smalltalk语言包括了Simula的面向对象的特征,如对象、类、继承等,而且数据封装比Simula 更严格。Smalltalk从70年代开始开发,经历了Smalltalk一72、Smalltalk一76和Smalltalk 80几个版本,现在我们一般用Smalltalk 80。

Ohjeet-C是在1983年前后开发的,它是对c进行扩充以后形成的面向对象的语言,但它的语法更像Smalltalk。Object-C并不是像C++那样通过扩充已有的C语言的语法来提供面向对象的支持,而是完全依赖于新引入的构造和运算符来完成类定义和消息

《C面向对象程序设计》谭浩强版复习总结

第一章C++ 基础 endl 换行并刷新输出流 setw(n) 设置字段位数为n hex,oct,dec 十六进制,八进制,十进制表示 setfill 定义填充字符 setprecision 定义浮点数的精度 left,right 左对齐,右对齐 showpoint 强制显示小数点以及全部尾部0 C++通过给常量命名的方式定义常量: const<数据类型名><常量名>=<表达式> 用const定义的标识符常量时,一定要对其初始化。在说明时进行初始化是对这种常量置值的唯一方法,不能用赋值运算符对这种常量进行赋值。 函数声明的一般形式为 函数类型函数名(参数表) 函数模板的定义 template 函数定义 例子:template T max(T a,T b){ return(a>b)? a:b; } 定义函数模板时可以使用多个类型参数,每个类型参数前面只需加上关键字typename或class,用逗号分隔: template

例子:template T1 max(T1 a,T2 b){ return (a>b) ? a : (T1)b; } 有默认参数的函数:实参与形参的结合是从左至右进行的,因此指定默认值的参数必须放在形参列表中的最右端 引用 定义对变量起另外一个名字(别名alias),这个名字称为该变量的引用。 <类型> &<引用变量名> = <原变量名>; 其中原变量名必须是一个已定义过的变量。如: int max ; int &refmax=max; refmax并没有重新在内存中开辟单元,只是引用max的单元。max与refmax在内存中占用同一地址,即同一地址两个名字。 对引用类型的变量,说明以下几点: 1、引用在定义的时候要初始化 2、对引用的操作就是对被引用的变量的操作。 3、引用类型变量的初始化值不能是一个常数。 4、一旦引用被声明,它就不能再指向其它的变量。 5、对引用的初始化,可以用一个变量名,也可以用另一个引用。 6、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。 当&m的前面有类型符时(如int &m),它必然是对引用的声明;如果前面无类型符(如cout<<&m),则是取变量的地址。 7、对常量(用const声明)的引用使用如下方式: int i=5; const int &a=i;

c++面向对象程序设计大作业

《面向对象程序设计》 大作业 题目学生成绩管理系统 学院 专业 班级 姓名 指导教师 2015 年11 月11 日

目录 一大作业的目的 (1) 二大作业的内容............................ . .. (2) 三大作业的要求与数据............... ...... . (3) 四大作业应完成的工作.................. . (4) 五总体设计(包含几大功能模块)........... . (5) 六详细设计(各功能模块的具体实现算法——流程图) (6) 七调试分析(包含各模块的测试用例,及测试结果) (7) 八总结 (8) 十参考资料 (9)

一大作业的目的 《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。 二大作业的内容 对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三大作业的要求与数据 1、用C++语言实现系统; 2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出. 3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1) 每一条记录包括一个学生的学号、姓名、3门课成绩 (2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录 的输入。) (3)、成绩信息显示浏览功能:完成全部学生记录的显示。 (4)、查询功能:完成按姓名查找学生记录,并显示。 (5)成绩信息的删除:按学号进行删除某学生的成绩. (6)、排序功能:按学生平均成绩进行排序。 (7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

第3章 面向对象程序设计基础

第3章面向对象程序设计基础

第3章面向对象程序设计基础 【1】什么是Java程序使用的类?什么是类库? 答:类是将一类事物的特性描述出来,然后如果用这个类来定义对象,则该对象就拥有了这个类所描述的所有特性。 在Java系统中,系统定义好的类根据实现的功能不同,可以划分成不同的集合,每个集合称为一个包,所有包合称为类库。 【2】如何定义方法?在面向对象程序设计中方法有什么作用? 答:方法的定义由两部分组成:方法声明和方法体。 方法的声明如下: 返回值类型方法名(参数类型形式参数1,参数类型形式参数2…){ 程序代码; 返回值; } 在面向对象程序设计中,方法的作用是完成对类和对象属性操作。 【3】简述构造方法的功能和特点。下面的程序片段是某学生为student类编写的构造方法,请指出其中的错误。 void Student(int no,String name) {

studentNo=no; studentName=name; return no; } 答:构造方法的功能是:构造方法是一个特殊的方法,主要用于初始化新创建的对象; 特点:构造方法的方法名要求与类名相同,用户不能直接调用,只能通过new运算符调用,而且构造方法是不返回任何数据类型,甚至也不返回void数据类型,即不能在构造方法前加void。 错误之处:(1)构造方法Student()前不能加void,(2)不能用return语句,(3)类名Student 首字母S改成小写s. 【4】定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。编写Java程序创建student类的对象及测试其方法的功能。 class Student { String id; String name; String sex; int age; void talk(){

JAVA语言与面向对象程序设计课后习题答案

第1章面向对象软件开发概述 1.简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向过程的编程语言各两种。 答:面向过程问题求解,以具体的解题过程为研究和实现的主体,其思维特点更接近于计算机;面向对象的问题求解,则是以“对象”为主体,“对象”是现实世界的实体或概念在计算机逻辑中的抽象表示,更接近于人的思维特点。 面向过程的编程语言:C,Pascal,Foratn。 面向对象的编程语言:C++,Java,C#。 2.简述对象、类和实体及它们之间的相互关系。尝试从日常接触到的人或物中抽象出对象的概念。 答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。类是同种对象的集合与抽象。类是一种抽象的数据类型,它是所有具有一定共性的对象的抽象,而属于类的某一个对象则被称为是类的一个实例,是类的一次实例化的结果。如果类是抽象的概念,如“电视机”,那么对象就是某一个具体的电视机,如“我家那台电视机”。 3.对象有哪些属性?什么是状态?什么是行为?二者之间有何关系?设有对象“学生”,试为这个对象设计状态与行为。 答:对象都具有状态和行为。 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是变量。每个对象个体都具有自己专有的内部变量,这些变量的值标明了对象所处的状态。 行为又称为对象的操作,它主要表述对象的动态属性,操作的作用是设置或改变对象的状态。 学生的状态:姓名、性别、年龄、所在学校、所在系别、通讯地址、电话号码、入学成绩等; 学生的行为:自我介绍、入学注册、选课、参加比赛等。 4.对象间有哪三种关系?对象“班级”与对象“学生”是什么关系?对象“学生”与对象“大学生”是什么关系? 答:对象间可能存在的关系有三种:包含、继承和关联。 对象“班级”与对象“学生”是包含关系。 对象“学生”与对象“大学生”是继承关系。 5.有人说“父母”和“子女”之间是继承的关系。这种说法是否正确?为什么? 答:“父母”和“子女”之间不是面向对象意义上的“继承”关系。因为这里的继承关系是“is a”的关系,“男人”与“人”之间可以说是继承关系。 6.面向对象的软件开发包括哪些过程?OOA模型包括哪三个层次?OOD模型在OOA模型的基础上引入了哪些工作? 答:面向对象的软件开发过程可以大体划分为面向对象的分析(Object Oriented analysis,OOA)、面向对象的设计(Object oriented design,OOD)、面向对象的实现(Object oriented programming,OOP)三个阶段。 面向对象的分析的主要作用是明确用户的需求,并用标准化的面向对象的模型规范地表述这一需求,最后将形成面向对象的分析模型。 面向对象的设计将在OOA模型的基础上引入界面管理、任务管理和数据管理三部分的内容。 7.面向对象的程序设计方法有哪些优点? 答:由于对象的概念能够以更接近实际问题的原貌和实质的方式来表述和处理这些问题,所以面向对象的软件开发方法比以往面向过程的方法有更好的灵活性、可重用性和可扩展性,使得上述“分析—设计—实现”的开发过程也更加高效、快捷。

c++面向对象课程设计报告

课程设计报告 课程名称面向对象程序设计 课题名称学生成绩管理系统 专业计算机科学与技术 班级计算机 1001 学号 01 姓名 指导教师李珍辉陈淑红李杰军 2011年 12 月 28 日

湖南工程学院 课程设计任务书 课程名称面向对象程序设计 课题学生成绩管理系统 专业班级计算机1001 学生姓名 学号 01 指导老师李珍辉陈淑红李杰军 审批 任务书下达日期 2011 年 11 月 15 日 任务完成日期 2011 年 12 月 28 日

一、设计内容与设计要求 1.课程设计目的: 面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。要求学生达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。 2.课题题目 1)公司库存管理系统 2)高校学籍管理系统 3)高校工资管理系统 4)高校人事管理系统 5)通讯录程序设计 6)学生成绩管理系统 7) 图书管理系统 8)文本编辑器的设计与实现 9)学生考勤管理系统 10)公司人员管理系统 3.设计要求: ⑴设计课题题目:每位同学根据自己学号除以10所得的余数加1选择相 应题号的课题。随意换题者不记成绩。 ⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括 系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。②完 成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模 块图)。③完成系统详细设计:包括数据库需求分析;数据库概念结构设计(E -R图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。④系 统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修 改和调整。⑤使用说明书及编程体会:说明如何使用你编写的程序,详细列出 每一步的操作步骤。⑥关键源程序(带注释)

2016年电大面向对象程序设计技术-作业题

2015秋季学期计算机科学与技术本科 《面向对象程序设计技术》作业题 (在电大在线该课程讨论区跟帖提交,注明姓名和学号以记录成绩)选择题 1.可以在本类及派生类的成员函数中进行访问的访问控制修饰符是(B) A.private B.protected C.public 2.在IDE中将编程项目采用多文件结构下,类的定义一般放在(A) A.头文件 B.程序文件 C.主程序文件 3.内联成员函数在类外定义时要将其和类定义一起放在(A) A.头文件 B.程序文件 C.主程序文件 4.下面哪个内存区域是C++中的运行时动态内存分配区域?( D ) A.代码区 B.栈区 C.数据区 D.堆区 5.对象作为函数参数使用时,一般使用(A)形式 A.引用 B.指针 C.对象拷贝

6.同类的多个不同对象的数据成员值各有不同,但不同对象可以共享类的成员函数代码, 实际调用成员函数时,是通过(B )来区分不同对象的。 A.显式给出不同对象不同地址 B.隐含的this指针 C.引用 7.下面哪一种情况不会自动调用拷贝构造函数。(E) A.用一个对象初始化另一个对象时 B.当一个对象作为值传递给一个函数时 C.当一个对象作为值从一个函数返回之前,该对象被拷贝到栈区 D.函数调用结束后,栈区中的返回对象拷贝给主调程序的对象 E.建立指向对象的指针并初始化指针值时 8.下列哪些对象的数据成员类型可以不用初始化表的方式进行初始化(D) A.常量数据成员 B.引用数据成员 C.类中对象成员 D.一般数据成员 9.下列哪一种类设计一般无需在类中设计静态数据成员以使建立的多个对象共享静态数 据数据成员。( D ) A.一个链表类的头指针和尾指针 B.一个学生类中用于保存建立了多少个学生对象的计数器 C.银行帐号类中的年利率 D.一般只用于建立一个对象的类 10.一个类中的公有(public)性质的静态数据成员,以下哪一种访问方式是错误的(D) A.对象名.静态数据成员名 B.指向对象的指针—>静态数据成员名 C.类名::静态数据成员名 D.类名.静态数据成员名 11.下列哪一个运算符不能够被类所重载(E) A.“.”成员访问运算符 B.“*”成员指针访问运算符 C.“::”域运算符 D.“?:”条件运算符 E.“=”赋值运算符

面向对象程序设计的基本思想

课题:面向对象程序设计的基本思想 (一)教学设计思想与理论依据: 《算法与程序设计》模块的教学强调通过该模块的学习,学生应该体验客 观世界的计算机对象化表征和算法思维,掌握几种基本算法;能运用面向对 象的方法,设计解决简单问题的算法,并能初步使用一种面向对象的程序设 计语言,编制程序实现算法解决该问题。 (二)教学内容分析 教材以广东教育出版社出版的信息技术(选修一)《算法与程序设计》第五章第一节内容为结构框架,本节主要介绍面向对象思想产生的必然性和面向对象思想的机制,以及通过对同一个问题采取面向过程和面向对象两种不同思想解决的区别,让学生感受到面向对象程序设计的优越性。 (三)学生情况分析: 学生已学完教材前四章内容,基本掌握了传统的面向过程结构化程序设计方法,有一定的程序设计基础。 (四)教学策略与模式: 采用讲解、任务驱动、实践和学生自主学习相结合的教学方式 (五)教学资源: 硬件:多媒体电脑教室,投影仪,广播系统 软件:学生机安装vb6.0 (六)教学目标: 知识与技能 1.了解面向对象程序设计的基本思想和面向对象思想的由来,并能够举例说 明现实世界与面向对象系统之间的对应关系。 2.了解面向对象程序设计的优越性并初步理解其实现的机制。 过程与方法 经历分析、调试解决同一问题的两种不同实现思想的程序,初步理解面向对象程序设计的优势及面向过程程序设计的缺陷。 情感态度和价值观 (1)关注传统结构化程序设计存在的问题。 (2)产生学习面向对象程序设计技术的愿望。 (3)关注面向对象技术是当前程序设计的重要发展方向。 (七)重点难点 教学重点 (1)传统结构化程序设计存在的问题 (2)面向对象程序设计所具有的优点。 教学难点 (1)面向对象思想的产生。 (2)传统结构化程序设计与面向对象程序设计的基本点比较。 (3)实现面向对象程序设计的基本机制。 教学过程:

《面向对象程序设计》教学大纲资料

面向对象程序设计教学大纲西北民族大学数学与计算机科学学院 制定的时间:二〇一二年五月

面向对象程序设计教学大纲 一、课程基本资料 主讲教师:曹永春、蔡正琦、顿毅杰 主教材:《C++面向对象程序设计》中国铁道出版社,陈维兴、林小茶编著,第2版,2009 辅助教材: 1.《C++编程思想》机械工业出版社,美Bruce Eckel,Chuck Alliso著,刘宗田,袁兆山,潘秋菱等译; 第1版,2011年 2. 《C++程序设计教程》机械工业出版社,美H.M.Deitel P.J.deitel 薛万鹏等译,2000年 3.《C++程序设计语言》,机械工业出版社,美Bjarne Stroustrup 著,裘宗燕译,2005年 4.《C++面向对象程序设计习题解析与上机指导》清华大学出版社,陈维兴主编,第2版,2009年 实验教材及参考书: 同上 课程性质:学科选修课 学分:4分 课时:72学时,其中理论课54学时,上机实验18学时 先修课程:计算机导论、C语言程序设计 课程结构:多媒体教学,课堂讨论、课内实验、课后作业 评价方案:(考核依据、评分的办法、权重的分布) ?平时成绩:10% 课堂表现(课堂提问、考勤、作业等) ?实验成绩:20%(实验报告、实验考试)

?期中成绩:20%(闭卷考试) .期末成绩:50%(闭卷考试) 参考书目: 名称编著者出版社出版年月《C++编程思想》刘宗田,袁兆山,潘 机械工业出版社2011年 秋菱等译 机械工业出版社2000年 《C++程序设计教程》H.M.Deitel, P.J.deitel 著,薛万鹏等译 《C++程序设计语言》Bjarne Stroustrup 机械工业出版社2005年 著,裘宗燕译 陈维兴主编清华大学出版社2009年 《C++面向对象程序设计 习题解析与上机指导》 推荐刊物: 1、《计算机学报》 2.《软件学报》 3.《程序员杂志》 4.《码农周刊》 5.《快乐码农》 相关网站: 1. 中国计算机学会https://www.360docs.net/doc/aa17869260.html,/sites/ccf/ 2. 计算机爱好者协会https://www.360docs.net/doc/aa17869260.html,/forum.php 3.C语言中文网https://www.360docs.net/doc/aa17869260.html,/cpp 5.中国悠悠期刊网https://www.360docs.net/doc/aa17869260.html,/ 6. 中国知网https://www.360docs.net/doc/aa17869260.html,/ 文献 1.谭浩强.C程序设计.第4版.北京:清华大学出版社,2010

面向对象程序设计(答案)

学号:姓名: 第三章面向对象程序设计作业 一、判断题 1、一个Java源程序可有多个类,但只仅有一个public类,而且程序名与public类名相同。对 2、如果类A和类B在同一个包中,则除了私有成员外,类A可以访问类B中所有的成员。对 3、接口中的成员变量全部为常量,方法为抽象方法。对 4、抽象类可以有构造方法,可以直接实例化。错 5、对static方法的调用可以不需要类实例。对 6、包含抽象方法的类一定是抽象类。对 7、方法中的形参可以和方法所属类的属性同名。对 8、接口无构造器,不能有实例,也不能定义常量。错 9、类的实例对象的生命周括实例对象的创建、使用、废弃、垃圾的回收。对 10、Java应用程序的入口main方法只有一种定义法。对 二、选择题 1、下列答案正确的是(A ) A) 在同一个Java源文件中可以包含多个类,只能有一个被声明为public B) 在同一个Java源文件中只能包含一个类,并被声明为public C) 在同一个Java源文件中可以包含多个类,都可以被声明为public D) 在同一个Java源文件中可以包含多个类,只能有一个被声明为default 2、Java实现动态多态性是通过( B )实现的。 A) 重载B) 覆盖 C) 接口D) 抽象类 3、下列哪一个是正确的方法重载描述( A ) A) 重载方法的参数类型必须不同 B) 重载方法的参数名称必须不同 C) 返回值类型必须不同 D) 修饰词必须不同 4、final关键字不可以用来修饰( D ) A) 类B) 成员方法 C) 域D) 接口 5、接口的所有成员方法都具有( B )属性 A) private, final B) public, abstract C) static, protected D) static 6、Java的封装性是通过(A )实现的 A) 访问控制B) 设计内部类 C) 静态域和静态方法D) 包 7、下列接口或类不属于.*包的是( D ) A) Collection B)Vector C) Map D) Integer 8、下述哪一组方法,是一个类中方法重载的正确写法( A ) A) int addValue( int a, int b ){return a+b;}

面向对象程序设计试题

《面向对象程序设计》试题(补考) (闭卷考试) 班级:学号:姓名: 1. 单项选择题(每小题3分,共60分) 1)C++语言对C语言做了很多改进。C++语言相对于C语言的最根本的变化是 ( )。 A.增加了一些新的运算符 B.允许函数重载,并允许设置缺省参数 C.规定函数说明符必须用原型 D.引进了类和对象的概念 2)下列描述中,不属于面向对象思想主要特征的是( )。 A.封装性B.跨平台性 C.继承性D.多态性 3)每个C++程序中都必须有且仅有一个( )。 A. 类 B. 预处理命令 C. 主函数 D. 语句 4)sizeof(float)是( )。 A. 一个双精度型表达式 B. 一个整型表达式 C. 一种函数调用 D. 一个不合法的表达式 5)设有int x=11;,则表达式(x++*2/3)的值是( )。 A. 7 B. 8 C. 11 D. 12 6)在下面的二维数组定义中,正确的是( )。 A. int a[5][]; B. int a[][5]; C. int a[][3]={{1,3,5},{2}}; D. int a[](10);

7)设有程序代码: int k=10; while(k=0) k=k-1; 则下面描述中正确的是( )。 A. 循环执行10次 B. 无限循环 C. 循环体语句一次也不执行 D. 循环体语句执行一次 8)对表达式for(表达式1; ; 表达式3)可理解为( )。 A. for(表达式1; 0; 表达式3) B. for(表达式1; 1; 表达式3) C. for(表达式1 ; 表达式3;) D. for( ; ; 表达式3) 9)下面的哪个选项不能作为函数的返回类型? ( )。 A.void B.int C.new D.long 10)有如下说明: int a[ ]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p=a; 则下面哪一个表达式的值为9 ( )。 A. *p+9 B. *(p+8) C. (*p += 9) D. p+8 11)有如下函数定义: void func(int a, int &b) {a++; b++;} 若执行代码段: int x=0, y=1; func(x, y); 则变量x和y值分别是( )。 A.0和1 B.1和1 C.0和2 D.1和2 12)下列写法正确的是( )。 A. int *p = 15; B. const int a; a=15; C. int& b; D. int b = 15; int* a = &b; 13)下列选项中,与实现运行时多态性无关的是( )。 A.重载函数B.虚函数C.指针D.引用 14)拷贝构造函数的参数一般是( )。 A. 某对象名 B. 某对象成员名 C. 某对象的引用名 D. 指向对象的指针名 15)对类的构造函数和析构函数描述正确的是( )。 A.构造函数可以重载,析构函数不能重载

完成Java面向对象程序设计实验课的心得体会范文

Java面向对象程序设计实验课的心得体会经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。 在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。 Java思想:Java是一门面向对向语言,他定义一切都是对象面向对象,就是面对现实; 现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等 原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。 面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。 我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对! 我的理解: 1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),

面向对象程序设计C++课后题答案

第一章:面向对象程序设计概述 [1_1]什么是面向对象程序设计? 面向对象程序设计是一种新型的程序设计范型。这种范型的主要特征是: 程序=对象+消息。 面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。 面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。 [1_2]什么是类?什么是对象?对象与类的关系是什么? 在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。对象可以认为是:数据+操作 在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。 类和对象之间的关系是抽象和具体的关系。类是多个对象进行综合抽象的结果,一个对象是类的一个实例。 在面向对象程序设计中,总是先声明类,再由类生成对象。类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。 [1_3]现实世界中的对象有哪些特征?请举例说明。 对象是现实世界中的一个实体,其具有以下一些特征: (1)每一个对象必须有一个名字以区别于其他对象。

(2)需要用属性来描述它的某些特性。 (3)有一组操作,每一个操作决定了对象的一种行为。 (4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。例如:雇员刘名是一个对象 对象名:刘名 对象的属性: 年龄:36 生日:1966.10.1 工资:2000 部门:人事部 对象的操作:吃饭开车 [1_4]什么是消息?消息具有什么性质? 在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。当对象接收到发向它的消息时,就调用有关的方法,执行相应的操作。消息是一个对象要求另一个对象执行某个操作的规格的说明,通过消息传递才能完成对象之间的相互请求或相互协作。消息具有以下3个性质: (1)同一个对象可以接收不同形式的多个消息,做出不同的响应。 (2)相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的。(3)消息的发送可以不考虑具体的接收者,对象可以响应消息,也可以不响应。[1_5]什么是方法?消息和方法的关系是什么? 在面向对象程序设计中,要求某一对象作某一操作时,就向该对象发送一个响应的消息,当对象接收到发向它的消息时,就调用有关的方法,执行响应的操作。方法就是对象所能执行的操作。方法包括界面和方法体两部分。方法的界面也就是消息的模式,它给出了方法的调用协议;方法体则是实现某种操作的一系列计算步骤,也就是一段程序。在C++语言中方法是通过函数来实现的,称为成员函数。消息和方法的关系是:对象根据接收到的消息,调用相应的方法;反过来,有了方法,对象才能响应相应的消息。 [1_6]什么是封装和抽象?请举例说明。

面向对象程序设计大作业(C++)

面向对象分析/设计课程大作业 银行业务处理系统 13级软件学院测试班 1367004029 曾丹 1.需求分析 随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银行客户的需要。 现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务:同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争,如何提供更多的金融产品和更优质的服务,如

何吸引更多的客户,如何利用计算机技术加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆在各家银行面前的一个迫切需要解诀的问题。 近几年来,各商业银行加快了与社会各业的合作,利用自身的网点优势和业务特点,为其提供各种高效、快捷的代收代付业务,也就是中间代理业务,目前以与广大人民群众生活密切相关的各项缴费业务如水电费、电话费、手机费等代收业务为主,这些业务开展方式多种多样,但一般都离不开计算机的高效管理支持。 随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行的电子化水平和相应的管理水平提出了更高的要求。如何利用电子化的手段构建一个高效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大,响应时间长。 特别是银行每天要处理大量的存取款事件,做好存取款是银行工作重要的环节,然而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。 主要用于银行的储蓄卡管理系统,它可以帮助我们有效、准确、并且高效实现的完成存取事件。此系统操作方便效率、安全性高,只要客户开户并设定好密码就可以轻松的实现存取款。 系统实现的主要有储蓄卡开户管理、存取款管理、用户查询历史数据显示、注销等功能。 储蓄卡开户管理模块:卡号、姓名、开户金额、身份证号、地址、电话、密码、确认密码和保存组成。(开户金额必须是数字,密码和确认密码必须一样是六位数字) *注销模块:一旦注销该卡号就不存在且余额提醒你取出。 通过该银行账户管理系统地运行,使办公人员可以轻松快捷的完成对账户管理的任务,提高账目管理效率,使银行的账目管理工作系统化、规范化、自动化。 该银行帐目管理信息系统,优点是设计过程思路清晰、模块划分简洁,设计各阶段分工明确。经过实践证明,该划分是合理的,极大得提高了本系统的实现。

面向对象程序设计完整版

Object- Orien ted Programmi ng C++ 主讲成长生 东华大学计算机科学与技术学院

第一章概述 § 1.1 面向对象程序设计的基本思想 C++是基于C语言发展的,又冲破C语言局限的面向对象的程序设计语言。它与Java 语言都作为当前计算机科学的主流语言, 越来越受到用户的欢迎。 要弄清楚什么是面向对象的程序设计, 首先了解和回顾传统的 ( Pascal(或C))结构化程序设计方法及其设计思想、程序结构及特点。SP(Structure Programming)是60 年代诞生的针对当时爆发的所谓”软件危机” , 为此发展形成了现代软件工程学的基础。 SP的总的设计思想是: . 自顶向下、层次化 . 逐步求精、精细化 程序结构是按功能划分基本模块的树型结构, 使模块间的关系尽可能简单独立。因此SP的程序的基本特点是: . 按层次组织模块(战略上划分战役) . 每一模块只有一个入口, 一个出口 ?代码和数据分离(程序=数据结构+算法) 归纳得到: SP 把数据和过程(代码、函数)分离为相互独立的实体, 用数据代表问题空间中的客体借以表示实际问题中的信 息; 程序代码则用来处理加工这些数据。程序员在编程时 必须时刻考虑所要处理的数据结构和类型。对不同的数据格式即使要作同样

的处理计算, 或者要对相同的数据格式作不同的处理都必须编写不同的程序(如两个整型数和两个浮点数相加)。这样的编程方法,即传统的SP方法设计出来的程序或系统其可重用的成分很少。其次把数据和代码作为不同的分离实体时, 总存在着用错误的数据调用正确的程序模块, 或用正确的数据调用错误的程序模块的危险, 从而使数据与程序始终保持兼容, 已成为程序员 的一个沉重的负担。在开发一个大型软件课题中, 当工程进入到 后期若用户改变了方案要求, 很容易使技术人员的前期工作受到摧毁性的打击,使其前功尽弃。为克服以上的弊端或者该SP方法难以控制处理的矛盾而产生了面向对象程序设计方法, 即Object —Oriented Programming ----------- OOP从二十世纪六十年代提出对象 的雏形, 到七十年代美国国防部的专用语言Ada 语言, 直到当前国际上流行的高品味的Java 和C++(Tc++,Balandc++ 及Vc++), , 应该讲OOP方法与技术吸取了SP的一切优点,同时又正视和顺应现实世界由物质和意识二部分组成。映射到面向对象的解空间就是: 具体事物—对象; 抽象概念—类。 OOP的基本原理是用问题领域的模型来模拟大千世界,从而设计出尽可能直接、自然地表示问题求解方法的软件, 这样的软件由对象组成, 而对象则是完整反映客观世界事物具有不可分割的静态属性(”数据结构” )与动态行为(”方法” )的。而且它们是既有联系又

C面向对象程序设计知识点汇集

C#面向对象程序设计知识点汇集 第一章:C#入门 1.namespace关键字 namespace即命名空间,是定义命名空间的关键字,命名空间包含类,是类的组织方式。namespace 命名空间名 { …//类的定义 } 2.using关键字 using关键字用于导入命名空间 using命名空间名; 3.class关键字 class即类,是定义类的关键字。C#中必须用类来组织程序的变量和方法。 4.Main()方法 C#程序必须且只能包含一个Main()方法,它是程序的入口点。 static void Main(string[] args){} static void Main(){} static int Main(string[] args){} static int Main(){} 5.行输出方法 语句“Console.WriteLine("Hello .NET!");”的功能是向显示屏输出双引号之间的字符串。语句“Console.ReadLine();”的功能是输入一个字符串 6.C#程序结构 C#程序的组成要素如下: 1) 命名空间:命名空间包含一个或多个类。 2) 类。 3) 方法:方法必须包含在某一个类中,作为类的一个成员,每个程序有且仅有一个Main()方法。 4) 语句:语句是C#应用程序中执行操作的命令。C#中的语句必须用分号“;”结束。 5) 关键字:关键字也叫保留字,是对C#有特定意义的字符串。 6) 大括号:在C#中,括号“{”和“}”是一种范围标志,表示代码层次的一种方式。7.C#程序书写格式 1)缩进 2) 字母大小写 C#是大小写敏感的语言,它把同一字母的大小写当作两个不同的字符对待。 3) 程序注释 (1) 单行注释,以双斜线“//”开始,一直到本行尾部,均为注释内容。 (2) 多行注释,以“/*”开始,以“*/”结束,可以注释多行,也可以注释一行代码中间的一部分,比较灵活。 (3) 文档注释,使用“///”,若有多行文档注释,每一行都用“///”开头。 8.Console类 Console类是System命名空间中预定义的一个类,用于实现控制台的基本输入输出。

面向对象程序设计作业参考答案

习题一 5、分析下面程序运行的结果。 # using namespace std; int main() { cout<<”This”<<”is”; cout<<”a”<<”C++”; cout<<”program.”< using namespace std; int main() { int a,b,c; a = 10; b = 23; c = a + b; cout<<'a + b ="; cout< using namespace std; int main() { int a, b; a = b = 0; int c = a + b; cout<<”a + b =”<

9、输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。 修改后的程序如下: #include using namespace std; int add(int x,int y); int main() { int a = 0, b = 0; int c = add(a,b); cout<<" a + b ="<

面向对象程序设计基本概念

面向对象程序设计基本概念 面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。 类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。 消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。 面向对象主要特征: 封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。 继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。 多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。

面向对象程序设计实验教材

实验1J a v a语言基础 一、实验目的 1.了解J D K的安装与使用、熟悉Ja v a的运行环境。 2.掌握编写与运行Ja va Ap pl ica t io n程序的方法。 3. 掌握编写与运行Ja va Ap ple t程序的方法。 4熟练掌握J ava中的数据类型、运算符、表达式及流程控 制语句。 5掌握数组的定义、建立及其使用方法。 6. 熟悉Ja v a一般程序的结构。 7通过以上内容,掌握Ja va 语言的编程规则。 二、实验要求 1.安装并设置J a va S DK 软件包。 2.编写一个Ja va 应用程序,在屏幕上输出”he ll o,ja v a!”。3.编写一个Ja va 小应用程序,在屏幕上输出”h el lo,ja v a!”。4.掌握运行J av a 程序的步骤。 5.浏览S DK 自带的Ap pl et 应用小程序。 6.编写一个声明J a va 不同数据类型变量的程序。 7.编写一个使用运算符、表达式、变量的程序。 8.编写表达式语句、复合语句的程序。 9.编写使用不同选择结构的程序。 10.编写使用不同循环结构结构的程序。 11.编写一个使用Ja va 数组的程序。 三、实验内容 (一)SDK 的下载与安装 1.机器要求 J a va 对机器运行要求不高。下面给出的是基于Wi nd ow s 平台的机器要求。 硬件要求:CP U P II以上,64M 内存,1O OM 硬盘空间即可。 软件要求:Wi nd ows98/Me/X P/NT/2000,I E 5 以上。2.下载SD K 为了建立基于SD K 的Ja va 运行环境,需要先下载Su n 的免费SD K 软件包。SD K 包含了一整套开发工具,其中包含对编程最有用的是Ja va 编译器、A p pl et 查看器和J a va 解释器。 在浏览器中输入ht t p://ja va.s un.co m/,在页面的 “Do wn lo ad J2S E v 1.4.2_01 ”栏可以选择下载J2SE v 1.4.2_01 SD K 软件包。有两种选择:一种是在线安装“Wi n do ws I n st al la ti on”;一种是离线安装“W i nd ow s Of fl in e I n st al la ti on”。 3.安装SD K 运行下载的“j2sdk-1_4_2_01-w in dow s-i586.ex e”软件

相关文档
最新文档