本文主要是针对数据可视化学生成绩分析系统这一工程实践,对其进行软件系统分析和设计到总结出软件系统概念原型。阐述项目中所蕴含的软件结构特点,比如基本结构和特殊机制、设计模式、软件架构风格和策略等,并采用不同的视图来描述项目的软件系统概念原型,比如分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图、工作分配视图等。
软件的基本结构包括五种:顺序结构、分支结构、循环结构、函数调用框架以及继承和对象组合。其中前三种是最基本的也是必须的,在本项目中使用较多的是函数调用以及继承和对象组合,函数调用被继承和对象组合所涵盖,所以接下来我们集中于后者进行介绍。继承和对象组合都是以对象(类)作为软件基本元素构成的程序结构。对象是基于属性(变量或对象)和方法(函数)构建起来的更复杂的软件基本元素,显然它涵盖了前述包括函数调用框架在内所有程序结构,它是一个更高层、更复杂的抽象实体。基于对象(类)之间的继承关系所形成的两个对象各自独立、两个类紧密耦合的程序结构;对象组合则将一个对象作为另一个对象的属性,从而形成两个对象(类)之间有明确的依赖关系。举例来说,本项目中的学生/家长、老师以及管理员都继承自人这一抽象类,抽象类将他们共同拥有的一些属性以及方法抽象出来,好处是将来需要使用他们之间共有的方法时可以利用多态的性质,而无需知道一个对象具体的类型。管理员可以对成绩分析的方法以及标准进行制定和更改,所以我们使用对象间的组合将一系列的依赖进行组合,例如管理员包含了Analysis属性,Analysis类又包含了所需的课程以及分析的标准。
设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。其背后有六大设计原则支撑,这六大原则分别是:
1.开闭原则,即软件应当对扩展开放,对修改关闭。
2.Liskov替换原则,即继承必须确保超类所拥有的性质在子类中仍然成立,替换原则主要阐述了继承用法的原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。
3.依赖倒置原则,其核心思想是:要面向接口编程,不要面向实现编程。
4.单一职责原则,它规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。其核心就是控制类的粒度大小、提高其内聚度。
5.迪米特法则,简而言之就是如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
6.合成复用原则,它要求在软件复用时,要尽量先使用组合或者聚合关系来实现,其次才考虑使用继承关系来实现。
对类的封装性、继承性和多态性以及类的关联关系和组合关系需要充分理解,在此基础上才能准确理解设计模式。正确的使用设计模式可以使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
在该项目中,我们目前使用的设计模式有单例、工厂方法、模板方法等等,下面分别进行举例说明。
单例模式:
属于创建型模式,意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。
例如,本项目中,使用该模式来进行数据库的链接;使用分析模型时,一次只使用一个模型,所以也用单例来实现。我们对单例的实现采用懒汉式,即需要时才创建该对象,这样能够在需要时才使用系统资源,较有效的避免资源浪费。
工厂方法:
该模式同样属于创建型,它定义一个用于创建对象的接口,让子类决定实例化哪一个类。在实际使用时,具体工厂类在实现工厂方法时除了创建具体产品对象之外,还可以负责产品对象的初始化工作以及一些资源和环境配置工作,例如连接数据库、创建文件等。在客户端代码中,开发人员只需关心工厂类即可,不同的具体工厂可以创建不同的产品。由于我们有多种具体的分析模型以及多种评分标准,所以使用该模式能够让我们将创建具体的分析模型和标准的工作推迟到具体的工厂子类中。
模板方法:
该模式属于类行为型模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。该模式能够使得子类无需改动算法的结构即可重新定义该算法的某些特定步骤。在我们的项目中,有多种分析方式,而这些模型都具有类似的算法骨架,这样我们能够将骨架定义在父类中,在一些细节处使用抽象方法替代,然后在子类中实现它们。
由于本项目需支持包括普通用户和管理员操作,属于一个多用户系统,所以采用B/S架构模式实现。B/S架构即浏览器和服务器架构模式,是随着Internet技术的兴起,对C/S架构的一种变化或者改进的架构。在这种架构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。B/S架构是WEB兴起后的一种网络架构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。
结构如下:
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
开发环境:Python3、Django以及MySQL。其中Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。MySQL数据库最初由MySQLAB公司开发,其社区版本完全免费,同时具有各种优良特性,已经成为目前最流行的关系数据库管理系统之一。
IDE:JetBrainsPycharm。PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
我们可以采用不同的视图来描述项目的软件系统概念原型,比如分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图、工作分配视图等。
1.分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdownstructure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。该视图所包含的组件主要有软件模块、软件单元、类、子系统等。本项目分解视图如下:
2.依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。该视图基于分解视图进行绘制,如下:
3.泛化视图
泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。如下:
4.执行视图(流程图)
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。这里我采用流程图的形式来展示。如下:
部署视图是将执行实体和计算机资源建立映射关系。部署视图有助于设计人员分析一个设计的质量属性,比如软件处理网络高并发的能力、软件对处理器的计算需求等。
6.工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。
我们在数据库中设计了如下几张表:管理员表、教师表、学生/家长表、成绩表。通过这些表来存放数据,完成任务。
1)管理员表
2)教师表
3)学生/家长表
4)成绩表
该概念原型的工作过程如下:
首先,管理员将所有的学生成绩按照科目分类输入到数据库中,然后将制定好的标准应用于成绩,在此标准之上,运用大数据分析模型对这些数据进行分析测试,得出相应的结果与预测,管理员根据结果进行策略性的调整。其次,教师也可以录入学生的成绩,可以选择特定的学科进行分析结果查看,阅读相应的建议,进而调整自己的教学计划。最后,学生和家长能够查看近期成绩,能够根据自己的成绩得到系统的分析结果以及一些建议,用于调整自己的学习进度以及计划。