面向对象与面向过程(精选12篇)
面向对象与面向过程 篇1
1 问题的提出
面向对象和面向过程的程序设计技术现在再来谈论,似乎是一个过时的话题。但是,教学中至今针对两者的关系理解不够透彻的学生不在少数。在Java、C++等面向对象的程序设计语言的很多教材里,面向过程的自顶向下逐步求精结构化的程序设计的三种控制结构占据了一定的章节数,其中很多例题是对三种控制结构使用方法的巩固,学生也常常是模仿着这种例题来练习,这常常造成学习面向对象的编程语言,而设计出面向过程的软件的局面,掌握不好面向对象的程序设计方法。20世纪80年代提出的面向对象的程序设计方法之后,对于程序设计的面向对象和面向过程两种方法,大部分教材偏重于讨论它们的区别,产生两种方法是对立的,互无关联的想法大有人在,似乎有了面向对象的技术,就可以不用面向过程。实际上,面向对象的技术是在面向过程的基础上,为程序设计提供了更多的手段和方法,两种技术不是非此既彼的对立关系,不能说面向对象的技术替代了面向过程,如果用面向对象的技术就要把一个软件任务划分成两个层次,第一个层次是做什么,第二层次是怎么做,那么面向对象技术是解决第一个层次的问题,面向过程则是解决第二个层次的问题,只有在两个层次上的任务都完成之后,才能说完成了整个程序设计任务。也就是说这两种程序设计方法只是从不同的层次来完成程序设计的任务,面向对象的技术是在面向过程的自顶向下逐步求精最终将软件分解成为具有三种控制结构的若干方法过程或函数基础之上,又提供了抽象、封装、继承、多态技术手段,从而能够设计出更好更复杂的软件。可以说面向对象技术中存在着面向过程,或者说面向对象技术就是抽象、封装、继承、多态加上顺序、条件、循环三种控制结构的使用。
2 两种技术的包含性
面向对象可以认为又提供“四”种技术:抽象、封装、继承、多态,面向过程有“三”种控制结构:顺序、条件、循环。以Java语言为例,用求1到n的简单问题来分析两种设计方法:
2.1 面向对象的技术是“四”加“三”的技术
(1)建立对象模型(类)———应用“四”的技术
(2)方法的具体实现———应用“三”的技术
2.2 面向过程的技术———仅仅应用“三”的技术
(1)分析出若干函数或过程并给出具体实现的细节
从上述简单的问题可以看出在用面向对象技术设计类后,一个类中就会有若干方法,每个方法完成一个特定的功能,在考虑类的行为功能实现时,显然是面向过程的思维方式,只是这些方法不再独立,而是与数据一起形成了一个有机的整体。面向过程技术存在于经过面向对象方法分析之后的形成的若干类的行为设计中也就是类方法实现之中。
面向对象的设计包含了面向过程,面向对象比面向过程站到了一个更高的层次上,主要进行总体结构模型设计(构建类),对数据和方法进行封装,面向过程主要是写函数或过程也就是确定类中的方法的实现,这也是类中的方法必须要做的步骤;就象我们建一个居民小区,先把围墙建好,决定好里面要做什么,然后还是要在里面进行盖房子的过程一样,要建好居民小区两个步骤缺一不可。所以说用面向对象的技术设计软件时包含了面向过程。
2.3 两种技术的同一性
对于一个方法要讨论的问题的关键问题是数据从哪里来,运算操作之后到哪里去的问题。方法也就是对输入数据进行处理从而得到结果输出,可以说是由三个部分:输入、操作、输出完成的,输入数据可以体现为的两种形式:无参数和有参数;输出数据同样体现为两种形式:无返回值和有返回值;简单的方法可以是无参数和无返回值的,例如:
讨论一下面向对象技术设计的类中的方法的输入和输出的情况。众所周知,无论是面向对象还是面向过程在描述问题时总是围绕着两个方面:方法和数据,教材中常提到面向对象是方法和数据合并或封装,面向过程是方法和数据分开或隔离,这个特性对类中的方法设计有什么影响?直接地具体地在程序设计时能带来什么好处?事实上,由于面向对象实现了数据和方法的封装,它的好处就是使得类中方法的输入数据多了一个来源,也就是输入数据有了两个来源,一个是类中的属性变量,另一个是方法的形式参数,例如上例中的getSum()方法,它是无参数的,那么它运算的数据来源于何处?实际上就是使用了本类中的数据----属性变量,也就是说当类中的属性能够满足类中的方法输入数据的需要,就可以无参数,虽然无参数,但具备有参数的功能,原因是类中的属性是可以随时变化的,这归功于面向对象的封装技术。当然,也可使用方法本身的数据----形式参数,设计出getSum(int n)方法,这就形成了同一方法的两种不同的实现,面向对象技术中的多态性,使这两种方法能够共存于一个类中,增加了类的可适应性和简洁性。如果用面向过程的技术只能设计出一个独立的过程或函数:getSum(int n),因为面向过程的程序和数据是分开的,每个过程也都是独立的,所以过程或函数在设计时没有别的数据来源,只有依赖于自身的形式参数,无法从别处获取数据,只能在方法内部构建形式参数做为伪数据以求得将来真实的数据———实际参数的传递。同理,类中方法处理的数据结果也变成了有两个去处:一个是类中的属性变量,一个是方法的返回值。这就是数据和方法封装在一起的好处,它使得输入输出有了更多的选择,这也是设计方法时解决算法之后要解决的重要问题。
再看下例:
面向对象的继承技术,使得类中面向过程的方法有了更多的功能。就单纯的面向过程的设计方法,没有实现封装、多态,继承等技术做支撑,也就是说缺乏一个可靠的围墙来做保护,使之不能在围墙之内随着问题的变化而变化,所以软件的可维护性、重用性,复杂度具有劣势。而面向对象的技术中也包含了面向过程的设计,面向对象的封装、多态和继承技术又允许同一个类中的面向过程的同一方法设计有更多的实现方式和更多的功能的扩充,如:getSum(),getSum(int n);getMul(),getMul(int n)。面向对象类中的方法的实现可以等同于在封装、多态、继承技术下的结构化程序设计中的函数设计,它使得类中的面向过程的方法设计有更多的实现,具有同一性。只是这些函数都有自己的归属———某一个类。
3 总结
应该看到,很多面向对象语言的教材中的例子严格说来都是用面向对象的语言写出的面向过程的程序,再加上学习程序设计言时大多是以先模仿例题为主,它带来的负面影响就是更加分不清楚两种技术的关系。另外,为什么教材中的例子是用面对象的语言写出的面向过程和程序呢?原因是大部分例题是属于简单的程序,实际上,对于简单和程序也是没有必要一定用对象的方式来思考问题,面向过程反而适用。用对象来理解和分析问题,并设计和开发出由对象构成的软件系统,是面向对象技术的核心,如果用这种方法设计软件它是离不开面向过程的,它是在面向过程的结构化程序设计所运用的三种控制结构之上又增加了类、封装、继承、多态等技术可以说是“四”加“三”技术来构造、测试、重构软件,因此,就有了比面向过程更多的软件设计和实现手段。这些技术能实现复杂系统的设计与开发,可大大提高软件的规范化程度和开发效率,提高软件的可重用性和降低系统的复杂度,这已是不争的事实。关键的问题在于两种思维模式的建立以及对它们包容性、同一性的认识,从而不致于两种方法混淆不清,得到非此既彼的结论,并能根据实际需要正确地选择设计方法。
摘要:面向对象和面向过程的程序设计技术现在再来谈论,似乎是一个过时的话题。但是,教学中至今对两者的关系理解不够透彻的学生不在少数。面向对象和面向过程可以看成“四”和“三”。有了面向对象的技术之后,产生两种技术非此既彼的对立关系的思想是由于过度强调它们的区别造成的。两种思维模式的建立是关键的问题,程序设计中能根据实际需要正确地选择设计方法。
关键词:程序设计,面向对象,面向过程,同一,对立
参考文献
[1]陈志泊.面向对象的程序设计语言C++[M].北京:人民邮电出版社,2009.
[2]刘艺.Java2程序设计大学教程[M].北京:机械工业出版社,2006.
面向对象与面向过程 篇2
面向对象的舰炮武器系统建模与仿真
作为传统的舰载武器装备,舰炮武器系统需要向着智能化和自动化方向发展.面向对象理论已成为复杂系统设计和分析中一种必不可缺的工具,这种技术为舰炮武器系统的研究提供了重要的平台.利用抽象、分类、封装、继承、关联、消息通讯等概念建立了舰炮武器系统的模型结构清晰,一改原来“烟囱式”的模式,更好的反映了系统的.工作流程和各设备间的交互关系.使系统朝着标准化、模块化方向发展.
作 者:栗蓬 严勇杰 朱齐丹 LI Peng YAN Yong-jie ZHU Qi-dan 作者单位:哈尔滨工程大学,406教研室,黑龙江,哈尔滨,150001刊 名:自动化技术与应用英文刊名:TECHNIQUES OF AUTOMATION AND APPLICATIONS年,卷(期):26(2)分类号:N945.12关键词:舰炮武器系统 面向对象 对象模型 任务管理
面向对象与面向过程 篇3
关键词:面向对象;关系型数据库;映射;类;属性
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)20-0012-02
1 引言
面向对象(Object Oriented,OO)是把面向对象的思想应用于计算机软件开发中,以对象为内核,以类、继承、封装、多态等概念构造系统,进行客观事物的软件开发设计的一种方法。面向对象,对象其实就是一个封装体,包含数据和控制命令。随着计算机技术和开发软件的不断升级,面向对象的方法和应用已经不仅仅局限于软件开发和程序设计,已经逐渐扩展到数据库系统、分布式系统、网络管理、人机交互等计算机领域,甚至对人工智能、计算机辅助工具、信息系统等產生深远影响。计算机和网络都离不开数据库,面向对象的广泛应用,也给数据库技术增添了新鲜血液。面向对象方法与数据库技术,尤其是关系型数据库如何有效结合,更好的支持数据库的应用,是一个非常值得研究的课题。
2 面向对象的关系型数据库
2.1 关系型数据库
电子商务、云存储、云计算等计算机信息系统,已经是当今信息技术的重要手段,而数据库技术是计算机系统的重要组成部分和核心内容。数据库类型有网状、层次和关系几类,其中关系型数据库以其集合的操作方式得到了最为广泛的应用。关系型数据库是一种建立在关系数据库模型基础上的数据库,用集合代数方法对数据库单元中数据进行处理,是一组相互之间有关联关系的表,表的关系通过相关字段进行关联,表中的数据可以根据需求情况进行存取且不用重新组织数据库表格。新建一个关系型数据库时,每一行包含一个数据实体,是被列定义的种类。目前应用较多的数据库有oracle、sqlserver、mysql等。
2.2面向对象分析法
面向对象分析法(Object-Oriented Analysis,OOA),是指一个软件开发项目在开发过程中,首先要对业务情况进行调研,然后用面向对象的思想对该项目业务进行归纳、分类、分析。OOA强调的是业务对象之间的关系以及对象的属性和行为。面向对象分析法使用户和设计者之间的沟通更容易,设计者能够更好地理解用户的需求,设计者了解了用户的需求,才能更好地设计出用户与数据库之间的映射方式,从而设计出用户满意的数据库。
OOA方法的程序设计,从结构框架来说,一个是针对开发者的外部层,外部层是应用程序的整体设计;内部层针对物理存储,称为物化视图,是基于远程表格的,也可以称之为快照;概念层介于外部层和内部层之间,是内外部的映射,用DDL表示,概念层是关系型数据库的真正表现形式。对象与关系型数据库通过映射发生关系,映射方法就是将关系型数据库进行概念层的设计。从对象到关系型数据库的映射内容包括:属性与列的映射,关系型数据库中的继承,类与表的映射,映射的关联,聚合和组合以及实现关系等。
将对象建模和映射的过程就是将对象转换成概念层的数据库模型,对象模型转换为关系型数据库的映射有如下关系:
1)每个对象是唯一的,有唯一的标识符,具有唯一性。对象的标识一般用主键或者是系统自动生成的伪标识符来标识,而不是通过描述对象的属性来标识。
2)类与关系型数据库中的表的转换,可以通过直接调用表的名称,或者可以通过在类的名称前加前缀的方式修改成表的名称来实现。
3 基于面向对象技术的关系数据库的设计方法
3.1 整体思路
基于面向对象技术的关系型数据库的设计方法,首先要确定应用程序中的领域类,领域类中将数据信息和对数据的操作、调用方法进行了封装。领域类实例化,就得到对象,因此,需要提前把对象的存储、地址、检索方法、调用方法等问题设计好,做好准备工作。
在面向对象的关系型数据库中,数据通过对象形式存储到数据库中,并且对象之间的关联关系是自动存储的。关系型数据库本身不存在集合和分解的问题,可以由与对象相关的状态图像构成。面向对象的关系型数据库是通过对对象进行查询、检索、调用的,不存在对某个表的一行或一列进行某些操作。因此需要提前定义对对象的各种操作方法。比如:writeObject()是一个写入并存储一个对象及所有对象相关;read Object()是读取一个对象及所有对象相关。每个对象有唯一的标识ID,在写入和读取时通过唯一的标识ID进行。
以消费者对电子账户的写入、读取操作为例子,来说明面向对象数据库数据存储模式,如图1所示。将消费者对电子账户的操作对象的属性描绘成字段,指向其他对象需要映射到相应的外部关键字上,此处的操作动作不能封装。数据库中的每一个表对应一个类,对数据库中的表的操作设定为函数。
3.2 对象映射成关系数据库
RDBMS的表都是二维表,一个二维表是一个管理单元,二维表及表与表之间的关联关系用来描述对象模型的属性,即对象模型与关系型数据库的映射关系。将每个对象的类存储到数据库的表中,一个类对应一个对象实例,并进行存储。不仅对象实例映射到关系型数据库中,对象之间的关联关系也要映射到关系型数据库中,这样才能进行后续的操作。
对象之间的关系有四种:关联、继承、聚合、组成。关联是关系型数据库中对象之间的关联关系,聚合不仅需要对关系型数据库的整体进行操作,还需要对部分进行操作,即读取时需要整体读取的同时也需要在部分数据中进行读取。关联是不需要的,在关联中存储和读取的执行操作不明显。关联和聚合的区别在于对象之间的联系程度不同。
对关系型数据库中的数据不但有存储、调用等动作,还有删除的动作,那么将数据库对对象的存储和删除也是一样,对象映射成关系型数据由一些规则,如下:
1)一个类与一个库表对应映射,也可以多个类与一个库表对应映射。
2)类中存在父子关系的类,映射关系时可以分别与父和子类分别映射,或者不对父类进行定义,让子类具有父类的属性;不对子类进行定义,让父类具有子类的属性。
3)映射关系定义为一个表,包含一对一、一对多、多对多等关联关系,也可在类表之间定义外键。
4)聚合的方式有两种:一种是用一张表将所有对象类的属性合并;一种是分别用两张表分别将对象类的整体和部分分别合并,利用外键关联整体与部分的关系。
5)有些类是没有属性的,没有属性则没有映射表。
6)映射后的关系型数据库表需要进行冗余操作,使其关系范式合理。
4 结论
面向对象的关系型数据库系统以其模型简单、数据独立的优势,成为数据库技术发展的主流方向,本文针对面向对象的技术和关系型数据库的特点,将两者相结合,研究了将面向对象技术方式应用于关系型数据库,进行系统设计方法的研究,重点描述了对象映射成关系数据库的方法。
参考文献:
[1] 杨玉芬,李明明.高晓旸对象管理在面向对象数据库中的应用研究[J].吉林大学学报(信息科学版),2013,9(5):548-553.
[2] 肖刚.面向对象数据库在教学信息管理系统中的应用[J].硅谷,2012(6):79.
[3] 陆登,李善平,郑春昭. 基于对象数据库的扩展Java集合框架[J].计算机应用与软件,2011(1):133-136.
[3] 陈文宇.面向对象的关系数据库设计[J].电子科技大学学报,2002(1):53-56.
从面向过程到面向对象的变革 篇4
1“软件危机”与面向过程方法
20世纪60年代中期,随着计算机技术的逐步成熟,计算机应用范围的逐渐扩大,软件开发领域急剧膨胀,这时,软件开发人员开始面临一个十分严峻的问题——“软件危机”。
“软件危机”主要表现为三点:第一,开发出来的软件的功能和用户的需求往往“牛头不对马嘴”;第二,软件系统的规模和复杂度的扩大让开发人员力不从心,开发过程中的一些错误已经达到开发人员无法掌控的地步;第三,开发出的软件可维护性很差,要复用已有成果或者对其进行扩展都很困难,软件的进化也很难跟上硬件发展的速度。
追究“软件危机”产生的原因,固然有一部分是因为开发者缺乏对大规模软件的管理经验,缺乏正确的方法学指导或者是开发工具的支持(杨健,张晓玲,周少,2006,135-136),但是最关键的问题在于——当时大多数软件开发工作的全过程,包括分析,设计以及编程实现等,都采用面向过程方法。具体来说,在分析阶段,开发人员根据面临的情况,如用户的需求,软件要求的功能等,做出一个物理模型,其次转换成逻辑模型,再通过数据流分析,把这个模型转化数据流图,记录数据字典。在设计阶段,开发人员根据数据流图划分数据类型,并映射到不同的程序模块类型,通过这样完成分析模型到设计模型的转变,并设计出数据结构图。然后,开发人员在此基础上详细的设计每个程序模块内部的结构和算法。常常是把大模块又分成很多小模块,多次分解,最后再设计完成每个小模块的内容。在实现阶段,利用面向过程的编程语言(如C语言等)进行编程,具体实现整个软件系统。
之所以说这一套方法是导致“软件危机”的关键,是因为它不论是在分析和设计上,还是在编程实现上都存在很大的弊端。
第一,面向过程方法的分析手段是不够妥当的。整个分析和设计阶段可以概括为“需求-数据流-程序模块”的模式,所以对于需要解决的问题,在分析阶段并不能直观的显示出各种事物及其关系,而是映射到数据流中进行分析。因此,当系统比较复杂的时候,很难判断基于数据的分析是否有偏差,是否相对于原本的实际问题有出入,或是否存在理解上的错误。也正是因为所有的分析工作是基于数据流的,开发人员在分析阶段就面临和用户沟通上的困难,他们很难和用户解释数据流图中的内容代表了什么,很难通过沟通发现分析结果和用户需求的差距在哪。并且,如果用户在开发工作的中途想改变一些需求或是外界条件发生了变化,开发人员也不能直接改动分析结果,必须重新映射到数据上再做调整。
第二,从分析阶段到设计阶段的转化是有很大的隐患的。所谓的“数据—程序模块”的转型就是依照一些对应原则,把数据流图转化成程序模块,这两种不同的体系之间的转换是否正确,是否合理是没有保障的。这种“需求-数据流-程序模块”的模式就像多人传话一样,第一个人传话给第二个人,第二个人根据自己的理解把话传给第三个人,第三个人再加上自己的理解,得到的结果和原话已经不是一个意思。原本的内容经每个步骤都被不同的体系“转义”了一遍,这样很可能导致设计出的结果和软件需求的本来面貌相差甚远。
第三,由于面向过程的程序语言本身存在很多不足,导致软件开发的实现阶段出现了很多问题。首先,程序的安全性缺乏保障。很多关键的数据既可以被作用于它们的操作访问,也可以被其他的操作访问。并且,面向过程的程序操作都属于“白盒操作”,所有细节都被暴露在外。一个疏忽的数据修改或者程序调用都可能导致整个系统崩溃。其次,程序员的工作非常繁杂。由于数据和函数是分开来处理的,程序员在编程的时候要考虑的因素就很多,每次编写一个函数都必须把详细的注释添加到数据字典中,对于不同类的数据进行一种操作或者同一类数据进行不同操作都必须写不同的代码。这种编程对程序员的水平要求非常高,仅仅让数据和函数一直保持兼容就已经是程序员沉重的负担。在团体合作中,一个程序员要接手另一个程序员的工作往往需要阅读数十页的数据字典,不同的程序员编写的程序可能还存在着名称重复,风格迥异等冲突,这些问题在复杂的系统中将凭空地加大程序员的工作量。再次,软件的可维护性很差。由于数据和函数代码的分离,每当数据发生改动,所有相关的函数都要重写,想对整个程序进行扩充,升级,或者移植到别的背景下重用都面临着大量的代码修改。
2 面向对象方法
我们可以看到,面向过程方法确实给软件开发工作带来了很多困扰,而面向对象方法正是在这种情况下诞生的。面向对象总的来说有三大特点的:封装性,继承性和多态性。
封装性是面向对象最基本的特点,因为它体现了面向对象最基本的思想:客观世界是由各种对象组成的,复杂的对象可以由比较简单的对象以某种方式组合而成(符于江,2008,451-456)。所有的对象都具有静态属性和动态行为,把相似对象的属性和行为抽象出来,用这些共同的属性(数据)和行为(方法)构成类,作为创建具体对象的模板。封装性就是指把关于一个类的所有数据和方法一起封装在类的内部,只通过一些方法作为对外沟通的接口,外界只能通过这些接口和对象进行联系,而对象内部的很多数据和具体操作是对外不可见的。
继承性是指对于一些具有一般意义的类,可以创建它们的子类,子类可以继承一般类的所有属性和方法,同时可以根据自己的特性,修改继承得来的属性和方法或者添加自己独有的属性和方法。比如对于一般类“亚洲人”,我们可以创建子类“中国人”,“韩国人”等。
多态性有两种形式。第一种是一个类中同名字的方法可以接受不同类型的参数,对于不同类型的参数的处理是不同的。比如在一个类中定义“add”方法实现数的相加,它既可以处理整形的参数,也可以处理浮点型的参数,还可以处理一些自定义类的参数,但是针对每个类型都有各自的处理操作。第二种多态和继承性有关。由于某个父类可以有多个子类,每个子类都可以根据自己的特征修改父类中的属性和方法,当把这些子类当成父类来用的时候(如JAVA中的上转型对象或是接口回调),相同的父类方法就会有不同的实现方式。例如一个JAVA程序中,对于父类“动物”中的方法“叫”,用子类“狗”的上转型对象实现该方法则输出“汪汪”,用子类“猫”的上转型对象实现该方法则输出“喵喵”。
基于以上三大特点,面向对象方法导致了对整个软件开发过程的彻底变革。在软件开发的分析,设计和实现阶段都和面向过程方法截然不同。开发人员首先按照需求分析出软件的每个必备功能。然后归纳属性,确定对象及对象之间的关系。再进一步把功能分配给每个对象,构建对象的行为。接下来对每个对象的方法和对象之间的交互作进一步的细化。再接着确定可重用的类和部件,用结构图画出各个类,部件的结构和相互依赖关系。最后再对软硬件的相互依赖关系进行描述。在以上分析和设计工作完成之后,开发人员利用面向对象程序语言进行编程来达到软件功能的实现。
3 面向对象方法的优越性
面向对象方法之所以能把软件开发带入了一片新天地,是因为它在以下三个方面都有卓越之处。
3.1 整体开发思维
抛开具体操作流程不说,面向对象方法首先对解决问题的整体思维进行了人性化的革新。其人性化主要体现在以下四点:首先,人们生活的现实世界是个体,群体及各种关系组成的,面向对象的系统也是如此。对象代表个体,类代表群体,对象之间,类之间,类与对象之间通过方法调用建立各种关系。其次,从大众个体中总结出一类共同的属性和行为,从而形成类的手段正是人类抽象思维的应用。抽象思维是人类最基本,最习惯的思维之一。再次,面向对象允许开发人员一开始只拟定系统的大致框架,即确定主要的类及其关系,之后再逐步对其进行细化和拓展。这和人类逐步深入的思考习惯是相一致的。最后,面向对象方法大大简化了开发人员思考问题的复杂度。比如对于一个子类,开发人员可以理所当然的认定它已经拥有父类的所有一般特征,只要把精力放在思考子类的特性上就可以了。面向过程要求程序员必须从数据流动的角度思考待解决的问题,而面向对象的这些人性化因素让开发人员摆脱了这种被迫的“机器化”思考的尴尬境地,用自然贴切的思维考虑问题。
3.2 分析和设计
面向对象方法是分析和设计阶段的合理性有了很好的改善。面向对象的分析和设计采用的是“需求-对象-类”的模式,用对象和类直观地描述系统中的事物及其关系,这样就解决了面向过程方法所导致的一系列问题。在分析过程中,这种直观性原本的保留了所有事物及其关系的原貌,因此在构建对象和抽象出类的时候,很容易被发现在理解上的偏差。同时,开发人员也很容易向用户解释各个类和对象的含义,可以及时得到用户的反馈。处理需求的改变或是外部条件的改变时,也可以直接修改相应的类和对象。除此之外,对于问题的描述和对于问题的解决都应用同一套类和对象系统,因此软件开发的分析工作和设计工作是连续的,甚至是部分重叠的,不存在面向过程中从数据流到程序模块的转化,不用担心因为一个系统到另一个系统的映射不当导致结果和目标的偏离。
3.3 编程实现
面向对象编程语言的应用使得软件工程的实现过程有了很大的改进。
首先,程序的安全性有了明显的提高。由于类的封装,对象中只有少数的成员和方法可以被外接直接调用,对象内部的实现细节也是被隐藏的。这样有效降低了程序各部分间的依赖性,整个系统一般不会因为某处变动而引发整体混乱。
其次,面向对象把开发人员的编程工作变得比较轻松和方便。每个对象的数据和操作都被封装在一起,因此开发人员很容易保持数据和方法的兼容性,并且编程时只需要对每个类进行说明,不需把对于每个数据,每个方法的描述都写进数据字典。对于被封装的方法,只要依据访问规则就可以使用,不必了解实现细节。类中描述了一类个体的共有特征,在创建对象的时候这些描述不需要一遍又一遍的重复。类和对象的设置还易于分类,管理和查找。这些改变都在很大程度上降低了开发工作对程序员编程水平的要求。
再次,面向对象让团体合作的编程更加顺畅。归功与类和对象的直观性,当某程序员利用别人的成果时不必面临复杂的查阅,学习过程。继承性和多态性允许开发团队先行确定主要的类及关系,事先统一编程标准和风格,然后再把具体的细节交给不同的人员实现,这样最终得到的结果不会面临很多麻烦的冲突问题。
最后,面向对象语言最强大之处表现为可复用性和可扩充性。通过继承已有的类可以实现可复用性,让很多类的性质可以被共享。在开发过程中,复用自己或是他人已有的成果,等于是站在巨人的肩膀上,省去了大量的工作,加速了开发进程。另外,被重用过的代码都是经过测试的,这样大大减少了编程中发生错误的机会。面向对象的三大特点使程序具有良好的可扩充性。封装性使程序各部分间的独立性很强,继承性使类程序具有层次结构,多态性是程序能够实现问题的复杂多样。当开发人眼对已有的问题有了新的认识的时候,通过继承和多态的方式,无需修改原来的父类代码,就可以再创建新的子对象类的过程中增加新属性,或删除过时无用的属性,操作或对象,达到高效的功能扩充。可复用性和可扩充性让整个软件有很强的可维护性。在修改程序的过程中,修改某个对象对别的对象影响很小,新增或修改某功能对其他功能的影响很小。同时,开发出的软件也有很好的可移植性。对于不同的使用条件,只要修改很少的代码就可以让软件重装上阵。
4 面向对象方法的局限
虽然说面向对象方法给软件工程带来了很多好处,但是它也存在自己的局限性。第一,面向对象方法对支撑它的工具和环境的要求比较高。第二,利用对象和类对问题的描述存在不足。由于客观世界中很多事物的界限并不是很清晰,这给创建对象和抽象出类的正确性和精准性都带来了困难。并且,对于同一个客观事物,不同的人从不同的角度观察分析可能会映射出不同的对象属性和方法,有的时候开发团队之间或是开发人员与用户之间可能存在分歧。第三,面向对象程序的运行效率可能比较低,由于通过继承引入了层级,过多的祖宗类和父类势必会影响运行效率。所以在实现软件的时候应该遵循“多组合,少继承”的原则。第四,封装性带来的程序内部不可见可能给软件的维护带来不便。
由于这些局限性,在处理问题的时候不能盲目采用面向对象方法,必须先分析要解决的问题类型来决定是采用面向对象方法,面向过程方法还是其他方法,或是几种方法的综合运用。
参考文献
[1]郑莉,董源,张瑞丰.C++程序设计[M].3版.北京:清华大学出版社,2004.
[2]耿祥义,张跃平.Java面向对象程序设计[M].北京:清华大学出版社,2010.
[3]张孝祥.Java就业培训教程[M].北京:清华大学出版社,2003.
[4]杨健,张晓玲,周少云.软件危机及其应对措施探讨[J].电脑知识与技术,2006(35):135-136.
[5]符于江.程序设计中结构化方法和面向对象方法的比较[J].电脑知识与技术,2008(21):451-456.
[6]郭溪川.对比分析面向对象方法与结构化方法[J].农业网络信息,2006(11):100-104.
[7]张莉,裘国永.结构化方法与面向对象方法的比较分析[J].陕西师范大学学报:自然科学版,2006(6):29-32.
面向对象与面向过程 篇5
面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流,不过随着时代的发展,很多人对OO编程方法的看法也出现了一些变化;
最近在网上面看到有个名人喷面向对象的文章,我们可以先看一看:
“面向对象编程是一个极其糟糕的主意,只有硅谷里的人能干出这种事情。” — Edsger Dijkstra(图灵奖获得者)
“面向对象设计是用罗马数字做计算。” — Rob Pike(Go语言之父)
““面向对象”这个词包含很多意思。有一半是显而易见的,而另一半是错误的。“ — Paul Graham(美国互联网界如日中天的教父级人物)
“实现上的继承就跟过度使用goto语句一样,使程序拧巴和脆弱。结果就是,面向对象系统通常遭受复杂和缺乏复用的痛苦。” — John Ousterhout( Tcl and Tk 的创始人) Scripting, IEEE Computer, March
“90%的这些胡说八道都称现在它很流行,非要往我的代码里搓揉进面向对象的石粒。” — kfx
“有时,优雅的实现只需要一个函数。不是一个方法。不是一个类,不是一个框架。只是一个方法。” — John Carmack(id Software的创始人、第一人称射击游戏之父)
“面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境。你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而其还有整个丛林。” — Joe Armstrong(Erlang语言发明人)
“我一度曾经迷恋上了面向对象编程。现在我发现自己更倾向于认为面向对象是一个阴谋,企图毁掉我们的编程乐趣。” — Eric Allman(sendmail的创造者)
——摘自:面向对象编程从骨子里就有问题
下面我们来分析一下他们为什么讨厌面向对象,过度追求OO到底有什么问题:
面向对象的生产效率
这是OO编程比较推崇的一点,不过我们可以先看看这篇文章:如此理解面向对象编程
在文章中,某“ ”,将下面一段代码,“面向对象”成了7个文件,代码量由原来的几行变成了几十行。
public class PrintOS
{
public static void main(final String[] args)
{
String sName = System.getProperty(“os.name”) ;
if (osName.equals(“SunOS”) || osName.equals(“Linux”))
{
System.out.println(“This is a UNIX box and therefore good.”) ;
}
else if (osName.equals(“Windows NT”) || osName.equals(“Windows 95”))
{
System.out.println(“This is a Windows box and therefore bad.”) ;
}
else
{
System.out.println(“This is not a box.”) ;
}
}
}
文中的这位“ ”将学院派的做法发挥到了极致,
虽然这只是一个OO的教学文档,但确实很像OO的一篇高级黑,但我们仍能看出一味地追求OO会增加多么大的代码量。你现在明白你为什么需要IDE来辅助了吧? 在茫茫多的文件中寻找一个变量是多么的不容易呀。
面向对象的性能
这篇文章详细地讨论了OO的性能:Pitfalls Of Object Oriented Programming.
文中指出,从1980年至今,CPU的性能提高了近10W倍,但内存的访问性能只提高了不足10倍,原因就是内存的访问相对速度大为降低,OO的滥用使程序要经过很多间接过程才能访问到目标内存地址,
因而过度使用面向对象,会严重影响性能, 作者推荐优化数据和代码结构为先,并尽量使用KISS(keep it simple, stupid)原则来设计软件。
面向对象的可维护性
面向对象从一开始就要求我们完全了解各个子类的不同,并将他们的“共性”提取到父类里,从而实现代码复用, 在这个过程中自然形成了一种最强的耦合关系。这种设计方法在需求非常确定的情况下是有效的,但在实际生活中我们发现需求总是在开发过程中不断提出的,而且也总在变化,甚至跟之前完全相反,当你看到你精心设计的框架成为你需求变更的障碍时,你做何感想?
在一个完全OO的系统中,我们会不自觉地使用设计模式驱动型编程,正如这种编程的名字所说的,这种编程风格使用大量的设计模式,在你的程序中,四处都是设计模式,你的代码到处都是Facade,Observer ,Strategy,Adapter,等等等等。于是,你的程序要处理的业务逻辑被这些设计模式打乱得无法阅读,最后,也不知道是业务需求重来,还是设计模式重要,总之,实际业务需求的程序逻辑被各种设计模式混乱得不堪入目。摘自:各种流行的编程风格
该如何面向对象
面向不同对象的双语教学探索 篇6
摘 要: 文章结合电磁场与电磁波双语课程,论述了专业课程双语教学,在面向普通高等院校学生与中外合作项目学生时,其目标、性质、教学模式区别,以及在实施过程中遇到的问题和解决办法。
关键词: 双语教学 普通高等院校学生 中外合作 教学模式
引言
国家为了推动高等教育与国际接轨,鼓励高校开展双语课程教学历来已久。全国开设双语课程教学的高校非常多,研究双语课程教学模式的学者也很多。高校中双语课程实施的对象可分为两类,一类是普通高等院校学生,包括本科生与研究生;另一类为中外合作办学学生。面向这两类学生,在实施双语课程教学时,教学的性质、目标、教学方法都有所不同。
“电磁场与电磁波”是电子信息类专业和通信工程类专业一门重要的专业基础课程,也是“微波技术”和“光纤通信”等课程的基础。其内容在移动通信、微波通信、光纤通信、射频电路、高速集成电路等相关领域有着广泛而深入的应用。本文以“电磁场与电磁波”双语课程教学为例,分析普通双语课教学与中外合作中双语课程教学的区别。
1.普通班级专业双语课程教学
高校中普通专业双语教学的目标是在各专业领域培养既有较高的英文水平,又熟悉专业的人才。面向此类学生,多数高校采用的教学方法是汉语与外语混合授课模式,考虑到多数学生的外语口语和听力能力较弱,为了帮助学生掌握专业知识,往往先外语后汉语翻译。因为在制定该课程教学目标时把对专业知识的掌握放在首要位置,而外语能力的提高则放在其次。大多数学生在国内完成学业,双语课程仅仅使得学生在一定程度上提升了英语水平、扩大了英语词汇。因此,中外合作办学的双语课程与普通双语课程的性质是不一样的。
目前我们学校的“电磁场与电磁波”课程还没有在普通本科班级开设,但本课题组成员已经在积极准备中,对多个高等院校的双语教学进行了调研。对本校的通信工程专业本科生进行了“电磁场与电磁波”双语课程教学意愿调查,其中有调查项:92%的学生愿意实施双语教学;85%的学生认为自己的英语能力会妨碍对专业知识的理解,学生普遍认为自己的听力能力、口语能力较弱,专业词汇量较少。课题组成员针对这些问题提出了措施:听力能力与口语能力的提高是日积月累的事情,重在坚持锻炼。在初始阶段,教师的授课方式主要以混合模式为主,并录制相应教学视频,让学生能够课后进行相应复习,同时教师要制定合理的考核机制起到监督作用。其次,在教学过程中,对课程每一段落讲解结束后,把章节总结任务交给学生,鼓励学生积极参与并分组讨论,每组学生用英文提炼章节的重点和难点,再总结结论,从而提高学生口语能力;针对专业词汇量问题,课题组成员已经制定了专业词汇手册,按专业知识点类型分类,并非以往的按字母分类。在专业词汇教与学过程中,可将传统的大学公共英语教学手段与专业双语课程教学方法相结合。
2.中外合作项目中专业双语教学
目前国内高校的中外合作项目多数采用的是“3+1”或“2+2”模式,即前两年或三年在国内完成一定量的课程学习,成绩合格者可申请到国外完成剩余的学业。出国学习后,他们要面对的是纯外语的生活和学习环境,国内的双语课程教学可以使学生提前体验国外的语言环境、教学环境和教学模式,因此,在中外合作办学中,双语课程起到了过渡、引导的作用,同时为学生出国留学打下了坚实的基础。此时,专业双语课程授课目标应该是把专业知识的掌握与外语能力的提高放在同等位置。因为中外合作的学生多数已经进行过雅思培训或其他类出国外语培训,所以他们的外语能力相对普通学生较强,此时授课模式可由混合模式逐步向全外语模式过渡。
在我校的中外合作项目中,电磁场与电磁波双语课程已开设三届。该课程采用国外的原版教材,用外语完成作业,教学过程中采用外文课件,考核采用外文试卷,教学模式在一个学期中由混合模式逐步向全外语模式过渡。学生在潜移默化中习惯用外语思维组织语言、表达想法。这部分学出国后无论在专业知识方面还是语言能力方面,都受到外方的一致好评。但在该课程实施过程中,也存在一系列问题:(1)教学模式过渡到纯外语模式时,部分学生跟不上老师的节奏,甚至完全听不懂,再加上“电磁场与电磁波”课程是一门理论性抽象性非常强的专业课,学生就失去了学习兴趣。针对这一问题,在纯外语过程中可以将一些知识点的关键字进行反复强调,并在黑板上列出来;督促学生进行预习,提前了解老师讲解内容,有助于课堂上理解。(2)虽然大多数学生英语词汇量还可以,但因为没有接受过专业词汇的学习,所以在专业课程学习中,因专业词汇陌生或理解不准确而无法顺利掌握专业知识点。针对这一现象,在课堂教学中我们及时调整教学内容安排,花费一定的时间对专业词汇进行讲解。不论是面向院校普通学生还是中外合作学生,专业词汇的教与学都应该是基础,但在教学内容时间安排比例上应有相应区别。
结语
针对不同的授课对象,专业课程双语教学在教学目标、教学模式上都应该有所区别。目前随着教改课题的深入研究,结合近几年中外合作中“电磁场与电磁波”双语课程的实践,对教学模式探索,发现问题并提出相关措施,从而完善了双语教学,提高了教学质量。面向普通班级学生的该课程双语教学,课题组成员在积极准备探索中,明确授课对象的不同,在制定教学目标、采用教学方法都要因材施教。
参考文献:
[1]支绛.专业课程双语教学的思考与探讨[J].中国高等医学教育,2016,2:26-27.
[2]丁琪,张权.提高高校双语教学质量的对策[J].江苏高教[J].2013,5:90-91.
[3]许冬瑞,范东生.中外合作办学双语课堂教学模式的探究[J].教育艺术,2016,11:293-294.
[4]李强.卓越工程师培养背景下土木工程专业课程双语教学的实践与探索强[J].教育教学论坛,2016,6(25):169-170.
[5]王俊.探究式学习:改善高校双语教学实效的一个新思路[J].江苏高教,2013,2:68-69.
[6]蔡毓.关于高等学校通信电子及计算机工程类双语教学的思考[J].外语教学,2016,05:190.
面向对象分析与设计综述 篇7
OOA (Object-Oriented Analysis, 面向对象分析方法) 和OOD (Object-Oriented Design, 面向对象设计) 是面向对象软件开发生命周期中两个重要的阶段, OOA活动涉及的是语义对象, 而OOD活动涉及的是语义对象, 接口对象, 应用对象和实用/库对象, 这种区分OOA和OOD对象的方法在大多数情况下是正确的。但是, 在分析阶段, 一个好的规格说明也应涉及到用户接口, 控制机制等各方面的内容, 因此, 在OOA阶段, 不仅该得到语义对象, 也应该得到接口对象和应用对象。这些对象通过OOA中的对象识别和精化过程得到。在OOA阶段的主要任务是识别和精化对象, OOD阶段的主要任务是构造类和建立系统结构。
2 面向对象分析中的对象识别
在使用计算机解决问题时, 对象是作为计算机模拟真实世界的一个抽象, 一个对象就是一个物理实体或逻辑实体, 它反映了系统为之保存信息和 (或) 与它交互的能力。对象不仅能表示具体的实体, 如桌子、椅子;也能表示抽象的事件, 如演出、会议。那么, 在面向对象分析中, 如何尽可能精确的识别对象呢?
为了识别出系统所需要的对象, 在系统分析的过程中应采用“先松后紧”的原则。系统分析员应首先找出各种可能有用的候选对象, 即标识潜在对象。识别对象起步于对用户需求的正文描述进行语法分析。找出所有的名词或名词短语, 合并同义名词。
对象在用户需求的正文描述中以多种形式呈现, 系统分析员应该运用抽象原则, 首先要舍弃与系统责任无关的事物, 保留与系统责任有关的事物。其次, 还要舍弃与系统责任有关的事物中与系统责任无关的特征。判断事物及其特征是否与系统责任相关的准则是:该事物是否为系统提供了一些有用的信息或需要系统为其保存和管理某些信息;该事物是否向系统提供了某些服务或需要系统描述它的某些行为。
在找到许多可能有用的候选对象之后, 接下来的工作是对它们进行逐个审查, 分析它们是否是OOA模型所真正需要的, 从而筛选掉一些对象。筛选对象时应遵循的规则有:
(1) 删除无关类、冗余类和与之对应的对象。
(2) 对象的属性应是目标系统所关心的, 或者是目标系统正常运转所必需的, 对象利用其操作能够为目标系统中的其他对象提供服务。
(3) 如果某个对象仅有一个属性, 则最好将此对象表示为其他对象的属性。
(4) 为对象定义的有关属性应适合于对象的所有实例。如果对象的一个实例不具备某属性, 那往往意味着问题域中存在尚未发现的类继承关系。因此, 应该利用继承关系将原有对象和该特殊实例区分为两类对象。
(5) 有些对象还可以看成是某个对象的操作, 应根据它是适合作为对象还是适合作为对象的操作, 从而决定应不应该删除这个对象。
(6) 去掉仅与系统实现有关的候选类和对象, 对象应是软件需求模型的必要成分, 与设计和实现方法无关。
3 面向对象分析与设计的发展趋势
3.1 面向对象分析与设计的方法将被越来越多的人接受
迄今为止, “面向对象”本身还没有一个统一的让所有人都能接受的概念。然而, 面向对象中的一些最基本的概念已经和正在被人们所接受, 比如类、对象、继承、封装等;一些最有效的表示方法也正在被人们所共同采用, 比如图形表示、基本输入要求和输出结果等。并且这种趋势在越是较晚出现的方法和工具中越是明显, 面向对象的方法学研究在计算机领域正在朝着普及化的方向发展。
3.2 新的分析与设计的方法和工具将不断涌现
随着SDL92和Object Time的问世, 新的分析方法和工具将朝着动态化、标准化、可执行性、可测试性的方向发展。同时, 新的面向对象的设计方法也以越来越成熟的面孔出现。新方法和工具的相继出现, 将会大大缩短软件开发周期, 节省软件开发成本。
3.3 集成面向对象分析和设计将成为趋势
由于设计过程本身也涵盖有部分的分析, 分析过程中也有设计的成分。基于这种关系, 集成了分析和设计两方面的方法和工具的研究也将成为面向对象分析与设计领域的一个趋势。它的主要特点就是有机地集成比较著名的分析方法和设计方法来共同完成从分析到设计甚至到实现的全部任务。集成分析与设计方法最重要的环节是要能够把分析方法的输出结果变换成为一个设计方法的工具的输人, 即需要一个“翻译程序”。然而, 它与普通的翻译程序是不同的, 比普通的“翻译程序”更智能化。集成分析和设计方法虽然还处于尝试阶段, 但这个方向对于软件开发界是很有吸引力的。
4 结语
目前, 面向对象的分析与设计方法正处于发展阶段, 实际上都还没有真正解决从应用领域知识到需求模型的演变问题。要解决这个问题, 毋庸置疑, 还有很长的路要走。因为这不仅是OOA与OOD的任务, 还包括分析设计人员的实践和经验的积累, 同时还依赖于人工智能等相关学科的发展水平。随着使用面向对象程序设计方法的人越来越多, 同时参与研究面向对象分析与设计的方法学的队伍越来越壮大, OOAD的前景在软件的世界里将大放异彩。
参考文献
[1]汪成为等.面向对象分析、设计及应用[M].国防工业出版社, 1992.
[2]文登敏, 张丽梅.面向对象理论与实践[M].四川:西南交通大学出版社[M].2005.
[3]周之英.现代软件工程 (第二册) [M].北京:科学出版社, 2003.
[4]况和平, 黄玲芳.浅析面向对象分析中对象的识别[J].南昌高专学报, 2001, 2 (16) .
[5]费翔林.面向对象分析方法综述[J].小型微型计算机系统, 1995, 16 (9) .
面向对象建模技术的研究与应用 篇8
总之,面向对象建模技术有助于我们得到系统的整体概念。对于大型项目,常犯的错误是只见树木不见森林。如果手边能有几个可以从不同侧面来理解全局的模型图,则在进行软件设计时就会更容易些。本文就是围绕UML建模技术来进行研究的。
1 面向对象建模的技术基础
1.1 建模用例
从本质上讲,一个建模用例是用户与计算机之间为达到某个目的的一次典型交互作用。建模用例描述了用户提出的一些可见的需求,对应一个具体的用户目标。分析典型建模用例是开发者准确迅速地了解用户需求和相关概念的最常用也是最有效的方法,是用户和开发者一起深入剖析系统功能需求的起点[1]。
通过与典型用户交谈,请他们讲明他们希望系统做哪些事情,为他们提供哪些服务。软件开发人员记下用户想做的每一件事,并为之取一个名字,再写上简短的文字描述,这样就获取了所需要的建模用例。一系列建模用例的集合就组成了整个系统的需求。
1.2 建模类图
建模类图技术面向对象方法的核心技术。一个系统可以看作是由一些不同类型的对象组成的,对象类之间的各种关系反映了系统内部各种成分之间的静态结构。建模类图描述了系统中各种类及其相互之间的各种关系,其本质反映了系统中包含的各种对象的类型以及对象之间的各种静态关系。
另外,建模类图也可以描述类的属性和行为以及对模型中各种成分的约束。类与类之间有着各种不同的联系,譬如相互关联,依赖性,特征性[2]。所有这些联系以及类的属性和行为,都可以在建模类图中清晰地加以描述。建模类图使用于软件开发中的各个阶段。
2 面向对象建模技术的应用
应用开发生命周期的分析阶段将用户需求结构化并形式化。这个阶段的产品描述未来的系统应该做什么,而不描述怎么作[3]。在对象技术中,分析阶段的产品是模型,该阶段通常被称为建模阶段。下面以社会保险管理系统为案例,探讨一下面向对象建模技术的应用。
2.1 对象的确定
社会保险管理系统包括养老保险、医疗保险、生育保险、失业保险、工伤保险等五个险种的管理。社会保险管理系统向参保对象提供各种服务,例如参保对象管理,基金收缴,待遇支付等。社会保险机构参加保险的在职人员是缴费对象,参加保险的具有待遇享受资格的人员是待遇享受人员,这根据不同的险种有不同的解释。例如在养老保险中,在职人员和职工(包括在职职工和退休职工)所在单位是缴费对象,而离退休人员是待遇享受对象;在医疗保险中,在职人员和单位是缴费对象,而每个缴费的职工和单位为之缴纳医疗保险金的离退体人员都是待遇享受人员;在工伤保险中,单位是缴费对象,而只有受工伤的职工及其家属才是待遇享受对象。
本文从应用的问题域和初始用例找出潜在的对象。根据这个原则,本文找到的潜在对象类如表1所示。
2.2 候选类的确定
下面来分析一下候选类,看看这些候选类中是否有重复,不重要的候选类,是否有实际上是类的属性,方法或反映对象类的角色的候选类。
本文研究的社会保险管理系统,业务员和社保机构是重复的,为了更好地描述对象类,我们删去业务员而保留社保机构。待遇和待遇明细都是指待遇享受人的待遇,我们保留待遇,删去待遇明细待遇享受人也是参保对象,并且是参保对象中具有某种资格条件而具有享受待遇条件的参保对象。它有可能在以后称为参保对象的子类。参保对象基本信息与参保对象语义重复,我们留用参保对象。保险金最后融入账户之中,我们采用账户。
此外,本系统将各个险种的账号用不同的接口分开,使不同的险种对实体类的不同处理通过不同的接口分别实现,例如,账户类的定义如下:
2.3 系统的对象用例
在社会保险系统中,在职人员的各种变动处理和应收核定中都要用到欠款核定,为此单独定义一个核定欠款的用例,各种在职变动和应收核定使用这个用例。扩展描述一般行为的变化,在当两个或多个用例中出现重复描述而又想避免这种重复时采用。系统的基本对象用例如图1所示。
2.4 系统的类图示例
在社会保险系统中,由于养老、医疗、失业都有个人账号和单位账户,而工伤则只有单位账户,本系统在账户、单据类中加入对象类型属性以标注所属个人或者单位。在处理地则根据这个属性和险种通过相应持久化类的方法存取数据库中的对应数据。本系统的类图示例如图2所示。
3 结束语
面向对象建模技术适用于系统开发的不同阶段,从需求规格描述到系统完成后的测试。在需求阶段,可以用用例捕获用户需求,通过用例模型,描述对系统感兴趣的外部角色和他们对系统的功能要求。分析阶段主要关心问题域中的主要概念和机制,需要识别这些类及他们之间的关系,并用类图来描述。总之,面向对象建模技术有助于设计较好的面向对象程序。
摘要:面向对象建模技术有利于从全局的角度对系统加以设计。该文在明确面向对象建模技术重要性的基础上,分析了面向对象建模的技术基础,并以社会保险管理系统为案例,探讨了面向对象建模技术的应用,涉及到对象及候选类的确定、用例图及类图的设计等。该文对相关系统的面向对象建模应用提供了一定的借鉴作用。
关键词:面向对象建模,UML建模,对象用例和类图
参考文献
[1]梁玮.基于UML的面向对象建模方法研究[J].软件导刊,2009(10).
[2]王凤斌,段隆振,李向军,甘晟科.UML面向对象建模在管理信息系统中的应用[J].计算机与现代化,2005(2).
面向对象与面向过程 篇9
1 两种理论内容概述
阴阳即是对自然界相互关联的某些事物和现象对立双方属性的概括。它的主要内容包括:阴阳对立统一、阴阳互根互用、阴阳消长平衡、阴阳相互转化。
面向对象编程技术是把“数据”和“处理数据的过程”抽象成一个具有某些属性和特定功能的自包含实体——对象。其中, “数据”可以看作是描述对象的静态特征, 用来解决“该对象有什么?”的问题;“处理数据的过程”可以看作是描述对象的动态特征, 用来解决“该对象能够做什么?”的问题。对象的本质是将任一事物的静态特性 (阴) 和动态特性 (阳) 封装成一个独立的整体, 这与《老子》中“万物负阴而抱阳”、《易经》中“一阴一阳之谓道”不谋而合。
面向对象编程技术具有封装性、继承性和多态性这三个重要的特征, 结合阴阳理论, 对两者之间的关系进行探讨, 更容易使读者理解面向对象程序设计。
2 封装性与阴阳理论
面向对象技术的封装性能够有效保护对象内部的属性或数据 (阴) , 但同时它也提供了方法或函数 (阳) 来操作内部的属性或数据 (阴) 。对象CPerson的属性包括:Name和Age。这两个属性表示该对象的两个静态特征, 这一点类似于阴阳理论中的“阴”。对象CPerson含有四个函数:Get Name () 、Get Age () 、Set Name () 、Set Age () 。这四个函数代表该对象的四个动态特征, 用来实现四个具体的功能, 分别完成对上述两个属性的读、写操作, 这一点类似于阴阳理论中的“阳”。“阴在内阳之守也, 阳在外, 阴之使也”, 私有封装的Age属性只能在CPerson的内部通过Get Age () 和Set Age () 进行读、写操作。
对象与对象之间的交互正是通过对象的函数 (阳) 来实现的。正是这种阴阳互动的封装方式, 构成了面向对象编程技术的基本单位—对象。这与阴阳理论“阴者藏精而起函也, 阳者卫外而为固也”相益成彰。
3 继承性与阴阳理论
《道德经》曰:“道生一, 一生二, 二生三, 三生万物。万物负阴而抱阳, 冲气以为和”。阴阳理论强调万物皆含有“阴阳”, “阴”与“阳”之间的互动, 构成了稳定、平衡的局面。
在面向对象程序设计里, 继承性体现了阴阳理论的这种“构成论”。派生类通过继承得到了父类的一切—父类中的数据 (阴) 和函数 (阳) 。如果在祖先类定义好数据 (阴) 和函数 (阳) , 那么从这个祖先类派生出去的所有子类都将含有数据 (阴) 和函数 (阳) 。CPerson类中, 含有阴 (Name和Age属性) 和阳 (Get Name () 、Get Age () 、Set Name () 、Set Age () 四个函数) 两大部分, 通过派生得到CChina、CUsa和CJapan三个子类, 在这所有的派生类中, 都继承了CPerson的阴、阳两部分的内容, 即使这三个派生类再派生其它子类, 依然会继承CPerson的阴、阳两部分的内容, 正所谓“万物负阴而抱阳, 冲气以为和”, 面向对象编程中这种阴、阳互动的内部工作方式构成了它强大的生命力。
4 多态性抽象类与阴阳理论
面向对象程序设计的多态性中出现的抽象类, 因其定义的某些函数 (阳) 是纯虚函数, 没有具体的代码, 实现不了常规的操作 (缺失“阳”的功能) , 这种抽象类 (含有“阴”却无功能性的“阳”) 不能够生成对象, 正符合“孤阴不生”之道。在抽象类中, 接口类是一种典型的没有数据 (阴) 的抽象类, 它只含有纯虚函数 (无功能性的“阳”) , 从上面分析可知, 该类型也是不能够实例化对象的, 正所谓“独阳不长”。
《易经》中有“天地氤氲, 万物化醇, 男女构精, 万物化生”, 在古籍《雪心赋》中更有“孤阴不生, 独阳不长”的名句[6]。句中的“天地”、“男女”更抽象一步可理解为“阴阳”, 两句都强调“阴阳”在万物的构成中相互依存的对立统一性。
5 总结
面向对象程序设计是近三十年来计算机领域内主流的编程技术, 究其流行的原因, 除了该技术更符合软件行业发展规律之外, 其本质的原因是相较于其它编程语言, 它更“遵循”阴阳理论。《皇帝内经》中有“从阴阳则生, 逆之则死”!正是“对象”这种程序体具有完整的“阴阳”这一特性, 才使得“对象”在计算机程序内成为一个个完整、独立的基本功能单位, 使它更趋向于人的认知模式, 方便编程人员解决实际问题。
了解面向对象编程与阴阳理论之间的联系, 能够更好的促进该技术的发展。利用阴阳理论指导面向对象编程思想进一步发展, 启示它向更深层次演化。阴阳相互转化原理、阴阳消长平衡原理对于面向对象编程技术的转化机制具有现实的指导意义。
摘要:研究了阴阳理论与计算机面向对象程序设计之间的联系。通过对面向对象程序设计的封装性、继承性和多态性的分析, 揭示了计算机面向对象程序设计符合阴阳理论的对立统一、互根互用的原理。
关键词:阴阳理论,面向对象程序设计,对立统一
参考文献
[1]曾仕强.易经的奥秘[M].陕西:陕西师范大学出版社, 2009.
[2]傅佩荣.易经与人生[M].上海:上海三联书店, 2009.
[3]刘慧宁, 孟威等.C++程序设计[M].北京:机械工业出版社, 2011.
[4]高红雨, 廖湖声.面向对象程序设计语言的分析[J].计算机工程, 2012, 09 (53) :98-101.
[5]中国易学文化研究院.易经导读[M].九州出版社, 2012.
面向对象与面向过程 篇10
关键词:面向对象,Java,抽象,继承
一、抽象的含义
现实世界可以被描述成一些彼此相关并能互通信息的实体或对象组成的模型。客观事物本身具有其自然属性和行为。当我们对其中的某些属性和行为发生兴趣, 并抽取出来加以研究, 客观事物就在这些属性和行为的前提下成为我们所关心的研究对象。为便于认识问题的本质, 往往把客观世界的对象分成具体对象和抽象对象。抽象对象是对一组相似具体对象的共性的描述, 抽象的目的是对这些具体对象进行分类。当计算机来模拟和解决现实问题时, 还必须区别客观世界的对象和程序设计对象, 程序设计对象是用计算机内部形式表示的客观世界对象。
对象本身具有某些属性和行为活动, 属性决定了对象的可能行为, 而行为又能改变对象自身的属性状态。不同对象之间具有相互作用。因此, 描述一个对象就要描述其属性和行为以及它与其他对象之间的关系。
面向对象的思想, 就是将客观世界看成是由许多不同种类的对象构成的。每个对象都有自己的内部状态和变化规律, 不同对象之间相互联系和作用, 从而构成完整的客观世界。
面向对象的程序设计思想, 就是将客观世界的具体对象抽象到程序设计中的对象, 从而达到模拟现实世界的目的。这个过程可以用图1表示:
二、继承
在面向对象技术中, 继承一般分为单继承和多继承。单继承是指一个子类 (或派生类) 只允许有一个父类 (或基类) ;多继承是指允许从多个直接父类 (或基类) 派生子类。多继承往往具有复杂性, 因此多继承面临着名字的二义性的问题, 不同父类中可能存在名字相同的属性。当子类继承父类时, 来自于不同父类的属性产生了冲突, 导致了二义性。
继承是指一个对象直接使用另一个对象的属性和方法, 是一种由已有的类创建新类的机制。继承是面向对象技术中的一个十分重要的知识, 是面向对象程序设计的基础。在面向对象编程中, 继承的概念是一个"is a"的关系, 具体表现为一个类在另一个类的基础上扩展该类。这里的扩展是在原有类的基础上增加新的属性和方法, 这样就使类的范围缩小了。图2是关于雇员的类层次图, 经理 (Manager) 是特殊类 (派生类或子类) , 雇员 (Employee) 是一般类 (基类或父类) , 经理是雇员中的一种。父类雇员 (Employee) 拥有姓名 (name) , 工资 (salary) , 生日 (birth Date) 等属性, 同时每个雇员 (Employee) 都可以得到自己的详细资料 (get Details) 等行为。在此基础上可以继承出经理 (Manager) 这个类, 经理 (Manager) 具有额外的属性和行为, 比如经理 (Manager) 有自己所负责的部门的名称 (department) 。类层次结构同时体现了类之间的相似性和相异性。
三、Java中继承的本质
继承是Java语言的组成部分, 当你在创建一个类时, 你总是在继承, 因为除非你明确的要从其他类中继承, 否则你是在隐式的从Java的标准根源类object继承。Java的继承机制是扩充, 在Java的继承机制中去除了类的多继承, 只允许类的单继承。我们可以称这类继承为实现继承。另外, Java中除了类的继承 (单继承或实现继承) 还有接口的继承, 而且允许接口的多继承。Java去除了类的多继承, 从而降低了语言的复杂度。Java放弃了类的多继承, 但多继承又有其存在的必要, Java为了弥补多继承的不足, 引入了接口替代类的多继承, 使多继承在Java程序设计中发挥强大的作用。但是, 接口的意义并不是仅仅在于顶替类的多继承, 接口也没有义务去代替多继承。接口的真正作用是标志类的类别"把不同类型的类归于不同的接口, 可以更好地管理他们"。面向对象的精髓, 是对对象的抽象, 最能体现面向对象抽象思维的就是接口。
子类 (派生类) 通过继承获得父类 (基类) 的属性和方法, 我们可以用子类 (派生类) 的对象来调用父类 (基类) 的方法。如图1所示的雇员类层次结构图, 我们现在来实现它的代码:
由于使用了继承, 经理 (Manager) 类可以把雇员 (Employee) 类的属性和方法自动地继承过来。换句话说, 我可以拿Manager的对象来调用Employee中定义的方法, 如下所示:
Class manager=new Manager () ;
manager.getdetails () ;
这里可以体现出代码的重用, 表现在经理 (Manager) 类轻易地运用了雇员 (Employee) 类的代码。很多人因此就认为继承就只是为了代码的重用, 这是对面向对象程序设计中抽象思维的运用不透彻造成的。继承的确可以实现代码的重用, 但是继承的实际意义是在于抽象。Java中的对象是对现实生活中具体对象的抽象, 在此基础上进一步抽象, 便出现了类。另外, 当设计人员在进行设计的时候, 需要把对象模型中的类抽象出具有共同属性和方法的父类 (基类) 。而且优秀的设计人员为了减少系统的偶合度, 增加系统的灵活性往往在系统中使用抽象类来代替具体类。这是因为抽象类包含了抽象方法, 不能直接创建实例, 它只能作为父类被继承, 而且子类需要实现抽象类中的抽象方法。
用Java语言可以给系统定义一个一劳永逸, 不再更改的抽象设计, 该抽象设计允许无穷无尽的行为在具体的实现层被实现。在Java中, 可以给出一个Java抽象类或Java接口, 规定出所有的具体类必须提供的方法的特征 (Signature) 作为系统设计的抽象层, 这个抽象层要预见所有可能的扩展, 从而使得在任何扩展情况下, 系统的抽象层不需修改同时由于可以从抽象层导出一个或多个新的具体类可改变系统的行为。
四、结语
通过上面的介绍我们可知, 面向对象抽象思维在Java继承机制中得到了很好的体现。我们进行面向对象的设计时必须让Java的这种继承机制更好的发挥作用, 这样我们所设计出的系统才能更加易于扩展, 复杂、庞大的系统才能高效、成功的开发。
参考文献
[1]、《Java Tutorial, Third Edition》Mary Campione, Kathy Walrath, Alison Huml
[2]、《Thinking in java Third Edition》Bruce Eckel
[3]、《Java with Object oriented programming》Paul S.Wang
面向对象软件测试方法研究 篇11
关键词:软件测试;面向对象;类测试
中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2013) 24-0000-01
面向对象软件测试技术是针对使用面向对象技术开发的软件而提出的一种测试技术。面向对象开发技术和传统开发技术相比有新的特点,使用面向对象技术开发的程序具有高质量、高效率、易扩展、易维护等优点,这也给它的测试技术带来新的挑战。面向对象软件测试与传统的软件测试相比,由于面向对象技术开发的软件会出现传统软件技术中不存在或者不突出的错误,使得传统的软件测试中次要方面成为了现在的主要问题,影响了软件测试的方法和内容,增加了软件测试的难度。
一、软件测试
(一)软件测试
软件测试是使用人工操作或者利用测试工具按照测试方案和流程对软件产品进行功能和性能方面的评估,检验软件产品是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。
(二)面向对象对软件测试的影响
面向对象软件具有抽象性、封装性、继承性和多态性等特点,这些特点对软件测试产生了不同的影响。面向对象程序中子类可以继承父类的功能,父类进行了充分测试后,子类也要设计相应的测试用例进行充分测试,对子类进行测试时不仅要测试子类中的方法,还要重新测试与子类中重定义方法相关的类。面向对象软件测试时,对象的状态通常是信息隐蔽的,测试人员需要在测试类中添加适当的信息来表明对象的实现方法及其内部状态。对于面向对象软件的多态性形成的动态绑定的测试使用传统的静态分析策略是不合适的,需要使用动态的测试标准来解决这个问题。
二、面向对象软件测试方法
面向对象软件测试方法是从传统的软件测试方法中演化而来的,有与传统的软件测试相类似之处,但由于面向对象的软件开发具有继承性和多态性等特点,为了支持和加强数据隐藏的特性,面向对象的软件测试必须向一个类的接口添加操作,所以说面向对象的软件测试方法更复杂一些。
(一)面向对象软件单元测试
面向对象软件单元测试主要是类测试,包括方法测试和对象测试。类是面向对象程序设计的基本单位,对象是类的具体实例,类测试是来验证类的实现和类的说明是否完全一致,如果类的实现是正确的,那么类的每一个具体实例的行为也将是正确的。
面向对象的类测试首先要确定测试方法,通常可以通过代码检查和执行测试用例两种方法来测试类的代码。代码检查方法容易受人为错误的影响,在代码量很大的情况下也会加大它的工作量,而编写一个好的测试用例需要很丰富的经验和较高的技巧。通过类实现的功能来分析所要编写的测试用例,然后根据类的边界值来扩充测试用例。构建测试用例一般是基于前置条件或后置条件,为所有可能出现的情况及情况的组合确定测试用例的需求,在这些可能出现的情况组合下,根据这些需求来构建测试用例,而且还要针对实际情况创建特定输入值的测试用例,并确定它们的正确输出。
测试驱动程序是一个运行测试用例并能够收集运行结果的程序。在面向对象的软件测试中,设计核心类的测试驱动程序十分重要,要求该程序必须思路严谨、结构简单清晰并易于维护。当确定了类的可执行测试用例,测试驱动程序就要创建类的实例来运行该测试用例,并给出测试用例运行的测试结果。
(二)面向对象软件集成测试
面向对象软件集成测试主要是类簇测试。面向对象软件是由若干对象组成的,这些对象互相协调合作来实现软件的功能,在面向对象的软件开发中,对象间的相互协调即对象的交互对于程序的正确性来说是非常重要的,对象的交互方式决定了程序能做什么,从而也就决定了程序是否正确。对象的交互测试是在对类的单独测试的基础上实现的,它来确保对象之间相互传递消息的正确性,它一般执行测试的是嵌入到应用程序中的交互对象。
在面向对象的软件测试当中,除了要考虑对象交互特征面之外,还需要具体的测试技术去实现测试的要求,目前常用的面向对象软件集成测试的方法有抽样测试和正交阵列测试。抽样测试提供了一种运算法则,不需要首先明确测试用例的总体,从一组可能的测试用例中选择测试序列;正交阵列测试是一种特殊的抽样方法,它通过定义一组交互对象的配对方式组合来进行测试,同时要尽量限制测试组合的配置数目,正交阵列测试系统就是挑选某个样本的特定测试技术。
(三)面向对象软件系统测试
在对面向对象软件进行系统测试时,要保证被测系统的完整性,搭建与真实用户实际使用环境相同的测试平台,并且需要参考面向对象分析的结果,对软件的架构进行验证,确保软件可以完全再现问题空间以及完整实现用户需求。系统测试不仅是要检测软件的整体功能行为表现,也是对软件设计开发的再确认,它针对的是非功能需求的测试,包括功能需求以外的所有需求以及注意事项等。系统测试是针对完整软件产品的测试,包括软件、软件运行所依赖的硬件、外设、数据、支撑软件及接口等,确保开发的软件与其依赖的各种资源能够协调运行,形成完整的软件产品。系统测试是软件测试过程中非常重要的阶段,它对测试技术的要求也是最高的。在进行面向对象软件的系统测试时,测试技术人员需要与软件的用户进行交流,根据用户提出的需求给出系统的修改建议,结合用户需求对被测试软件进行测试分析,根据分析结果建立测试用例。
三、结束语
面向对象的软件测试技术是面向对象软件开发中的重要组成部分,本文从面向对象软件的特点出发,分析了面向对象软件测试对传统软件测试的影响,介绍了面向对象软件测试的方法。
参考文献:
[1]王艳丽.面向对象软件簇级测试用例自动生成方法研究与实现[D].长春工业大学,2011.
面向对象与面向过程 篇12
关键词:项目驱动,面向对象分析与设计,实践教学
面向对象分析与设计 (OOA/D) 课程主要任务是在学生已掌握的面向对象程序设计语言的基础之上, 使学生们能够深入理解面向对象方法的精髓和实质, 全面了解面向对象分析与设计相关领域的主要研究内容及关键技术, 包括面向对象的需求建模、面向对象的系统分析、面向对象的系统设计及设计模式、软件架构和软件构件技术等内容。面向对象分析与设计方法是目前软件开发的主流方法, 它是软件工程人才必须掌握的基础知识和必备的能力[1]。
可以说OOA/D是软件系统开发中最能体现从业人员创新思维以及其技术精髓闪光点之处, 而与这门课程在软件行业的重要性形成鲜明对比的是, 目前OOA/D课程教学模式已然落后, 偏重理论讲授而脱离项目实践, 学生的学习兴趣和积极性大打折扣, 教学改革迫在眉睫。
1 教学现状分析
当前我们在此门课程的讲授不能满足教学大纲培养需求, 经分析现行的课程教学模式主要存在以下问题。
(1) 理论知识传授过程中某些知识点的讲授无法切实让学生清晰的领会教学内容, 因本门课程对项目实践能力要求较高以及对学生抽象思维能力要求较高, 即便是在结合案例的讲授方式下, 学生仍然对主要内容的把握上表现出不知所措, 学习兴趣及积极性自然大打折扣。
(2) 实验体系也演化为为了机械的“做”而做, 而不是为了“学”而做, 课堂教学与实验教学互相脱钩, 学生将软件建模的过程当成了UML的画图过程, 违背了“做中学”的思想[2], 因此无法在实践中去领会教学内容, 也无法更清晰更形象的体会知识点。
(3) 课程的评价考核也与此门课程的教学目标相脱离, 考核内容大多演化成机械的文字背诵, 因在教学过程中项目实践引入较少, 使得考核过程中对分析与设计环节的考查变成了形式上的空洞。
2 基于项目驱动的课程体系结构的改革
2.1 课程实践体系结构的搭建
本课程教学的关键在于以实践为导向, 以项目为驱动, 这也是该课程教学的中心环节[3], 为此我们首先需要搭建能够承载本课程知识点的实践体系结构。
在搭建项目体系的过程中, 我们利用学院现已结题的横纵向软件项目, 对其中的面向对象分析与设计结果摘取其中要点与课程理论知识点对接, 进一步在分析与设计的各个阶段, 将项目的面向对象设计文档和课程的各个UML图形成对接, 这样由点即线, 形成了完备的课程实践体系结构, 学生在这样的结构环境下实践能更准确更清晰的理解实践要点及理论要点, 并重现了真实的分析与设计过程, 达到了良好的教学效果。
在此过程中, 摈弃了以往单纯使用没有实践积累的纸面案例进行建模画图的思路, 搭建了全新的面向对方分析与设计的实践体系结构, 从而在实践中讲授知识, 将理论知识的关键点转化为实践的关键点来传授。
2.2 课程知识体系结构的改革
我们发现本课程现行的知识体系结构存在着先期准备知识的不完备性以及知识点之间的衔接不连续性, 这些断层导致学生对知识的理解模糊以及对知识的掌握找不到切入点。因此有必要对知识体系结构进行改革和完善。
面向对象分析与设计课程要求学生具备良好的抽象能力, 软件过程重要的第一步便是利用抽象将软件需求转化为分析结果;而第二步考虑具体的软件可扩展性、可维护性、高效的灵活性, 对分析结果给出优化的设计方案。这两个关键的步骤是开发出高质量软件系统的关键, 也是本门课程对学生先期素质的准备需要。而当前我们软件工程专业的教学计划中其他课程的知识传授不能满足面向对象分析与设计学习的先期需要, 导致课程授课难度加大以及学生对知识的理解模糊。
因此整个知识体系结构有必要将《需求工程》及《设计模式》纳入到教学计划中, 《需求工程》是上述第一步从抽象中得到分析结果的能力培养, 《设计模式》是第二步优化设计思维的培养, 这样它们二者便与现有的面向对象分析与设计及软件工程共同构成了软件工程专业分析与设计能力培养课程群[4]。接下来, 我们要将这几门课程内容进行整合, 求同存异, 形成统一的面向对象分析与设计知识体系结构, 在内容选择以及实验配备上统一步调, 在课程之间的连贯性以及知识点的衔接性方面进一步优化体系结构。
3 基于项目驱动的教学方法改革
3.1 案例辅助教学
该课程讲授的原理、技术、方法都很抽象, 容易产生枯燥乏味的感觉。为了激发学生的学习热情, 培养学生分析解决问题的能力, 在教学过程中可设计若干可操作和难度适中的实际案例, 将复杂抽象、枯燥的概念融于具体生动的案例中进行讲解, 能够收到事半功倍的效果。
例如在讲需求建模、类图、用例图等需求分析建模工具时, 可以引入ATM储蓄系统、图书管理系统等学生熟知的案例辅助教学, 学生独立分析、思考, 然后教师再进行讲解, 指出不足。
这种方法不但给学生提供了充分的思考、探究和创新的空间而且学生边学边做, 会对所学的知识理解得更深, 对其应用场合更明确。
3.2 基于项目驱动的教学
在成功搭建课程的实践体系结构之后, 我们便可在教学过程中以项目实践为主线, 使之成为驱动其他教学环节的有效手段。随着课程进展布置任务, 从项目开发的准备工作、系统分析过程、系统设计过程、项目实施, 结合所学习的理论知识, 逐步完成项目的分析与设计。具体的实施过程如下。
(1) 设计多个典型的、完整的、难度适中的、实际的软件项目, 由学生分组完成。
选择项目时应尽量面向社会、面向应用, 反映新技术, 以获得更好的工程设计实践训练。项目最好来源于授课教师直接参与的软件项目, 以便授课教师对其全部细节能够准确掌握。
项目设计好之后, 将学生分成5~6人的小组, 然后为每个小组分配一个项目。小组成员分工合作, 明确项目开发各阶段的任务, 将每项任务落实到个人, 由学生独立完成。
(2) 即学即练。
在讲授一个软件项目分析与设计过程后, 安排一到两节的讨论课, 由学生自由发言。小组可以集思广益, 派一个代表讲解小组对本组项目的理解、分析和设计的过程, 说明运用所学的知识解决问题的方案。其他小组人员可以提出疑问, 最后由教师给出评价, 确定最终的实施方案, 这样项目开发的每个阶段都在教师的正确指导下进行。
在项目开发过程中, 教师要经常了解每组的进展情况, 解决学生遇到的实际问题, 给予正确的引导, 确保项目能够按部就班地、有条不紊地顺利完成。
(3) 统一答辩和验收。
在课程结束时, 每个小组的项目也接近尾声, 然后要统一组织答辩, 上交文档。这时可以让小组代表对其项目的功能、采用的技术等做总结陈述, 然后让每个小组成员说明在整个项目开发过程中所完成的任务, 并一一进行演示。教师针对每个学生实际负责的部分进行提问, 最后根据系统完成的功能、文档的质量、开发技术的难易程度、工作量等给出每个小组及组内每个成员的成绩。
通过面向对象分析与设计课程的学习, 学生的系统分析与设计能力以及开发的规范程度都有一定程度的提高, 具备一定的独立分析、解决问题能力、团队合作能力和有效沟通的技能。
4 考核方式改革
考核方式应尽量做到多样化, 以达到全面客观地衡量学生真实水平的目的。
考核方式有别于其他课程。我们提出的方案是:总成绩为100分, 平时成绩 (其中包括出勤和作业) 占总成绩的10%, 科技小论文占10%项目成绩占40%, 期末考试占40%。
期末时, 学生提交一篇科技小论文。主要考查学生对此门课程新思想、新理论、新技术等的了解程度, 同时也为学生以后继续深造打好基础。
项目成绩, 是指学生开发贯穿教学始终的那个项目的成绩, 主要考查学生的实践动手能力以及分析设计能力。
另外, 由于此门课程的理论性强, 一些原理、方法、规范要求学生牢固掌握, 对于这部分内容以闭卷方式考核。同时笔试反对死记硬背, 重点考查学生综合运用理论知识的能力和方法, 考核学生对面向对象分析与设计思想和软件开发方法的实际掌握程度。
5 结语
本文阐述的教学改革中, 提出了“以分析设计能力培养为核心、以项目实践为驱动”的教学模式。课程安排分为课堂理论教学和实践教学两大部分:课堂理论教学的目的是使学生掌握基本概念、原理和方法, 在此我们重点进行了此门课程的知识体系结构改革, 优化了知识体系结构;实践教学的目的是在搭建好的软件项目体系结构的实践平台上培养学生综合运用所学知识的能力。在此教学模式下, 能够很好的培养学生系统分析设计的能力, 培养他们严谨、求实的科学态度和团队精神, 激发他们的创新意识和实践精神。
参考文献
[1]梁金昆.面向对象的系统分析与设计[M].北京:清华大学出版社, 2004.
[2]樊永华.实践以学生为主体的信息技术课堂教学模式[EB/OL].www.cytaoyuan.qdedu.net.2008.
[3]严琼“.以学生为中心”的教学模式的探讨[J].华中师范大学学报, 2006, 8.