第5章-类和对象 - 2

合集下载

C++面向对象程序设计习题解答与上机指导(第二版)源程序

C++面向对象程序设计习题解答与上机指导(第二版)源程序

C++面向对象程序设计习题解答与上机指导(第2版)习题参考答案源代码使用源程序的几点注意事项(1) 由于源程序在复制、编辑、解压缩等过程中可能引起部分符号(主要是标点符号,如分号、冒号、逗号、引号)的字体、半全角等发生变化,在编译时可能被检出语法错误,只要使用“替换”功能,纠正后即能顺利运行。

(2) 有的C++系统(如Visual C++6.0)没有完全实现C++标准,它所提供的不带后缀的.h 的头文件不支持友元运算符重载函数,在Visual C++6.0中编译会出错,这时可采用带后缀的.h头文件。

将程序中的#include<iostream>using namespace std;修改成#include<iostream.h>即可顺利运行。

第2章 C++基础【2.2】下面是一个C程序,改写它,使它采用C++风格的I/O语句。

#include<stdio.h>int main(){ int a,b,d,min;printf("Enter two numbers:");scanf("%d%d",&a,&b);min=a>b? b:a;for (d=2; d<min; d++)if (((a%d)==0)&&((b%d)==0)) break;if (d==min){ printf("No common denominators\n");return 0;}printf("The lowest common denominator is %d\n",d);return 0;}【解】#include<iostream>using namespace std;int main(){ int a,b,d,min;cout<<"Enter two numbers:";cin>>a;cin>>b;min=a>b? b:a;for (d=2; d<min; d++)if (((a%d)==0)&&((b%d)==0)) break;if (d==min){ cout<<"No common denominators\n";return 0;}cout<<"The lowest common denominator is "<<endl<<d;return 0;}【2.24】写出下列程序的运行结果。

第5章 Java中的面向对象特性

第5章  Java中的面向对象特性

堆内存 代码区 public class Person { static int id; int age = 20; public static void main(String[] args) {… } } id age
Zhangsan.id
Zhangsan.age lisi.id
lisi.age
例2: 五子棋

面向过程:
1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2, 9、输出最后结果。

面向对象:
1、黑白双方 --这两方的行为是一模一样的, 2、棋盘系统 --负责绘制画面, 3、规则系统 --负责判定诸如犯规、输赢等。
a product
1.2 ×× 1.728 ×× 1.2
参数传递方式 值传递方式
方式:方法调用时,为形参分配单元,并将实参的值复制到形参
中;调用结束,形参单元被释放,实参单元仍保留并维持原 值 特点: 形参与实参占用不同的内存单元 单向传递
Person zhangSan=new Person(“张三”,18,“男”);
zhangSan
0xabcd
张三 null
name sex age
0 18
栈内存 实体的内存地址
男 0
堆内存
使用new 运算符和类的构造方法为声明 的对象分配内存,如果类中没有构造方法, 系统会调用默认的构造方法,默认的构造方 法是无参数的。
事万物皆对象”。 对象可以看成是静态属性(成员变量)和动态属 性(方法)的封装体。 类是用来创建同一类型的对象的“模板”,在 一个类中定义了该类对象所应具有的成员变量 以及方法。 移J2SDK提供了很多类供编程人员使用,编程 人员也可定义自己的类。

C++复习题2

C++复习题2

第1章基本数据与表达式1.1选择题1.在一个C++程序中,main函数的位置( c )。

(a) 必须在程序的开头(b) 必须在程序的后面( c ) 可以在程序的任何地方(d) 必须在其它函数中间2.用C++语言编制的源程序要变为目标程序必须要经过( d )。

(a) 解释(b) 汇编(c) 编辑(d) 编译3.C++程序基本单位是( c )。

(a) 数据(b) 字符(c) 函数(d) 语句4. C++程序中的语句必须以( b )结束。

(a) 冒号(b) 分号(c) 空格(d)花括号5. 执行C++程序时出现的“溢出”错误属于( c )错误。

(a) 编译(b) 连接(c) 运行(d) 逻辑6.下列选项中,全部都是C++关键字的选项为( c )。

(a) while IF static (b) break char go(c) sizeof case extern (d) switch float integer7. 按C++标识符的语法规定,合法的标识符是(a ,c )。

(a) _abc (b) new (c) int1 (d) “age”8.下列选项中,( a )不是分隔符。

(a) ?(b) ;(c) :(d) ()9.下列正确的八进制整型常量表示是( b )。

(a) 0a0 (b) 015 (c) 080 (d) 0x1010.下列正确的十六进制整型常量表示是(a,b,d )。

