学生信息管理系统的构建思路1

来源:互联网 发布:ip查询软件 编辑:程序博客网 时间:2024/05/20 09:06

开闭原则(OCP)
1)对于扩展是开放的(Open for extension)。
2)对于修改是关闭的(Closed for modification)。
实现方法
实现开闭原则的关键就在于“抽象”。把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规定出所有的具体实现必须提供的方法的特征。
C++抽象类引入原因
1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。
2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。
三、相似概念:
1、多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
a.编译时多态性: 通过函数重载和运算符重载来实现的。
b 运行时多态性:通过继承和虚函数来实现的。
2、虚函数
虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载
纯虚函数的声明有着特殊的语法格式:virtual 返回值类型成员函数名(参数表)=0;
请注意,纯虚函数应该只有声明,没有具体的定义,即使给出了纯虚函数的定义也会被编译器忽略。
3、抽象类
包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。
在C++中,我们可以把只能用于被继承而不能直接创建对象的类设置为抽象类(Abstract Class)。
学生信息管理系统
将程序分为用户界面层、逻辑层、数据访问对象层、数据传输对象层这4层,各层的功能如下:
1.用户界面层
用户界面层主要用来调用各个子界面层,包含了各个子界面层的程序设计
2.逻辑层
逻辑层包含了各个数据处理功能
3.数据访问对象层
定义了数据的存、读功能
4.数据传输对象层
定义了数据的格式(结构体或类)
以学生成绩管理系统为例,单个学生的学生信息包含学号、姓名、成绩,因此数据的格式可定义为一个类CStudentDTO,其中包含了学号、姓名、成绩等私有变量,相关变量的读取函数及构造、析构函数。
然后考虑该程序想要实现的功能,该程序想要实现对学生信息的添加、查找、显示、排序、修改、删除等功能,因此可在主窗口上给出各个功能的选择界面,再在各个功能选择后显示相应的子界面,因此显示界面包括一个主界面以及若干个子界面,因此可以定义一个界面类,该类中包含若干个公有成员函数用来显示主界面以及若干个子界面,并在子界面中调用逻辑函数【各类数据处理函数】。而逻辑函数的功能定义在逻辑层中,因此需要在界面类中定义一个逻辑类的指针【不能定义为非指针类局部对象,指针在堆上开辟内存空间,只有用delete才能释放资源,如果不delete,该资源在整个程序运行期间都存在】。
逻辑类中包含了对数据的所有处理方法,因此必须知道具体的数据类型,及要包含数据类。而逻辑类中在处理数据之前需读到数据,数据处理完毕后需保存数据,而数据的读取和保存功能都是定义在数据访问对象中的,因此逻辑类还需包含数据访问类。
本例仅在 数据访问类和逻辑类中定义了抽象类,界面类和数据传输类中没有定义抽象类,其实只要有方法实现的类都可以定义抽象类,只是本例中的数据类较为简单,只包含学生,如何还包含教师,家长等信息,可以写一个Person抽象类,然后让学生、教师、家长等派生于此类。界面类也比较简单,没有定义抽象类。
这里写图片描述
这里写图片描述
这里写图片描述

原创粉丝点击