资源描述
第一章 面向对象的程序设计方法
面向对象程序开发重要内容涉及:
1. 面向对象的基本理论。
2. 面向对象的分析方法。
3. 面向对象的开发发语言。
4. 面向对象的程序设计方法。
5. 面向对象的数据库管理方法。
1.1 设计的重要特性
1.1.1 类及其定义
对象是客观事务的一种软件描述。而类是对象的一种抽象,类中包含了对象的属性特性。如图1-1所示。
类的定义涉及:
1. 定义对象属性。
2. 定义属性操作。
如整数类int,字符类char等等。
如通过定义:char a,即产生了字符类的一个对象“a”。
开发人员通过自定义类来描述特定的对象。例如可为矩形定义如下名为“Rect”的类:
Class Rect
{
//属性:
float length;
float width;
//操作
float perimeter(float length,float width);
float area (float length,float width);
}
float Rect::perimater(float length,float width)//::表达类属关系
{
return(2*(length+width));
}
float Rect::area(float length,float width)
{
return(length*width);
}
在应用程序中只需定义:
Rect rect1;
即生成了一个Rect类的对象rect1。
1.1.2 封装
是隐藏软件模块的内部属性和操作,只通过特定接口与其它模块交互。封装的意义在于:
1. 提供一种全新的软件组织方法,适应面向对象程序设计的规定。
2. 通过隐藏数据保护与管理数据。
3. 增强程序的可复用性,减少反复劳动。
1.1.3 继承
它反映了客观事务之间内在的联系,在面向对象程序设计中具体体现为具有共同特性的类之间的继承性。
若类A与类B具有继承性,类A是类B的子类,则类A的定义定义包含类B的所有属性和操作。例如平行四边形类Para定义如下:
class para
{ //属性
float a;
float b;
//操作
}
其子类Rect的定义如下:
class Rect::para //“:”表达类Rect是类para的子类
{
//属性:
//操作:
float perimeter(float a,float b);
float area(float a,float b);
}
float Rect::perimeter(float a,float b)
{
return(2*(a+b));
}
float Rect::area(float a,float b)
{
return(a*b);
}
图1-2所示为一个四边形类族继承关系示意。
继承对于面向对象程序设计的重要意义在于:
1. 对的反映对象本质。
2. 增强应用程序的可复用性。
3. 实现类接口的一致性。
1.1.4 多态性
多态性有重载和类属两种表现形式。
1.重载
是指相同的符号形式可代表不同的功能。运算符的重载是最为常见的重载形式。
下面的代码段实现了运算符“+”对于字符串重载:
char * operator+(char *str1,char *str2);//重载函数据声明
char * operator+(char *str1,char *str2)
{
return(strcpy(str1,str2));
}
还支持函数名重载。例如定义如下两个比较函数:
int compare(int a,int b);
float compare(float a,float b);
若在应用程序的执行体中引用上述函数:
int c=compare(2,3);
float c1=compare(2.3,3.5);
则编译系统可根据参数的不同匹配相应函数体完毕解决。
2.类属
在定义通用类模块的基础上,通过参数标记类的实际应用。定义形式如下:
class query
{
T type;
//队列属性和操作的定义
……
}
在应用程序中通过下面的形式即可定义整数队列query_int和浮点数队列query_float:
……
query(int) query_int;
query(float) query_float;
……
3.2 VC
1.2.1 构造函数和析构函数
1. 构造函数
完毕对象的初始工作。定义特点为:
(1) 函数名必须与类名相同。
(2) 无返回值。
例如:
class Rect
{
public :
//构造函数
Rect(int,int);
//析构函数
~Rect();
private: //属性:
float length;
float width;
private : //操作
float perimeter(float length,float width);
float area (float length,float width);
}
Rect::Rect(int a,int b)
{
length=a;
width=b;
}
float Rect::perimater(float length,float width)//::表达类属关系
{
return(2*(length+width));
}
float Rect::area(float length,float width)
{
return(length*width);
}
在应用程序中通过定义:
Rect rect1(100,50);
即构造了长、宽分别为100和50的矩形对象rect1。
2.析构函数
完毕对象的释放。定义的特点为:
(1) 函数名为类名前加“~”。
(2) 无返回值。
1.2.2 类成员的外部属性
1. Public类型
2. Protected类型
3. Private类型
1.2.3 类的友员
友员的声明形式如下:
friend 友员类型 友员名;
例如为类Rect定义友员函数GetLength和GetWidth的形式如下:
class Rect
{ Public :
……
friend float GetLength(const Rect &);
friend float GetWidth(const Rect &);
……
private:
……
}
float GetLength(const Rect &rect1)
{
return(rect1.Length);
}
float GetWidth(const Rect &rect1)
{
rfeturn(rect1.Width);
}
1.2.4 虚函数
是类成员函数的多态性在继承中的体现。
虚函数的声明形式如下:
virtual 函数类型 函数名;
例如:
class Rect
{
public :
……
private: //属性:
float length;
float width;
private : //操作
virtual float perimeter(float length,float width);
virtual float area (float length,float width);
}
float Rect::perimater(float length,float width)//::表达类属关系
{
return(2*(length+width));
}
float Rect::area(float length,float width)
{
return(length*width);
}
则可如下定义矩形类Rect的派生类正方形Squ:
Calss Squ:Rect
{
Private :
flaot side;
float perimeter(float side);
float perimeter(float side);
{
return(4*side);
}
float Squ::Area(float side)
{
return(side*side);
}
展开阅读全文