(a) 0x11 (b) 0xaf (c) 0xg (d) 0x1f11.在下列选项中,全部都合法的浮点型数据的选项为(a,b,d ),全部都不合法的浮点型数据选项是( c )。

(a) -1e3 ,15. ,2e-4 (b) 12.34 ,-1e+5 ,0.0(c) 0.2e-2.5 ,e-5 (d) 5.0e-4 ,0.1 ,8.e+212.下列正确的字符常量为(b,d )。

(a) " a " (b) '\0' (c) a (d) '\101'13.下列选项中,(a,b,c )能交换变量a和b的值。

第五章 类图和对象图(UML)

第五章 类图和对象图(UML)


size
:integer
=(100)
9
第 五 章 类 图 和 对 象 图
5.1 类的定义
说明:
3、属性还有取值范围。类型表示该属性的种类。 它可以是基本数据类型,例如整数、实数、布尔 型和枚举型等,也可以是用户自定义的类型。一 般它由所涉及的程序设计语言确定必须为其指定 数据类型。当一个类的属性被完整定义后,它的 任何一个对象的状态都由这些属性的特性值所决 定。
20
第 五 章 类 图 和 对 象 图
5.2 类之间的关系
1、关联
关联是一种结构关系,它指明一个事物的对象与 另一个事物的对象间的联系 例如,一个人为一家公司工作,一家公司有许多办 公室。我们就认为人和公司、公司和办公室之间 存在某种语义上的联系。在分析设计的类图模型 中,则在对应人类和公司类、公司类和办公室类 之间建立关联关系
改变的因素:1.一个类向另一个类发送消息。 2.一个类是另一个类的数据成员类型 3.一个类是另一个类的操作的参数类型 注:如果两个类之间有关联,那么这两个类就有依赖关 系,但是我们一般不标出依赖关系。
37
第 五 章 类 图 和 对 象 图
5.2 类之间的关系
3、泛化(generalization)关系
泛化关系:定义了一般元素和特殊元素之间的分类关系。 也就是一种继承关系。继承是在现有类的基础上定义和 实现一个新类的技术,刻画了类的一般性和特殊性。被 继承的类称为父类或超类,继承的类称为子类。 表示形式:用空心三角箭头实心线表示
25
第 五 章 类 图 和 对 象 图
5.2 类之间的关系
1、关联
角色:当一个类处于关联的某一端时,该类就在 这个关系中扮演着一个特定的角色。角色就是关 联关系中一个类对另一个类所表现的职责

《面向对象程度设计基础》(第2版)李师贤 05 第五章 类与对象(32页)

《面向对象程度设计基础》(第2版)李师贤 05 第五章 类与对象(32页)

■ set_mode
■set_val(u)e() ■
■ increment()代码
■ (■)set_value()
■ get_value
■ decrement()代码
■ get_value
■increme(n)t ■
■ (■)increment
■ d e c r e m e n(t)( )
(■)decrement(
// 设置循环计数器的上下限和当前值 …… };
程序5.4.2 …… // 设置循环计数器的上下限和当前值 CIRCULAR_NUMBERS::CIRCULAR_NUMBERS(int min, int max, int value) {
min_val = (min <= max) ? min : max; max_val = (min <= max) ? max : min; if (value < min_val) current = min_val; else {
■类
■ 对象angle ■min_val ■0
■CIRCULAR_NUMBER
■ 对象 mo■n1th ■min_val
■max_val ■359
■ set_mode()代码
■12 ■max_val
■current ■250
■ set_value()代码
■11 ■current
■ set_mode
■ get_value()代码
类的外面,因此必须用类名和作用域运算符::来修饰函 数名。一般形式为: ■ 成员函数类型类名::成员函数名(形参表) ■ { 函数体 ■} ■ 例: // 循环计数器加一 ■ void CIRCULAR_NUMBERS::increment()

Java程序设计精编教程5-8章知识点

Java程序设计精编教程5-8章知识点

b) 如果变量名由多个单词组成,从第 2 个单词开始的每个单词的首字母要大写。
方法
方法的定义包括两部分:方法声明和方法体。一般格式为:
方法声明部分 {
方法体的内容
}
方法声明
方法声明包括返回值类型、方法名和参数。
double getArea() { //返回值类型为 double,无参数。

}
方法的返回值类型可以是 Java 中的任意数据类型。如果一个方法不返回数据,返回值类型必须是 void。
2. 有一个类 Singleton,为该类设计单例模式(该类只能有一个实例,且不能在类的外部 new 对象),只能通过该类 的静态方法 getInstance()获取该类的唯一对象。在主类 Homework2 中测试单例模式的有效性。
b) 在实例方法中,不仅可以调用实例方法,也可以调用类方法。 2) 类名调用类方法
a) 在类方法中,只能调用类方法、操作类变量。 b) 也可以通过对象调用类方法。 c) 如果一个方法不需要操作实例变量就可以实现某种功能,可以考虑将其声明为类方法。(例 5-8) 5.7 方法重载与多态 Java 中有两种多态:重载(overload)和重写(override)。 方法重载(overload):一个类中可以有多个名字相同的方法,但这些方法的参数必须不同,或者参数的个数不同, 或者参数的类型不同。方法的返回值类型与重载无关。
5.8 this 关键字 this 只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。 一般情况下,方法中 this.实例变量的 this 可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,
this 或类名不能省略。 5.9 包
包是 Java 语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。 包语句

