面向对象程序设计方法

2024-08-27

面向对象程序设计方法(通用12篇)

面向对象程序设计方法 篇1

1. 研究背景

面向对象程序设计课程是计算机科学与技术专业的专业课, 理论性和操作性较强。教授学生基础的编程理论以及面向对象的编程方法, 通过本课程的学习, 可以有效的培养学生的编程逻辑思维能力和动手编程的能力, 并可以帮助学生提高编程中必备的合作能力。

该课程在教学中存在以下问题, 首先, 课程学时较少, 但需要教授的知识点较多, 有些语法较为复杂, 学生很难在有限的时间内很好的掌握;对学生只能做到基本理论知识的教授, 而很难再进一步, 让学生理解的更为透彻。其次, 在教学方法上, 基本都以小程序为例去讲解一些主要的理论知识点, 帮助学生理解。但学生的主观能动性无法很好的激发, 导致离开例子, 学生无法很好的编写程序, 或者无参考情况下, 无法独立完成基本程序的编写。

针对面向对象课程教学问题中存在的问题, 国内许多教学工作人员对该课程如何达到更好地教学效果, 培养实践能力和编程能力强的学生进行了研究。范振钧[1]提出了基于任务驱动的教学方法, 以解决问题为导向, 协助学生完成程序的编写, 在编写程序的过程中掌握知识。李玉梅[2]将案例驱动教学、多媒体教学、研究型学习三种方法结合起来, 试图提高学生学习的兴趣, 培养学生编程的逻辑思维能力, 加强学生的动手能力, 试图提高学生的整体水平。张焕生[3]提出了面向对象程序设计教学中理论教学、时间教学在方式、内容和考核方式等方面进行改革的相关措施, 以提高教学质量, 培养合格人才。

以上提出的教学改革方法中主要侧重于教师教学方法的改变, 以及考试改革, 但是对于面向对象程序设计这样一门对理论性和实践性要求都较高的课程来说, 如果不充分调动学生课下的学习积极性, 很难取得良好的教学效果。如何调动学生对该课程的学习积极性, 不要从一开始就掉队, 直接产生对课程的“讨厌感”非常重要。

因此, 除了对教学方式提出一些必要的教学改进之外, 主要是调动学生的学习积极性, 首先给学生提供有一个宽松的学习环境, 进行由浅入深, 由易到难, 由慢到快的循序渐进式的学习, 保证学生在学习课程的过程中不掉队;其次, 通过解决实际问题、课后开放趣味性实践作业、网络幕课讲解课堂知识点等方法提高学生对该课程的兴趣, 加强学生通过编程解决实际问题的成就感以全面提高教学质量。

2. 教学方法

针对该门课程存在的问题, 提出了四化教学方法, 通过教学内容“例题化”增加了学生的感性认识, 增强了学生面对问题求解的信心, 以便加深对知识的理解;通过教学形式“多样化”提高学生编程能力、逻辑编程思想;通过教学策略“分层化”帮助学生不断加深对面向对象程序设计的认识和理解, 循序渐进提高编程能力;通过教学过程的“阶段化”培养学生一步一步独立编程及团队合作编程的能力。最终希望学生通过上述方法的学习, 可以较好的掌握面向对象编程的方式, 方法, 具有较好的动手编程能力和团队合作能力。

(1) 内容例题化, 教学内容的设计必须以实例求解为主线索, 且实例必须贴近生活中可能需要解决的事情, 体现分析、设计能力的培养。针对书中每个重要的理论只是, 选择合适的编程题目, 从简单到复杂的传授给学生, 拿到问题, 如何分析, 如何设计, 以及如何编程解决的能力。以此提高学生抽象问题, 解决问题的能力。具体内容要从“实例”引导人手, 将枯燥的概念和公式融入到形象的比喻中, 加大学生学习程序设计的兴趣, 并促进学生的理解和记忆。

(2) 形式多样化, 选择合适的时间点, 通过验证式教学和课题式教学的结合使用加深或强化学生对课堂理论知识的掌握。理论知识较难掌握, 往往上课的时候觉得已经掌握的知识点, 过一段时间又模糊了, 必须及时和反复的巩固和加深学生对课堂所学理论知识的理解, 项目采用递进式的层次验证方法帮助学生加深对课堂所学知识的理解和使用。验证式教学通过单个实验项目, 了解学生对单一知识点理论掌握和使用情况, 考查学生调试、测试程序能力。课题式教学在验证式教学很好完成的基础上, 提出较为复杂的问题, 涵盖若干个相关知识点, 学生根据自己的兴趣爱好确定一个课题进行课题设计, 通过查找相关资料, 提出研究课题, 写出实施计划, 程序实现流程, 考查学生在掌握从过程编程方法到面向对象编程方法的转换能力和现实问题的抽象, 分析, 解决问题能力。

(3) 策略分层化, 课程知识点较多, 难度不一致, 并且学生基础也不一致, 为了兼顾所有学生, 必须采用分层化的教学方法, 按基础, 综合, 实用三个层次, 逐渐递进的引导学生完成具体的教学内容。基础部分可以照顾编程基础较差的学生, 使之不至于从开始就掉队。实用部分主要偏向基础好, 且对编程兴趣较大的学生, 提高这部分学生的编程水平。同时, 借助于网络幕课的使用, 加深学生对关键知识点的理解, 通过互动和知识点实时测试, 提高学生学习该课程理论知识的兴趣。

(4) 过程阶段化, 面向对象程序设计课程课堂学时有限, 只有利用课内课外相结合的方式才能保证较好的教学效果。因此, 课前预习, 课程中根据在预习过程中碰到的难点听课, 及课后的实践, 成为学习本课程必不可少的三个阶段。希望可以通过这三个阶段, 调动学生学习本课程的积极性, 培养学生独立编程能力和团队合作意识。

3. 总结

通过四化教学法, 从两方面保证课程的改革质量, 一是提高学生对面向对象程序设计课程的学习兴趣, 二是结合网络幕课, 选择更为科学的教学教授方法。在保证学生掌握课程理论知识点的基础上, 通过验证式教学加深和巩固学生对理论知识点的掌握, 和基础的编程能力。提高学生的综合素质和竞争能力。通过本文的研究, 为面向对象程序设计课程提供理论基础, 对培养学生程序设计和编写能力提供一定的保证;为其他类似课程的教学模式研究提供参考。

摘要:传统的面向对象程序设计语言课程教学存在内容抽象, 学生水平不一及教学模式单一等问题, 本文提出了一系列的课程教学方法, 包括教学内容“例题化”、教学策略“分层化”、教学形式“多样化”、教学过程“阶段化”的教学方法, 通过教学方法的改变, 帮助学生更好更快的掌握面向对象编程的方法。

关键词:面向对象程序设计,教学方法,网络慕课

参考文献

[1]范振钧, 王建秋.面向对象程序设计课程教学改革探析, 通化师范学院院报, 2011.4.

[2]李玉梅.课程教学改革的研究与实践, 教学与改革, 2012.6

[3]张焕生, 刘春玲, 李轶华.面向对象程序设计课程的教学改革探讨, 文化信息, 2011.7

面向对象程序设计方法 篇2

卫星系统的复杂性是卫星模拟器研制的难点.针对面向功能方法的.不足,提出了面向时象的卫星模拟器设计方法,并使用OMT技术进行了卫星模拟器建模示例.

作 者:吴振宇 熊晓将 宋秋静 WU Zhen-yu XIONG Xiao-jiang SONG Qiu-jing  作者单位:中国空间技术研究院・北京・100094 刊 名:飞行器测控学报  ISTIC英文刊名:JOURNAL OF SPACECRAFT TT & C TECHNOLOGY 年,卷(期):2008 27(2) 分类号:V411.8 关键词:面向对象   卫星   模拟器  

面向对象程序设计方法 篇3

31重视上机实践及习题

做习题是对所学内容进行复习的重要过程,还是深入学习的必要过程。每次课程讲授之后,教师均应当将有着较强代表性的一些习题布置给学生,以此对课堂上所学习到的内容加以巩固。还可以借助于学生作业的具体情况来了解学生掌握课程内容的程度。对于作业中普遍出现的错误,则需要教师当堂讲解,以便于让学生掌握牢靠、理解透彻。与此同时,学生作业中所出现的新颖新奇的程序设计思路及方法,也需要做好作业批注,并且当堂宣讲,鼓励学生勇于迸发出创新的火花。

32激发学习兴趣

