OOP在教育网站开发过程中的应用探究

2017-09-14 07:58李长齐王菡许海兰
商情 2017年29期
关键词:面向对象代码警告

李长齐+王菡+许海兰

【摘要】在网站的设计与开发的过程中,我们需要编写大量的代码,并且在代码调试、修改过程中,经常需要对源代码进行编辑,整个过程相对复杂。本文将面向对象(OOP)的概念引入到网站设计与开发的过程中,使整个网站程序更加结构化、更易于编写、更易于重用、维护和扩充。本文以php语言中的OOP为例,重点探讨了OOP在网站开发过程中的应用。

一、绪论

在信息技术飞速发展的今天,互联网已经成为人们生活的重要部分,逐步渗透到工作学习等各个方面,成为现代人交互信息的重要渠道。人们想要通过一个平台来发布自己想要公开的资讯或者获取自己需要的资讯,提供相关的网络服务或者享受网络服务。因此,网站作为为浏览信息的载体以及网络活动的重要节点应运而生。一所学校建立一个门户网站,有利于该学校实现校园新闻的动态发布、校园教学资源的共享、校园风景的展示以及信息的反馈,还有利于该高校这个专业建设成果的宣传和推广,专业建设工作的展示,提供个性化学习的平台,给学校教学研究带来了一片新天地,也有利于帮助学校形成自己的特色与品牌。

一些发达国家非常重视教育网站的设计与实现,他们认为,学校打造网站是学校的软实力表现,一个高校有越多教育网站,那它的软实力就越强。浏览国外的一些教育类的网站,布局新颖、有创意、特色鲜明、文化气息浓郁、清晰、美感、有活力。随着我国教育的发展,国内也越来越重视教育网站的建设,逐步呈现出多层次,多元化的趋势,对教育网站的投资力度也正在逐步加大。

设计与实现一个网站,包括前期需求分析确定风格和内容,中期静态网站的设计以及代码编写搭建数据库实现动态,后期的测試上线几个部分。其中代码的编写是比较繁琐,困难和重要的环节。对于浏览网站的用户而言,看到的只是网站的页面,他们不需要也看不到支撑整个网站运行的程序代码,但是代码的编写,在网站建设的过程中是必不可少的。一个设计得再漂亮的网页,如果没有程序代码的支撑,那它只不过是绣花枕头一个,只能看,不能实现任何功能。

想要实现同一种功能,不同的程序员可能写出不同的代码,当然,编写的代码一定是越简洁、越流畅越好。在信息技术飞速发展的今天,随着计算机应用的不断扩大,对计算机技术的要求也越来越高,结构化程序设计语言已无法满足用户需求的变化。OOP的程序设计方法,具有数据封装、继承和多态的特点,使程序更加结构化、更易于编写、更易于重用、维护和扩充,能够有效提高代码的质量。与国外相比,我国在OOP技术方面的研究虽然起步较晚,但也取得了一定成果。深圳大学谭也平博士曾研究过OOP技术在结构电算中的应用。今天,利用OOP进行编程的方法正在成为国内外程序设计的主流,其思想已经涉及到软件开发的各个方面,例如面向对象的分析、面向对象的设计等。

二、OOP在教育网站开发过程中应用的优势

OOP(Object Oriented Programming)面向对象的程序设计,是一种以对象为基础,以事件或者消息来驱动对象来执行处理的程序设计技术。这种基于对象的编程方式更符合人的思维模式,编写的程序也会更加健壮和强大。使人们可以编写出易于维护,易于扩展和易于重用的程序代码。

1、对象(Object)

在现实世界中,对象指某个实际存在的事物。它可以是有形的(比如一台电脑)也可以是无形的(比如一个目标)。它表达了客观世界真实的实体或抽象的东西。

在计算机编程领域中,对象是一个封闭体,它是由一组数据和施加在这组数据中的一系列的操作构成的整体。使用new来创建对象。

2、类(class)

类是一组具有相同的数据和相同结构的对象集合,是所有相似对象的状态变量和行为构成的模板,面向对象编程中,真正完成各项工作的是类,用class来定义类。在现实世界中,我们时刻都在和具体的实物打交道,例如汽车、卡车、轿车等,它们往往涉及可以承载的人数、速度、发动机功率、耗油量等等几个方面。这些方面共同构成一个概念——机动车。那么一辆小汽车就是机动车类的一个实例了,也就是一个具体的对象。

3、OOP的特征

(1)封装

