文档库 最新最全的文档下载
当前位置:文档库 › 面向对象

面向对象

第1章实验 -- JAVA 入门

1.1 实验目标

以下的实验是针对没有任何编程基础的练习者设计的。实验的目的在于:

(1)安装配置基本的JAVA程序运行环境;

(2)练习使用Java 2 SDK 编译器;

(3)了解简单的编程概念和Java程序的不同类型,学习JAVA语句的基本语法;

(4)了解SDK 编译器显示的错误信息的含义。

1.2 实验说明

本章实验教程将指导安装JAVA程序的运行环境,一步一步地指导练习者编辑(Edit),编译(Compile)和运行(Run)一些入门级的JAVA程序,并解释相关的一些基础的JAVA语法(Syntax)。实验中,练习者将改变正确代码,观察代码错误时JAVA编译器显示出的相应的错误信息。根据作者JAVA教学的经验,理解错误信息的含义是相当重要的,这能帮助程序员迅速定位代码语法错误(Syntax Error)。当然,现在有大量的JAVA IDE(Integrated Development Environment,集成编程工具),可以帮助程序员定位语法错误,甚至自动改正语法错误,如Eclipse, Netbeans, JBuilder。在本次实验中, 我们不主张使用这些IDE。对于JAVA编程语言的初学者, 使用简单的JAVA编码工具, 如记事本, Editplus, 一个一个字符地键入JAVA代码能帮助我们尽快熟悉JAVA基础语法。

以下的实验分为三种类型, 每个练习前面有一个字母的标注:

D - 例程, 表示这是一个例子, 要求练习者阅读指南和代码;

I - 交互式练习, 练习者完成实验指定的简单任务,如修改部分代码, 观察程序运行时的变化等;

W - 热身练习, 练习者的编程工作量逐渐加大。

还有一种练习类型, 将在下一实验中涉及到:

P - 完整编程,要求练习者根据要求,完成完整的JAVA程序。

1.3 实验准备

从本实验教程光盘中拷贝Lab01文件目录到本地磁盘, 如C: 盘。Lab01 文件目录中将包含本次实验所需的所有资料。Lab01的相关资料也可以从本实验教程的网站下载。

1.4 实验任务

实验1.4.1: (I)JAVA环境配置方法

JAVA是面向对象的编程语言,JDK(Java Development Kit, Java开发工具包)作为其开发包,可以开发Web应用及各种类型的桌面程序。JDK是编写Java程序的基础,它集成了编译JAVA源程序的

编译器、运行JAVA类文件的解释器等必备工具。

JDK的版本分为三类:

(1)J2ME(Java 2, Micro Edition): 针对消费类电子产品(如移动电话、可视电话等)的软件开发

的高度优化的Java运行环境。

(2)J2SE(Java 2, Standard Edition):SUN公司针对桌面开发以及低端商务计算解决方案而开发

的版本。

(3)J2EE(Java 2, Enterprise Edition):是一种利用Java 2平台来简化企业解决方案的开发、

部署和管理相关的复杂问题的体系结构。J2EE的基础是J2SE,J2EE不仅巩固了标准版中的许多优点,同时还提供了对EJB、Servlet、JSP以及XML技术的全面支持。

我们目前的实验环节需要安装J2SE,实验的内容也是基于J2SE的最新版本J2SE 5.0。步骤如下:

1. 下载和安装JDK。

整个实验中我们采用SUN公司发布的JDK1.5(开发代号猛虎tiger),所对应的平台有Linux、Solaris和Windows等等。目前最新版本JDK下载地址:https://www.wendangku.net/doc/f02562024.html,/。教程中所有的实验环境都是基于Windows2000/XP操作系统的。

进入SUN公司的JDK下载页面,如图1.1所示,点击Download JDK 5.0,接受协议。

图1.1 JDK5.0 下载链接

选择下载基于Windows平台的JDK5.0, 点击jdk-1_5_0_07-windows-i586-p.exe选择离线安装,多语言(Windows Offline Installation, Multi-language), 如图1.2所示。

图1.2 Windows平台的JDK5.0下载链接

从SUN官方服务器下载JDK有点慢,需要多等一会儿。下载过程中有可能出现断网,可使用网际快车(FlashGet)等支持断点续传的工具下载。本实验教程光盘中包含了J2SE5.0 Update7,可选择从光盘直接安装。

下载完成后,双击jdk-1_5_0_07-windows-i586-p.exe进行安装,安装过程中程序会要求选择安装路径,JDK默认安装目录在C:\Program Files\Java\jdk1.5.07。当然,练习者也可更改默认安装目录。在此练习中,JDK安装目录使用安装程序默认值,安装过程中一律采用默认值。

2. 配置环境变量。

软件安装结束后开始配置机器的环境变量。具体的设定方法: 右键点击我的电脑->属性->高级->环境变量,然后修改系统变量框里的值,如图1.3所示。

图1.3 环境变量选项卡

Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、PATH 和 CLASSPATH。

JAVA_HOME指向的是JDK的安装路径,如C:\Program Files\Java\jdk1.5.0_07,如果安装时更改了默认路径,以实际安装路径为准。在JDK安装路径下应该能够找到bin、lib等目录。JAVA_HOME 设置方法如图1.4所示。

图1.4 编辑系统变量JAVA_HOME对话框

PATH环境变量原来Windows里面就有,只需修改一下,使它指向JDK的bin路径。这样在DOS 控制台下面编译、执行程序时就不需要再键入一大串路径了。PATH环境变量的设置方法如图1.5所示。保留原来PATH的内容,并在原有内容前加上“%JAVA_HOME%\bin;”,其中%JAVA_HOME%是指引用上一步设定好的环境变量JAVA_HOME的变量值。

图1.5 编辑系统变量PATH对话框

设置CLASSPATH环境变量。环境变量CLASSPATH告诉JA V A编译程序到什么地方搜索那些不是JDK平台本身附带的类库,设置方法如图1.6所示。

CLASSPATH = .;%JAVA_HOME%\lib\tools.jar; %JAVA_HOME%\dt.jar;

图1.6 编辑系统变量CLASSPATH对话框

要注意最前面的".;",就是“句点分号”。设置后,JDK搜索类时将首先查找当前目录中的类文件。dt.jar是关于运行环境的类库,主要是swing的包;tools.jar是关于一些工具的类库。

设置好JAVA_HOME, PATH 和CLASSPATH环境变量后点击确定,关闭系统选项卡,完成JAVA环境配置。

3. 测试JDK安装。

打开MS-DOS窗口,键入java -version并按回车键,如图1.7所示,屏幕将打印出当前的JDK版本信息。

图1.7 JDK安装测试

实验1.4.2: (D)JAVA Application简单小程序

Java程序的多种类型: 服务器端Servlet小程序、Applet小程序、Application应用程序。

Servlet是运行在服务器端的小程序,在最后一章实验网络程序设计中会详细解释。Applet是嵌入到网页里完成某种特殊功能的小应用程序,由浏览器中的JAVA解释器负责解释执行。Application 应用程序是独立运行在JAVA虚拟机上的应用程序。

在运行JAVA程序前, 所有的JAVA源文件(Source File)必须预先进行编译(Compile)。对源文件的编译工作可以在MS-DOS窗口进行。步骤如下:

1.确认Lab01文件目录已复制到本地磁盘。

实验中我们假设Lab01文件目录位于C盘根目录。 Lab01 文件目录中将包含本章实验所需的所有资料。

2.打开MS-DOS窗口,如图1.8所示。