面向对象程序设计-类和对象_V2

面向对象程序设计-类和对象_V2
};
2 析构函数(续)
析构函数的说明 1)类只有一个,若未显式定义,编译系统 自动生成默认的析构函数。 2)系统会自动调用析构函数,在 (1)对象生存期结束时(}结束); (2)使用delete释放对象时。
3 重载构造函数
与一般成员函数一样,C++运行重载构造 函数,重载的方法一样。
class A{
2 成员函数的定义(续)
2)类内直接定义;
class student { int age;
public: void SetAge(int a){ age = a;} };
这样定义的成员函数是一种内置函数,亦 可在类外定义内置函数,不过要在函数前 加上“inline”。
2 成员函数的定义(续)
说明: 1)类外定义时,成员函数前应缀上类名。
1 构造函数(续)
构造函数的定义 class complex{ double real; double imag; public: // 下面为构造函数 complex(double r,double i) { real=r; imag=i; } double realcomplex() { return real;} };
};
1 构造函数(续)
带参数的构造函数的使用
#include <iostream.h>
void main() {
complex S1;
//使用两个缺省参数
complex S2(1.1); //使用一个缺省参数
complex S3 (1.1,2.2);
cout<<“real of A is”<<\
1 构造函数(续)
构造函数的使用说明: 1)必须和类同名,否则当作一般成员函数 2)必须无返回类型,void类型也不行 3)如果程序员未定义构造函数,编译器自 动生成一个默认的构造函数 如: complex::complex( ) { } 4)构造函数可以不带参数

第5章 面向对象的程序设计

第5章 面向对象的程序设计