封装实质上就是信息隐藏,把编程的过程和数据包围起来,隐藏实现细节, 将属性私有化,对数据的访问只能通过已定义的界面。通过改变可见性来保护封装数据。PHP的三种可见性:private(私有)、protected(保护)、public(公共)。通常用private来封装一个程序元素,它只能在类内被访问。

(2)继承

一个新类从另一个类中派生,并且拥有这个类的所有属性和方法。新派生的类还可以定义新的属性和方法。在不改动的基础上对原程序进行扩充,使得原属性和方法得以保存,而方法也得以扩展。这有利于减少重复编码,提高编程的开发效率。在面向对象的编程中被继承的类叫基类或父类,继承类叫派生类或子类。继承使用关键字extend。

(3)多态

多态,即多种形态,允许不同类的对象对同一消息作出响应。在面向对象编程中多态的实质是,调用有相同接口的对象来完成不同的工作。

(4)抽象

抽象(abstraction)是指一个对象的基本特征,使它与其它的对象区分开来,抽象是复杂性的主要工具。如果一个类是抽象的,那它不能被实例化成对象,只能被具体的子类继承。如果一个类至少有一个抽象方法,那它一定是一个抽象类。

4、OOP技术的优势分析

在OOP出现之前,编程人员用面向过程的方法开发程序。这种面向过程的编程方法以过程为基础,把密切相关且相互依赖的数据的操作相互分离,这使得一些复杂庞大的程序难于编写,而且难于调用和修改。在多个程序员合作的情况下,很难读懂对方的代码,也难以重用和维护。

面向对象是以功能来划分问题的,面向过程是以步骤来划分问题的。面向对象在功能上保证了设计的可扩展性。相对于面向过程,面向对象的优势可以归纳为:endprint

(1)容易维护

面向对象思想设计的程序,可读性比较高,因其具有继承性,要适应随时改变的需求,修改的也只是局部的模块,所以维护起来成本较低也比较方便。

(2)代码质量高

应用面向对象思想设计的程序,重用性比较高,从而有效提高网页制作的进度、减少网络流量,提高浏览速度等。

(3)效率高

在网站建设时,根据设计的需要对程序进行抽象,产生类。用人容易理解的方式对复杂系统进行分析、设计与编程,对网页制作的研究有着重要的现实意义。

(4)容易扩展

由于面向对象抽象、封装、继承、多态的特征,设计的程序具有高内聚,低耦合的性能,使得程序设计更灵活、更易于扩展。

三、OOP在网站设计中的应用

在将OOP概念应用到网站设计的过程中我们需要一个具体的网站设计作为案例,本文以我校的生物科学网站设计为例,为用户提供网站内容管理和信息发布。网站要求实现后台管理功能和信息发布功能,通过后台内容管理系统实现各种资源的管理使用,包括文字、图像、视频等,最终通过前台将信息呈现给用户。本网站主要面向三个不同层次的用户,管理员、教师和学生,层次不同,权限不同、需求也不同。管理员是整个网站具有最高权限的角色,能进行用户管理、数据库管理、模块管理等。教师能够进行模块管理,如公告的发布、资料的上传和删除等。学生是权限最低的用户,是网站发布信息的浏览者,能够查阅、检索和下载资源。

1、网站需求分析

界面风格相对温和,能够有明显的生物学特色,界面清晰、美观,能够让用户快速方便的找到相应的功能,需要图片新闻、文章发表、专业简介、师资队伍、超链接图标等几个模块,网站的整体色调是淡蓝色,上下包围的板式效果。

2、网站总体设计

将网站的总体架构设计成三层结构,分别是用户层、业务逻辑层和数据访问层,如图3-1所示:

图3-1 生物科学网站分层结构图

3、网站的功能模块设计

该生物科学网站分为前台用户和后台管理两大系统,前台包括图片新闻、专业概述、建设目标、师资队伍、通知公告、人才培养、教学条件、成果展示、资料下载、联系我们几个模块,其中图片新闻、人才培养、通知公告和成果展示为动态,其余均为静态。后台管理部分包括用户管理、新闻管理、文章管理、教学资料管理等几个模块,网站模块结构如图3-2所示。

图3-2 网站模块结构图

4、数据库设计

网站的后台支持是以网站的数据库为基础的,当一个网站的系统设计部分完成之后,就需要进一步设计具体数据结构。网站的后台服务程序能够在数据库中根据访问者提供的查询条件搜索数据,并将搜索结果或数据经过整理返回访问者。