具体方法之一:Windows的开始→程序→附件→命令提示符。

图1.8 MS-DOS窗口

如果DOS窗口占据了整个电脑屏幕, 使用[Alt][Enter]改变DOS窗口大小。

3.在MS-DOS的命令提示符下, 键入:

C:

cd \Lab01

命令的运行结果如图1.9所示。

图1.9 cd命令执行结果

4.在C:\Lab01> 提示符后, 键入:

dir

dir命令将列出Lab01目录中的所有文件。在此Lab01目录中,包含了一些JAVA源文件, 即后缀为 .java 的文件。

5. 使用以下的命令编译JAVA源文件HelloWorld.java:

javac HelloWorld.java

运行HelloWorld.java:

java HelloWorld

程序在MS-DOS窗口显示:

C:\Lab01>

Hello World! This is an application!

6.HelloWorld.java源代码清单见程序清单1-13。

程序清单1-13:HelloWorld.java

public class HelloWorld {

public static void main(String args[]) {

System.out.println("Hello World! This is an application!");

}

}

这个简单的J ava程序包含了基本的代码块,本实验教程中的大多数程序都有类似的基本结构。下面对每行代码做一个简单的分析。

public class HelloWorld

Java程序是由类(class)构成的。第1行代码定义一个类,它的类名叫HelloWorld(Java编程惯例要求类名的第一个字母为大写字母)。

public static void main(String[] args)

类(class)中包含方法(method)。第2行代码定义了一个main方法,对于一个应用程序来说main方法有且只有一个,程序的执行是从main方法的第一条语句开始的。圆括号中的“String args[ ]”是传递给main方法的参数,参数名为args。

System.out.println("Hello World! This is an application!");

main方法中的语句包含在一对花括号{ }之间。第3行代码是一个简单的输出语句。

实验1.4.3: (D)JAVA Applet简单小程序

下面是一个简单的Applet程序:

程序清单1-11:HelloWorldApplet.java

// HelloWorldApplet

import java.applet.*;

import java.awt.*;

public class HelloWorldApplet extends Applet {

public void paint(Graphics g) {

g.drawString("Hello World! This is an applet!\n", 20, 20);

} // paint

} // class HelloWorldApplet

程序中用import语句导入java.awt和java.applet包 ,使得该程序可能使用这些包中所定义的类。类名HelloWorldApplet后面的关键词extends指明HelloWorldApplet程序是Applet的子类,是一个Applet小程序。用extends指明它是Applet的子类。paint()方法中:

g.drawString("Hello World! This is an applet!\n", 20, 20);

实现了字符串“Hello World! This is an applet!”的输出,输出字符串的坐标为(20,20),其中坐标是用象素点来表示的。

这个程序没有实现main()方法 ,这是Applet与应用程序Application的区别之一。

1.编译、运行Java Applet小程序:

把编译后的HelloWorldApplet嵌入到HTML文件中,在MS-DOS窗口用小程序查看器appletviewer 运行或者在支持Java的浏览器上运行。具体的步骤如下:

首先,正确编译HelloWorldApplet.java程序得到相应的字节码文件HelloWorldApplet.class。

然后,编写ViewHelloWorldApplet.html文件,把“HelloWorldApplet.class”嵌入到html文件代码中。ViewHelloWorldApplet.html源代码见程序清单1-12。

程序清单1-12:ViewHelloWorldApplet.html

HelloWorld Applet

codeBase="https://www.wendangku.net/doc/f02562024.html,/products/plugin/1.3/

jinstall-13-win32.cab#Version=1,3,0,0"

width=300

height=326

align=center>

最后,在MS-DOS窗口执行:

C:\Lab01>appletviewer ViewHelloWorldApplet.html

程序的显示结果如图1.10

图1.10 用小程序查看器appletviewer查看HelloWorldApplet

如果执行appletviewer出现下面的警告:

警告:不能读取 AppletViewer 的属性文件: C:\Documents and Settings\Administrator \.hotjava\properties 使用默认值。

这是由于applet编程的限制很多,所以也经常被称作关在“沙箱”里。运行Applet需要Java 的运行时安全系统授权。一个简单的解决方法:

打开MS-DOS命令提示窗口,输入PolicyTool并按Enter会弹出一个类似图1.17的对话框,点击添加规则项目→添加权限→许可下拉菜单→选择 All Permission →确认→完成。从文件菜单中选择另存为,在C:\Documents and Settings\Administrator(当前操作系统用户名)\中保存.java.policy文件(不同的操作系统可能有所不同,根据情况而定。例如图1.11中弹出的提示说明.java.policy文件要保存在C:\Documents and Settings\sl\路径下。)

图1.11 PolicyTool对话框

成功保存规则文件后,重新执行appletviewer。

用浏览器(IE或FireFox)打开ViewHelloWorldApplet.html,显示结果如图1.12所示。

图1.12用IE5浏览器查看HelloWorldApplet

2.比较HelloWorld.java和HelloWorldApplet.java

写下Applet与Application两类Java程序的区别:

________________________________________________________________________________

________________________________________________________________________________

________________________________________________________________________________

实验1.4.4: (I)编译和运行一个JAVA程序

1.在MS-DOS下C:\Lab01>提示符后使用以下的命令编译JAVA源文件Add.java:

javac Add.java

记住, JAVA编程语言是大小写敏感的。Add.java和add.java为两个不同的JAVA源文件。如果在编译JAVA源文件时出现:"error: Can't reaC: YourFileName.java", 这常常意味着(1)忘记更改盘符,当前目录下没有此JAVA文件 (2) 文件名写错了。如果遇到这样的错误信息,请检查MS-DOS 提示符,确定正确的目录地址;认真检查文件名的拼写特别是大小写,然后重新键入编译命令。

一旦JAVA源文件Add.java编译通过,在Lab01目录下将出现一个后缀为.class的文件Add.class。在MS-DOS的命令提示符下键入 dir 确认Lab01目录中包含这个新生成的文件。

后缀为 .java 的文件是JAVA源代码(Source Code)文件, 由程序员编写,易读易修改;而后缀为 .class 的文件是JAVA字节码(Byte Code)文件。字节码接近(不完全等同)于机器语言。在JAVA程序运行前,JAVA源文件必须编译成相应的字节码文件。

2. 运行JAVA程序。在C:\Lab01> 提示符后,键入:

java Add

如果编译和运行此程序正确,,在MS-DOS窗口将显示输出: 8 + 9 = 17. 如图1.13所示

图1.13 Add.java程序执行结果

实验1.4.5: (I)使用Windows记事本编写JAVA源代码文件

1. 用记事本打开Lab01文件目录中的Add.java文件。

可以将电脑设置成总是使用记事本打开JAVA源文件。具体操作如下:选中后缀为.java的文件,右击鼠标,选择[打开方式] [选择程序],选中[记事本],勾选[始终使用该程序打开这些文件]。如图1.14所示。现在,只要双击任何后缀为.java的文件, 就可以在记事本中打开。

图1.14文件打开方式对话框

程序清单1-1:Add.java

// JAVA编程语言实验第一章

// Add.java

public class Add {

public static void main(String[] args) {

int num1, num2, sum;

num1 = 5;

num2 = 9;

sum = num1 + num2;

System.out.println(num1 + " + " + num2 + " = " + sum + ".");

} // method main

} // class Add

2. 一旦用记事本打开Add.java, 修改如下语句:

num1 = 8;

修改后:

num1 = 5;