5.2.6 修饰符2-1
包中类B 本类D 包中子 类E 所有子类C 所有类A
public protected
类、变量、方法 A B+C 变量、方法
default 类、变量、方法 B private D 变量、方法 private protected 变量、方法 C
14
5.2.6 修饰符2-2
用来说明类、方法或变量的类型。
5.5.1 接口的定义
说明:
[修饰符] interface 接口名称{
[public] [static] [final] 变量名=初值; // 静态常量 (1)通常接口的名字以able或ible结尾;
[public] [abstract] [native]返回值 方法名([参数 (2)可以使用 extends 来继承接口的常量和抽象方法,
12
5.2.5 构造方法
• • • • 构造函数名称与类名称相同 构造函数没有返回类型 其任务是在创建对象时初始化其内部状态 若无定义系统默认有一个无参构造方法
class Fruit { boolean seedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) { seedLess = seed; seasonal = season; price = p; } } 13
所以类在实现时,必须显示的使用public修饰符,否
则被警告缩小了接口中定义的方法的访问控制范围。
27
实例:接口的定义和实现
class InterfaceTest interface A { { public static void main(String args[ ]) double g=9.8; { void show( ); B b=new B( ); b.show( ); } } class B implements A } { public void show( ) {System.out.println(“g=“+g);} }

第5章 面向对象程序设计

第5章 面向对象程序设计

类的定义
Java类的定义格式如下:
<类声明> { <类主体> }
说明:
(1)类声明定义该类的名称、访问权限、与其他类的关系以 及实现的接口等。 (2)类主体定义该类中的成员,包含成员变量和成员方法。 成员方法是用来描述对成员变量进行的操作,不但定义方 法,一般还要实现该方法。
类的定义
类声明的格式如下:
成员方法
成员方法是可被调用执行并返回值的、能实现特定功能的 程序段。 成员方法声明格式如下:
[修饰符][abstract][static][final] 返回值类型 方法名([参数列表]) [throws 异常类] { 方法体 }
说明: (1)方法的修饰符和成员变量的修饰符一样有四种情况; (2)abstract、static和final分别用于指定所声明的方法为抽 象方法、静态方法和最终方法。静态方法又称类成员方法 或类方法,一般用于与类有关的数据操作,可以使用类名 直接调用。
对象的创建和使用
(2)当调用方法时,系统按照实参与形参一一对应的关系将 实参的值或引用传递给对应的形参。需要特别注意的是, 若实参为引用类型的数据,其值不能为null。方法后的圆括 号()是必需的,即便该方法没有声明形式参数也不能缺 省。
对象的创建和使用
Java语言中的类是引用数据类型,两个对象之间的赋值是引 用赋值,对象亦可被赋值为null,对象的引用模型如图所示。
对象数组
例如:
//定义并初始化对象数组 C_Dater dates[ ]=new C_Date[3] //定义并初始化对象数组 //数组元素 对象) 数组元素( Dates[0]=new C_Date(); //数组元素(对象)的实例化 Dates[1]=new C_Date(1949,10,1); Dates[2]=new C_Date(2009,11,20);

第5章动态交互模型-顺序图

第5章动态交互模型-顺序图

铃声停止 电话连通
电话断开 打电话者挂机
铃声 受话方回答 铃声停止 电话连通 受话方挂机 电话断开
顺序图的相关概念
• UML的交互图是用户系统动态方面的建模,交互图可分为顺序图和协 作图。
• 顺序图(Sequence Diagram)描述了对象之间传递消息的时间顺序, 它用来表示用例中的行为顺序,是强调消息时间顺序的交互图。顺序 图描述类系统中类和类之间的交互,它将这些交互建模成消息交换, 也就是说,顺序图描述了类以及类间相互交换以完成期望行为的消息。 • 顺序图包括了4个元素,分别是对象(Object)、生命线(Lifeline)、 激活(Activation)和消息(Message)。
– 1.对象(Object) – 2.链(Link)
– 3.消息(Message)

• 链是关联的实例,当一个类与另一个类之间有关联时,这两个类的实
例之间就有链,一个对象就能向另一个对象发送消息。所以链是对象
间的发送消息的路径。 • 要在通信图中增加消息,必须先建立对象之间的链接。
• 链接一般建立在两个对象或者两个类实例之间,也可以建立反身链接。
2 : 下 单 ()
3 : 做 菜 ()
4:菜 5:菜
6 : 结 帐 () 7 : 通 知 结 帐 () 8 : 账 单 结 算 () 9 : 账单 10 : 账 单 11 : 信 用 卡 12 : 信 用 卡 13 : 刷 卡 () 14 : 刷 卡 单
15 : 刷 卡 单
16 : 签 字 () 17 : 签 字 的 刷 卡 单
顾客服务员厨师继续用顺序图画出顾客指示买单和刷卡结帐顾客服务员厨师前台收款账单10账单11信用卡12信用卡13刷卡14刷卡单15刷卡单16签字17签字的刷卡单18签字的刷卡单19核对签名确认20存根21存根活动图与顺序图1假设自动售票机只接收硬币我们需要先找到地铁的工作人员询问到某站需要多少钱然后拿出纸币兑换硬2在自动售票机上选择要去的目的地和票数投币售票机给出地铁票顺序图乘客工作人员售票机强调角色之间的交互信息传递明确

java的类和对象 第5章(1)

java的类和对象  第5章(1)
29
例题----方法调用测试
public class CircumferenceTester
{ public static void main(String args[])
{ Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; double circum1 = c1.circumference(); //调用 double circum2 = c2.circumference(); System.out.println("Circle 1 has circumference " + circum1); System.out.println("Circle 2 has circumference " + circum2);
类的声明(3)
修饰符 可以有多个,用来限定类的使用方式 abstract 指明此类为抽象类,其概念和使用方法将在第6章 介绍。 final 指明此类为终结类,不能用最终类生成子类。
类声明体 数组成员及方法成员 数组成员说明了类的静态属性,而方法成员一般是 对类的静态属性进行一些相应的操作。 初始化体 可以有多个,具体的在5.3节介绍。
21
5.1.2 方法成员的定义及重载
方法成员 定义类的行为 一个对象能够做的事情 我们能够从一个对象取得的信息 可以没有,也可以有多个;一旦在类中声明了方 法,它就成为了类声明的一部分 分为实例方法和类方法
5.1.2 方法成员的定义及重载
声明格式: [访问控制符] [修饰符] 方法返回值类型 方法名([参数表]) { 方法体; }
类的声明——例1(钟表类)

第5章 对象类图与对象图

第5章  对象类图与对象图

Home
图5.1 一个类图示例
5.1 类图
5.1.1 类 5.1.2 属性 5.1.3 操作
Home
5.1.1 类
类是对象的集合,这些对象具有共同的结 构特征、行为特征、联系和语义。
类的图标(Icon)用实线矩形框表示,矩 形框中含有若干分隔框,分别包含类的名 字、属性、操作、约束以及其他成分等, 如图5.2所示。
类名可以是简单名,也可以是路径名。
属性框中包含类的属性。属性是类的命名 的性质,它描述类性质的实例所能具有的 值。
操作框中包含类的操作。操作实现类的服 务功能,它可以被本类的对象请求执行, 从而发生某种行为。
其他的框可以包含责任、联系、约束、业 务规则、事件、例外情况等内容的说明。
类名 属性 操作 …
Home
可见io
Rose
公有 Public
+
+
私有 private
-
-
保护 protected
#
#
5.1.3 操作
操作(Operation)是类的行为特征或动态特征。 一个类可以有多个操作,也可以没有一个操作。没有一个
操作的类常用于表达接口或数据表。 操作用文字串说明,如图5.4所示。 操作有在本类中唯一的操作名或标识符。 参数列表是可选项目,即一个操作可以有参数,也可以没
第5章 类图与对象图
建立对象模型是面向对象的开发方法的基本任务,是软件 系统开发的基础,也是一个最需要倾注精力和时间的技术 活动。
类与对象的图形表示法是面向对象分析方法的核心技术之 一,它能表达面向对象模型的主要概念。
UML的类图(Class Diagram)与对象图(Object Diagram) 具有强大的表达能力,能够有效地对现实世界的业务领域 和计算机系统建立可视化的对象模型。

Java编程基础及应用(第2版)教学课件第5章 类和对象

Java编程基础及应用(第2版)教学课件第5章 类和对象
变量定义及初始化;〃声明成员变量 [方法修饰字]返回值的数据类型方法名称(参数1,参数 2...)
{ 程序语句! 〃定义成员方法 [return表达式];
} }
7
§5.1.2 类的定义
说明: (1) class关键字,用于定义类。“class类名”是类的声明 部分, 类名必须是合法的Java标识符,通常第一个字母大写 ,能体现类的功能和作用。 (2 )类的修饰字有:[public] > [abstract | final] 、缺省方式 为 friendly。其中,abstract类不能直接产生属于这个类的对 象;final类不能被其他任何类所继承;public类不但可以被同 一程序包中的其他类使用,别的程序包中的类也可以使用; friendly(缺省)类只能被本包中的其他类使用。
一个对象 就要为对象的各个成员变量分配存 储空间,可以通过 引用对象的成员来使用对 象。 -对象数据成员的引用方式如下:
-对象成员方法的引用方式如下:
22
§5.1.3 对象的创建、使用及清除
例5.3定义DogTestl类,创建该类对象dog,使用该对象 并输
岀相应信息。
程序运行结果: dog阿黄的年龄:3,毛发的颜色:黄色 狗在汪汪叫…
(4) 方法不能嵌套,即不能在方法中再声明其他方法。 (5) 同一个类中的方法可以访问该类的成员变量。 (6) 一个类的方法只能访问自己的局部变量。
17
§5.1.2 类的定义
-例5.1定义Dog类,并设置其属性和方法。
在上面的程序屮,Dog类定义了name、age和color三 个属性,分别表示狗的姓名、年龄和毛发颜色,然后 定义了一个bark()方法,表明狗有汪汪叫的能力。
返回值的 类型和访问限制;方法体由括号内的声明部分和语 句部分组成,描述方法的功能。

C++语言程序设计(清华大学出版社)课后习题及答案 第 五 章 程序的结构

C++语言程序设计(清华大学出版社)课后习题及答案    第 五 章   程序的结构

void TelepathicFunction(); int main() { const int MaxCats = 5; Cat *CatHouse[MaxCats]; int i; for (i = 0; i<MaxCats; i++) { CatHouse[i] = new Cat(i); TelepathicFunction(); } for ( i = 0; i<MaxCats; i++) { delete CatHouse[i]; TelepathicFunction(); } return 0; } void TelepathicFunction() { cout << "There are " << Cat::GetHowMany() << " cats alive!\n"; } 程序运行输出: There are 1 cats alive! There are 2 cats alive! There are 3 cats alive! There are 4 cats alive! There are 5 cats alive! There are 4 cats alive! There are 3 cats alive! There are 2 cats alive! There are 1 cats alive! There are 0 cats alive!
5-8 什么叫做友元函数?什么叫做友元类?
解: 友元函数是使用 friend 关键字声明的函数,它可以访问相应类的保护成员和私有成员。友元 类是使用 friend 关键字声明的类,它的所有成员函数都是相应类的友元函数。
本页已使用福昕阅读器进行编辑。 福昕软件(C)2005-2009,版权所有, 仅供试用。

JAVA 练习题第5章对象和类

JAVA 练习题第5章对象和类



)。 (A)内部类不能有自己的成员方法和成员变量 (B)内部类可用private或protected修饰符修饰 (C)内部类可以作为其他类的成员,而且可访问 它所在的类的成员 (D)除static内部类外,不能在类内声明static成 员
【解析】内部类也可以有自己的成员方法和变量。
答案为 A
函数。
super
2.类与对象的关系是( )。
答案为 A
(A)类是对象的抽象 (B)对象是类的抽象 (C)对象是类的子类 (D)类是对象的具体实例
3.下面哪一个是Java中不合法的标识符( )。
(A)$persons (C)_myVar
(B)twoNum (D)*pointFra bibliotek答案为 D
答案为 D
4.区分类中重载方法的依据是( A.形参列表的类型和顺序 B.不同的形参名称 C.返回值的类型不同 D.访问权限不同
)。
【解析】形参表的类型和顺序不同时区分重载方法的
唯一标志。
答案为 A
5.子类对象能否直接向其父类赋值?父类对象能否向其子类赋值?



( ) A.能,能 B.能,不能 C.不能,能 D.不能,不能 值给子类对象。
据成员。
答案为 C
4.有一个类B,下面为其构造方法的声明,正确 【解析】构造方法没有类型,且方法名与类名相同。
的是( )。 (A)void B(int x) (B)B(int x) {} (C)b(int x) {} (D)void b(int x) {}
{}
答案为 B

答案为 B
在创建对象时必须( )
A、先声明对象,然后才能使用对象 B、先声明对象,为对象分配内存空间,然后才能 使用对象 C、先声明对象,为对象分配内存空间,对对象初 始化,然后才能使用对象 D、上述说法都对

第5章 对象建模

第5章  对象建模
是的但它们之间有很大的区别在结构化分析中我们将数据和影响数据的操作处理分开来看但对象不同它同时包含数据和操作处理在面向对象的分析中我们把添加修改或更改数据这些操作处理称作方法
第5章 对象建模


1. 2.
3.
4. 5. 6.
7.
第5章是软件开发生命周期的系统分析阶段4章中的第3章。这一章讨论 对象建模技术,它可以帮助分析员创建逻辑模型。除了结构化分析以外, 面向对象的分析是另外一种表示和设计信息系统的方法。 学习目标 完成本章学习后,将了解以下内容: 解释如何使用面向对象分析来描述信息系统。 定义对象建模术语和概念,包括对象、属性、方法、消息、类和实例。 解释对象之间的关系和继承的概念。 绘制对象关系图。 描述统一建模语言(UML)工具和技术,包括用例、用例图、类图、顺序 图、状态转换图和活动图。 解释用CASE工具开发对象模型的优点。 阐述如何组织对象模型。
5.1.3 属性




若对象类似于名词的性质,那么属性就是类似于描述对象特征的形容词。 一个对象到底需要多少属性呢?答案取决于信息系统及其用户的业务需 求,即便是一个相对而言比较简单的对象,例如某项库存商品,也可能 需要部件编号、描述、供应商、现有数量、最低库存水平、最高库存水 平、订单时间等比较多的属性。 有些对象只需要很少的属性,而有些可能需要许多。 系统分析员在系统设计处理期间定义了对象的属性。 在面向对象的系统中,一个对象可以从其他对象继承或获取属性,当学 习了对象和类之间的关系之后就会了解继承是如何发生的。 对象的特定属性称作状态,对象的状态就是描述该对象当前情形的形容 词。 例如学生可能是将来的学生、当前的学生或者过去的学生,具体情况取 决于状态。 同样一个银行账户可能是已经使用的、尚未使用的或者被冻结的。

C++程序设计练习题及答案第五章类与对象

C++程序设计练习题及答案第五章类与对象

第5章类与对象5.1 选择题1. 在下列结构变量的定义中,不正确的是( d )。

(a) struct employee{ char name[ 20 ] ;long code ;} emp ;(b) struct{ char name[ 20 ] ;long code ;} emp ;(c) struct employee{ char name[20];long code;} ;employee emp;(d) struct{ char name[20];long code;} employee;employee emp;2.已知有职工情况结构变量emp定义为:struct employee{ char name[ 20 ] ;long code ;struct{ int year ;int month ;int day ;} birth ;} emp ;下列对 emp 的 birth 正确赋值方法是( d )。

(a) year = 1980 ; month = 5 ; day = 1 ;(b) birth.year = 1980 ; birth.month = 5 ; birth.day = 1 ;(c) emp.year = 1980 ; emp.month = 5 ; emp.day = 1 ;(d) emp.birth.year = 1980 ; emp.birth.month = 5 ; emp.birth.day= 1 ;3.假定有以下声明和定义,则下面引用形式错误的是( b )。

1struct student{ int num ;float score ;} stu[3] = {{1001,80},{1002,75},{1003,91}}, *p = stu ; (a) p->num (b) (p++).num (c) (p++)->num (d) (*p).num4.下列四个运算符中,优先级最低的是( a )。

第4章-类和对象 - 2

第4章-类和对象 - 2

13
注意:C#中提供了默认的不带参数的 构造函数,如果用户不写该函数,则编 译器为用户默默的创建!一个类中可以 public class Student 有多个构造函数! { public Student() private string StuNo; {}
思考:
private string StuName; private string StuSex; public void InputInfo() { … } public void ShowInfo() { … public static void Main() { }
5
创建1000个普通僵尸:
public static void Main() { Zombie[] zombieArr = new Zombie[1000]; for (int i = 0; i < 1000; i++) { zombieArr[i] = new Zombie(); zombieArr[i].SetInformation(); zombieArr[i].GetInformation(); } } public void SetInformation() { zombieName = Console.ReadLine(); zombieToughness = 10; zombieStatus = "alive"; zombieIntroduction = Console.ReadLine(); } 6
2
public class Zombie { private string zombieName; private int zombieToughness; private string zombieStatus; private string zombieIntroduction; public void SetInformation() {
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6
改进后的Student类
public class Student { this指向当前的对象 private string StuNo; private string StuName; private string StuSex; public Student(string StuNo,string StuName, string StuSex) { this.StuNo = StuNo; this.StuName = StuName; this.StuSex = StuSex; } publicpublic void ShowInfo() static void Main() { { Console.WriteLine(StuNo); Student Tom = new Student(“A001”,”Tom”,”M”); Console.WriteLine(StuName); Tom.ShowInfo(); Console.WriteLine(StuSex); } } 7 }
示例: ~Student() {}
11
思考:
同一个类中,如果函数同名,参数列表不同,则称 为函数的重载。一个类中不同的构造函数组成,称 为构造函数重载!
解决方案: 假设学生的学号,姓名已知,由于学生尚未报道,对于学生的 public Student(){}//默认构造函数 性别未知,现希望当性别未知时,性别取默认值“M”,性别已 public Student(string StuNo,string StuName) 知,则通过构造函数赋值给相应的对象。构造函数如何写? { this.StuNo = StuNo; this.StuName = StuName; this.StuSex = “M”; } public Student(string StuNo,string StuName, string StuSex) { public static void Main() this.StuNo = StuNo; { this.StuName = StuName; Student Tom = new Student(“A001”,“Tom”,”M”); this.StuSex = StuSex; Student Jane = new Student(“A002”,”Jane”); }
构造函数修饰符一般为 public 参数列表个数与成员变量 个数相同,且一一对应
示例: public Student(string StuNo,string StuName,string StuSex) { //构造函数体 } 5
4.3.1 构造函数
构造函数体:
this.成员变量名 = 成员变量名; 示例: public Student(string StuNo,string StuName,string StuSex) { this.StuNo = StuNo; this.StuName = StuName; this.StuSex = StuSex; }
10
2 析构函数
用于执行清除操作的特殊方法。 1. 析构函数不能有参数,一个类中只能有一个析构函数。 2. 析构函数用户销毁内存中已创建的对象。 3. 析构函数的名字与包含它的类的名字同名,前面加~,并且 不定义返回值类型,即使void也不可以。 4. 类中可以不写析构函数,编译器会自动创建,并在释放对象 时自动调用。
15
示例:
class MyClass { 用户自定义类访问规则: public int a; 1.静态方法只能访问静态成员变量 static public int b; void Fun1() //定义一个非静态方法 2.非静态方法即可访问静态成员变量又可访问非静态成员变量 { 3.静态方法或静态成员变量通过类名访问 a = 10; //正确,直接访问非静态方法 4.非静态方法或非静态成员变量通过实例名称来访问 b = 20; //正确,直接访问静态方法 } public static //定义一个静态方法 static void Fun2() void Main() { { a = 10; MyClass clsA = new MyClass(); //错误,不能访问非静态方法 b = 20; clsA.a = 10; //正确 //正确,可以访问静态成员 clsA.b = 20; //错误 } MyClass.a = 30; //错误 } MyClass.b = 40;//正确 }
改进后的Student类
public void ShowInfo() { Console.WriteLine(this.StuNo); Console.WriteLine(this.StuName); Console.WriteLine(this.StuSex); } 显示当前对象对应的成员变量,这里this也可省略不写!但构造函数 中的this不可省略,否则编译器报错!
16
思考:
Main函数为什么是static?
在程序刚开始运行的时候,Main函数是程序的入口,此时 未建立任何实例,因此无法调用实例成员,为了能够在程序的 开始执行Main方法,必须将其声明为静态。要是main也要实例 化的话,那谁又来实例化main呢?
17
示例
设计学生类,其中包含学号,姓名,年龄及学生总人数共4个属性,方 法有Student()(构造函数),setNumber(),getStudent(), getNumber()。 (1)以上属性和方法中哪些是非静态数据,哪些是静态数据? (2)设计程序实现该类。
8
注意:C#中提供了默认的不带参数的 构造函数,如果用户不写该函数,则编 译器为用户默默的创建!一个类中可以 public class Student 有多个构造函数! { public Student() private string StuNo; {}
思考:
private string StuName; private string StuSex; public void InputInfo() { … } public void ShowInfo() { … public static void Main() { }
}
12
练习:
public class Time 有Time类如下: { Time t1, t2, t3, t4 ; t1= newint hour, minute, second; Time (); t2 = newpublic Time ( ) Time(8); { this.hour=this.minute=this.second=0; } t3 = new Time(8, 30); t4 = newpublic Time (int hour) Time(8,30,30);类中还有ShowTime方法用来显示当 { this.hour=hour; this.minute=this.second=0; } 前时间为×小时Y分Z秒,请根据要求实现Time类。 public Time (int hour, int minute) { this.hour=hour; this.minute=minute; this.second=0;} public Time (int hour, int minute, int second) {this.hour=hour;this.minute=minute; this.second=second;} public void ShowTime() { Console.WriteLine(“当前时间为{0}时{1}分{2} 秒”,hour,minute,second); } 13 }
}
Student Tom = new Student(); Tom.InputInfo(); Toudent类创建Teacher类, Teacher类中包含成员 变量teaNo(工号),teaName(教师姓名),teaAge(年龄), teaTitle(职称)及构造函数和GetInformation()(获取 教师基本信息)。最后在Main()函数中创建Teacher类对 象Jane,并访问成员变量及成员函数。
2
第5章
类和对象-2
目标
类的构造函数 构造函数的重载
静态成员和非静态成员
4
1 构造函数
构造函数是一种特殊的成员函数。 1.当创建一个类的实例的时候构造函数会自动被编译器调用。 2.构造函数被用于初始化类的成员变量。 3.构造函数的名字与包含它的类的名字同名,并且不定义返回值类 型,即使void也不可以。 语法: [访问修饰符] <类名>([参数列表]) { //构造函数体,初始化工作 }
4.1.3静态成员和非静态成员
类中的成员要么是静态,要么是非静态的。 将类中的某个成员声明为static,该成员称为静态成员。 类的非静态成员属于类的实例所有 每创建一个类的实例,都在内存中为非静态成员开辟了 一块存储区域; 用实例访问,形式:实例名.非静态成员 而类的静态成员属于类所有 无论这个类创建了多少个实例,一个静态成员在内存中 只占有一块区域,为这个类的所有实例所共享。 用类访问,形式:类名.静态成员 类的静态方法只能直接访问类的静态成员!
回顾
访问修饰符 类的声明 类的实例化
1
习题:
Student类中包含成员变量StuNo(学号),StuName(学生姓 名),StuSex(学生性别)及成员函数SetInfomation()(设置学 生基本信息),GetInformation()(获取学生基本信息)。最后在 Main()函数中创建Student类对象Tom,并访问成员变量及成员 函数。
14
静态成员的应用
对于学生类示例,想要得到所有学生人数的信息,该如何获取呢?很显然, 这不是某个具体学生张三、李四的属性,而是整个学生群体的属性,对于 这种情况,可以说这种属性是类的属性,而非其对象的属性。 在面向对象中,类的属性称之为静态属性。 C#中使用static关键字来定义静态属性或方法,静态属性不能用实例化 对象引用,只能用类引用。若属性是静态的,通过“类名.属性”访问; 若属性是非静态的,则是通过“对象名.属性”访问。 思考: 解决方案: 项目中什么时候会用到静态成员? 网站中的当前在线人数,访问次数等; 访问数据库的方法;
相关文档
最新文档