根据网站的设计规划出管理员、教师和学生三个实体,通过分析它们之间的关系,为后面分析数据的流动和逻辑结构打下基础。

图3-5 实体E-R图

四、OOP在网站实现中的应用

1、环境搭建

在Windows下搭建PHP开发环境,首先安装和配置Apache服务器,Apache服务器顺利启动后,接下来安装和配置PHP,PHP配置完成后,重新启动Apache服务器,最后安装MySQL服务器。

2、数据库实现

成功登录MySQL数据库后,即可在命令提示符窗口对MySQL数据库进行管理,执行创建、查看、更改和删除MySQL数据库和数据表等操作。

3、连接数据库

由于大部分模块都需要使用数据库,如果每个模块都编写相同的数据库连接代码,不仅会加大工作量而且會显得十分繁琐,所以应用面向对象的思想,将数据库连接代码作为一个对象单独写入一个PHP文件DB.class.php中,在需要与数据库连接的页面中,使用包含语句调用该文件即可,无需重复编写相同的代码,减少代码冗余。连接数据库的部分实现代码如下:

Conn.php

<?php

//数据库连接类

class DB {

//获取对象句柄

static public function getDB() {

$_mysqli = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME);

if (mysqli_connect_errno()) {

echo '数据库连接错误!错误代码:'.mysqli_connect_error();

exit();

}

$_mysqli->set_charset('utf8');

return $_mysqli;

}

//清理

static public function unDB(&$_result, &$_db) {

if (is_object($_result)) {

$_result->free();

$_result = null;

}

if (is_object($_db)) {

$_db->close();

$_db = null;

}

}

}

?>

调用数据库文件的主要代码如下:

<?php include 'DB.class.php'; ?>

4、基于OOP的思想对网站的目录和文件进行实现

应用面向对象的思想进行编程,生成的主要文件图4-1所示。endprint

图4-1 主要文件关系图

index.php存放在主业务逻辑层

template.inc.php模板初始文件

templates 文件夹用来存放所有的模板文件

templates_c存放模板编译文件

cache存放所有的缓存文件

includes 用来存放所有的类文件和包含文件

config存放系统变量配置文件和系统文件

language语言的文件夹

主要代码的实现

(1)用户登录功能的实现

Login.php文件,存放在主业务逻辑层,主要用一些if语句来验证存储在数据库里的用户信息,验证正确则登录成功。

private function login() {

if (isset($_POST['send'])) {

if (Validate::checkLength($_POST['code'],4,'equals')) Tool::alertBack('警告:验证码必须是四位!');

if (Validate::checkEquals(strtolower($_POST['code']),$_SESSION['code'])) Tool::alertBack('警告:验证码不正确!');

if (Validate::checkNull($_POST['admin_user'])) Tool::alertBack('警告:用户名不得为空!');

if (Validate::checkLength($_POST['admin_user'],2,'min')) Tool::alertBack('警告:用户名不得小于两位!');

if (Validate::checkLength($_POST['admin_user'],20,'max')) Tool::alertBack('警告:用户名不得大于20位!');

if (Validate::checkNull($_POST['admin_pass'])) Tool::alertBack('警告:密码不得为空!');

if (Validate::checkLength($_POST['admin_pass'],6,'min')) Tool::alertBack('警告:密码不得小于六位!');

$this->_model->admin_user = $_POST['admin_user'];

$this->_model->admin_pass = sha1($_POST['admin_pass']);

$_login = $this->_model->getLoginManage();

if ($_login) {

$_SESSION['admin']['admin_user'] = $_login->admin_user;

$_SESSION['admin']['level_name'] = $_login->level_name;

Tool::alertLocation(null, 'admin.php');

} else {

Tool::alertBack('警告:用戶名或密码错误!');}

}

}

(2)图片新闻浏览功能的实现

Vew.php文件存放在主业务逻辑层下,通过SQL语句查询存储在数据库的图片新闻。

<?php

$sql="select biaoti,id,addtime from sw where leibie='教学新闻' order by id desc";

$query=mysql_query($sql);

$rowscount=mysql_num_rows($query);

if($rowscount>0)