为了能够使学生较快及较好的掌握相关方面的计算机知识,真正的融入计算机领域,教师应当尤其重视学生学习兴趣的调动及培养。在接触计算机的最初阶段,相当一部分学生仅仅是感到好玩、新奇,但并非是对此有兴趣,而逐渐地随着课程的持续深入,大量的要求、定义、规则、概念以及机械化格式的出现,非常容易使得学生有乏味枯燥的感觉產生。为了能够将学生的好奇向学习兴趣转化,那么在课程讲解中要注意着手于具体问题,使学生从感性上对新知识加以认识,然后再对理论要点进行讲授。比如,在首次课上,教师可以找已学的一些《线性代数》、《高等数学》等课程的问题,要求学生采取算法语言来予以求解,以这样的方式使学生对程序设计的用途加以切身体会,最重要的是掌握全新的一种问题的解决方法。在课程讲授的过程中,教师还要积极的引导学生学习一类算法,并且在同行课程中尝试应用。另外,教师还可以向学生经常性的介绍趣味性的一些算例,比如“迷宫问题”等,以此将学生的学习兴趣培养起来,促使学生主动积极的学习与获取知识,从而将程序设计基础打好。

面向对象程序设计方法 篇4

1 结构化方法分析与设计

结构化方法承袭了传统的编程思想与编程方法,结构化方法只是对传统程序结构的改进。模块是结构化编程的基本单位,计算方法(简称为算法)是程序的核心,结构化分析和结构化设计是结构化方法软件开发最关键的两个时期。

1.1 结构化方法的基本思想

结构化方法程序设计的基本思想是:自顶向下,采用模块化技术,分而治之,逐步求精地将信息系统按功能分解为若干模块进行分析与设计,应用子程序实现模块化,模块内部由顺序结构、选择结构、循环结构等三大基本控制结构组成。即从代表目标系统整体功能的单个处理着手,自顶向下不断地把复杂的处理分解为子处理,这样一层一层地分解下去,直到仅剩下若干个容易实现的子处理为止,并写出各个最低层处理的描述。

1.2 结构化分析

结构化分析是一种面向数据流而基于功能分解的分析方法,在该阶段主要通过采用数据流程图、编制数据字典等工具,描述边界和数据处理过程的关系,力求寻找功能及功能之间的说明。通常所说的“结构化分析”就是“数据流分析”。

数据流分析的核心特征是“分解”与“抽象”。“分解”和“抽象”是两个相互有机联系的概念,下层是上层的分解,上层是下层的抽象。例如,假设系统很复杂,为了理解它,将它分成了5个子系统,如果子系统仍然比较复杂还可以再继续分解它,如此下去,直到每个子系统足够简单,能清楚地被理解和表达为止。

典型的结构化分析方法可以描述为:功能分解=功能+子功能+功能接口。问题域映射为功能和子功能,规格说明间接反映问题域。分析的结果是系统、子系统、功能、子功能层次结构的建立。

1.3 结构化设计

结构化设计通常与结构化分析方法衔接起来使用,以数据流图为基础,将数据流图表示的信息转换成程序结构的设计描述,在该阶段力求寻找功能的实现方法,完成软件层次图或软件结构图。

结构化设计通常表述为:结构图+关系数据模式,其中,结构图描述软件系统的程序结构,关系数据模式描述软件系统的数据库结构。因此,结构化设计工作主要包括程序结构设计和数据库结构设计。设计过程分两步完成,第一步构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系);第二步在总体设计的基础上,将实体联系图转换成关系数据模式,确定每个模块的内部结构和算法,产生每个模块的程序流程图,最终在此基础上设计建立外模式。

1.4 结构化分析设计的局限

1)不能直接反映问题域:结构化分析方法以数据流为中心,强调数据的流动及每一个处理过程,不是以问题域中的各事物为基础,打破了各事物的界限,分析结果不能直接反映问题域,容易隐蔽一些对问题域的理解偏差。

2)数据和代码缺乏保护机制:一个特定全程数据既可以被操作这些数据的过程访问,也可以被其他过程访问,这给程序设计带来了不安定因素,一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。

3)分析和设计体系不一:结构化分析的结果是数据流图,结构化设计的结果是模块结构图。二者的表示体系不一致,分析文档很难与设计文档对应,所以从分析到设计的“转换”过程容易因理解上的错误而使得设计文档与用户的原本需求相差甚远。

4)开发过程复杂:由于结构化方法将过程和数据分离为相互独立的实体,程序员在编程时必须时刻考虑到所要处理的数据的格式。对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序,而且往往不能对数据的安全性进行有效的控制。如果程序进行扩充或升级,也需要大量修改函数,因此结构化程序的可重用性不好。要使数据与程序始终保持兼容,已成为程序员的一个沉重的负担。

2 面向对象分析与设计

2.1 面向对象的基本思想

面向对象方法的出发点是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。

面向对象是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。它打破了传统的代码、数据分离做法,将一种数据结构和操作该数据结构的方法捆在一起,封装在一个程序内,实现了数据封装和信息隐藏,通过“操作”作为接口实现信息传递。对外部来说,只知道“它是做什么的”,而不知道“它是如何做的”,使得数据封装、信息隐藏、抽象代码共享等软件工程思想得到充分体现。

2.2 面向对象的重要特征

1)抽象:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。抽象是形成概念的必须手段。

2)类和对象:“类”是面向对象语言中的一种抽象数据类型。面向对象方法认为客观世界是由各种对象组成的,复杂的对象可以由比较简单的对象以某种方式组合而成。例如人、车、学校、球场、商店、螺丝钉等都可以看做是对象。对象按照不同性质可以划分成各种对象类。“对象”可以理解为“类”的一个实例,每个对象都有自己的属性(状态和特征)和方法(行为)。

3)继承:即特殊类的对象拥有其一般类的全部属性与服务。由于具有“继承”性这个特点,使得程序员对共同的属性以及方法只说明一次,并且在具体的情况下可以扩展细化或修改这些属性及方法。

4)封装:表示对象状态的数据和实现各个操作的代码,都被封装在对象里面,它与外界的联系是通过对象的对外接口(方法)实现。外界不需要关心对象是如何进行各种细节处理。

5)多态:指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。就如不同的对象,收到同一消息可以产生不同的结果。

2.3 面向对象分析(Object Oriented Analysis OOA)

面向对象分析是面向对象软件工程方法的第一个环节,OOA的任务是把对问题域和系统的认识理解,正确地抽象为规范的对象(包括类、继承层次)和消息传递联系,最终建立起问题域的简洁、精确、可理解的面向对象模型,为后续的面向对象设计和面向对象编程提供指导。面向对象分析方法可以描述为:OOA=对象+类+继承+消息传递。

面向对象分析通常建立三种模型:对象模型、动态模型、功能模型。其中,对象模型描述了系统的静态结构,在第一轮迭代中可能只确定类的名称和类间的关系。动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。功能模型表明了系统中数据之间的依赖关系,以及有关数据的处理功能,它有一组数据流图组成。

面向对象的分析过程实际上是依次建立对象模型、动态模型、功能模型,之后反复迭代,细化类的属性和服务(方法)。之后可以根据需要,再按此过程逐渐迭代细化。

2.4 面向对象设计(Object Oriented Design OOD)

1)OOA和OOD采用一致的概念、原则和表示方法,二者之间不存在鸿沟,不需要从分析文档到设计文档的转换,二者之间也不强调严格的阶段划分。能体现二者之间关系的是软件生命周期模型———喷泉模型(如图1),其中分析与设计没有严格的边界,它们是连续的、无缝的、允许有一定的相交。在分析阶段所获得的信息,不仅是设计阶段的输入,同时也是设计阶段的一个完整部分,分析得到对象及其相互关系,而设计则是解决这些对象及其相互关系的实现问题。

OOA与OOD的区别主要是,OOA与系统的问题域更加相关,OOD与系统的实现更加密切;OOD是对OOA所得出的对象模型的直接细化和抽象,得到可直接实现的类图。

2)面向对象设计可看作是面向数据流图与面向数据结构的结构化方法的统一,把数据及其操作封装,再取个名字为对象。对象是高性能的数据,整个程序的执行就是若干对象彼此通信。这种以对象为中心的模块,不但内聚、耦合性能良好,而且适于并发。这样,系统的设计就可看成把系统所要求解的问题解释为一些对象及对象间消息传递的过程。

2.5 面向对象方法的优点

面向对象技术较之与传统的结构化方法有其独到之处:

1)可重用性。可重用性是面向对象软件开发的一个核心思路。通过类的继承关系,使公共的特性能够共享,简化了对象、类的创建工作量,增加了代码的可重性。另外,重用经过测试的代码还可以使产生额外错误的可能性达到最小。

2)可扩展性。可扩展性是对现代应用软件提出的又一个重要要求。类的继承性使类能反映现实世界的层次结构,多态性反映了现实世界的复杂多样。类的继承性和多态性使软件编码具有良好的可重用性和可扩展性。无需修改源代码就可以使软件功能容易扩充和修改。

3)数据保护。数据和操作数据的算法不再分离,它们被封装在一起,对象内部的行为实现细节被隐藏。封装防止了程序相互依赖性而带来的变动影响。

4)可管理性。面向对象的开发方法采用类作为构建系统的部件,以对象作为系统的基本组成单元,使整个项目的组织更加合理、方便,因为归纳事物、划分成类进行管理符合人们在认识和管理客观世界的习惯思维方式。

3 结束语