除了将8变成5以外,不要对程序作任何修改。在记事本中保存修改后的文件, 具体操作: [文件] [保存], 注意: 不是[另存为]。现在,在MS-DOS的命令提示符下重新编译和运行JAVA程序: javac Add.java

java Add

如果操作正确,MS-DOS窗口显示:"5 + 9 = 14."

3.一旦这个简单程序能够正确运行,接下来对源代码进行更多的修改,将两个整数相加改写成两个

整数相乘。步骤如下:

(1)在修改Add.java之前,创建一个此文件的副本。具体操作:在记事本中打开Add.java文件,

选择[文件] [另存为],在弹出的对话框中填写Multi.java,然后保存。

(2)打开Multi.java源文件,修改代码。一共有五处代码需要修改。

(3)首先,修改类名:

public class Add {

修改后:

public class Multi {

注意,JAVA程序公共类的类名必须和文件名相同。

(4)其次,修改语句:

sum = num1 + num2;

修改后:

sum = num1 * num2;

这里,将加号(+)变成乘号 (*)。JAVA语言和其他编程语言一样,乘法使用星号(*),而不是“x”。

被修改的这条语句称为赋值语句(Assignment Statement),其中的sum, num1 和num2被称为变量(Variable)。程序运行时,这些变量存储在计算机内存中。赋值语句由变量名,赋值符号(=)和表达式组成,赋值符号(=)将右边的值赋给左边的变量。

(5)修改后的程序不再进行加法运算,而是进行乘法运算,变量名sum 不如product恰当。即使

使用不恰当的变量名,程序也能正确运行,但不恰当的变量名可能会降低源代码的可读性,给其他程序员在修改程序时带来不便。

将源文件中所有的sum替换成product。在Add.java中,sum出现了三次,将它们一一修改。

(6)修改输出语句:

System.out.println(num1 + " + " + num2 + " = " + sum + ".");

修改后:

System.out.println(num1 + " * " + num2 + " = " + product + ".");

将" + "替换成" * ",使屏幕的输出语句显示正确的算术运算符。注意不要改变其他的加号,另外的这些加号不是用于计算,而是用于连接不同的字符串生成输出语句。

(7)最后,修改源文件顶部和结束部分的注释,

// Multi.java

// class Multi

注释指程序中的解释性文字,编译器将不对其编译,即注释不是程序的一部分。对代码进行编译时,注释部分会被编译器忽略。但书写良好的注释极为重要,注释能提供代码的相关信息,如源代码的版本,源代码中变量的意义,其中使用的算法等。遵循某种规范书写的注释,甚至可以用于编写JAVA文档。在JAVA编程中,注释行通常是以双斜线(//)开始的。

(8)保存修改后的Multi.java文件。在MS-DOS的命令提示符下编译此JAVA程序:

javac Multi.java

成功编译源文件后,可运行程序:

java Multi

记住:每次对JAVA源文件进行修改,对修改后的程序进行测试,都遵循这样的次序:源代码修改,保存,编译,运行。

实验1.4.6: (I)带消息对话框的JAVA程序

1. 在C:\Lab01目录下,编译和运行JAVA程序:

javac AddDialog.java

java AddDialog

运行此JAVA程序,会跳出一个单独的对话窗口,如图1.12所示。选择[确定]按钮可重新返回MS-DOS窗口命令提示符。

图1.15 JOptionPane对话框

2.在Lab01文件夹,双击AddDialog.java文件,用记事本打开源代码文件。

程序清单1-2:AddDialog.java

// Add.java

// 没有输入值但有弹出对话框的简单加法程序

import javax.swing.JOptionPane;

public class AddDialog {

public static void main(String[] args)

{

int number1, number2, sum;

number1 = 2;

number2 = 3;

sum = number1 + number2;

JOptionPane.showMessageDialog(null,

number1 + " + " + number2 +

" = " + sum + ".");

System.exit( 0 ); // 结束程序

} // method main

} // class AddDialog

AddDialog.java程序和Add.java程序非常类似,但有几个语句不同。下面就是显示对话框的语句:

JOptionPane.showMessageDialog(null, num1 + " + " + num2 + " = " + sum + ".");

在AddDialog.java程序的顶部位置,多了这样的语句:

import javax.swing.JOptionPane;

import 是JAVA语法中的一个关键词(keyword), 用于引入JAVA类库(Class Libray)中特定的JAVA类或package包。此程序引入了java.swing.JOptionPane类,java.swing.JOptionPane 类帮助生成显示信息的标准对话框,如图1.15所示。

3. 对代码做如下修改:

// import javax.swing.JOptionPane;

在import语句前插入//, 成为一个注释语句。Java中可以采用三种注释方式:

(1)// 用于单行注释。注释从//开始,终止于行尾。

(2)/*...*/ 用于多行注释。注释从/*开始,到*/结束,且这种注释不能互相嵌套。

(3)/**...*/ 是Java所特有的doc注释。它以/**开始,到*/结束。这种注释主要是为支持JDK

工具javadoc而采用的。

注释不仅仅是对程序的解释,有时它对于程序的调试也非常有用。譬如说可以利用注释屏蔽一条语句以观察变化,发现问题和错误,如同正在进行的练习。

4.保存和编译修改后的AddDialog.java源文件, 写下编译JAVA源文件时的错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________ 这段错误信息的意思是:编译器不理解JOptionPane是什么, 没有import语句

import javax.swing.JOptionPane;

编译器无法找到相关信息。

5.将import语句前的 // 去掉,保存源文件后重新编译。保证源代码正确,继续完成下面的练习。实验1.4.7: (I)简单的计算程序

1.编译、运行Area.java程序。在MS-DOS窗口命令提示符下键入:

javac Area.java

成功编译后,运行该JAVA程序:

java Area

2.用记事本打开Lab01文件夹中的Area.java源文件(假设Lab01文件夹放在C盘根目录下)。

程序清单1-3:Area.java

// Area.java

// 没有输入值的矩形面积计算

public class Area {

public static void main( String[] args )

{

float length, width, area;

length = 15.5f;

width = 22;

area = length * width;

System.out.println(

"长为" + length + " 和\n" +

"宽为" + width + " 的矩形面积是" + area + "." );

} // method main

} // class Area

其中计算长方形面积的语句:

area = length * width;

为赋值语句。语句中的area, length, 和 width 是变量(Variable)。变量在使用前必须预先声明(Declaration)。简单地理解,变量声明就是说明变量的数据类型,为变量分配相应的内存空间。语句:

float length, width, area;

声明了area, length, 和 width的数据类型为float(单精度浮点小数)。

比较Add.java源文件中的语句:

int num1, num2, sum;

int是JAVA语言的另一种基本数据类型。这一语句声明了 num1, num2, sum变量的数据类型为int 整型。int 声明的变量可以是正整数,可以是负整数,也可以是零。JAVA语言标准规定 int 的取值范围为–2,147,483,648 ~ 2,147,483,647。 int类型数据的存储占4个字节(32位)。

3. 下面,创建一个新的JAVA程序来计算长方体的体积。

将Area.java源文件另存为Volume.java, 对Volume.java源文件做如下修改:

(1)首先,修改类名:

public class Volume {

(2)改变注释

// Caluclates volume of a rectangular box.

(3)修改代码行:

float length, width, area;

修改后:

float length, width, height, volume;

此程序不再需要area变量,另外增加了两个相应的变量height和volume。注意变量名的书写正确,通常变量名的组成字母都要小写。确定逗号和分号书写正确,逗号用于分隔不同的变量,分号写在一个语句的末尾。

这一代码行进行了变量声明(Variable Declaration)。JAVA程序中,使用任何变量前,必须事先予以声明。

(4)为变量height赋值,在语句:

width = 22;

后插入赋值语句(Assignment Statement):

height = 55;

(5)改变赋值语句进行正确的体积运算:

area = length * width;

修改后:

volume = length * width * height;

JAVA程序现在包含这样4个赋值语句:

length = 15.5f;

width = 22;

height = 55;

volume = length * width * height;

重点检查一下标点符号,并确定所有的变量为小写字母。

(6)修改输出语句:

System.out.println(

"长为" + length + " 和\n" +

"宽为" + width + " 的矩形面积是" + area + "." );

修改后:

System.out.println(

"长为" + length + " ,\n" +

"宽为" + width + ",和高为"+height+"\n"+" 的长方体体积是" + volume + "." );

(7)最后,保存文件,进行编译。如果编译出错,再一次检查拼写、大小写和标点符号。编译器

的错误信息中会指明出错的行号。假如,13行“height”拼写成“hight”错误,出错信息

如下:

Volume.java:13:找不到符号

符号:变量 hight

位置:类Volume

volume = length * width * hight;

^

1 错误

错误信息当然并不都是这样清楚地指明错误的类型和位置,有些错误信息难以理解。这些难以理解的信息可能仅仅是由于某个分号的缺失。认真检查错误信息提示的代码行,以及邻近的代码行。

如果得到许多“Undefined variable”错误信息,请仔细检查指定行变量名的拼写。

更正错误后,保存和重新编译JAVA程序。程序编译正确后,运行程序,观察运行结果是否正确。

(8)观察语句中15.5后的f:

length = 15.5f;

试着删除 f, 语句修改后:

length = 15.5;

保存、编译源文件,写下错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

JAVA浮点小数分为单精度和双精度, 分别用float和double表示。float类型数据的存储占4个字节(32位),double类型数据的存储占8个字节(64位)。

程序中的15.5,22 和55 被称为数值文字(Numeric Literals)。其中包含小数点的数值文字,编译器将其解释为double类型数据,而不是float类型数据;除非在包含小数点的数值文字后面加上f或F,如15.5f。

所以,15.5f去掉f 后,编译器将15.5理解为double类型,将double类型的15.5赋值给float类型的length就会导致程序不能编译。这是由于double的精度比float高,将一个高精度的double赋值给一个低精度的float时需要进行强制类型转换,反之则不需要。

解决这一问题的三种方法:

方法一:在15.5后面加上字母f。

length = 15.5f;

方法二:将double类型的15.5强制类型转换成float, 当然这会损失数据的精度。

length = (float)15.5;

方法三:将length变量声明成double类型。这种方法需要占用更多的内存,计算结果应该会更精确。对于目前这个极为简单的程序而言,有点大材小用。

程序中其他的数值文字,如22、55,属于int类型。int类型的22赋值给float类型的width 时,可执行自动的类型转换,即将int类自动转换成float类。

(9)编辑Volume.java源文件,使其能正确编译和运行。将源代码保存在Lab01目录下。

实验1.4.8: (I)JAVA SDK错误信息指南

练习要求把正确的代码改为错误的代码,并观察代码错误时,编译器显示的错误信息。理解这些错误信息的含义。

1.用记事本打开Area.java源文件,保存为Syntax.java。不要对Syntax.java文件作任何修改,不要修改公有类的类名。在MS-DOS的命令提示符下键入:

javac Syntax.java

写下MS-DOS窗口的错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

现在,修改公有类类名:

public class Area {

修改后:

public class Syntax {

保存文件,进行编译。如果程序还是不能正确编译,注意检查文件名、类名、javac Syntax.java 命令的拼写和大小写是否正确。确认MS-DOS提示符显示正确盘符和路径。(如果对此有所疑问,请查

阅DOS指南。)

文件正确编译后,我们再继续介绍其他语法错误。一次只观察一个错误。

2. 观察Syntax.java源文件中的注释行:

// Caluclates area of a rectangle

删除此行中的双斜线,对编译器来讲,此行不再对编译器是透明的。保存、编译文件。写下MS-DOS 窗口的错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

Java编译器所能理解的语言只能是符合JAVA语法规则的编程语言,而不是人类的自然语言。

写回双斜线,注释对编译器来讲又是透明的了。保存和编译源文件,确定程序没有任何错误。

3.观察Syntax.java源文件中的代码行:

public class Syntax {

public static void main( String[] args ){

……

} // method main

} // class Syntax

代码中有两对花括号{}。JAVA语法要求,左括号和右括号必须一一对应。

删除其中一个右括号,保存源代码并编译,写下MS-DOS窗口的错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

写回删除的花括号,保存和编译源文件,确定程序没有任何错误。

4.注释掉 Syntax.java源文件中的代码行:

// float length, width, area;

保存和编译源文件。这一次编译器给出的错误信息有很多项。不用把所有的错误信息都写下来,只需要写下最后的几行:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

注释掉的代码行是变量声明语句,声明变量length, width和area为float类型。没有这一行,编译器无法识别变量名length, width和area。JAVA中使用的所有变量都必须被声明为某一特定的数据类型,如int (整型)、float (单精度浮点小数)、double (双精度浮点小数)。否则,将被编译器认定为“undefined未定义的”。

删除双斜线,保存和编译源文件,确定程序没有任何错误。

5. 删除 Syntax.java源文件中代码行末尾的分号:

float length, width, area;

修改后:

float length, width, area

保存源代码并编译,写下MS-DOS窗口的错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

JAVA程序的几乎每一行,包括所有的变量声明语句,所有的赋值语句,都必须以分号(;)结尾。写回删除分号,保存和编译源文件,确定程序没有任何错误。

6. 有时,分号的缺失产生的错误信息不一定能反映出错误的出处。删除 Syntax.java源文件中代码行末尾的分号:

length = 15.5f;

修改后:

length = 15.5f

保存源代码并编译,写下MS-DOS窗口的错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

7. 前面已经提到,JAVA程序的几乎每一行,包括所有的变量声明语句,所有的赋值语句,都必须以分号结尾。当然也有例外,如类的头部和main方法的头部。

public class Syntax

public static void main(String[] args)

在代码行末尾加上分号:

public static void main(String[] args)

修改后:

public static void main(String[] args);

保存源代码并编译,写下MS-DOS窗口的错误信息:

_______________________________________________________________

_______________________________________________________________

_______________________________________________________________

不用担心错误信息的意思,只需要理解这里的分号将main方法的头部和main方法的主体划分开,导致了编译的错误。main方法的主体是指main方法头部后的左花括号和对应的右花括号之间的代码段。移走不恰当的分号,保存和编译源文件,确定程序没有任何错误。

实验1.4.9: (W)命令行参数

使用命令行参数可以编写更为灵活的程序。

1. 编译AverageOf3Num.java程序,在MS-DOS命令提示符中键入如下命令运行程序:

java AverageOf3 100 203 630

使用三个其他的整数再次尝试运行。如

java AverageOf3 45 54 93

在以上两例中,每次程序运行都显示了一个整数,它是键入的三个数字的平均数,程序两次运行结果如

图1.16所示。

图1.16 AverageOf3Num.java程序运行结果

2. 用记事本打开AverageOf3Num.java源文件。

程序清单1-4:AverageOf3Num.java

// AverageOf3Num.java

public class AverageOf3Num {

public static void main(String[] args)

{

int number1, number2, number3;

int average;

number1 = Integer.parseInt(args[0]);

number2 = Integer.parseInt(args[1]);

number3 = Integer.parseInt(args[2]);

average = (number1 + number2 + number3) / 3;

System.out.println("数字 " + number1 +

", " + number2 + ", 和 " +

number3 + " 的平均数是 " + average + ".");

} // method main

} // class AverageOf3Num

注意其中的赋值语句:

firstNumber = Integer.parseInt(args[0]);

secondNumber = Integer.parseInt(args[1]);

thirdNumber = Integer.parseInt(args[2]);

这些赋值语句和前面讲过的赋值语句有所不同,不是简单地将预定的数值赋值给变量。

3. 为了理解上面这些赋值语句,参看程序Hello.java

程序清单1-5:Hello.java

public class Hello {

public static void main(String[] args) {

String text;

text = "Hello!";

System.out.println(text);

} // method main

} // class Hello

编译、运行Hello.java程序将在MS-DOS窗口输出:

Hello!

声明语句将变量text 声明为字符串类型(String)。字符串就是一串字符,字符串类型的变量引用存储在计算机里的一串字符。这个字符串就是字符串变量的值。实际上,字符串中的字符在计算机中也是以数字形式存储的。计算机中所有的值,包括数值和字符,都以二进制形式存储在计算机中。Java中,每个字符以Unicode(统一字符编码标准)编码,用16个位(bit)表示一个字符。

4. 现在编译CommandDemo1.java文件,并键入

java CommandDemo1 firstname lastname

运行程序。用练习者实际的名和姓替换掉命令行中的firstname、lastname,观察输出结果。然后用记事本打开Lab01目录下的CommandDemo1.java文件。

程序清单1-6:CommandDemo1.java

// CommandDemo1.java

// 演示命令行参数,期望用户键入他实际的名字:

//

// java CommandDemo1 firstname middlename lastname

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

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

面向对象的设计方法与C++编程

北京邮电大学200X-200X学年第一学期 《面向对象的设计方法与C++编程》期末考试试卷+扩展+复习题 试题一:填空题(没空一分,共20分) 请在括号内填入你认为正确的内容。 1.软件工程是指导(计算机软件)开发和维护的(工程学科)。 2.应用软件工程方法开发软件系统的根本目的是为了改善下述四项软件品质因素: 提高所开发的软件系统的(效率); 降低所开发的软件系统的(成本); 改善所开发的软件系统的(质量); 缩短所开发的软件系统的(开发周期)。 3.抽象的对象模型由(属性)和(方法)两个部分构成。 4.一个消息必须具备的两个要素是(接受消息的对象标识)和(接受消息的对象的方 法标识)。 5.一个对象拥有另一个对象的(部分)或(全部)的属性和方法的关系则称为(继 承)关系。 6.失去(创建具体对象实例的(制造对象))能力的类成为抽象类。 7.一个类的属性不能出现对象拷贝则被称为(类属性)。 8.面向对象技术的三大特征是(封装)、(继承)和(多态)。 9.共生包容关系中的被包容类对象与包容类对象是(同时连带)生成的。 10.同时出现在两个具有关联关系的对象内的相同属性被称为(连接属性)。 课程复习--补充题: 1.软件的生存周期是一个软件产品从(定义)、(开发)、(使用)到(废弃)的时 间的总合。 2.C++语言中的静态成员函数是(类方法)的具体实现。 3.连接属性是(关联/链接)关系的两个对象内的属性。 4.边界类与(actor(角色))对呈一一对应关系。 5.复合聚合关系中的(聚合)类对象极其依赖(被聚合)类对象,在实现上往往具有 被同时(构造)的特征,因而具有极高的(耦合度)。 试题二:是非判断题(每题1分,共20分) 请在题后的括号内填入√(你认为正确时)或×(你认为错误时)。 1.消息必须含有返回信息。(错) 2.一个类必然具有生成对象的能力。(错)(抽象类不具备) 3.在包容关系中的被包容类也具有封装性。(对) 4.关联关系只是一个动作的抽象。(错) (表示两个类之间的联系,通过这种联系,一个类可以访问到另外一个类的属性和方法。) 5.一个类也可以接收消息。(对) 6.关联关系中的作用名标识了该关联关系的终点对象的恰当地位。(对)

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

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

面向对象程序设计教学大纲 一、课程基本资料 主讲教师:曹永春、蔡正琦、顿毅杰 主教材:《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.wendangku.net/doc/f02562024.html,/sites/ccf/ 2. 计算机爱好者协会https://www.wendangku.net/doc/f02562024.html,/forum.php 3.C语言中文网https://www.wendangku.net/doc/f02562024.html,/cpp 5.中国悠悠期刊网https://www.wendangku.net/doc/f02562024.html,/ 6. 中国知网https://www.wendangku.net/doc/f02562024.html,/ 文献 1.谭浩强.C程序设计.第4版.北京:清华大学出版社,2010

面向对象的三个基本特征讲解

面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 继承 面向对象编程(OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 继承的过程,就是从一般到特殊的过程。 要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。 在某些OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。 继承概念的实现方式有三类:实现继承、接口继承和可视继承。 实现继承是指使用基类的属性和方法而无需额外编码的能力; 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力; 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。 在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类

都可以继承Person 类。但是Leg 类却不能继承Person 类,因为腿并不是一个人。 抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字Interface 而不是Class。 OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。 多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。 实现多态,有二种方式,覆盖,重载。 覆盖,是指子类重新定义父类的虚函数的做法。 重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。 其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。” 那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 概念讲解 泛化(Generalization)

面向对象的概念

1.面向对象的概念 面向对象(Object-Oriented)=对象(Object)+类(Class)+ 继承(Inheritance)+通信(Communication) 如果一个软件系统是使用这样4个概念设计和实现的,则将该软件系统称为面向对象的。下面给出每个概念的具体定义。 1.1 对象 从一般意义上讲,对象是现实世界中一个实际存在事物,它可以是有形的(比如一辆汽车),也可以是无形(比如一项计划)。对象构成世界的一个独立单位,它具有自己的静态特征和动态特征。静态特征即可用某种数据来描述的特征,动态特征即对象所表现的行为或对象所具有的功能。 现实世界中的任何事物都可以称作对象,它是大量的、无处不在的。不过,人们在开发一个系统时,通常只是在一定的范围(问题域)内考虑和认识与系统目标有关的事物,并用系统中的对象抽象地表示它们。所以面向对象方法在提到“对象”这个术语时,既可能泛指现实世界中的某些事物,也可能专指它们在系统中的抽象表示,即系统中的对象。我们主要对后一种情况讨论对象的概念,其定义是:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务构成。 属性和服务,是构成对象的两个主要因素,其定义是:属性是用来描述对象静态特征的一个数据项。服务是用来描述对象动态特征(行为)的一个操作序列。 一个对象可以有多项属性和多项服务。一个对象的属性和服务被结合成一个整体,对象的属性值只能由这个对象的服务存取。 在有些文献中把对象标识(OID)列为对象的另一要素。对象标识也就是对象的名字,有“外部标识”和“内部标识”之分。前者供对象的定义者或使用者用,后者为系统内部惟一的识别对象。(怎么感觉这点跟android开发里面的id是一样的,在某个文件下有编程人员定义的所有属性的id,并且是唯一的,一般不允许更改,属于系统内部分配。) 另外需要说明以下两点:第一点是,对象只描述客观事物本质的与系统目标有关的特征,而不考虑那些非本质的与系统目标无关的特征。这就是说,对象是对事物的抽象描述。第二点是,对象是属性和服务的结合体。二者是不可分的。而且对象的属性值只能由这个对象的服务来读取和修改,这就是后文将讲述的封装概念。 根据以上两点,也可以给出如下对象定义:对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用,它是一组属性和有权对这些属性进行操作的一组服务的封装体。 系统中的一个对象,在软件生命周期的各个阶段可能有不同的表示形式。例如,在分析与设计阶段是用某种OOD/OOA方法所提供的表示法给出比较粗略的定义,而在编程阶段则要用一种OOPL写出详细而确切的源程序代码。这就是说,系统中的对象要经历若干演化阶段,其表现形式各异,但在概念上是一致的,即都是问题域中某一事物的抽象表示。 1.2 类 把众多的事物归纳划分成一些类是人类在认识客观世界时经常采用的思维方法。分类所依据的原则是抽象,即:忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。例如:马、

面向对象存储oos教程说明

O O S客服脚本 1、OOS基本知识 什么是OOS 面向对象存储(Object-Oriented Storage,OOS)是中国电信为客户提供的一种海量、弹性、高可用、高性价比的存储服务,是一种开放式的存储服务。 OOS基本概念 面向对象存储的主要概念有:Account(账户)、Service(服务)、Object(对象)和Bucket(对象容器)。它们之间的关系如下图所示。在使用OOS之前,首先需要在注册一个账号(Account),注册成功之后,OOS会为该账号提供服务(Service),在该服务下,用户可以创建1个或多个对象容器(Bucket),每个对象容器中可以存储不限数量的对象(Object)。 Account 在使用OOS之前,需要在注册一个账号(Account)。注册时邮箱、密码和联系方式、用户名是必填项。注册成功之后,用户可以用该账号登录并使用OOS服务。 Service Service是OOS为注册成功的用户提供的服务,该服务为用户提供弹性可扩展的存储空间及上行和下行流量。用户可以对存储空间和能力进行管理,例如,文件的上传下载、文件的保存、存储空间的访问控制等。 Bucket Bucket是存储Object的容器。面向对象存储的每个Object都必须包含在一个Bucket 中。Bucket不能嵌套,每个Bucket中只能存放Object,不能再存放Bucket。 每个用户最多可以建立10个Bucket,并且在创建Bucket时需要设定其操作权限。用户只有对Bucket拥有相应的权限,才可以对其进行操作,这样保证了数据的安全性,

防止非授权用户的非法访问。 Bucket的命名规范如下: 对象容器(Bucket)的命名规范是: Bucket名称必须全局唯一 Bucket名称长度介于3到63字节之间 Bucket名称可以由一个或者多个小节组成,小节之间用点(.)隔开 各个小节需要:只能包含小写字母、数字和短横线(-) 必须以小写字母或者数字开始 必须以小写字母或者数字结束 Object 用户存储在OOS上的每个文件都是一个Object。文件可以是文本、图片、音频、视频或者网页。OOS支持的单个文件的大小从1字节到5T字节。 用户可以上传、下载、删除和共享Object。此外用户还可以对Object的组织形式进行管理,将Object移动或者复制到目标目录下。 1.3OOS有什么特点 (1)弹性扩展,按需付费 对用户来说,OOS是一种低成本的存储资源,并且可以无限扩容,用户只需根据所使用的存储量进行付费即可,节约了成本。 (2)安全可靠 OOS采用多级加密数据,对用户数据进行分片加密保存,保证用户数据的安全性。(3)性能可靠 OOS采用高可用的服务集群及动态负载均衡,保证用户顺利度过访问高峰。

1.2 面向对象的基本概念

1.2 面向对象的基本概念 本节着重介绍面向对象的基本概念,也对相应的面向对象的技术方法做些说明和解释。 面向对象方法学的基本原则 面向对象方法学认为:客观世界是由各种“对象”所组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,每一个对象都属于某个对象“类”,都是该对象类的一个元素。复杂的对象可以是由相对比较简单的各种对象以某种方式组成的。不同对象的相互作用就构成了我们要研究分析和构造的客观系统。 面向对象方法学认为:通过类比,发现对象间的相似性,即对象间的共同属性,这就是构成对象类的根据。 面向对象方法学认为:对于已分成类的各个对象,可以通过定义一组“方法”来说明该对象的功能,也即是:允许作用于该对象上的各种操作。对象间的相互联系是通过传递“消息”来完成的。 面向对象方法学比较自然地模拟了人类认识客观世界的方法。即应使描述问题的问题空间和解决问题的方法空间在结构上尽可能地一致。我们分析设计和实现一个系统的方法尽可能接近我们认识一个系统的方法。 1.2.1 对象、类、消息 面向对象技术是基于对象(object )概念的。下面介绍对象概念。 在现代汉语词典中,对象是行动或思考时作为目标的人或事物。 在思维科学中,对象是客观世界中具有可区分性的、能够唯一标识的逻辑单元。对象所代表的本体可能是一个物理存在,也可能是一个概念存在。 “面向对象”是计算机科学中的一个技术名词,具有其特定的技术含义。从面向对象的观点来看,现实世界是由各式各样独立的、异步的、并发的实体对象组成,每个对象都有各自的内部状态和运动规律,不同对象之间或某类对象之间的相互联系和作用,就构成了各式不同的系统。 面向对象方法是基于客观世界的对象模型化的软件开发方法。在面向对象程序设计中,所谓对象,就是一个属性(数据)集及其操作(行为)的封装体。作为计算机模拟真实世界的抽象,一个对象就是一个实际问题论域,一个物理的实体或逻辑的实体。在计算机程序中,可视为一个“基本程序模块”,因为它包含了数据结构和所提供的相关操作功能。 我们把客观世界的实体称之为问题空间的对象,任何事物都是对象。 我们用计算机解题是借助某种语言规定对计算机实体施加某种动作,以此动作的结果去映射解,我们把计算机实体称之解空间的对象。 在面向对象的程序设计中,“对象”是系统中的基本运行实体。即对象是具有特殊属性(数据)和行为方式(方法)的实体。 从动态的观点看,对象的操作就是对象的行为。问题空间对象的行为是极其丰富的,而解空间对象的行为是极其死板的。因此,只有借助于极其复杂的算法才能操纵解空间对象而得到解。面向对象语言提供了“对象”概念,这样,程序员就可以定义解空间对象。 从存储的角度来看,“对象”是一片私有存储,其中有数据也有方法。其它对象的方法

面向对象程序设计教程 (马石安版)

第 1 章习题答案 名词解释 抽象:抽象(Abstract)就是忽略事物中与当前目标无关的非本质特征,而强调与当前目标有关的本质特征,从而找出事物的共性,并把具有共性的事物划为一类。面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。 封装:面向对象方法中的封装就是把将抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。 消息:消息是面向对象程序设计用来描述对象之间通信的机制。一个消息就是一个对象要求另一个对象实施某种操作的一个请求。 填空题 (1) 面向过程的结构化程序设计方法面向对象程序设计方法 (2) 顺序选择循环 (3) 程序=数据结构+算法程序=对象+消息 (4) 过程类 (5) 抽象性封装性继承性多态性选择题 (1) B (2) C (3) D (4) C (5) D (6) A (7) A (8) B C (9) A D 判断题(1) t (2) f (3) f (4)f (5) t (6) f (7) f (8) t 简答题 (1) 结构化程序设计方法着眼于系统要实现的功能,从系统的输入和输出出发,分析系统要做哪些事情,进而考虑如何做这些事情,自顶向下地对系统的功能进行分解,来建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。随着程序规模与复杂性的增长,这种面向过程的结构化程序设计方法存在明显的不足之处。首先是数据安全性问题,由于数据被每个模块所共用,因此是不安全的,一旦出错,很难查明原因。其次是可维护性及可重用性差,它把数据结构和算法分离为相互独立的实体,一旦数据结构需要改变时,常常要涉及整个程序,修改工作量极大并容易产生新的错误。每一种相对于老问题的新方法都要带来额外的开销。另外,图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。 (2) 面向对象的程序设计方法中,将程序设计为一组相互协作的对象(Object)而不是一组相互协作的函数。在程序中,属性用数据表示,用来描述对象静态特征;行为用程序代码实现,用来描述对象动态特征。可见,在面向对象的程序设计方法中,对象是数据结构和算法的封装体。对象之间存在各种联系,它们之间通过消息进行通信。程序可表示为:程序=对象+消息在面向对象程序设计中,它着重于类的设计。类正是面向对象语言的基本程序模块,通过类的设计,来完成实体的建模任务。类通过一个简单的外部接口,与外界发生关系。一个类中的操作不会处理到另一个类中的数据,这样程序模块的独立性、数据的安全性就有了良好的保障。程序的执行取决于事件发生的顺序,由顺序产生的消息来驱动程序的执行。不必预先确定消息产生的顺序,更符合客观世界的实际。并且面向对象程序设计方法提供了软件重用、解决大问题和复杂问题的有效途径,具有抽象性、封装性、继承性和多态性等特点。 (3) 结构化程序设计方法中,把数据结构和算法分离为相互独立的实体。在面向对象程序设计中,数据结构和算法是封装在一起,结合成一个独立的单位,即对象,并尽可能隐蔽对象的内部细节。对象的私有属性只能由这个对象的行为来读取和修改,与外部的联系通过公有行为充当外部接口。 第 2 章习题答案

面向对象存储oos教程说明

OOS客服脚本 1、OOS基本知识 1.1什么是OOS? 面向对象存储(Object-Oriented Storage,OOS)是中国电信为客户提供的一种海量、弹性、高可用、高性价比的存储服务,是一种开放式的存储服务。 1.2 OOS基本概念? 面向对象存储的主要概念有:Account(账户)、Service(服务)、Object(对象)和Bucket(对象容器)。它们之间的关系如下图所示。在使用OOS之前,首先需要在https://www.wendangku.net/doc/f02562024.html,注册一个账号(Account),注册成功之后,OOS会为该账号提供服务(Service),在该服务下,用户可以创建1个或多个对象容器(Bucket),每个对象容器中可以存储不限数量的对象(Object)。 Account 在使用OOS之前,需要在https://www.wendangku.net/doc/f02562024.html,注册一个账号(Account)。注册时邮箱、密码和联系方式、用户名是必填项。注册成功之后,用户可以用该账号登录并使用OOS服务。 Service Service是OOS为注册成功的用户提供的服务,该服务为用户提供弹性可扩

展的存储空间及上行和下行流量。用户可以对存储空间和能力进行管理,例如,文件的上传下载、文件的保存、存储空间的访问控制等。 Bucket Bucket是存储Object的容器。面向对象存储的每个Object都必须包含在一个Bucket中。Bucket不能嵌套,每个Bucket中只能存放Object,不能再存放Bucket。 每个用户最多可以建立10个Bucket,并且在创建Bucket时需要设定其操作权限。用户只有对Bucket拥有相应的权限,才可以对其进行操作,这样保证了数据的安全性,防止非授权用户的非法访问。 Bucket的命名规范如下: 对象容器(Bucket)的命名规范是: Bucket名称必须全局唯一 Bucket名称长度介于3到63字节之间 Bucket名称可以由一个或者多个小节组成,小节之间用点(.)隔开 各个小节需要:只能包含小写字母、数字和短横线(-) 必须以小写字母或者数字开始 必须以小写字母或者数字结束 Bucket名称不能是IP地址形式(如192.162.0.1) Object 用户存储在OOS上的每个文件都是一个Object。文件可以是文本、图片、音频、视频或者网页。OOS支持的单个文件的大小从1字节到5T字节。 用户可以上传、下载、删除和共享Object。此外用户还可以对Object的组织形式进行管理,将Object移动或者复制到目标目录下。 1.3OOS有什么特点? (1)弹性扩展,按需付费 对用户来说,OOS是一种低成本的存储资源,并且可以无限扩容,用户只需根据所使用的存储量进行付费即可,节约了成本。 (2)安全可靠

第9章 面向对象编程习题及答案

1、关于python类说法错误的是: A 类的实例方法必须创建对象后才可以调用 B 类的实例方法必须创建对象前才可以调用 C 类的类方法可以用对象和类名来调用 D 类的静态属性可以用类名和对象来调用 答案:B 2、如下类的定义,下列描述错误的是? class A(object): pass class B(A): pass b=B() A、i sinstance(b,A)==True B、isinstance(b,object)==True C、i ssubclass(B,A)==True D、i ssubclass(b,B)==True 答案:D 3、定义类如下 class Hello(): def __init__(self,name) https://www.wendangku.net/doc/f02562024.html,=name def showInfo(self) print(https://www.wendangku.net/doc/f02562024.html,) 下面代码能正常执行的: A、h = Hello h.showInfo() B、h = Hello() h.showInfo(‘张三’) C、h = Hello(‘张三’) h.showInfo() D、h = Hello(‘admin’) showInfo 答案:C 4、导入模块的方式错误的是: A、i mport mo B、from mo import * C、i mport mo as m D、i mport m from mo 答案:D 5、以下关于模块说法错误的是: A、一个xx.py就是一个模块 B、任何一个普通的xx.py文件可以作为模块导入

C、模块文件的扩展名不一定是 .py D、运行时会从制定的目录搜索导入的模块,如果没有,会报错异常答案:C 6、多重继承的执行顺序,请解答以下输出结果是什么?并解释。class A(object): def __init__(self): print('A') super(A, self).__init__() class B(object): def __init__(self): print('B') super(B, self).__init__() class C(A): def __init__(self): print('C') super(C, self).__init__() class D(A): def __init__(self): print('D') super(D, self).__init__() class E(B, C): def __init__(self): print('E') super(E, self).__init__() class F(C, B, D): def __init__(self): print('F') super(F, self).__init__() class G(D, B): def __init__(self):

面向对象技术

《面向对象技术(本)》课程第一阶段练习题 一.填充题 1.Java源程序文件的扩展名是java;Java源程序经编译后生成Java字节码文件,其扩展名是class。 2.Java程序可分为Application和Applet两大种类。 3.开发与运行Java程序需要经过的三个主要步骤为编写源程序、 编译源程序和解释运行字节码文件。 4.在Java程序中定义的类有两种成员:成员变量、成员方法。 5.一个Application源程序文件名为MyPro.java,如果使用Sun公司的Java开发工具SDK编译该源程序文件并使用其虚拟机运行这个程序的字节码文件,应该顺序执行如下两个命令: javac MyPro.java 、 java MyPro 。 6.定义初值为123456789的长整型变量 var 的语句是__long var=123456789L;__。 7.在Java语言中,逻辑常量值除了true之外另一个是false。 8.表达式15+4*5-12的运算结果是23。 二.选择题 1.编译Java源程序文件后所产生的字节码文件的扩展名为: C A.java B. html C.class D. exe 2. main方法是Java Application程序执行的入口点,以下main方法头部合法的是:B A. public static void main() B. public static void main(String args[]) C. public static int main(String[] arg) D. public void main(String arg[]) 3.下面的Java源文件代码片断是不正确的定义次序的是: D A.package mypack; public class Demo{//do something…

面向对象专题练习

**专题5 面向对象 一、填空题 1.如果一个方法不返回任何值,则该方法的返回值类型为void 。(//有无返回值的意义何在???) 2.如果子类中的某个方法名、返回值类型和_参数列表_____与父类中的某个方法完全一致,则称子类中的这个方法覆盖了父类的同名方法。 3.接口中所有的属性均为_public_、_final_____和_static__的,方法(public abstract ) 4.抽象方法是一种仅有方法声明,没有具体方法体和操作实现的方法,该方法必须在具体类之中定义。 5.在Java程序中,通过类的定义只能实现单重继承,但通过接口的定义可以实现多重继承关系。 6.一般Java程序的类主体由两部分组成:一部分是属性,另一部分是方法。7.分别用class关键字来定义类,用new关键字来分配实例存储空间。 8.当一个类的修饰符为final时,说明该类不能被继承,即不能有子类。9.在Java中,能实现多重继承效果的方式是接口。 二、选择题 1.方法内定义的变量(B)。 A.一定在方法内所有位置可见B.可能在方法的局部位置可见(for循环)C.在方法外可以使用D.在方法外可见 2.方法的形参()。 A.可以没有B.至少有一个 C.必须定义多个形参D.只能是简单变量 3.return语句()。 A.不能用来返回对象B.只可以返回数值 C.方法都必须含有D.一个方法中可以有多个(但是返回只有一个)

4.main()方法的返回值类型是() A.boolean B.int C.void D.static 5.编译并运行下面的程序,运行结果是()。 public class A{ public static void main(String args[]){ A a=new A(); a.method(8); } void method(int i){ System.out.println(“int: ”+i); } void method(long i){ System.out.println(“long: ”+i); } A.程序可以编译运行,输出结果为:“int: 8” B.程序可以编译运行,输出结果为:“long: 8” C.程序有编译错误,因为两个method()方法必须定义为静态(static)的D.程序可以编译运行,但是没有输出 6.能作为类及其成员的修饰符是()。 A.interface B.class C.protected D.public 7.下列方法定义中,方法头不正确的是()。 A.public static x(double a){…} B.public static int x(double y){…} C.void x(double d){…} D.public int x(){…} 8.构造方法在()时被调用。 A.类定义时B.使用对象的变量时 C.调用对象方法时D.创建对象时 9.下列哪个类声明是正确的()。 A.public abstract class Car{…} B.abstract private move(){…} C.protected private number; D.abstract final class H1{…} 10.下列不属于面向对象程序设计的基本特征的是()。 A.抽象B.封装 C.继承D.静态 11.请看下面的程序段 class Person{ String name,department; int age;

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

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

面向对象程序设计笔记

undeclared identifier “未声明的标识符” (1) 十进制整数:在一个整型常量后面加一个字母 l 或 L,则认为是 long int 型常量? (2) 八进制整数?在常数的开头加一个数字 0,就表示这是以八进制数形 式表示的常数? (3)十六进制整数?在常数的开头加一个数字0和一个英文字母X(或x), 就表示这是以十六进制数形式表示的常数? 2. 浮点数的表示方法 如果在实数的数字之后加字母 F 或f,表示此数为单精度浮点数,如1234F,-43f,占 4 个字节?如果加字母 L 或 l,表示此数为长双精度数(long double), 在Visual C++ 6.0 中占 8 个字节. (2) 指数形式(即浮点形式):用字母 e 表示其后的数是以 10 为底的幂,如 e12 表示 1012? 1.普通的字符常量:用单撇号括起来的一个字符就是字符型常量如′a′,′ #′,′%′,′D′都是合法的字符常量,在内存中占一个字节?“cout<<′\n′; ”将输出一个换行,其作用与“cout<

面向对象的C++理论与实践 复习题

复习题 一、全面复习课程内容和所有平时布置的作业、课堂讲过的例题 二、练习下列题型示例。要求掌握各种基本概念和基本原理,学会灵活应用。 1、简要回答下列问题 (1)什么是面向对象的程序设计? (2)什么是对象?它有哪些特征?什么是类?对象与类的关系是什么? (3)什么是消息?如何区分公有消息与私有消息?消息具有什么性质? (4)什么是多态性?在面向对象系统中多态性表现在哪些方面? (5)什么是继承性?继承的作用是什么? (6)C++是如何实现数据封装和信息隐藏的?若类间具有继承关系,则它们之间具有什么特征? (7)为什么要引入构造函数和析构函数?它们各有什么特性? (8)this指针的主要作用是什么?静态成员有哪些特性? (9)使用内部(内置)函数的优点是什么? (10)假设在程序中已经声明了类point,并建立了其对象p1和p4。请回答以下几个语句有什么区别? ①point p2,p3; ②point p2=p1; ③point p2(p1); ④p4=p1; (11)友元函数有什么作用? (12)用成员函数重载运算符和用友元重载运算符,在定义和使用上有什么不同? (13)什么是重载?函数重载有几种表现形式? (14)为什么要引入引用概念,在程序设计中它经常被用在什么场合? (15)简述引用与指针的异同。 (16)派生有几种方式,每种方式中派生类对基类成员的继承性如何? (17)派生类构造函数和析构函数的构造规则是什么?执行顺序怎样? (18)什么是多继承?多继承时,构造函数和析构函数执行顺序是怎样的? (19)在C++中的何种情况下要引入虚基类?虚基类的构造函数的调用顺序是如何规定的? (20)保护段成员与公有段成员有何差别?在派生类中如何继承? (21)什么是虚函数?函数重载与虚函数有哪些异同? (22)什么是纯虚函数?什么是抽象类? (23)在什么情况下要引入抽象类?抽象类有什么特点? (24)什么是多重继承的名字冲突?怎样解决多重继承的名字冲突? (25)C++中多态性体现在哪几方面? (26)为什么使用模板?函数模板声明的一般形式是什么? (27)函数模板与同名的非模板函数重载时,调用的顺序是怎样的? 2、填空 (1)面向对象的程序设计具有等特征。 (2)构造函数是和同名的函数。 (3)假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为_______。(4)类的私有成员只能被它的成员函数和_________访问。 (5)如果类C的一个成员函数访问func( ) 时,无法确定是访问基类A还是基类B,就出现二义性。使用可以消除二义性。 (6)假定AB为一个类,则语句AB( AB &x );为该类_________构造函数的原型说明。 (7)继承机制的作用是。 (8)在C++程序中,对象之间的相互通讯通过实现。 (9)对于任意一个类,析构函数最多可以有个,而构造函数可以有个。

面向对象程序设计复习试题(答案)

语法扩充 1.1选择题 在C++中用( D )能够实现将参数值带回。 a)数组b)指针c)引用d)上述ABC都可 考虑函数原型void test(int a,int b=7,char *ch="*"),下面的函数调用中,属于不合法调用的是:( C ) A)test(5) B)test(5,8) C)test(6,"#") D)test(0,0,"*"); 已知: int m=10;下列表示引用的方法中,正确的是:( C ) A)int &Z;B)int &t=10;C)int &X=m;D)float &f=&m; 下列不是函数重载所要求的条件是:( D ) A)函数名相同B)参数个数不同 C)参数类型不同D)函数返回值类型不同 在C++中执行以下4条语句后输出rad值为:( C ) static int hot=200; int &rad=hot; hot=hot+100; cout<

相关文档
相关文档 最新文档