{

for($i=0;$i<$rowscount;$i++)

{if($i==10)

{break ;}

}

?>

(3)文件上传功能的实现

Upfile.php文件存放在主业务逻辑层下,用于上传文件。

<?php

//上传文件类

class FileUpload {

private $error; //错误代码

private $maxsize; //表单最大值

private $type; //类型

private $typeArr = array('image/jpeg','image/pjpeg','image/png','image/x-png','image/gif'); //类型合集

private $path; //目录路径

private $today; //今天目录

private $name; //文件名

private $tmp; //临时文件

private $linkpath; //链接路径

private $linktotay; //今天目录(相对)

//构造方法,初始化

public function __construct($_file,$_maxsize) {endprint

$this->error = $_FILES[$_file]['error'];

$this->maxsize = $_maxsize / 1024;

$this->type = $_FILES[$_file]['type'];

$this->path = ROOT_PATH.UPDIR;

$this->linktotay = date('Ymd').'/';

$this->today = $this->path.$this->linktotay;

$this->name = $_FILES[$_file]['name'];

$this->tmp = $_FILES[$_file]['tmp_name'];

$this->checkError();

$this->checkType();

$this->checkPath();

$this->moveUpload();

}

//返回路徑

public function getPath() {

$_path = $_SERVER["SCRIPT_NAME"];

$_dir = dirname(dirname($_path));

if ($_dir == '\\') $_dir = '/';

$this->linkpath = $_dir.$this->linkpath;

return $this->linkpath;

}

//移动文件

private function moveUpload() {

if (is_uploaded_file($this->tmp)) {

if (!move_uploaded_file($this->tmp,$this->setNewName())) {

Tool::alertBack('警告:上传失败!');

}

} else {

Tool::alertBack('警告:临时文件不存在!');

}

}

//设置新文件名

private function setNewName() {

$_nameArr = explode('.',$this->name);

$_postfix = $_nameArr[count($_nameArr)-1];

$_newname = date('YmdHis').mt_rand(100,1000).'.'.$_postfix;

$this->linkpath = UPDIR.$this->linktotay.$_newname;

return $this->today.$_newname;

}

//验证目录

private function checkPath() {

if (!is_dir($this->path) || !is_writeable($this->path)) {

if (!mkdir($this->path)) {

Tool::alertBack('警告:主目录创建失败!');

}

}

if (!is_dir($this->today) || !is_writeable($this->today)) {

if (!mkdir($this->today)) {

Tool::alertBack('警告:子目录创建失败!');

}

}

}

//验证类型

private function checkType() {

if (!in_array($this->type,$this->typeArr)) {

Tool::alertBack('警告:不合法的上传类型!');

}

}

//验证错误

private function checkError() {

if (!empty($this->error)) {

switch ($this->error) {

case 1 :

Tool::alertBack('警告:上传值超过了约定最大值!');

break;

case 2 :

Tool::alertBack('警告:上传值超过了'.$this->maxsize.'KB!');

break;

case 3 :

Tool::alertBack('警告:只有部分文件被上传!');

break;

case 4 :

Tool::alertBack('警告:没有任何文件被上传!');

break;

default:

Tool::alertBack('警告:未知错误!');

}

}

}

}

?>

五、结论

OOP的概念逐步渗透到编程的过程当中并渐渐取代面向过程的编程,是每个程序员在开发程序时都要深入考虑的概念,它能够将网站中的文件和功能分离开,提高了代码的重用性。本文通过针对基于OOP技术网站的设计与实现现状进行分析,主要介绍OOP的概念在网站开发过程中的优势、在网站OOP设计过程中的应用和在网站开发过程中的优势。由于篇幅的限制本文在OOP在网站开发中的应用只做了部分案例进行探讨。

参考文献:

[1]吴炜煜.面向对象分析设计与编程OOA/OOD/OOP/AOP[M].北京:清华大学出版社,2015:50-43

[2]William Sanders.苏金国,王宇飞.Learning PHP设计模式[M].北京:中国电力出版社,2015:25-44

[3]耿秋义,张跃平.Java面向对象程序设计.第二版[M].北 京:北京邮电大学出版社,2013:20-34

[4]孙红亮.基于三层架构的校园网站设计与实现[D].河北: 河北师范大学,2013.

[5]王飞飞.MySQL数据库应用从入门到精通[M].北京:中国铁道出版社,2015:126-130endprint

猜你喜欢
面向对象代码警告
欧盟就脱欧乱局严厉警告英国
神秘的代码
面向对象的计算机导论课程教学
基于Web的科研项目管理系统的设计与实现
应力波反射法测锚索长度的数据处理软件设计与实现
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
近期连续上涨7天以上的股
Hi~那边的朋友,你们好吗
从面向过程到面向对象思维方式的教学引导