结构化和面向对象是软件工程的程序设计方法中最本质的思想方法。结构化编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块。它以过程为中心,强调的是过程,强调功能和模块化,通过一系列过程的调用和处理完成相应的任务。面向对象编程以对象为中心,是对一系列相关对象的操纵,发送消息给对象,由对象执行相应的操作并返回结果,强调的是对象。理论上,面向对象的程序设计方法将产生更好的模块内聚和耦合特性,使得软件更易于重用与维护。但在实践中程序设计方法关注软件生命周期的各个环节,从需求分析、总体设计到编码、测试和维护。同时设计方法在各个阶段需要工具和环境的支撑,因此在选择程序设计方法时,需要综合考虑这些因素。

参考文献

[1]郭溪川.对比分析面向对象方法与结构化方法[J].农业网络信息,2006(11).

[2]郭燕慧.面向对象软件分析设计与测试[M].北京:科学出版社,2004.

[3]王德军,郝永芳.结构化程序设计方法与面向对象的程序设计方法的比较[J].铁路计算机应用,2003,12(11).

[4]张世庆.结构化程序设计与面向对象[J].丹东纺专学报,2003,10(3).

面向对象程序设计方法 篇5

多杆机构可以通过不同杆系的串联组合及对杆系参数的调整实现末端执行机构复杂的运动规律和运动轨迹,从而满足不同机械的结构设计要求,广泛应用于各种机械、仪表和机电一体化产品结构设计中。

多杆机构的传统杆系设计方法主要包括图解法,解析法,图谱法和模型实验法等,尤其是随着数值计算方法的发展,解析法成为各类多杆机构运动设计的一种有效方法。文献针对多杆机构末端执行机构运动存在非线性传递的问题提出了一种基于遗传算法的多杆压力机运动优化方法;文献通过对多杆系统的分级处理,借助杆系设计变量、约束函数和目标函数推导出最终的增广目标函数,从而计算得到系统的主要参数(运动参数和结构参数);文献通过建立了滑块位移,速度,加速度的数学模型,按滑块在工作行程内速度波动最小的原则建立了优化设计数学模型,最终运用复数矢量法对压力机双曲柄多杆机构进行了运动分析;文献以一种平面八连杆机构为例建立了平面多杆机构的运动分析数学模型,并利用MATLAB对其进行了优化设计和仿真分析。上述方法解决多杆机构运动设计问题的核心思想在于依赖建立能够客观反映机构运动学和动力学特性的代数解析方程(组),借助系统耦合矩阵,实现对全系统状态方程的程式化推导,通过探讨方程(组)解的形式以及方程(组)解的存在条件等方式,实现对特定结构,特定参数变化条件下系统动态性能的定性描述与比较。然而,当多杆机构给定的运动设计要求较多或较复杂,难以用数学语言对其进行模型表达时,上述多杆结构优化设计方法表现出明显的建模周期长,模型可靠性差,模型重用性差等缺点,延长了产品的设计周期,增加了产品的设计成本。

自20世纪80年代以来,诸多学者提出从系统工程角度将计算机辅助设计优化技术应用于复杂产品研发,借助多种计算机辅助设计软件实现了不同领域仿真物理模型自动向数学模型的转化,并通过综合使用数值仿真技术、优化技术、统计技术、计算机和网络技术,最终实现多目标多约束条件下,产品综合性能和整体质量的改进,极大地提高了产品的设计效率,缩短了产品的设计周期。

1多杆机构优化设计问题

具有不等式约束的多杆机构优化设计问题的数学表达模型可以概括为:

min/maxf(x)=f(x1,x2,…,xn)

s.t.Rj(x··)=gj(x1,x2,…,xm)0≤(j=1,2,…,m)

即在满足m个不等式约束gj(x)≤0的限制条件下,求使目标函数f(x)趋于最小或最大的设计变量向量x=[x1,x2,…,xn]T,(x篟n,Rn为设计变量可行域)。其中目标函数f(x)可以是给定的滑块运动要求,也可以是机构整体的动力学输出特性要求。当给定的运动要求较多或杆系较复杂时,针对多杆机构结构优化设计可以归纳为典型的多目标多约束优化问题。

1.1双曲柄滑块机构

以一种由双曲柄机构与曲柄滑块机构串联组成的六连杆机构,即双曲柄滑块机构的优化设计问题为例。双曲柄滑块机构运动原理图,由于双曲柄机构ABCD的存在,双曲柄滑块机构的滑块运动输出特性得到了有效改善。在恒速驱动条件下,2种机构滑块运动输出特性对比。在相同滑块负载条件下,2种机构驱动电机扭矩对比。

在相同驱动条件下,双曲柄滑块机构与传统曲柄滑块机构相比,两者具有相同的工作周期,且在图示工作行程内,双曲柄滑块机构滑块运动速度趋于平稳,而传统曲柄滑块机构则表现出明显的速度波动。当上述机构应用于锻压机械传动系统,尤其是进行拉伸工艺操作时,传统曲柄滑块机构的上述运动特性极易造成拉伸件的拉裂,加剧模具的磨损。

在相同滑块负载条件下,双曲柄滑块机构与传统曲柄滑块机构相比,在图示负载作用周期内,双曲柄滑块机构驱动扭矩最大值明显小于传统曲柄滑块机构。双曲柄滑块机构上述动力学特性使其更适于作为需要实现大增力比的大型机械传动系统。

由于双曲柄滑块机构的上述特性,该机构被广泛应用于不同功能机床的传动系统,最典型的应用包括多连杆压力机的传动机构和插齿机传动机构,前者利用双曲柄滑块机构滑块加工工作行程内速度变化平稳的优点,相对传统锻压机械在相同加工效率的条件下,能够显著提高拉深工件的成形质量,同时降低模具的磨损;后者则利用相同负载条件下,双曲柄机构的加入能够显著降低系统对于驱动电机容量要求的特点,在不影响加工效率的前提下达到显著的增力效果,最大限度地提高相关加工设备的加工能力。

1.2多杆机构多目标多约束问题描述

以上述双曲柄滑块机构为例,作为多连杆压力机传动系统为适应不同加工工艺操作,不同加工材料,不同材料加工厚度对滑块加工运动轨迹的不同要求,往往需要针对特性的滑块运动轨迹对杆系结构参数进行优化设计;而作为插齿机传动机构,由于要综合考虑结构强度,齿刀寿命等因素,也需针对不同的结构增力要求对其结构参数进行优化。

如何针对不同加工应用领域,不同的功能设计要求,对同一多杆机构的尺寸参数进行优化,使其更合理地规划末端执行机构的运动学和动力学输出特性是多杆机构优化设计的核心问题。显然,上述双曲柄滑块机构针对不同加工应用领域,其优化目标侧重点不同,当双曲柄滑块机构应用于多连杆压力机时,其优化目标可以概括为:求使滑块运动输出满足特定曲线要求的连杆参数优化组合,侧重于对滑块运动学特性的优化;当双曲柄滑块机构应用于插齿机时,其优化目标则更侧重于提高双曲柄机构的增力效果,即求能够使机构输出扭矩最大化的杆系参数优化组合。

其中,M代表变量Loa,Lab,Lbc,Loc的可行域,双曲柄机构成立条件可以表述为:取最短杆为机架,且最短构件与最长构件长度之和小于或等于其他两构件长度之和,即:

Loc

Loc

Loc

Loa+Lab+Lbc-Loc-2max(Loa,Lab,Lbc,Loc)≤0

2基于Isight与ADAMS面向对象的多杆机构优化设计

通过Isight对用户建立的ADAMS参数化仿真模型的仿真分析流程进行集成和管理,借助Isight提供的多种优化搜索策略对多杆机构的多目标多约束优化问题进行求解,从而获得满足设计要求的整体优化结果。

2.1ADAMS参数化模型的建立

取双曲柄滑块机构从动曲柄水平位置为建模参考位置,利用优化参数对模型坐标点进行参数化,从而建立双曲柄滑块机构的仿真参数化模型。最终建立由杆系几何参数约束的ADAMS参数化模型。其中:α=cosLab2+Loa2+Loc2-Lbc22LoaLoa2槡+Loc()2,β=atanLocLoa()。

2.2双曲柄滑块机构优化

Isight具备试验设计方法(designofexperiment),梯度优化算法(gradientoptimization),直接搜索方法(directsearch),全局优化算法(globaloptimization)等多个优化求解模块,考虑到上述双曲柄滑块机构设计参数不多,以梯度优化算法中的NLPQL算法为例,对双曲柄滑块相关目标函数的优化问题进行求解。

NLPQL算法将目标函数以二阶泰勒级数展开,并通过把约束条件线性化的方式二次规划得到下一个设计点,然后根据2个可供选择的优化函数执行一次线性搜索,其中Hessian矩阵由BFGS公式更新,该算法具有运行稳定,数据收敛速度快的特点。

3仿真结果分析

在Isight中设置好设计变量,约束条件和优化目标后调用ADAMS模型进行批处理运算,计算过程中对每个样本点进行迭代,以双曲柄滑块机构增力特性优化流程结果为例。

