1、第一章 面向对象的程序设计方法面向对象程序开发重要内容涉及:1 面向对象的基本理论。2 面向对象的分析方法。3 面向对象的开发发语言。4 面向对象的程序设计方法。5 面向对象的数据库管理方法。11 设计的重要特性111 类及其定义 对象是客观事务的一种软件描述。而类是对象的一种抽象,类中包含了对象的属性特性。如图1-1所示。类的定义涉及:1 定义对象属性。2 定义属性操作。如整数类int,字符类char等等。如通过定义:char a,即产生了字符类的一个对象“a”。开发人员通过自定义类来描述特定的对象。例如可为矩形定义如下名为“Rect”的类:Class Rect /属性: float len
2、gth; 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。112 封装是隐藏软
3、件模块的内部属性和操作,只通过特定接口与其它模块交互。封装的意义在于:1 提供一种全新的软件组织方法,适应面向对象程序设计的规定。2 通过隐藏数据保护与管理数据。3 增强程序的可复用性,减少反复劳动。113 继承它反映了客观事务之间内在的联系,在面向对象程序设计中具体体现为具有共同特性的类之间的继承性。若类A与类B具有继承性,类A是类B的子类,则类A的定义定义包含类B的所有属性和操作。例如平行四边形类Para定义如下:class para /属性 float a; float b; /操作其子类Rect的定义如下: class Rect:para /“:”表达类Rect是类para的子类 /属
4、性: /操作: 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 实现类接口的一致性。114 多态性 多态性有重载和类属两种表现形式。1重载 是指相同的符号形式可代表不同的功能。运算符的重
5、载是最为常见的重载形式。下面的代码段实现了运算符“+”对于字符串重载: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);则编译系统可根据
6、参数的不同匹配相应函数体完毕解决。2类属 在定义通用类模块的基础上,通过参数标记类的实际应用。定义形式如下:class query T type; /队列属性和操作的定义 在应用程序中通过下面的形式即可定义整数队列query_int和浮点数队列query_float:query(int) query_int;query(float) query_float;32 VC121 构造函数和析构函数1 构造函数完毕对象的初始工作。定义特点为:(1) 函数名必须与类名相同。(2) 无返回值。例如:class Rect public : /构造函数 Rect(int,int); /析构函数 Rect()
7、; 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
8、) return(length*width); 在应用程序中通过定义:Rect rect1(100,50);即构造了长、宽分别为100和50的矩形对象rect1。2析构函数完毕对象的释放。定义的特点为:(1) 函数名为类名前加“”。(2) 无返回值。122 类成员的外部属性1 Public类型2 Protected类型3 Private类型123 类的友员友员的声明形式如下:friend 友员类型 友员名;例如为类Rect定义友员函数GetLength和GetWidth的形式如下:class Rect Public : friend float GetLength(const Rect &);
9、 friend float GetWidth(const Rect &); private: float GetLength(const Rect &rect1) return(rect1.Length);float GetWidth(const Rect &rect1) rfeturn(rect1.Width);124 虚函数是类成员函数的多态性在继承中的体现。虚函数的声明形式如下:virtual 函数类型 函数名;例如:class Rect public : private: /属性: float length; float width; private : /操作 virtual flo
10、at 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);