第十一讲第十一讲可重用的软件设计可重用的软件设计??主要问题主要问题––基本类库的利用和发展基本类库的利用和发展––可重用类的设计可重用类的设计??重要难点重要难点––对象的初步设计错误将影响整个软件的可重用性和对象的初步设计错误将影响整个软件的可重用性和易维护性易维护性??OOPOOP经验经验––泛化程序设计泛化程序设计General ProgrammingGeneral Programming––设计模式设计模式Design PatternDesign 通用算法的实现通用算法的实现??通用算法通用算法––适用于各种数据容器适用于各种数据容器––适用于各种类型的数据适用于各种类型的数据––适用于各种数据源适用于各种数据源??例如例如––适用于各种数据容器和数据类型的各种通用适用于各种数据容器和数据类型的各种通用的排序算法的排序算法例例11-111-1:冒泡排序算法:冒泡排序算法?过程–27 24 14 32 42 13 26–13 27 24 14 32 42 26–13 14 27 24 26 32 42–13 14 24 27 26 32 42–13 14 24 26 27 32 42算法描述算法描述?数据结构–Set 保存一组数据?,,2,,,重复1-4,再次扫描C++C++程序实现程序实现void Sort( Set &s ) {void Sort( Set &s ) {intintnn= ();= ();for( int i=0; i<n; i++ ) for( int i=0; i<n; i++ ) {{int ex = 0;int ex = 0;for( int j=n-1; j>i; j-- ) for( int j=n-1; j>i; j-- ) {{if( (j-1).greatThan( (j) ) {if( (j-1).greatThan( (j) ) { ( j-1 ); ( j-1 );// // 交换第交换第j-1j-1和第和第jj个元素个元素 ex++; ex++;// // 记录存在交换记录存在交换}}} } if( ex == 0 )if( ex == 0 )break;break;} }} }数据容器和数据元素的需求数据容器和数据元素的需求class Set {class Set {// // 对数据容器的要求对数据容器的要求 virtual int length( ) = 0; virtual int length( ) = 0;// // 求元素个数求元素个数virtual Elem &getAt( int ) = 0;virtual Elem &getAt( int ) = 0;// // 求指定元素求指定元素virtual void swap( int ) = 0;virtual void swap( int ) = 0;// // 交换相邻元素交换相邻元素};};class Elem {class Elem {// // 对数据元素的要求对数据元素的要求 virtual int greatThan( Elem& ) = 0; virtual int greatThan( Elem& ) = 0;}}// // 元素比较元素比较应用例:应用例:对一组学生记录按照学号进行排序对一组学生记录按照学号进行排序class Student : public Elem{ int no;//学号CString name;Student( int n, char *nam ) {no = n;name = nam;} int greatThan( Elem &e ) { Student *p = (Student *)&e; return no > p->no;//比较学号} }学生记录集的定义学生记录集的定义class Records : public Set {CObArray *pVec;// 采用动态数组public:Records( CObArray &v ) { pVec = &v;}int length( ) { return pVec->GetSize(); }Elem &getA
oo软件设计12-11 来自淘豆网m.daumloan.com转载请标明出处.