在NLPQL算法作用下,设计变量在所定义的变化限制范围内逐步收敛得到所限制范围内的局部最优解。,相同负载条件下,优化后的驱动扭矩较优化之前降低了35%,达到了良好的优化效果。

4结语

面向对象数据库系统设计 篇6

关键词:面向对象;数据库;系统设计

一、数据查询(OQL)

作为数据库,最重要的估计是数据查询了,面向对象数据同样如此。在这里,我设计了以下查询语法:get(…)if(…),其中get里面是要查询的类,类的属性等,相当于SQL里面的select … where …。比如有类A,A中有一个属性a(数字型,关于类型后面会说)。则获取所有A类实例中所有a的值小于0的实例集合的查询语句是:get(A)if(A.a<0);

执行该语句应该要返回所有类A实例中所有a小于0的实例集合。具体使用方法如下:

(一)单类查询

即在一个类中进行查询。如:get(A)if(A.a<0);就返回是所有类A实例中所有a小于0的实例集合。而不带条件的查询是get(A);这将返回类A的所有实例。

(二)多类查询

如:get(A,B);将返回类A和类B的所有实例的数据。

(三)方法查询(暂不实现)

(四)表达式计算

如:get(3+3);返回的将是6。

(五)复杂查询

如:get(A.a+B.b,C,C.a/A.a)if(A.a5);这个查询语句将返回的是类A的a字段和类B的b字段的相加之和,类C的实例以及C类字段a与A类字段a的商,并且尽在类A的a字段小于类B的b字段并且(##是并号)类C的字段a的值小于5。此类操作可能比较耗时,并且可能返回重复的数据。如在A类实例和B类实例确定的情况下C类实例变化时将返回多个相同结果的A.a+B.b的值。记住返回的都是集合。

二、数据操作(OML)

(1)插入数据:new 类名(构造函数参数列表);这样即生成了一个实例(即插入一个实例)。举例如下:

Test t = new Test(1,2,3);//假如类Test的构造参数是三个数字类型的参数。

(2)更新数据:直接调用该类实例的引用的属性复制即可实现更新。举例如下:

t.a = 3;//假如类Test有个公有成员a且是数字型的。

可以有更复杂的、有逻辑的更新,如:if(Test.a>3){Test.a = 1;//将所有符合条件的Test类的实例的a字段复制为1,是集合操作。}

又如:while(t.a>0){Test.a——;//只要实例t的字段a的值还大于0,则所有Test的实例的值继续减一。}

(3)删除数据:free(类名)if(删除条件表达式)。如果没有if,则删除此类的所有实例。free(Test)if(Test.a>0);这将删除类Test的实例t。

(4)数据定义(ODL)

定义语言包括类的定义和对象的定义。语法模仿的Java的语法。具体如下:

定义类:

class :定义类,语法如下:class 类名{

属性定义:其中包括变量权限声明,值定义,类型声明,目前仅支持三种类型,字符串型,数字型和 比特型。

方法定义:方法定义,跟Java类似,但目前仅留接口,不做实现。}

下面是一个实例:

class Test{private num a;//数字型;public str b;//字符串型;protected byte c;//比特型,变长比特型,用来存储大容量数据;public void testMethod(num a){//方法定义,目前暂不实现a++;this.a = a;}“;//”一定要加 “;”号,否则不能结束。

alter:更新类。语法如下:alter 类名.字段名或者方法名 =

{//字段或者方法的新式描述,如果没有任何信息,则表示删除该字段或者方法};举例如下:

alter Test.a {public num a;//如果不是命名为a,而是b,则将删除a字段,新建b字段。

该语句将把字段a的访问权限从私有变为公有。下面是更新方法:alter Test. testMethod {public void testMethod(num a){//方法更新,目前暂不实现a++;this.a = a——};

drop:删除类。此关键字只有一个语法,即:

drop 类名;如:

drop Test;//即表示删除Test类。

(5)数据控制使用try{//行为}catch(){}的语法形式,用来控制事务。在try块中的行为必须全部执行成功数据库才会更改,相当于事务提交。如果发生异常(即不能全部执行成功),则事务回滚。同时还要执行catch块中的信息。一般说来,catch块中留空则只回滚事务。

参考文献:

[1]邢斌、高荣芳、刘予东,《基于JSP的学生就业管理系统》,福建电脑。2006-9

作者简介:

面向对象程序设计方法 篇7

关键词:面向对象程序设计,教学方法,计算机专业

1 引言

程序设计是计算机本科生学习的主要系列课程, 是核心的专业课程及主要就业技能, 所以学好程序设计对于每个计算机专业本科生是非常重要的。目前普通高校的程序设计课程都是系列课程, 先以过程化程序设计课程为基础课程教会学生基本编程方法, 如:C语言程序设计、汇编语言等, 在此基础上再增加高级语言课程, 主要以面向对象类语言为主, 如:C++程序设计、JAVA程序设计。但是通过多年的教学实践及研究发现很多学生在高级语言课程结束后仅能掌握简单编程技能, 无法进行稍高难度编程、扩展自学及项目开发。

2 影响教学效果的因素

为提升面向对象类语言的教学效果, 教学组对已学、在学、未学三个年级的学生进行了调研、测试及座谈。总结了影响该课程教学效果的几个主要因素:1) 部分同学基础类语言学习不够扎实, 直接影响后续面向对象语言的学习。2) 部分同学没有形成编程素养。3) 部分同学认为面向对象较为抽象, 不容易理解。4) 部分同学无法将面向对象理论转化成编程思想自由应用, 尤其是对类的理解和使用。

3 解决方法

以上问题是影响面向对象类教学方法的主要因素, 为提升教学效果提出了具有针对性的措施来解决这些问题。

3.1 加强基础类语言理论的渗透

目前很多基础类语言教学过程中存在机械化、抽象化的问题, 导致学生无法深入理解编程思想进而无法灵活的掌握知识, 为了应付考试更有同学采取机械式背重点习题的方法学习语言, 这都导致语言学习不够灵活, 所以教学过程中应该结合典型习题加强学生对理论的理解, 比如在C语言课程中我们加入了万年历的编程例子, 该程序并没有出现在普通的教材中, 但是确是一个具有实际意义并且能够引发学生学习兴趣的例子。很多学生在接触这个实际的例子后表现出浓厚的兴趣, 积极的思考并与同学及教师探讨程序的设计思想, 在设计过程中很多同学将C语言的知识点串联了起来, 即达到了复习的效果也练习了综合应用多知识点的能力。通过该程序的设计及编写很多同学发现了自己的不足以及缺陷, 大部分同学在兴趣的引导下完成了该例子, 贯穿了基础语言的大部分知识点, 锻炼了编程的能力培养了程序设计思维。通过一系列与实际生活息息相关的例子的练习, 提高了学生的编程能力为下一步面向对象语言的学习打好夯实基础。

3.2 结合实际应用培养良好编程习惯

基础类语言课程的一个主要目的是培养学生良好的编程习惯, 但是很多学生以应付考试为目的去学习, 所以无法达到教学效果, 我们可以引入与实际生活娱乐相关的项目来提高学生的学习兴趣, 学生在兴趣的引导下能够深入到问题中去并在兴趣的引导下完成程序, 但是普遍存在编程不够规范, 编程思想不够独立的特点。我们通过引入实际的例子引导同学完成任务后, 再拿出比较成熟的程序与其进行比较, 找出学生的共性问题进行讲解, 让学生通过对比深刻的记忆自己的问题, 能够较好的纠正不良编程习惯, 养成良好的学习习惯对下一步面向对象程序的学习有很大的帮助。

3.3 将面向对象程序设计理论形象化

在面向对象课程讲授过程中我们经常限于教材, 而教材的通用性决定其具有高度概括性、理论化的特点, 不便于初学者全面快速的学习和理解, 比如:封装、继承、多态等理论理解起来较为困难。我们可以引入生活中的例子如家族关系来进行类比, 形象化这些理论, 在实际教学中取得了较好了效果:比如我们可以把一个家族的祖先类比为初始的类, 该祖先包含有多种决定人长相、性格等特征的DNA, 我们简单的说该祖先体内的DNA组成一个特定的集合, 这个过程就类比为类的封装。通过延续产生不同形态性格的后代, 这个过程可以类比成继承理论。这样类比的方法有助于基础概念的理解, 学生不再以背诵理论为手段去学习而是以形象化例子理解学习, 在编程中加入这些类比的例子就能更好地理解相关的概念。

3.4 加强面向对象编程的实际应用

学生通过形象化理论的学习具有了基础的编程能力, 但是远远达不到教学的要求, 随后的教学过程中都要应用面向对象理论。所以我们增加了实验课程环节、IT实训及公司培训环节, 尤其是与IT企业合作项目的研发过程极大提高了学生的编程能力, 企业有严格的程序设计流程, 学生在企业员工的指导和带动下顺利完成了一定量的编程工作, 极大地提升学生的设计、编写、测试等能力。在3年的专业课程学习期间大量引入实际课题, 大大提高学生的面向对象编程能力。在几年的教学过程中培养了一批具有实践能力的毕业生, 完成多项横向IT项目, 取得了较好的效果。

4 结论

本文针对面向对象类课程教学中的存在的问题提出了相关的解决方法, 并在实践教学过程中进行了实践及应用, 取得了较好的效果, 下一步还要研究如何配合企业在实际项目提高学生编程能力的方法。

参考文献

[1]张晓竞, 陈元琰.面向对象程序设计课程的感性化教学与创新应用[J].计算机教育, 2004 (10) .

面向对象程序设计方法 篇8

培养应用型人才是现在各大高校人才培养的重点。而作为计算机专业的学生, 培养其具备良好的实践动手能力则会对其今后的就业有着非常重要的意义。

现在各大高校都会将《面向对象程序设计》作为一门计算机专业基础课程开设。这门课程在讲述编程理论的同时, 对学生建立编程思想和实际软件编写及调试等方面的能力也将打下基础。该课程的教学目的是让学生在掌握理论知识的同时提高个人的实践能力, 尤其是利用面向对象的编程语言进行设计开发的能力。然而很多学生在学完该课程以后只掌握了基本的知识点, 没有软件工程的思想, 实践动手能力明显不足, 远远不能达到应用型人才培养方案的培养目的。所以, 对该课程教学模式的改革已经是势在必行。必须通过对该课程的相关实验实训及实践教学环节等进行改革, 以提高学生独立开发项目及动手能力。

1 问题的分析

这门课程在各大高校已经开设多年。目前大多数教师在教学过程中会花费大量的时间用于讲解课程中的概念、语法等在逻辑上不容易理解的内容。在实践课上, 老师只会花费较少的时间进行简单演示, 致使学生仍然只能掌握死板抽象的理论知识。学生对于这种传统的教学模式常会感觉枯燥无味, 没有学习乐趣。学生没有学习积极性, 也就很难达到课程的教学目的。另外, 由于现在的实践教学中, 实验的内容针对性不强, 实验中验证性的比较多, 而综合性的就比较少, 就导致了学生遇到实际问题后不知该如何解决, 时间久了以后必然会使学生丧失学习的信心。而且教师在实践教学的过程中, 对学生独立开发项目能力的培养重视度就不够, 针对性也不够强, 效果当然就不会好。

针对以上问题, 对该课程的教学模式进行改革已经是迫在眉睫, 通过改革实验和实训及相关实践教学环节, 提高学生的综合实践能力和动手能力。

2 实践教学体系内容分析

以理论和实践相结合的目光来审视《面向对象程序设计》这门课的实验教学体系, 它应该由以下五个方面构成:基础型实验、设计型实验、综合型实验、课程设计以及实习实践。

基础型实验大多是验证性的, 用于验证和巩固上课时老师所讲解的理论知识。设计型实验和综合型实验是在基础性试验的基础上, 将所学知识内容进行前后贯穿和链接。课程设计是完成一项涉及本课程主要内容的综合性、应用性的计算机程序的开发, 它注重的是程序设计的完整性、功能性及独立性。而实习实践大部分会与实际的项目相结合, 具有一定的开发背景, 要求学生应用所学的面向对象程序设计的思想来解决一个实际的问题。将这个体系完整有序的执行, 能够引导学生由浅入深, 由简单到复杂地完成实验内容, 掌握相关知识。

3 实践教学体系中教学方法的完善

3.1 理论教学

在日常的理论教学中, 首先要给学生建立面向对象程序设计方法的思想。在教学过程中, 要对学生进行启发式教学, 引导学生能够独立思考, 并创新式地解决问题。

在平时的教学中, 可以将一个大的项目分解后贯穿到每个知识点的讲解中。讲授例题逐步加深能够给学生以更强的印象, 也更容易接受。对学生的学习能力要给予肯定, 在树立学生学习信心的同时可以提高学生自主学习的兴趣, 以降低学生对老师的依赖程度, 增强学生自主学习的能力。

3.2 实验教学

实验教学是教学中提高教学效果的一个重要环节。通过实验, 可以加深学生对重要概念的理解和掌握, 激发其学习兴趣, 培养其动手能力并树立其学习信心。

在课堂上, 主要是完成基础型、设计型和综合型三类实验。这些实验要求学生独立完成, 前期主要是验证和理解课程的基本知识点, 然后巩固并能熟练地掌握。为了能够让学生更好的将理论教学与实践教学结合起来, 应合理布置实验教学内容, 培养学生的动手能力, 避免其只听不写。后期教师以综合型实验的形式提出实验要求以及学生应交出的实验成果。要求学生将课程中的几个相关知识点进行综合运用, 开发并完成指定的实验项目。目的在于培养学生利用面向对象程序设计的思想来分析并解决问题的能力。作为课程设计来说, 其主要目的是培养学生综合考虑并解决问题的能力, 并锻炼其动手能力, 而综合素质的全面提升可以通过实训来实现。在进行课程设计时可以采用学生自由选题的形式, 所选题目应有实际应有价值。要求学生系统的利用所学的面向对象程序设计的思想和知识来解决实际问题。选题的大小和广度要合适, 一般为具有一定的规模、功能相对完整的软件系统的设计与开发。要求学生最终形成完整的成果, 报告要体现软件工程的方法, 包括需求分析、总体设计、界面设计、详细设计及后期的综合测试等。要能够现场演示并能针对所做工作回答老师提出的问题。

3.3 实践教学

实习实践是学生走向社会, 承担工作的桥梁。在这个阶段, 学生应以实际软件开发项目为设计对象, 基于软件公司的真实数据和需求, 实战式的模拟软件产品开发过程中的各个阶段。通过训练, 使学生更全面深入的理解面向对象程序设计开发的思想和方法。根据项目的实际规模, 多个学生可以组成一个项目组, 选出一个项目经理, 负责整个项目的责任划分及工作的协调。项目组中的每个成员都应有明确的任务划分, 完成各自的功能部分并形成报告。

项目组中的每个成员在软件项目开发过程中, 应能够自觉查找资料, 提升个人能力, 克服技术难关并加强团队合作。通过这样的实际项目的演练, 学生在整个软件分析、设计、开发、测试及管理等过程环节中的专业技能都得到了锻炼, 使学生的分析能力、创作能力、思辨能力、动手能力、团队合作能力等都得到全面的提升。

4 总结

在传统的《面向对象程序设计》课程的教学中, 对理论知识强调过多, 而实践教学环节的重视就不够, 方法也比较死板。在本文中, 改革教学思路, 在不同的教学阶段, 将理论教学和实践教学结合起来, 采取不同的实践教学方法和手段。希望能促进本课程教学方法的改进, 尤其是实践教学环节的教学效果。让学生能较好地掌握这门课程的同时, 建立软件工程的概念, 提高他们的软件编写能力。

参考文献

[1]张麟华, 孔令德, 杨慧炯.面向图形图像处理的C++课程案例设计[J].计算机教育, 2013 (4) :88-91.

[2]丁智国, 钱婕.面向对象程序设计课程教学改革[J].计算机教育, 2011 (5) :9-12.

面向对象程序设计方法 篇9

关键词:C++,应用型本科,教学方法,项目案例驱动

0 引言

根据应用型本科院校培养应用型人才的特点, 我院计算机系各专业大都开设了《C++面向对象程序设计》课程, 该课程是本系学生必须掌握的专业基础课之一。由于本课程内容抽象、概念和语法规则较多的特点, 在实际授课过程中, 较多学生反映本门课程难学, 也由此对编程失去兴趣和信心。本文试图找出《C++面向对象程序设计》难学的症结所在, 并提出相应的解决方法。

1 解决从C面向过程到C++面向对象编程思想难转换问题

在计算机专业课程体系中, 《C程序设计》被设计为《C++面向对象程序设计》的前导课程, C/C++基本语法的学习放在《C程序设计》, 采用面向过程结构化编程。《C++面向对象程序设计》的授课重点则放在了面向对象的基本思想和基本方法上, 涉及到较多的抽象概念, 如继承、多态等。这样, 学生有可能受C面向过程结构化编程的影响, 难以理解C++面向对象编程思想。针对这个难点, 引入案例比较教学法, 根据C++面向对象的案例, 编写出相应的C语言面向过程的案例。如教材[1]中《例4-3游泳池改造预算》题目, 编写C语言面向过程的案例。然后比较这两种方法的优缺点, 如C代码简单明了但没有可重用性和可扩展性, 不适合大型项目, 而C++面向对象代码虽然复杂但恰好有这些优点。通过典型的案例比较, 提高学生使用面向对象思想进行程序设计的能力。

2 采用项目案例驱动教学[2]解决传统教学存在的内容和难点多的问题

由于教材的信息量太大, 知识点太多, 对语法强调得过多, 学生难以把握学习重点, 容易产生畏难情绪, 按照教材进行的传统教学不适合用于培养应用型本科院校计算机专业学生的编程能力。项目案例驱动教学是一种能开发学生智力, 提高学生综合素质的教学方法, 能解决传统教学模式中存在的内容和难点多的问题。项目案例教学效果的好坏关键在于案例设计的质量如何。教学案例的设计应该尽量做到:覆盖课程相关面向对象知识点、切合实际、容易被学生理解和接受, 由易到难循序渐进。按照以上原则选取教材上或自行设计的案例进行讲解和练习。因此应该精心准备每一节课, 精心选择每个教学案例项目, 以激发学生对C++课程的学习兴趣。

3 实施实验室“教、学、练”一体化教学[2]

实验室“教、学、练”一体化教学是这样安排:在实验室, 老师和学生每人一台电脑, 老师采用广播教学, 可以将电脑操作界面同步地显示在学生的电脑上, 学生可以很清晰看清老师的电脑操作步骤。老师讲解以编程操作任务为单位, 按顺序演示各个实验任务操作和编写代码的过程, 然后由学生模仿老师的操作自己动手完成实验内容, 学生实验操作中遇到问题老师再给予辅导, 学生也可以相互讨论, 共同解决难题。这种教学法比较适合与项目案例驱动教学法共同实施, 对实践操作很强的C++课程可以达到很好的教学效果,

4 培养和提高学生独立完成项目开发的能力

在实验室案例教学过程中, 学生能够一步一步模仿老师演示的教学案例, 但是, 换一个题目, 碰到新知识和新问题的时候, 学生就不知道如何处理了。因此, 在教学过程中, 需要加强典型项目案例的启发式讲解。在分析常见错误案例的过程中, 教师讲解程序设计的基本方法、程序测试方法以及程序调试和排错方法, 帮助学生理解错误发生的原因和实质, 掌握纠错的方法和解决的对策。教师每讲解完一个案例, 应该给学生安排一或多个类似题目在课堂上和课外进行思考和解决, 鼓励学生借助网络搜索引擎来获取相关解答的源代码, 完成这类练习, 同时选取编程能力较强的学生的代码进行点评, 手把手辅导如何解决难点, 代码如何调试等。这种辅导通过演示给全班看, 让所有学生都能更好掌握编程技巧, 提高独立完成项目开发的能力。教师在课外为学生安排一些经典、实用、有一定挑战性的作业, 鼓励学生课外多训练, 倡导学生课后组成学习小组, 进行讨论、分析和解决问题。

5 针对学习能力不同的学生采用不同教学模式解决层次参差不齐问题

由于学生素质参差不齐, 一部分学生对老师介绍的案例接受能力快, 能顺利完成课堂布置的任务, 而另一部分学生接受能力差, 实验任务进度缓慢或不知道从何入手。这种情况下要采取不同的教学模式:对接受能力快的学生, 采用“任务式”教学, 提出任务, 引导学生进行思考, 提供相应资料引导学生进行编程, 鼓励学生上网查找解决方法, 鼓励学生编出与老师代码不同的解决方案。这样能激发这些学生的学习动力和创新思维;对接受能力差的同学, 采用扎实、缓慢的授课方式, 对所有的难点、细节都举大量的例子, 不断地反复练习, 加深印象, 同时采用分组形式, 尽量让学习能力强的学生带学习能力差的学生, 课堂上的问题尽量在小组内解决, 如有不能解决的, 再向老师提问。要加强检查学生是否完全理解自己写的程序, 防止盲目抄袭应付完成任务和作业。

6 通过教学全程考核以提高教学质量方式

考核方式是学生学习的指挥棒, 如果按照传统的纸面笔试方法, 而不采取上机编程方式来考核, 只能考核语言基础、语法知识等, 而无法考核编程能力, 即使考核优秀的学生可能也只会纸上谈兵, 不会编程。此外如果只是在课程结束时考核学生, 考核出来的结果无论好坏已经无从改变了, 而现在采用教学全程考核, 即教学的每堂课都花些时间分批检查学生的练习结果, 并作为平时考核成绩, 一方面可以反馈教学效果以便改进, 同时也会及时督促学生上好每堂课以达到提高教学质量的目的。课程考核由三部分组成:

(1) 平时每堂课的表现和检查 (占总成绩的50%) 。

(2) 在线闭卷考试 (占总成绩的20%) 主要考核语言基础, 题型包括选择题、填空题和程序阅读题。

(3) 课程设计大作业 (占总成绩30%) 主要考核综合程序设计的能力, 独立分析问题和解决问题的能力。

7结语

通过对以上所述的各种教学方法和教学手段的研究和探索, 极大地激发了学生的学习兴趣, 挖掘了学生的创造潜能, 提高了C++面向对象程序设计综合能力。总之, 在教学过程中一定要结合应用型本科院校学生的特点, 使课程内容尽量贴近学生的兴趣, 这样才能调动学生学习的积极性、主动性从而提高教学效果。

参考文献

[1]郑莉.C++语言程序设计[M].北京:清华大学出版社, 2010

面向对象程序设计方法 篇10

面向对象意味着从问题所涉及的对象入手来分析问题, 面向对象的程序设计采用了以数据为中心的软件构造方法。一个对象以表现现实中的一个实体的数据结构为核心, 在界面上用它的各种行为功能进行定义。

二、VB.NET的类和对象

(一) 类的定义。

在研究问题时, 类被定义为所关于的概念、现象或具有明确意义的事物。因而, 对象都具有标识, 并且是可以区分的。在客观世界中的事物往往需要用和行为两个方面进行描述, 用数据成员和方法来表现, 并且将二者封装在一起, 形成来一种抽象的数据类型—类。

在VB.NET中, 类成员分为公共的 (public) 和私有的 (private) 两种, 外部不能访问一个对象的私有部分, 它们与对象间的信息传送只能通过公共成员进行。因此定义类的接口就是选择成员并区分它们的访问权限。VB.NET中, 定义类的基本格式为:

Class类名

[继续的类名]

[实现的接口名]

[正文]

End class

(二) 对象的概念和属性

1、对象的定义:

对象简单地说就是客机存在的事物。在VB.NET的术语中, 对象可以是真实世界中的事物, 如时间表;也可以是具有属性和方法性的概念事物, 如项目和工资单;还可以是特定的事物, 如窗体、窗口和控件等, 不管对象是建立在真实的世界、概念或现实的基础上, 都采用了面向对象的概念。

2、对象的属性:

对象的属性标志对象的所有特征, 在VB.NET中, 对象的属性是其所属类的成员变量, 即数据部分。

3、对象的方法:

对象的方法是指对象能进行的操作, 在VB.NET中, 对象本身所包含的函数和过程叫方法。方法和对象紧密联系, 只需在必要时使用它们。

三、方法重载

(一) 重载的定义。

方法重载, 即在一个类中声明相同名字的方法, 只要每一次的声明都有不同的参数列表, 在列表中有不同类型的数据类型, 由于系统提供的方法总是有限的, 所以当它不满足需要时, VB.NET允许对方法重载。因此, VB.NET的方法重载指对于不同的对象, 用户可以自己定义一些特定的方法完成特定的功能, 它与系统中提供的方法具有等同的效果。

(二) 方法重载的实现。在VB.NET中, 方法的声明方式如下:

Public Sub mymethod (X as integer, Y as interger)

这种方法的参数列表可以看成 (interger, interger) , 为了重载这种方法, 必须使用不同参数列表, 如 (interger, double) , 当然用户还可以改变数据的顺序, 比如 (double, interger) 和 (interger, double) 是不同的, 这两种也是重载。重载不能只通过改变函数的返回类型来实现, 而是要求参数的数据类型不同。

在下面的示例中, 假设提供一个搜索功能, 并且根据一些条件返回数据, 具体代码如下:

在上面两个方法的声明中都具有相同的声明名, 但其要求的参数不同, 并且每个声明都加入了Overloads关键字, 当重载一个方法时, 可以使用Public和Frined等关键字让它有不同的作用域, 即只要有不同的参数列表。这样, 在重载方法时, 只要让函数接收一个整型数据作为参数即可。

四、结束语

通过重载, 程序设计员可以定义几个同名过程, 只是它们有不同的参数集 (参数的顺序、类型、数量不同) 。调用一个重载过程时, 编辑器会自动检查调用参数数的数量、类型和顺序来选择适当的过程, 这样, 我们可以定义几个同名的、针对不同类型执行相似任务的过程, 使开发程序更加高效。

摘要:VB.NET作为一种高效的面向对象程序设计语言类的概念在程序设计中具有重要的地位。本文从类和对象的概念出发, 对VN.NET对象的方法、事件、属性的含义进行分析, 说明了如何实现VB.NET的方法重载问题。

关键词:面向对象程序设计,类,对象,方法重载

参考文献

[1]张智强.Visual Basic.NET课程设计案例精编.北京:清华大学出版社.2006.

[2]马海军.Visual Basic.NET程序设计高级教程[M].北京:清华大学出版社.2005.

面向对象程序设计方法 篇11

关键词:面向对象;分析设计;思维方法

中图分类号:G712 文献标识码:A 文章编号:1005-1422(2015)05-0065-02

面向对象的系统分析设计,就是将面向对象的方法运用到解决实际问题中去,完成对某个特定领用领域的分析和建模的过程。要解决系统的对象、对象的属性和操作、对象的动态特性、对象间的构造关系及通信关系等。系统设计阶段最重要的任务是确定系统结构,包括将系统划分成若干个子系统,确定子系统的本质特征,拟定数据管理策略、协调子系统软硬件和全局性资源分配,决定软件控制的实现方法、系统的边界条件和交替使用优先权等。在设计阶段,要通过建立一些类以及它们之间的关系来解决问题,要求设计语言必须具有抽象、封装、继承和多态性等关键性要素。C++语言不是一种纯面向对象的语言,但C++语言的可靠性、可重用性、可扩充性和良好的可维护性使它在面向对象程序设计中具有得天独厚的优越性。笔者在多年的程序设计教学中,结合学生实际,实施一体化教学,取得了一些初步成效。

一、巧用设计方法,解决程序的“先天缺陷”

1.单一设计方法的局限性

设计是程序的基础和前提,关乎系统的全局性,如果设计出了问题,对整个体系的影响将是灾难性的。传统的自顶向下的设计方法,从问题大的方面入手来寻找解决办法,依次类推逐步深入,再用同样的方法来解决剩下的相对较小的问题。运用自顶向下设计方法掌握结构层次的关键技术是恰当地、有选择地忽略某些细节方面的问题,集中精力“找主干、搭框架”。其精髓是把难度大的问题被分解成一系列难度小的技术问题,先解决大问题,然后再依次解决小问题。但是,实际运作过程中往往并无规律可循,什么是大问题,什么是小问题,哪些问题应先解决,哪些问题可以后解决,往往很难界定,因问题有时很难表述清楚。一旦划分有误,又要折返,重新排查,陷入麻烦。这对设计者的前瞻性和敏锐的洞察力具有很高的要求。

与之相对,自底向上的设计方法是从解决基本的、简单的问题入手,在此基础上逐步建立解决复杂问题的机制,直到整个问题得以圆满解决。它的优点是根基扎实,无需反复。但是,设计者面对纷繁复杂的系统,要逐个思考每一个基本简单问题的解决方法,就会陷入了一个相当复杂而尴尬盲目的境地:东一榔头西一棒子;顾了这头,忘了那头,漫无目的,耗时太多,也不理想。

2.取长补短,兼容并蓄

面向对象的设计方法落脚点是“对象”,着眼点是“面向”,因此,在教学中可以将自顶向下和自底向上的设计的优点兼而用之。比如类树的设计,自顶向下的方法是从最顶端的基类开始,一级一级派生出新类,添加新的成员,直到产生的源生类满足程序设计的要求为止。单纯使用自顶向下法,如果高层一旦要进行修改,下层的工作就会白做。这时,如果同时考虑自底向下的设计方法,情况就大为不同:在设计类树工作中,从最基层的派生类开始,提取派生类中共同的本质特征创建一个基类,这样一层一层地堆上去,最后形成合理的类族。自底向上的方法考虑的是基层的问题,大大降低了“工作到一半发现还有不可解决问题的”风险。综合运用自顶向下和自底向上两种设计方法,使建立的类树具有合理的并都能得到顺利解决的层次结构,使系统的可行性、安全性和稳定性大大增强。

二、大胆创新思维方法,提高程序的运行质量

在教学过程中,要引导学生用最简单最直接最有效的办法实现程序效率的最优化。

1.改头换面灵活运用“自由全程变量”

“自由全程”是指变量不属于任何类的成员。如Main()、标准C库的所有过程以及所有用C语言写的过程都属于“自由全程”的范畴。在C++语言产生以前,要减少或者取消自由全程的使用几乎是不可能做到的。自由全程变量的引入增强了程序设计的自由度和开放性,为广大设计者所推崇。但在实践过程中,自由全程变量的过度使用会带来很多问题,特别是对初次接触的学生来说,甚至会造成一定程度的混乱,造成很大的麻烦。灵活运用C++语言提供的相应机制可以巧妙地解决这一问题。具体分两步走:第一步,将这些全程变量的所有权划归给一些指定类的对象,并将这些全程变量确定为静态类成员,明确全程变量的使用权,把这些全程变量的管理集中在一个地方。第二步,将这些全程变量放入类中并给它取名,使全程变量和所在的类名紧紧地联系在一起。通过转换,全程变量仍然可以自由地被访问,但它的名字变成了两部分,一个是类名,一个是它本身的名字,这就杜绝了全程变量在使用过程中引起名字冲突的可能性。

2.借助内存管理系统防止“类”型的误用

在面向对象系统中,多数程序的运行行为都依赖于对象的类型。比如,一个总的表示图形形状的类,从中可以派生出各种各样特殊的图形类。在这个类族中,每个类型都必须执行各自特殊的draw()函数以便画出各自代表的图形。每次调用draw()函数时,画出的图形形状将依赖于程序实际运行时所控制的对象类型。如果制造一个陷阱谎报了类型,程序就会画出错误的图形。又比如,指向整型的指针类和指向一个具有10个整型单元的数组的指针类是完全不一样的两码事。故此,重视类型问题是有效防止错误发生的第一道防线。

借助C++语言提供的新的内存管理系统,可以使问题迎刃而解。C++语言在分配内存时,如果由于某种原因分配不成功,则返回空指针0x0000 0000。当用户继续使用比如改写数据时,系统将因为发生访问违规而退出。当然,面向对象设计方法本身,还可通过设计合理的类的层次结构,创建一组相互兼容的类型,避免发生相似的错误。

3.充分发挥“继承”在面向对象程序中的特殊功效

继承提供了很多手段。类的层次设计和实现是属于继承的面向对象设计的范畴,C++语言提供了众多的构件模块,包括公有的,保护的和私有的基类以及虚和非虚的基类,还有虚和非虚的成员函数等。用好“继承”这项工具,充分发挥“继承”在程序设计中穿针引线的特殊作用,能收到事半功倍的效果。

①把握继承的唯一性和方向性。公有继承指的“就是一个”。比如,类B公有继承于类A,就是在告诉C++编绎器类型B的每一个对象也是类型A的对象,反之则不然。如果说对于一个类型A的对象是正确的一件事,则对于一个类型B的对象同样也是真实的,反之也不行。

②尽量使用单一继承。如设计一个活动卡通人物的类属。一般来说,任何卡通人物都要跳舞或唱歌,但是每种类型的卡通人物表演这些动作的方式也是不同的。虚函数可以把所有的卡通对象的跳舞唱歌和缺省的行为动作表示成该类中的空函数。但是当要表示一个具体的卡通人物如蝴蝶或蜻蜓时,往往会陷入一些不必要的重复或继承。因为蝴蝶和蜻蜓两个类中具有很多共同的东西。并不是说让其中一个类继承于另一个类。这时不妨建立一个基类,让两个类同时继承于这个共同的基类,如定义为insect(昆虫),问题就变得简单了。

③“继承”的分层技术实现。利用分层技术“has-a(有一个)” 和“ia-implemented-in-terms-of(按·····方式实现)” 实现继承。从C++程序的执行效率来看,使用继承从base类派生一个derived类,和在derived中将base类作为它的一个对象成员是一样的。分层是一个处理过程,也可称为包含或嵌入,它通过让分层的类型包含被分层的类的对象作为其数据成员,以便把一个类建立在另一个类的上面。如:

这里,Person类被分层到String、Address和PersonNumber等几个类上面,使它继承了String、Address和PersonNumber的相关特性,因为它里面含有这些类型的数据成员,同时,又保持了Person类的相对完整。

面向对象程序设计语言的关键不在于它的语法特征,而是其所提供的对自然问题求解的机制和结构,它给用户提供的支持程序设计的窗口环境和管理工具。它是一种开放性的设计平台,要求设计者要面向实际问题,创新思维,以便更好地解决问题。

参考文献:

[1]吴炜煜.面向对象分析设计与编程[M].北京:清华大学出版社,2000.

[2]张基温.C++程序设计基础[M].北京:高等教育出版社,1996.

[3]谭浩强.C++面向对象程序设计[M].北京:清华大学出版社,2006.

[4]郑阿奇.C++面向对象实用教程[M].北京:电子工业出版社,2009.

面向对象程序设计方法 篇12

1. 遥感专业的特点与本课程内容分析。

遥感专业属于测绘类大学科方向,主要培养具备遥感科学技术与工程的基本理论、方法和技能的各层次专业人才。要求学生能够熟练掌握卫星遥感平台、传感器技术、遥感信息获取与数据处理、多传感器数据匹配和融合、图像自动解译技术等基本技术与方法,能够在城市规划、农业、林业、水利、地质、测绘等各类遥感领域,从事遥感电子设备与系统研制、应用系统和系统集成的建设与开发工作[1]。因此,对遥感专业的学生来说,程序设计是一门必备的技能。针对面向对象程序课程的教学任务量和教学特点,我校在制定遥感专业教学大纲中安排学生从一年级开始学习程序设计课程,分上下两个学期学完。课程内容主要包括[2]:(1)程序设计基本概念与语法,包括数组、函数、类和对象、继承与派生、多态性、输入输出流、异常处理等,以及C++14标准中包含的模版、泛型、匿名方法、lambda表达式、新型智能指针等。(2)程序设计方法,包括结构化程序设计和面向对象程序设计。面向对象程序设计的出发点之一就是弥补结构化程序设计中的一些缺点,但其可以使用结构化程序设计中的函数、数组等基本理论。本课程主要要求学生学习和掌握面向对象程序设计的思想,同时要求学生采用规范的程序设计风格,形成良好的程序设计素养。(3)程序调试技巧。(4)专业问题的分析与程序转化能力。

2. 教学目的。

教师通过理论和实践教学,使学生掌握结构化程序设计方法和面向对象程序设计方法,了解面向对象的基本概念和使用面向对象技术进行程序设计的基本思想,学会采用面向对象的方法进行问题分析,能够熟练运用C++语言解决一般问题,培养学生的动手实践和科研创新能力,为大型应用软件设计与开发打下良好的理论和实践基础。通过本课程的教学,希望学生能够达到的能力[3]包括:(1)程序编写与调试能力,熟练掌握VC++的编辑调试工具,能够快速编写程序代码;掌握程序排错的基本方法,能够独立快速进行程序调试。(2)专业问题的分析与程序转化能力,对实际专业对象和问题进行分析与抽象,设计出结构合理的对象关系图,并能进行求解。(3)创新能力,能够独立思考和深入钻研,善于对所学知识,进行梳理、概括、归纳总结,给出合理解决方案;能够独立阅读参考代码和资料,自我扩充知识结构。

二、普遍存在的问题及原因

1. 学习中存在的问题。

在学习过程中,大一学生们普遍反映该门课程的概念和知识点太多,课程内容的风格与其他课程差别很大,不易理解,一些学生甚至对编程产生了畏惧情绪,一步跟不上,步步跟不上。学生们学习过程中所遇到的困难具体来说包括以下几个方面[4]:(1)学生对遥感与面向对象程序设计的关系不清楚,学习的热情不高,比较茫然。(2)知识点具有一定难度,部分学生不注重对编程基础知识的掌握。(3)本课程是理论教学与上机实践相结合,教学内容多、学习任务量重。(4)C++中蕴含的计算思维方式不容易掌握[5]。部分学生在学习了本课程后,不善于从计算机语言的角度去思考问题。(5)编程环境VC++相对比较复杂,不太容易快速掌握。

2. 教学中存在的问题。许多老师具有多年的程序设计经验,容易惯性地认为所讲授的知识点比较容易,从而忽视了学生的个性化感受,再加上缺乏有效沟通,最终导致老师讲台上讲的很有激情,学生在下面一脸茫然。具体来说有如下问题:①没有激发学生的学习兴趣。传统的“以教师为中心、学生被动接受知识”的“填鸭式”教学方法忽略了学生学习程序设计的主动性,从而培养不了学生的创造性思维和探索精神,使得原本就不吸引学生的课堂变得更加枯燥无味,大大降低了学生的学习兴趣[6]。②没有因材施教。大一新生的计算机基础知识的掌握程度大不相同,在教学中若进度偏快,就有部分学生无法跟上老师的节奏,影响学习的积极性;如果讲的偏慢,会在整体上影响教学进度。

三、以能力培养为导向的教学方法研究

遥感专业开设C++面向对象程序设计课程,目的并不是要每个学生将来毕业了都能够胜任程序员的工作[7],而是让他们学会利用程序设计的思想和工具,具备解决专业问题的能力和潜力。针对以上对教学过程中存在问题的分析,现从以下几个方面提出以能力培养为导向的教学方法,力求提高教学效果。

1. 活跃课堂气氛,激发学习兴趣。

表面上看起来,面向程序设计课程本身是一门很枯燥的课,课程内容不是概念就是代码,课程中很多内容又不容易被学生理解。在教学中如果不和学生互动,学生只是被动的学习,那么他们不但在学习过程中对知识点的理解很困难,而且其学习的成果也不会达到预期的目标。在C++的教学过程中,最理想的状态就是,学生一直都能保持一种亢奋的状态,做到“乐于学、勤于练、善于思”。针对这种情况,教师可以采取以下几种手段,激发学生的学习兴趣:(1)从简到难,稳扎稳打。C++的知识点的难度是不一样的,在课堂上和上级实习中,给学生以适当的提示,让学生每一步都能看到解决问题的希望。(2)课堂上,对重点、难度知识点要尽量形象、生动地进行讲解,有时可以借助打比方、讲故事,也可引入UML或Visio绘图来辅助。(3)对容易混淆的概念,集中起来进行类比讲授。(4)引导学生知其然,更要知其所以然。

2. 精心设计实习题目,全面覆盖专业问题。

面向对象程序设计是一门实践性很强的课程,通过实践来加深对课程中理论知识的理解。因此,在实习内容的安排上,既要重视理论知识的重现,又要注重学生解决问题实际能力的培养;既要考虑学生的总体学习情况,又考虑学生的个体差异;既要考虑专业知识的覆盖,又要增加趣味性,并为学生提供一个发挥想象的空间。每个实验都要求学生自己进行设计和调试,老师在其中只是起引导和辅导作用。通过多次实践,学生不但可以对所学的内容进行巩固,而且还可以在其基础上创新。着眼于学科体系内的课程衔接,可从以下几方面来考虑实习题目的设计:(1)从大一所学的高等代数中出一些关于矩阵、行列式运算方面的问题进行训练。(2)从遥感专业内容本身寻找题目,诸如遥感图像处理、影像显示和影像分类等问题,来让学生体会C++解决专业问题的巨大威力。(3)通过设置课程设计题目,引导学生既要善于独立思考,又要学会分工协作。C++语言基于面向对象思想,无论是微粒度的代码级的设计模式,还是软件模块的设计组织,都能很轻松地应对。指导学生在大模块软件设计编写过程中,学会团队合作,同时在自己的模块中精益求精。

3. 既要纸上谈兵,又要参加实战。

面向对象程序设计课程是一门操作性和实践性很强的课程[8],如果只选择理论考试的方式来测验学生对本门课程的掌握程度是远远不够的。单纯的考试只会使学生对课本上的概念和知识进行盲目地死记硬背,即使考试拿到很高的分数,也不知道怎么将课本中的理论知识应用于实际操作中,更不懂得怎么用C++语言解决实际问题,从而出现高分低能的现象。学习C++目的是要利用这个计算机语言作为工具,解决本专业内的科学计算问题。引导学生从理论走向实践,真正学会这门本领。每年都有校级、省级甚至全国性的GIS程序设计大赛,教师应该根据学生学习C++所掌握的不同程度,推荐其参加不同类别的程序设计大赛,真正在实战中检验和提高技能。

四、总结

C++面向对象程序设计是一门方法性、实践性和应用性都比较强的课程,不容易被初学者理解,在课程的教与学的过程中都存在着困难。能够熟练掌握这门课程是广大师生共同的希望。这门课程学好了的话,后续课程会得心应手。在本课程的教学中,以提高学生运用C++解决专业计算问题的能力为主要目标,通过激发学习兴趣、设计遥感类实习题目和鼓励参加程序设计大赛等手段,充分调动学生的自主性,强化对面向对象概念的理解,适应面向对象程序设计的[5,8]思维习惯,逐步学会灵活运用面向对象思想来分析和解决具体的专业计算问题。

参考文献

[1]赵巧华,陈健.遥感科学与技术专业建设中的几个关键问题[J].地理空间信息,2010,(05):154-156.

[2]陈优良,徐昌荣,陈淑婷.GIS专业面向对象程序设计教学改革探讨[J].地理空间信息,2010,(01):151-154.

[3]姜峰,汤伟,赖俊.基于能力培养的面向对象程序设计课程教学改革探索[J].计算机工程与科学,2014,(S1):126-130.

[4]王新志,曹爽,孙景领.测绘专业“面向对象程序设计”课程教学实践与思考[J].测绘工程,2012,(02):73-76.

[5]程学云,管致锦.面向计算思维和探究能力培养的C++实践教学探索[J].电脑知识与技术,2013,(31):7037-7038.

[6]王文冰,李辉.以实例贯穿课堂的面向对象程序设计课程教学改革[J].计算机教育,2011,(01):91-94.

[7]李秉璋,徐亚平,罗烨,等.以提高应用能力为目标进行计算机专业课教学——“面向对象程序设计”教学改革探索[J].计算机教育,2006,(12):28-31.

上一篇:医专学生下一篇:开发与原生态