面向对象方法(通用12篇)
面向对象方法 篇1
1 引言
传统的软件开发方法, 如面向过程方法和面向数据方法, 都只是针对具体问题的功能, 不允许用户需求在开发过程中有所改变。显然, 由此开发的软件系统在可靠性、可维护性和可重用性上就会存在很大的不足。为了克服传统方法的缺点, 人们在实践中创造了接近人们认识过程的面向对象的软件开发方法。面向对象方法包括面向对象分析、面向对象设计和面向对象实现。尽管面向对象方法主要用于应用系统的设计, 但面向对象分析作为一种独立的需求分析方法以及其它分析方法的补充, 目前正逐渐得到发展。
面向对象分析 (OOA:Object Oriented Analysis) 是抽取和整理用户需求并建立问题解精确模型的过程, 其分析的关键是识别出问题域内的对象, 并分析它们相互之间的关系, 最终建立问题域的简洁、精确、可理解的正确模型, 包括对象模型, 动态模型和功能模型[1], 从而为面向对象设计 (OOD) 和面向对象程序设计 (OOP) 提供指导。
近年来, 随着面向对象技术在程序设计语言、软件开发方法学、用户界面、应用集成平台、面向对象数据库、分布式系统、网络管理结构、人工智能领城以及并发工程、综合集成工程的等各领域的发展应用, 也推动了众多OOA方法的出现, 其中得到广泛认同的有Booch方法 (OOD) , Coad/Yourdon (OOA&D) , OMT, 和Jacobson (OOSE) 等方法。
现根据王晓旭划分的OOA分析方法的原则[2]和额尔敦陶克素研究的评估方法[3], 着力对影响比较大、实际中使用比较多的OOA方法进行总结、比较。
2 根据年代划分主要的OOA方法[4,5,6,7,8,9,10,11,12,13,14]
2.1 第一代:80年代
2.1.1 OOD/Booch方法
该方法是Grady Booch从1983年开始研究, 1991年后走向成熟的一种方法。Booch认为面向对象的开发是一个部分生命期的方法, 只涉及面向对象的设计和实现 (OOD和00I) , 而不涉及面向对象分析 (OOA) 。他认为应将面向对象的设计与实现和其他的需求分析方法 (如SA方法, Jackson方法等) 相结合。
Booeh方法的最大特色是将几类不同的图表有机地结合起来, 以反映系统的各个方面是如何相互联系而又相互作用的。Booch方法可分为逻辑设计和物理设计, 其中逻辑设计包含类图文件和对象图文件, 物理设计包含模块图文件和进程图文件, 用以描述软件系统结构。首先, 从逻辑设计转向物理实现的开发过程中, 有种类图表和对象图表描述逻辑设计构成中最关键的抽象及含义, 组件图表和过程图表从物理实现来描述具体的硬软件结构。
Booch方法也可划分为静态模型和动态模型。其中静态模型表示系统的构成和结构;动态模型表示系统执行的行为。动态模型包含时序图和状态转换图。
具有的符号体系:
(1) 对象图 (对象结构-静态视图) :描述实例和对象间传递消息。 (2) 类图 (类结构-静态视图) :描述类与类之间的关系。 (3) 模块图 (模块体系结构) :描述构件。 (4) 进程图 (进程体系结构) :描述进程分配处理器的情况。 (5) 状态转移图 (类结构-动态视图) :描述一个类的状态变化。 (6) 时序图 (对象结构-动态视图) :描述对象图中不同对象之间的动态交互关系。
Booch方法的实施过程如下:
(1) 在一定抽象层确定类。在问题域中, 找出关键的对象和类。 (2) 确定类和对象的含义。从外部研究类, 研究对象之间的协议。 (3) 定义类与对象的关系。 (4) 实现系统中的类与对象。 (5) 说明类的界面与实现。
2.2 第二代:80年代后期-90年代初
2.2.1 OOSA/Shlaer-Mellor方法
该方法是由Shlaer和 Mellor于1988年提出, 主要是从信息模型的经验中得来的。00sA A是以语义数据模型为基础, 因此, 与数据语义模型相似, 继承了语义数据模型详尽的关系定义和属性定义, 但对方法 (操作) 的描述不明确。类是可支持的, 但是缺乏对继承的支持, 仅仅是支持对象属性的继承, 而不支持服务 (操作) 继承, 也不明确支持软件重用。OOSA只是隐含类、继承和封装这3个基本原则。
OOSA 以语义数据模型为基础, 从对象的结构、操作和生命周期角度建立信息模型、过程模型和状态模型, 并在这3种模型的建模活动中得到一系列比较清晰的图表。
实现的步骤:
(1) 定义信息模型:由对象、属性、关系和多个对象结构所组成。 (2) 定义对象的生命周期:分析各个对象的生命周期, 并将生命周期规范化为状态、事件、事务规划和行为的集合。 (3) 定义关系动态:为对象之间的动态关系建立状态模型。 (4) 定义系统动态:该步骤产生系统级的控制模型, 对象-通讯模型用于异步控制, 对象-存取模型用于同步控制。 (5) 定义处理模型:对于每个行为, 建立一个行为-数据流图。行为-数据流图描述对于行为的一切处理, 同时也描述处理中的数据流和数据存储。 (6) 定义范围和子系统:对于一个大的系统, 将其中的主要事件从概念上区分它们的范围并将大系统划分为若干个子系统是非常必要的。
OOSA缺乏对继承的支持, 适用于分析阶段和实时系统;OOSA实际上只是一种分析方法, 因此, 主要用于开发实时系统。
2.2.2 RDD/Wirfs-Brock
该方法是Wirfs-Brock在1990年提出的。其核心在于引入了拟人化的思想, 把对象的行为处理成该对象应负的责任、把对象间的关系处理为人类相互之间的合作形式, 发生相互关系的对象在系统中分别扮演客户与服务者的角色。客户对象以合约的形式向服务者对象提出服务请求, 服务者对象有责任提供客户所要求的服务, 而合约详细地规定了所需服务的操作细节。
RDD 方法先是定义系统的类和对象, 然后在确定系统的责任后将其划分给类, 最后确定对象类之间的合作来完成类的责任。设计过程再按照类的层次、子系统和协议进一步完善。分为探索阶段和精化阶段:
(1) 探索阶段:确定类、每个类的责任以及类间的合作。 (2) 精化阶段:精化类继承层次、确定子系统、确定协议。
RDD按照类层次图、合作图、类规范、子系统规范、合同规范等设计规范来完成实现。
2.2.3 OOAD/Coad-Yourdon方法
由Peter Coad和Edward Yourdon在1991年提出的, 是一种逐步进阶的面向对象建模方法, 适用于小型系统的开发。Coad-Yourdon方法严格区分了面向对象分析和面向对象设计。该方法利用五个层次和活动定义和记录系统行为, 输入和输出。这五个层次的活动包括:发现类及对象、识别结构、定义主题、定义属性和定义服务。
面向对象分析 (主要用于完成系统分析) 。
(1) 定义主题:发现并标识对象与类:进行类及对象的发现及描述。 (2) 标识服务:目的在于定义对象的行为之间的消息链接。 (3) 标识结构:包括上述的一般/特殊结构和局/部分结构。 (4) 标识属性:对于每个对象, 都需要找出在目标系统中对象所需要的属性, 而后将属性安排到适当的位置, 找出实例链接, 最后进行检查。
面向对象设计 (主要负责系统设计) 。
(1) 设计数据管理子系统:核心是数据存储, 常用的存储技术有文件管理、关系数据库管理和面向对象数据库管理。 (2) 设计任务管理子系统:主要是对系统各种任务进行选择和调整的过程。 (3) 构建问题域子系统:对分析的问题域模型进行需求调整、类的重用、增加一般化类建立协议等。 (4) 设计人机交互子系统:包括用户界面风格, 命令结构层次关系等内容的设计。
这种方法, 概念简单, 易于掌握。但是对每个对象的功能和行为的描述不很全面, 对象模型的语义表达能力不是太强。
2.2.4 OMT/Rumbaugh方法
OMT (Object Modeling Technique) 方法提出于1987年, 1991年Jim Rumbaugh正式把OMT应用于面向对象的分析和设计, 这种方法是在实体关系模型上扩展类、继承和行为而得到的。OMT方法的中心思想就在于从三个不同的角度和观点对所要考虑的系统进行建模, 即建立对象模型、动态模型和功能模型。
(1) 对象模型:描述系统的静态结构, 该模型主要关心系统中对象的结构、属性和操作。
(2) 动态模型:描述系统的控制结构, 表示了瞬时的行为化的系统控制性质, 它从对象的时间和状态角度出发, 表现对象的相互行为。
(3) 功能模型:描述了系统的所有功能操作。在该模型中说明对象模型操作的含义、动态模型中动作的意义及对象模型中约束的意义。
OMT方法全面覆盖了软件开发的整个过程, 包括分析、设计和实现几个步骤:
(1) 分析:基于问题和用户需求的描述, 建立现实世界的模型。
分析阶段的产生:问题描述、对象模型=对象图+数据词典、动态模型=状态图+全局事件流图、功能模型=数据流图+约束。
(2) 系统设计:结合问题域的知识和目标系统的体系结构将目标系统分解为子系统。
(3) 对象设计:基于分析模型和求解域中的体系结构等添加的实现细节, 完成系统设计。主要产物包括:细化的对象模型、细化的动态模型、细化的功能模型。
(4) 实现:将设计转换为特定的编程语言或硬件, 同时保持可追踪性、灵活性和可扩展性。
OMT方法通过构造三个模型较全面地描述了系统的需求, 但在功能模型中使用数据流图与其它两个模型有些脱节。
2.2.5 Bailin
Bailin认为从面向过程的分析到面向对象的设计开发需要对数据流图进行重大修改, 因此, 提出了一个面向对象的需求定义方法:使用了一种专门的语言将实体数据流图 (EDFD) 和实体关系图 (ERD) 组合到一起。该方法没有明显的面向对象的术语 (如, 类、对象、属相等) , 但它遵循OO的基本原则:实体关系图中既包含了对象的类和继承的概念, 也包含了OO中封装的既念。
实现过程:
(1) 定义实体:画出数据流程图, 给出出现在处理过程中的实体的名称。
(2) 区别激活的与惰态的实体:区别对系统需求描述重要的或非重要的实体, 构造一个实体关系图 (ERD) 。
(3) 建立激活实体间的数据流:构造一个最高一级的实体数据流图 (EDFD) 。每个激活的实体作为一个处理节点, 每个惰态实体为一个数据流或数据存储。
(4) 分解实体/功能:在各个分解步骤中, 应考虑各个新的子实体是否被包含在新的子功能中。
(5) 修改实体状态:确定新的实体的状态, 并重新组织EDFD。
2.3 第三代:90年代中期
2.3.1 VMT (Visual Modeling Technique)
该方法结合了OMT、OOSE、RDD等方法的优点, 并且结合了可视化编程和原型技术。VMT选择OMT作为整个方法的框架, 并且采用OMT的表示方法, 但抛弃了OMT中的采用数据流图描述的功能模型, 代之以RDD方法中的CRC (Class Responsibility Collaboration) 卡片, 用它来描述对象的操作和对象间的关系。VMT 还引入了OOSE中的使用事例概念, 用来描述用户对系统的需求, 从而获得更准确的用户需求模型。
开发过程:分为分析、设计和实现3个阶段。
(1) 分析阶段:主要任务是建立分析模型, 即, 将用户需求结构化并形式化, 这个阶段的产品描述未来的系统应该做什么, 而不描述怎么去做。
(2) 设计阶段:目标是制定解决问题的策略, 为实现解决方案打下整体基础, 并寻求把设计要素转换成解决方案的切实可行的方法, 该阶段包括系统设计、对象设计和永久性对象设计。
(3) 实现阶段:用某一种环境来实现系统, 完成从对象设计模型到解决方案的影射过程。
IBM公司在提出VMT 的同时, 推出了支持VMT的可视化编程工具VisualAge , 用它可以很容易地实现设计阶段建立的模型。
3 7种面向对象分析方法的比较
3.1 根据抽象原则
每种OOA方法都使用抽象原则, 以便从系统需求获取重要部分而将次要部分忽略掉。然而, 这种原则都有不同的侧重点:
数据抽象侧重于数据方面;
过程抽象侧重于过程方面;
事件抽象侧重于系统的事件方面。
1种OOA方法所采用的抽象原则可以有1个, 2个或3个侧重点。表1列出了7种方法中抽象原则的侧重点。
3.2 比较7种方法的覆盖边界
目前, OOA和OOD方法的边界划分上尚存在着争议。如, 有人认为面向对象软件开发过程可以分为面向对象分析、面向对象设计和面向对象程序设计三个阶段;有人认为分析和设计可以交叉进行不必做严格区分;还有人沿用传统方法进行分析和设计, 用面向对象程序设计语言来实现系统。
现就上述方法的实现过程, 将其边界问题进行尝试性的划分。
4 结语
除上述方法外, 还有Beard、Firesmith、Martin-Odell等面向对象分析的方法, 但OMT方法、Coad-Yourdon方法和Booch方法被列为OO软件开发的三个重要流派。对OOA方法的分类也遵循很多原则, 如, 费翔林[15]就按照以非形式化规格说明为基础、以结构化方法为基础和以语义数据模型为基础综述了OOA方法。
总之, 在前人的基础上对面向对象分析方法进行了简单的分类、比较研究, 以期为选择面向对象方法以及创建新OOA方法提供一些依据。
摘要:将7种主要的OOA方法按照提出的年代进行划分, 并在简单介绍的基础上, 依据抽象原则和边界的划分 (面向对象分析和面向对象设计的划分) , 并对7种方法进行了比较研究, 以期为选择面向对象方法以及创建新的OOA方法提供一些依据。
关键词:面向对象分析,方法,比较
面向对象方法 篇2
(计算机科学与技术本科专业使用)
一、课程的地位、教学目的和基本要求
C++语言是一种高效实用的程序设计语言,既可进行过程化的程序设计,也可进行面向对象程序设计。本课程以介绍C++语言的基本语法为基础逐步向学生渗透面向对象的程序设计思想,要求学生掌握类的封装、数据隐藏、继承及多态等特性,领会面向对象程序设计,掌握面向对象程序设计方法,培养一定的程序设计能力,为以后各专业课程的学习打下良好的程序设计基础。
二、主要教学环节
1、理论教学 学时数:60 占全部学时数:75 %
2、实验 学时数:20 占全部学时数:25 %
3、实训 学时数:二周
三、课程内容 Ⅰ.理论部分
第一章 C++入门 2学时(1)教学目的、要求
本章要求学生掌握源程序的编辑、编译、连接和执行。了解C++程序设计语言的发展过程以及支持环境。(2)重点与难点
本章的重点和难点是源程序的编辑、编译、连接和执行。
第一节 从C到C++ 第二节 程序与语言 第三节 结构化程序设计 第四节 面向对象程序设计 第五节 程序开发过程 第六节 函数
第二章 基本数据类型与输入输出 2学时(1)教学目的、要求
本章要求学生掌握C++语言数据类型,变量及常量的声明和赋值以及输入输出函数。了解I/O流及printf和scanf输入输出的作用。(2)重点与难点
本章的重点和难点是C++语言数据类型,变量及常量的声明和赋值以及输入输出函数。
第一节 字符集与保留字 第二节 基本数据类型 第三节 变量定义 第四节 常量及常量定义 第五节 I/O流控制 第六节 Printf与scanf 第三章 表达式和语句 2学时(1)教学目的、要求
本章要求学生掌握C++各运算符与常用表达式内容,及if语句的应用。(2)重点与难点
C++各运算符与常用表达式内容,及if语句的应用。
第一节 表达式 第二节 算术运算和赋值 第三节 算术类型转换 第四节 增量和减量 第五节 关系与逻辑运算 第六节 if语句 第七节 条件运算符 第八节 逗号表达式 第九节 求值次序与副作用
第四章 过程化语句 2学时(1)教学目的、要求
本章要求学生掌握switch,while, do…while, for结构的应用,了解描述算法和穷举、迭代算法。(2)重点与难点
本章的重点和难点是循环型程序设计,即switch,while, do…while, for 2 结构的应用。
第一节 while 语句 第二节 do…..while 语句 第三节 for语句 第四节 switch 语句 第五节 switch 语句 第六节 过程应用: 求兀 第七节 过程应用: 判明素数 第八节 过程应用: 求积分
第五章 函数 2学时(1)教学目的、要求
本章要求学生掌握函数的概念、定义、调用机制,和递归、内联、重载函数的概念,以及全局、局部变量。(2)重点与难点
本章的重点和难点是函数的概念、定义、调用机制,以及全局、局部变量。
第一节 函数概述 第二节 函数原型
第三节 全局变量和局部变量 第四节 函数调用机制 第五节 静态局部变量 第六节 递归函数 第七节 内联函数 第八节 重载函数 第九节 默认参数的函数
第六章 程序结构 2学时(1)教学目的、要求
本章要求学生掌握变量的存储类型,作用域,可见性,生命期等概念。(2)重点与难点
本章的重点和难点是变量的存储类型,作用域,可见性,生命期。
第一节 外部存储类型 第二节 静态存储类型 第三节 作用域 第四节 可见性 第五节 生命期 第六节 头文件 第七节 多文件结构 第八节 编译预处理
第七章 数组 2学时(1)教学目的、要求
本章要求学生掌握数组的概念、元素的访问,及数组的应用。(2)重点与难点
本章的重点和难点是数组元素的访问,及数组的应用。
第一节 数组定义 第二节 访问数组元素 第三节 初始化数组 第四节 向函数传递数组 第五节 二维数组 第六节 数组应用: 排序
第七节 数组应用: Josephus问题 第八节 数组应用: 矩阵乘法
第八章 指针 2学时(1)教学目的、要求
本章要求学生掌握指针的概念、运算,以及指针与数组和函数的应用。(2)重点与难点
本章的重点和难点是指针的运算,以及指针与数组和函数的关系及应用。
第一节 指针概念 第二节 指针运算 第三节 指针与数组 第四节 堆内存分配 第五节 const指针 第六节 指针与函数 第七节 字符指针 第八节 指针数组 第九节 命令行参数 第十节 函数指针
第九章 引用 2学时(1)教学目的、要求
本章要求学生掌握引用的概念、操作,以及引用作为函数参数的应用。(2)重点与难点
本章的重点和难点是引用的操作,以及引用作为函数参数的应用。
第一节 引用的概念 第二节 引用的操作 第三节 什么能被引用 第四节 用引用传递函数参数 第五节 返回多个值 第六节 用引用返回值 第七节 函数调用作为左值 第八节 用const限定引用 第九节 返回堆中变量的引用
第十章 结构 2学时(1)教学目的、要求
本章要求学生掌握结构体概念及其定义,结构体变量和结构体数组的引用,指向结构体变量和数组的指针。(2)重点与难点
本章的重点和难点是结构体数组的引用,指向结构体变量和数组的指针。
第一节 结构 第二节 结构与指针
第三节 结构与数组 第四节 传递结构参数 第五节 返回结构 第六节 链表结构 第七节 创建与遍历链表 第八节 删除链表结点 第九节 插入链表结点
第十节 结构应用: Josephus问题
第十一章 类 4学时(1)教学目的、要求
本章要求学生掌握类的概念、类的定义,及成员函数的调用。了解保护成员和软件方法的发展必然。(2)重点与难点
本章的重点和难点是类的概念、类的定义,及成员函数的调用。
第一节 从结构到类 第二节 软件方法的发展必然 第三节 定义成员函数 第四节 调用成员函数 第五节 保护成员 第六节 屏蔽类的内部实现 第七节 再论程序结构
第十二章 构造函数 6学时(1)教学目的、要求
本章要求学生掌握构造、析构函数的使用,以及构造类成员和构造对象的顺序。了解重载和默认构造函数的概念(2)重点与难点
本章的重点和难点是构造、析构函数的使用,以及构造类成员和构造对象的顺序。
第一节 类与对象
第二节 构造函数的需要性 第三节 构造函数的使用 第四节 析构函数
第五节 带参数的构造函数 第六节 重载构造函数 第七节 默认构造函数 第八节 类成员初始化困惑 第九节 构造类成员 第十节 构造对象的顺序
第十三章 面向对象程序设计 4学时(1)教学目的、要求
本章要求学生掌握结构化和面向对象方法的实现。了解程序效率和维护。(2)重点与难点
本章的重点和难点是结构化和面向对象方法的实现。
第一节 抽象 第二节 分类 第三节 设计和效率 第四节 讨论Josephus问题 第五节 结构化方法 第六节 结构化方法的实现 第七节 第八节 第九节
面向对象方法 面向对象方法实现 程序维护
第十四章 堆与拷贝构造函数 6学时(1)教学目的、要求
本章要求学生掌握堆的概念,堆对象,拷贝构造函数及浅拷贝与深拷贝的应用。了解临时和无名对象。(2)重点与难点
本章的重点和难点是堆的概念,堆对象,拷贝构造函数及浅拷贝与深拷贝的 7 应用。
第一节 关于堆
第二节 需要new和delete的原因 第三节 分配堆对象 第四节 拷贝构造函数 第五节 默认拷贝构造函数 第六节 浅拷贝与深拷贝 第七节 临时对象 第八节 无名对象
第九节 构造函数用于类型转换
第十五章 静态成员与友员 2学时(1)教学目的、要求
本章要求学生掌握懂得怎样声明一个静态数据成员,怎样使用静态成员函数以及静态成员函数为什么与特定对象无关。(2)重点与难点
本章的重点和难点是静态数据成员和静态成员函数的使用,以及友元的概念。
第一节 静态成员的需要性 第二节 静态成员的使用 第三节 静态数据成员 第四节 静态成员函数 第五节 需要友员的原因 第六节 友员的使用
第十六章 继承 8学时(1)教学目的、要求
本章要求学生掌握继承的概念,工作方式,以及多态性和虚函数的概念。了解抽象类和类的冗余。(2)重点与难点
本章的重点和难点是继承的概念,工作方式,以及多态性和虚函数的概念。
第一节 继承的概念 第二节 继承的工作方式 第三节 派生类的构造 第四节 继承与组合 第五节 多态性
第六节 多态的思考方式 第七节 多态性如何工作 第八节 不恰当的虚函数 第九节 虚函数的限制 第十节 类的冗余
第十一节 克服冗余带来的问题 第十二节 类的分解 第十三节 抽象类
第十四节 由抽象类派生具体类 第十五节 纯虚函数的需要性
第十七章 多重继承 6学时(1)教学目的、要求
本章要求学生掌握多继承的概念,工作方式以及多继承的构造顺序和访问控制。了解虚拟继承、保护和私有继承。(2)重点与难点
本章的重点和难点是多继承的概念,工作方式以及多继承的构造顺序和访问控制。
第一节 多继承如何工作 第二节 继承的模糊性 第三节 虚拟继承
第四节 多继承的构造顺序 第五节 继承的访问控制 第六节 保护继承与私有继承
第十八章 运算符重载 4学时(1)教学目的、要求 本章要求学生掌握运算符重载的需要性和应用。了解增量运算符的重载。(2)重点与难点
本章的重点和难点是运算符重载的需要性和应用。
第一节 运算符重载的需要性 第二节 如何重载运算符 第三节 值返回与引用返回 第四节 运算符作成员函数 第五节 重载增量运算符 第六节 转换运算符 第七节 赋值运算符
四、主要教科书和参考书
1、《C++程序设计教程》
2、《C++程序设计题解与上机指导》
3、《C++语言程序设计》
4、《C++语言与面向对象程序设计》
5、《C++语言程序设计》
钱能 钱能
潭浩强 郑莉
吕凤翥清华大学出版社
清华大学出版社 清华大学出版社 清华大学出版社
清华大学出版社
面向对象方法 篇3
【关键词】面向对象 程序设计 发展史 UML
1 面向对象特征概述
面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。面向对象程序设计具有抽象性、封装性、继承性和多态性等特征。
抽象:指从事物中舍弃个别的、非本质的特征,而抽取共同的、本质特征的思维方式。
封装:将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。
继承:让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。
多态:指一般类和特殊类可以有相同格式的属性或操作,但这些属性或操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。
2 面向对象设计方法发展历史
在这里把面向对象方法的发展分为三个阶段:雏形阶段、完善阶段和繁荣阶段。
(一)雏形阶段
1967年挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,首先引入了类的概念和继承机制,它是面向对象的先驱。1972年Palo Alno研究中心(PARC)发布了Smalltalk-72,其中正式使用了“面向对象”这个术语。Smalltakl的问世标志着面向对象程序设计方法的正式形成。
可以说出现了面向对象语言之后,面向对象思想才得到了迅速的发展。过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,直到面向对象语言。汇编语言出现后,程序员就避免了直接使用0-1,而是利用符号来表示机器指令,从而更方便地编写程序;当程序规模继续增长的时候,出现了Fortran、C、Pascal等高级语言,这些高级语言使得编写复杂的程序变得容易,程序员们可以更好地对付日益增加的复杂性。
(二)完善阶段
PARC先后发布了Smalltalk-72、76和78等版本,直至1981年推出该语言完善的版本Smalltalk-80。Smalltalk-80的问世被认为是面向对象语言发展史上最重要的里程碑。迄今绝大部分面向对象的基本概念及其支持机制在Smalltalk-80中都已具备。它是第一个完善的、能够实际应用的面向对象语言。但是随后的Smalltalk-80的应用尚不够广泛,其原因是:
追求纯OO的宗旨使得许多软件开发人员感到不便。
一种新的软件开发方法被广泛地接受需要一定的时间。
针对该语言的商品化软件开发工作到1987年才开始进行。
(三)繁荣阶段
从20世纪80年代中期到90年代,是面向對象语言走向繁荣的阶段。其主要表现是大批比较实用的面向对象编程语言的涌现,例如C++、Objective-C、Object Pascal、CLOS、Eiffel和Actor等。这些面向对象的编程语言分为纯OO型语言和混合型OO语言。混合型语言是在传统的过程式语言基础上增加了OO语言成分形成的,在实用性方面具有更大的优势。此时的纯OO型语言也比较重视实用性。现在,在面向对象编程方面,普遍采用语言、类库和可视化编程环境相结合的方式,如Visual C++、JBuilder和Delphi等。面向对象方法也从编程发展到设计、分析,进而发展到整个软件生命周期。
到20世纪90年代,面向对象的分析与设计方法已多达数十种,这些方法都各有所长。目前,统一建模语言已经成为世界性的建模语言,适用于多种开发方法。把UML作为面向对象的建模语言,不但在软件产业界获得了普遍支持,在学术界影响也很大。在面向对象的过程指导方面,目前还没有国际规范发布。当前较为流行的用于面向对象软件开发的过程指导有“统一软件开发过程”(RUP)和国内的青鸟面向对象软件开发过程指导等。
3 面向对象设计方法应用现状
当前,面向对象方法几乎覆盖了计算机软件领域的所有分支。例如,已经出现了面向对象的编程语言、面向对象的分析、面向对象的设计、面向对象的测试、面向对象的维护、面向对象的图形用户界面、面向对象的数据库、面向对象的数据结构、面向对象的智能程序设计、面向对象的软件开发环境和面向对象的体系结构等。此外,许多新领域都以面向对象理论为基础或作为 主要技术,如面向对象的软件体系结构、领域工程、智能代理、基于构件的软件工程和面向服务的软件开发等。
4 结语
计算机软件技术的发展日新月异,在很短的时间内即涌现出了大量的软件开发工具并迅速地更新换代,给编程人员进行程序设计带来了极大的方便。在不久的将来相信面向对象程序设计技术必将应用到更多的程序中。
【参考文献】
[1] 麻志毅,著.面向对象分析与设计.机械工业出版社,2013,2.
面向对象方法学概述 篇4
面向对象方法学的出发点和基本原则, 是尽可能模拟人类的思维方式, 使开发软件的方法和过程尽可能接近人类认识世界解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的解空间在结构上尽可能一致。
2 面向对象方法学的要点
概括地说, 面向对象方法学具有以下4个要点:
⑴认为客观世界是由各种对象组成的, 任何事物都是对象, 复杂的对象可以由比较简单的对象以某种方式组合而成。按照这种观点, 可以认为整个世界就是一个最复杂的对象。由此可见, 面向对象方法用对象分解取代传统方法的功能分解。
⑵把所有对象都划分成各种对象类, 每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性, 是对象的状态信息。类中定义的方法, 是允许施加于该类对象上的操作, 是该类所有对象共享的, 并不需要为每个对象都复制操作代码。
⑶按照子类与父类的关系, 把若干个对象类组成一个层次结构的系统。在这种层次结构中, 下层的派生类自动具有和上层的基类相同的特性, 这种现象称为继承。但是, 低层的特性将屏蔽高层的同名特性。
⑷对象彼此之间仅能通过传递消息互相联系。对象与传统数据有本质区别, 它不是被动等待外界对它施加操作, 它是进行处理的猪蹄, 必须发消息请求它执行某个操作, 不能从外界直接对它的私有数据进行操作。
综上所述, 面向对象方法学可以用下列方程概括:
OO=objects+classes+inheritance+communication with messages
面向对象就是既使用对象又使用类和继承等机制, 并且对象之间仅能通过传递消息实现彼此通信。
3 面向对象的概念
3.1 对象
在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象, 它既可以是具体的物理实体的抽象, 也可以是人为的概念。例如, 一名职工、一家公司、一个窗口、一座图书馆、贷款、借款等, 都可以作为一个对象。对象是对问题域中某个实体的抽象, 设立某个对象就放映了软件系统具有保存有关它的信息并且与它进行交互的能力。
由于客观世界中的实体通常都既具有静态属性, 由于具有动态行为, 因此, 面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以作的操作表示它的动态行为, 在面向对象分析和面向对象设计中, 通常把对象的操作称为服务或方法。
3.2 类
现实世界中存在的客观事物有些是彼此相似的, 例如每个人的职业、性格、爱好等各有不同, 但是他们的基本特征是相似的, 都是黄皮肤、黑头发、黑眼睛, 于是人们把他们统称为“中国人”。人们习惯于把有相似特征的事物归为一类, 分类是人类认识客观世界的基本方法。
例如, 一个面向对象的图形程序在屏幕左下角显示一个半径为3厘米的红色的圆, 在屏幕中部显示一个半径为4厘米的绿色的圆, 在屏幕右上角显示一个半径为1厘米的黄色的圆。这三个圆心的位置、半径大小和颜色均不相同的圆, 是3个不同的对象。但是, 它们都有相同的数据和操作。因此, 它们是同一类事物, 可以用“Circle类”来定义。
3.3 实例
实例就是由某个特定的类所描述的一个具体的对象。类是对具有相同属性和行为的一组相似的对象的抽象, 类在现实世界中并不能真正存在。在地球上没有抽象的中国人, 只有一个个具体的中国人, 同样, 也没有抽象的圆, 只有一个个具体的圆。
实际上类是建立对象时使用的样板, 按照这个样板所建立的一个个具体的对象, 就是类的实际例子, 称为实例。
3.4 消息
消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。通常, 一个消息由下述3个部分组成。
接收消息的对象;
详细选择符;
零个或多个变元。
例如, My Circle是一个半径为4厘米, 圆心位于 (100, 200) 的Circle类的对象, 当要求它以绿颜色在屏幕上显示自己时, 在c++语言中应向它发下列消息:
My Circle.Show (GREEN) ;
当My Circle接收到这个消息后, 将执行在Circle类中所定义的Show操作。
3.5 属性
属性就是类中所定义的数据, 它是对客观世界实体具有的性质的抽象。类的每个实例都有自己特有的属性值。在c++语言中把属性称为数据成员。例如, Circle类中定义的代表圆心坐标、半径、颜色等的数据成员, 就是圆的属性。
3.6 封装
从字面理解, 所谓封装就是把某个事物包起来, 使外界不知道该事物的具体内容。
在面向对象的程序中, 把数据和实现操作的代码集中起来放在对象内部。一个对象好像是一个不透明的黑盒子, 表示对象状态的数据和实现操作的代码与局部数据, 都被封装在黑盒子里面, 从外面是看不见的, 更不能从外面直接访问或修改这些数据和代码。
使用一个对象的时候, 只需知道它向外界提供的接口形式, 无需知道它的数据结构细节和实现操作的算法。
3.7 继承
广义地说, 继承是指能直接获得已有的性质和特征, 不必重复定义它们。在面向对象的软件技术中, 继承是子类自动共享基类中定义的数据和方法的机制。
面向对象软件技术的许多强有力的功能和突出优点, 都来源于把类组成一个层次结构的系统:一个类的上层可以有父类, 下层可以有子类。这种层次结构系统的一个重要性质是继承性, 一个类直接继承其父类的全部描述。
当一个类只允许有一个父类时, 当类等级为树形结构时, 类的继承是单继承;当允许一个类有多个父类时, 类的继承是多重继承。多重继承的类可以组合多个父类的性质构成所需要的性质, 因此功能更强、使用更方便。有了继承性以后, 还可以用把已有的一般性的解加以具体化的办法, 来达到软件重用的目的:首先, 使用抽象的类开发出一般性问题的解, 然后在派生类中增加少量代码使一般性的解具体化, 从而开发出符合特定应用需要的具体解。
3.8 多态性
多态性指有许多形态, 在面向对象的软件技术中, 多态性指子类对象可以像父类对象那样使用, 同样的消息既可以发送给父类对象也可以发送给子类对象。在类等级的不同层次中可以共享一个行为的名字。不同层次中的每个类却各自按自己的需要来实现这个行为。当对象接收到发送给它的消息时, 根据该对象所属于的类动态选用在该类中定义的实现算法。
在C++语言中, 多态性是通过虚函数来实现的。在类等级不同层次中可以说明名字、参数特征和返回值类型都相同的虚拟成员函数, 不同层次的类中的虚函数实现算法各不相同。虚函数机制使程序员能在一个类等级中使用相同函数的多个不同版本, 在运行时刻才根据接收消息的对象所属于的类, 决定到底执行哪个特定的版本, 这称为动态联编。
多态性机制不仅增加了面向对象软件系统的灵活性, 进一步减少了信息冗余, 而且显著提高了软件的可重用性和可扩充性。当扩充系统功能增加新的实体类型时, 只需派生出与新实体类相应的新的子类, 并在新派生出的子类中定义符合该类需要的虚函数, 完全无需修改原有的程序代码, 不需要重新编译原有的程序。
3.9 重载
有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。当参数特征不同或被操作数类型不同时, 实现函数算法或运算符的语义是不相同的。在C++语言中函数重载是通过静态联编实现的, 在编译时根据函数变元的个数和类型, 决定到底使用函数的哪个实现代码;对于重载的运算符, 同样是在编译时根据被操作数的类型, 决定使用该算符的哪种语义。
4 小结
面向对象方法 篇5
面向对象的知识管理系统分析方法的探讨
该文通过应用面向对象的.系统分析方法对知识管理系统进行分析,提出了知识管理系统的主要实体对象及接口对象、控制对象之间的关系,为中小企业开发知识管理系统,解决系统分析-系统设计-系统实现的自然过渡提供一个带有共性的解决方案.
作 者:彭建平田宇 作者单位:中山大学管理学院,广东,广州,510275刊 名:中山大学学报论丛英文刊名:SUN YATSEN UNIVERSITY FORUM年,卷(期):22(2)分类号:F27关键词:知识管理 系统分析 企业
面向对象方法 篇6
31重视上机实践及习题
做习题是对所学内容进行复习的重要过程,还是深入学习的必要过程。每次课程讲授之后,教师均应当将有着较强代表性的一些习题布置给学生,以此对课堂上所学习到的内容加以巩固。还可以借助于学生作业的具体情况来了解学生掌握课程内容的程度。对于作业中普遍出现的错误,则需要教师当堂讲解,以便于让学生掌握牢靠、理解透彻。与此同时,学生作业中所出现的新颖新奇的程序设计思路及方法,也需要做好作业批注,并且当堂宣讲,鼓励学生勇于迸发出创新的火花。
32激发学习兴趣
为了能够使学生较快及较好的掌握相关方面的计算机知识,真正的融入计算机领域,教师应当尤其重视学生学习兴趣的调动及培养。在接触计算机的最初阶段,相当一部分学生仅仅是感到好玩、新奇,但并非是对此有兴趣,而逐渐地随着课程的持续深入,大量的要求、定义、规则、概念以及机械化格式的出现,非常容易使得学生有乏味枯燥的感觉產生。为了能够将学生的好奇向学习兴趣转化,那么在课程讲解中要注意着手于具体问题,使学生从感性上对新知识加以认识,然后再对理论要点进行讲授。比如,在首次课上,教师可以找已学的一些《线性代数》、《高等数学》等课程的问题,要求学生采取算法语言来予以求解,以这样的方式使学生对程序设计的用途加以切身体会,最重要的是掌握全新的一种问题的解决方法。在课程讲授的过程中,教师还要积极的引导学生学习一类算法,并且在同行课程中尝试应用。另外,教师还可以向学生经常性的介绍趣味性的一些算例,比如“迷宫问题”等,以此将学生的学习兴趣培养起来,促使学生主动积极的学习与获取知识,从而将程序设计基础打好。
面向对象方法 篇7
关键词:UML,测试用例,类测试,面向对象,状态图
1 引言
面向对象软件测试的主要目标与传统软件测试目标相同,既是用最小的工作量发现最多的错误。由于面向对象所独有的多态、继承、封装等新的特点,使面向对象测试的策略和技术与传统测试有所不同,测试的视角扩大到包括复审分析和设计模型,测试焦点从模块转向类。类是构成面向对象程序的基本成分,类的测试无疑成为面向对象测试的重要环节。基于对象状态的测试是根据被测试的类的对象所处的状态以及状态之间的转移来构造测试用例,它侧重于对象的动态行为,这种动态行为依赖于对象状态。测试对象动态行为能检测出对象成员函数之间通过对象状态进行交互式产生的错误。
2 基于对象状态的测试方法的发展
现在面向对象测试中基于对象状态的测试方法一般是采用扁平状态机和状态迁移图。扁平状态机能很好的提示出一些类中的错误,但是随着类的状态属性的增加,对象状态的数目会迅速膨胀,大大增加测试的复杂度。状态转移图用于刻画对象响应各种事件时状态发生转移的情况,容易借助于自动机理论来选择测试时所用的时间序列和预测对象的状态变化结果序列,但是,它难于描述继承的对象动态行为、并发的动态行为以及由数据成员和成员函数构成的对象状态和对象状态转移。基于UML的状态图可以很好的描述对象动态行为、并发的动态行为,可以把状态的复杂度控制在和状态属性相关的线性级别,下面我们主要介绍利用UML状态图如何描述对象动态行为、并发的动态行为,以及如何产生测试用例。
3 UML状态图
UML状态图(State Diagram)是UML中对系统的动态行为进行建模的表示方法,它包括对反应型对象的行为建模。它展现了对象生命周期内可能处于的状态以及在这些状态间转换的激发条件。UML状态图中引起状态迁移的原因通常有两种,一种是在状态图中相应的迁移上未指明事件,这表示当位于迁移箭头源头的状态中的内部动作全部执行完后,该状态迁移被自动触发;另一种是,当出现某一事件时会引起状态的迁移,在状态图中把这种一起状态迁移的事件标在改前一的箭头上,如图1。
状态迁移的形式化语法为:
event_signsture[guard_condition]/action_expression^send_clause
其中事件特征event_signsture是由事件名后括号括起来的参数表组成,它指出触发迁移的事件以及与该事件相连接的附加数据。guard_condition警戒条件是一个布尔表达式,如果状态迁移中既有事件又有警戒条件,则表示仅当这个事件发生并且警戒条件为真时,触发状态迁移。动作表达式action_expression是一个触发状态迁移时可执行的过程表达式,表达式中可引用该状态所拥有的对象中的属性、操作或事件特征中的参数。发送子句send_clause是动作的一种特殊情况,用来说明在两个状态的迁移期间发送的消息。
UML状态图的优点在于它支持嵌套和并发。UML状态图中包含基本状态(basic state)和复合状态(composite state),复合状态分为或状态(or-state)和与状态(and-state)。或状态的子状态之间是相互排斥的或关系,表示在任一时刻这些子状态中只有一个子状态为真;与状态的子状态之间是并发的非相互排斥关系,与状态表示一个状态可以有多个并发的子状态,并发子状态之间用虚线分隔,用虚线分隔的每个区域表示一个并发的子状态。把状态属性看成并发的子状态,从而可以把状态图的复杂度控制在线性级别上。并发状态图中一个事件可能引起多个子状态的状态迁移。如图2中的CVM就是一个或状态,它的子状态OFF和ON之间是相互排斥的关系,ON状态就是一个与状态,当处于ON状态时,就意味着同时处于COFFEE和MONEY两个子状态。
由于UML状态图支持嵌套和并发,这就使得它比以往的状态转移图能更好的描述继承的对象动态行为、并发的动态行为以及由数据成员和成员函数构成的对象状态和对象状态转移。UML状态图中可以包含复合状态这就使得它可以把状态的复杂度控制在和状态属性相关的线性级别。下面我们讨论如何从UML状态图构造一棵复合状态测试树。
4 构造复合状态测试树
与以往的测试树不同的是复合状态测试树的每个节点代表对象的复合状态既对象的各个属性的集合,边表示状态间的迁移,根节点代表对象的初始属性集合。
构造一个队列queue来存放复合状态测试树的各个节点。
1)把UML状态图的起点读入队列queue。
2)以UML状态图的起点定义根节点Test Tree root,同时把节点标识tree Node置为对象的初始状态,nodelevel置为0,t和child Tree置为NULL,把root放入队列中。
3)取队列头部的节点设为head,搜索从head节点所对应的状态(head.tree Node)发出的状态前移以及前移置的目标状态,分别填充head.t和head.child Tree,即把迁移至的状态作为head的子节点;同时置好各个子节点的属性值,node Level=head.node Level+1,从root节点开始层次遍历测试树(从第0层至head.node Level层),如果在head的子节点中存在某个节点n,其所对应的状态已经在第0层至head.node Level层中出现过,则该节点n不再扩展,即为叶子节点。把其他没有出现过的子节点加入到队列的尾部。
4)head指向队列中的下一个节点,重复第二步,直至队列为空。
在3)中,如果某个迁移对应的目标状态已经在测试树中出现过,就不再考虑这个状态,不加入到队列尾部。这样有效地避免了重复构造节点,同时又不降低测试的覆盖率。通过上述步骤就可以构造出UML状态图对应的测试树。
复合状态树构造算法能很好的支持多个并发的子状态的情况,只是节点表示为并发子状态的合集;如果某个事件触发其他事件从而引起一系列的状态迁移时,只要把最终的状态作为节点加入到测试树中。比以往的插入桩模块更容易实现。
通过测试树可以很容易的构造出测试用例。从根节点开始沿着各个分支往下知道叶子节点,每条这样从根节点开始到某个叶子节点结束的路径上的事件按顺序组合在一起,就成为基于对象状态测试的一个测试用例。如果增加对象属性可以很容易的在复合状态测试树中增加,增加属性后可以把状态的复杂度控制在和状态属性相关的线性级别,测试时不仅可以单独的对对象的每一个属性和所有属行进行测试,也可以对对象的所有属性任意选择组合进行测试。大大增加了测试的灵活性。
5 结束语
UML的状态图支持潜逃和并发,把状态的复杂度控制在和状态属性相关的线性级别;其次UML状态参数图是在面向对象软件开发的生命周期中的早期设计阶段确定的,是对对象状态的完整的描述,并不依赖于源代码,既保证了状态描述的完整性,又可以在开发早期进行测试,尽早发现与状态相关的错误,避免将错误带入到后面的开发阶段。因此可以用UML的状态图来产生有效的测试用例,这大大提高了测试的灵活性和有效性。
参考文献
[1]张克东,庄燕滨.软件工程与软件测试自动化教程[M].北京:电子工业出版社,2002.
[2]刘金艳,蔺娟茹,尹治本.面向对象软件测试的探讨[C]//2002年全国软件与应用学术会议(NASAC)论文集.北京:机械工业出版社,2002:262-266.
[3]杨小平.面向对象软件测试探讨[J].计算机工程与应用,2000,36(1):44-46.
[4]姬莹,罗钧昊,钟联炯.面向对象软件测试主要问题的探讨[J].西安工业学院学报,2001(1).
[5]Fewster M,Graham D.软件测试自动化技术与实例详解[M].舒智勇,译.北京:电子工业出版社,2000.
[6]叶仁召,郑玉墙,鲁汉榕.面向对象软件测试及度量的研究[J].计算机工程与设计.2001,22(4):21-24.
常用面向对象软件工程方法探讨 篇8
关键词:常用,面向对象,软件工程方法
近年来, 随着科技的进步和时代的发展, 面向对象软件工程也越来越受到人们的关注。软件开发方法能够使用已有的符号来组织软件的生产, 目的是在规定的人力财力和时间内开发出符合要求的软件。面向对象软件工程则是指以对象为中心, 同时以一种人们更容易理解的方式和方法来面对现实中存在的问题并开发相应的软件予以解决, 它是面向对象方法在软件工程领域的完美结合和充分运用为软件工程研究领域带来了一种全新的思路和方法, 对软件工程领域来说是不可多得的好工具。面相对象软件工程方法的形成是循序渐进的, 从在面相对象程序设计语言中体现基本思想到融汇于分析和设计方法, 在几十年里, 面相对象软件工程方法得到了飞速的发展。如今的面向对象软件工程方法的主要内容包括问题域、自然语言、面对对象的编辑语言等方面。本文基于前人研究的基础, 对常用的面向对象软件工程方法进行了探讨。
一面向对象分析
面向对象分析是目前软件生产开发企业广泛使用的一种技术, 英文简称OOA, 由标识对象、标识结构、定义主题、定义属性 (及实例连接) 、定义服务 (及消息连接) 五个主要步骤组成。这种方法仍然以对象为中心, 要求把问题领域以类或对象等进行分类, 然后分别找出这些对象的特点以及彼此间的关系, 由此建立一个能够解决问题的统一规格的详细说明。
(一) 面向对象分析的优点
作为现代软件生产开发的使用频率较高的重要技术之一, 面向对象分析必然拥有其不可替代和模仿的优势。以下便列举几项:一、面向对象分析注重对问题领域的理解和认识, 有利于问题的解决;二、它灵活方便, 能够在当前实际运行分流和分析化的分流之间出现差异时进行调整以适应变化;三、它没有分裂属性与专用属性的服务, 而将它们视为统一的整体, 更为完整明了;四、它使用对象之间依赖性最小的自包含分块进行说明和分析, 能够使软件更为具体深刻易懂, 等等。
(二) 面向对象分析的具体操作过程
一、绘制生成使用用例图。用例是能够在系统会话中完成的与用户使用系统行为相关的事物序列。用例之间存在三种关系:角色与用例之间的接、用例之间的使用和扩展以及通过角色的执行来识别不的用例;二、绘制构建系统的静态模型。包括类图、对象图等图形的静态模型反映了软件系统中各种对象的类型以及彼此间的静态关系, 不言而喻, 静态模型也是以对象为中心构建的, 这也是类图、对象图等图形之间最大的共同点;三、绘制构建系统的动态模型。事物发展的过程中总是包含了动态和静态两种过程, 动静结合, 二者相互联系相辅相成、不可分割。同样的, 面向对象分析中有静态模型, 就有动态模型, 它保险系统执行时的各种序列状态以及交互关系表现的系的行为。相对于静态模型对各种对象的特点类型的描述, 动态模型是对系统活动及动态合作关系等的描述。
二面向对象设计
面向对象设计独立于编程语言描述软件设计, 同样是灵活而又便利的。它建立在对“面向对象”的深入全面理解和认识的基础之上, 解决类与互相通信的对象之间的组织关系, 它与面向对象分析之间具有同样的概念、原则和表示方法, 二者相辅相成, 不可分割和剥离。面向对象设计的具体过程如下:
(1) 对象行为和对象间交互作用的进一步细化。
(2) 用例的设计和实现。在面向对象分析中生成使用用例图的操作和步骤让我们对用例有了一定的了解, 然而那只是从系统的外部展现系统的功能, 并不全面。作为一种完善和补充, 面向对象设计中的用例设计实现了系统内部的对象与外部功能相互作用和适应配合。
(3) 细化分析阶段的交互图、状态图、活动图。
(4) 确定系统可重用的类或部件。
(5) 用构件图描述代码部件的物理构及相互之间的依赖关系。
(6) 用配置图描述软硬件的物理系结构。面向对象分析是直接地对问题领域进行观察、分析, 使系统能够直接映射出问题领域, 维持问题领域中对象的完整性与真实性, 而面向对象设计则对面向对象设计所作出的对象模型进行抽象化和归纳化, 生成直观的归纳性的图形, 使对象模型得以概括和升华。从这个角度来看, 面向对象设计是数据的细化和抽象化过程, 是面向对象软件工程方法中重要的工具和方法。
三总结
综上所述, 面向对象软件工程方法将面向对象的思想应用于软件开发过程的方法和工具, 它的主要思想是建立在对象的基础概念之上即以对象为中心进行系统研究和开发。虽然面向对象软件工程方法存在着一些缺陷和不足, 但是相比于传统的软件工程方法, 面向对象软件工程方法具有更多的优点, 瑕不掩瑜, 面向对象软件工程方法突出了人的思维逻辑, 改变了传统软件工程方法过于机械话的缺点, 更为现实和具体, 更加有利于人们对软件工程方法的认识和理解, 提高软件生产的效率和效果, 为软件开发领域提供了一种新思路新方法。不言而喻, 面向对象软件工程方法的研究和开发能够为软件开发领域带来极大的便利, 但是这个工具的建立并不是一朝一夕就能完成的, 而是一个漫长而又复杂的工程。路漫漫其修远兮, 在各方的不断努力投入和合作下, 面向对象软件工程方法的完善指日可待。
参考文献
[1]丘威, 李代平.基于面向对象软件工程方法的CAI开发与实现[J].黑上饶师范学院学报 (自然科学版) .2003 (3) [1]丘威, 李代平.基于面向对象软件工程方法的CAI开发与实现[J].黑上饶师范学院学报 (自然科学版) .2003 (3)
面向对象的设计思想和方法初探 篇9
面向对象是一种思想。马克思主义哲学在开篇就定义到:“世界是物质的, 物质是运动的”。前半句话就是面向对象的体现, 把世界万物都作为对象来考虑。
目前, 面向对象的思想已经涉及到软件开发的各个方面。例如:面向对象的分析 (OOA, Object Oriented Analysis) , 面向对象的设计 (OOD, Object Oriented Design) 以及我们经常说的面向对象的编程实现 (OOP, Object Oriented Programming) , 这些都已经深深的融入到我们的学习和生活中。用面向对象方法建立模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段, 其中:知性思维是从感性材料中分解对象, 抽象出一般规定, 形成了对对象的普遍认识。具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律, 其目的是把握具体对象的多样性的统一和不同规定的综合。
面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会。这些对象具有足够的智能, 能理解从其他对象接受信息, 并以适当的行为作出响应。允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法, 将所模拟的现实世界中的事物直接映射到软件系统的解空间。
2. 面向对象设计思想所必备的三大基本原则
开发程序就离不开编程语言及编程方法也即编程思想。支持部分或绝大部分面向对象特性的语言即可称为基于对象的或面向对象的语言。早期, 完全面向对象的语言主要包括Smalltalk等语言, 目前较为流行的语言中有Java、C#、C++、Eiffel、Ada95等。随着软件工业的发展, 比较早的程序设计语言在近些年的发展中也纷纷吸收了许多面向对象的概念, 如C++、C#就是由C语言发展起来的。
在面向对象程序设计中, 有三个必须要遵循的基本原则。它们是封装、继承和多态性编程思想。
2.1 封装
封装就是把客观事物封装成抽象的类, 并且类可以把自己的数据和方法只让可信的类或者对象操作, 对不可信的进行信息隐藏。
为了让人们更深刻的从理解它的本质, 拿笔者最喜爱的, 也是当今十分流行的魔兽争霸游戏的英雄来举例:
其实非常简单, 在你撰写代码的时候, 你一定有过把一个变量声明为Private的经历吧?但是你不希望外部世界来污染它——这就是封装。在一个类中, 它的内部变量 (你也可以直观地把它们认为是属性) 默认下是隐藏于外部世界的。如果你要操作一个类, 请直接告诉他你想让它做些什么吧——至于它是怎么做到的, 这个你没权利了解的。玩家你在玩魔兽争霸的时候, 有这样的经历, 英雄的那些属性, 譬如生命值、魔法值、攻击力值、护甲值等等, 其实就是被封装在每个英雄的类里的。我们是通过什么读取这些属性值的呢?那是因为这些类提供给了我们读取属性的接口。假如你想读取或设置大法师的魔法值, 你在不知不觉中经历了以下这几个步骤的。首先, 你对对大法师说:“大法师, 我要看你对魔法值, 可以吗?”他回答到:“我的魔法值显示在我的状态栏上, 你自己去看啊。至于我是怎么把我的这些值公布出来的, 你无权知道。”然而当你想从状态栏上直接修改他的魔法值时。他会说到:“我不提供这样的服务!得和魔法药水才可以。”喝魔法药水便是另一个和魔法值挂了钩的方法, 你可以通过这个接口修改魔法值了。这样的接口起到了约束使用者的目的, 避免了数据被非法污染, 实现了封装的初衷。
2.2 继承
面向对象编程 (OOP) 语言的另一十分重要的原则就是“继承”。继承是指这样一种能力:它使用现有类的所有功能, 并且在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。继承的过程, 就是从一般到特殊的过程。
要实现继承, 可以通过“继承” (Inheritance) 和“组合” (Composition) 来实现。在某些OOP语言中, 一个子类可以继承多个基类。但是一般情况下, 一个子类只能有一个基类, 要实现多重继承, 可以通过多级继承来实现。继承概念的实现方法有三类:实现继承、接口继承和可视继承。
使用基类的属性和方法而无需额外编码的继承是实现继承;
使用属性和方法的名称、而子类必须提供实现的继承是接口继承;
子窗体 (类) 使用基窗体 (类) 的外观和实现代码的继承是可视继承。
在使用继承时, 要注意一点, 那就是两个类之间的关系应该是“属于”关系。例如, Employee是一个人, Manager也是一个人, 因此这两个类都可以继承Person类。但是Leg类却不能继承Person类, 因为他并不是一个人。
2.3 多态性
在面向对象程序设计中, 多态性是指不同但相似的对象接收到同一消息会导致完全不同的结果。多态性 (polymorphisn) 是允许你将父对象设置成为和一个或更多的他的子对象相等的技术, 赋值之后, 父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说, 就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态, 有二种方式, 覆盖, 重载。
覆盖, 是指子类重新定义父类的虚函数的做法。
重载, 是指允许存在多个同名函数, 而这些函数的参数表不同 (或许参数个数不同, 或许参数类型不同, 或许两者都不同) 。
其实, 重载的概念并不属于“面向对象编程”, 重载的实现是:编译器根据函数不同的参数表, 对同名函数的名称做修饰, 然后这些同名函数就成了不同的函数 (至少对于编译器来说是这样的) 。如, 有两个同名函数:function func (p:integer) :integer;和function func (p:string) :integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用, 在编译器间就已经确定了, 是静态的 (记住:是静态) 。也就是说, 它们的地址在编译期就绑定了 (早绑定) , 因此, 重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后, 父类指针根据赋给它的不同的子类指针, 动态 (记住:是动态!) 的调用属于子类的该函数, 这样的函数调用在编译期间是无法确定的 (调用的子类的虚函数的地址无法给出) 。因此, 这样的函数地址是在运行期绑定的 (晚邦定) 。结论就是:重载只是一种语言特性, 与多态无关, 与面向对象也无关!
3. 结束语
正是面向对象程序设计具有封装、继承和多态性编程思想, 使它能非常准确地模拟现实世界中的各种问题, 编程者也可以方便地共享现有的的软件资源和程序代码, 从而大幅度降低开发成本、提高开发效率。其实, 不仅仅在程序设计方面, 面向对象也在不断向其他阶段渗透。综上, 面向对象对程序设计的影响是巨大的, 面向对象的出现是必然的, 就算这段历史重来十次, 一百次, 乃至一千次, 面向对象仍然会应运而生, 并一定可以在新的未来继续发展, 成熟, 开枝散叶。
摘要:论述了面向对象编程思想, 以及与面向对象设计语言的关系。以目前流行的魔兽争霸游戏为切入点, 介绍性的概述了面向对象的程序设计的三大基本原则:封装、继承和多态性思想精髓及特点, 简述了面向对象程序语言的软件开发周期。
关键词:面向对象,封装,继承,多态性
参考文献
[1]杨芙清.面向对象的系统分析[M].北京:清华大学出版社, 1998-05
[2]印鹏.Java语言与面向对象程序设计[M].北京:清华大学出版社, 2000-02
[3]刘艺.Delphi面向对象编程思想[M].北京:机械工业出版社, 2003.2
[4]Ian Graham.袁兆山译.面向对象方法原理与实践[M].北京:机械工业出版社, 2003-01
[6]刘正林.Java技术基础[M].武汉:华中科技大学出版社, 2002
软件工程中面向对象方法研究 篇10
1.1 软件工程的定义
软件工程是一门用来进行分析和研究选择使用工程化的方式对软件进行建立并进行维护的学科。它比较实用, 用起来也比较有效且其质量也比较高。它涉及的领域非常广, 有程序设计语言、对软件的开发以及数据库的构建等方面。
所谓软件生命周期, 其实就是软件从开发到使用, 再到退出历史舞台的过程。软件生命周期划分成三个阶段, 即对软件的定义、开发和运行维护。一般对软件过程进行描述都是对生命周期模型加以利用, 也就是将生命周期都分成了一些阶段, 而且每一阶段相应的执行序列都给制定好, 所以, 此模型又称为过程模型。
1.2 软件的发展
伴随着计算机的普及, 人们对软件的需求量更大, 刚开始, 软件是以比较简单的程序模式呈现在人们的生活中的, 这时还不是真正的软件, 只是能完成比较简单的任务, 还没真正深入到人们的生活, 大多数行业还是以手工操作为主。计算机的出现和迅速发展, 给人们的生活带来了翻天覆地的变化, 相应的也带动了软件的发展。新技术的出现和发展都是为了满足人们的生活需要, 就拿计算机来说, 它的出现及发展, 给人们的工作和生活带来了极大的便利, 使工作效率得到有效提高, 使得时间和经济成本被节省出来, 由此为软件朝着多样化、专业化以及个性化发展打下了坚实的基础。主要体现在:
(1) 由于软件不是具体的物品而是逻辑产品, 因此, 从费用上看, 其主要的费用是研制开发的费用。虽然软件不会磨损用坏、老化, 但是经过一段时间后他会因为落伍而退役。
(2) 因为软件实际上是一种逻辑产品, 所以要体现出他的功能就得依靠硬件与软件共同工作的环境和操作人员的操作。
(3) 对于软件产品来说, 其所具有的功能要比别的产品更加的复杂。
(4) 对软件进行设计, 比别的产品更加的复杂, 因为他需要功能具有多样性, 其实现也具有多样性。
2 面向对象软件工程
面向对象软件工程就是采取面向对象方法, 与人类认识规律相符的某一软件工程。从上世纪80年代开始, 人们开始把面向对象进行分析与设计的探讨重视了起来, 让面向对象软件工程方法学得以日益形成。面向对象方法具有以下优势:
(1) 从认知学上讲, 面向对象方法与人们对客观世界的认识规律是相符的, 长期以来, 人们在对一个软件系统进行研究、设计、完成的整个程序跟人们对一个系统的充分认识之间有很大的差别。
(2) 开发出来的软件系统维护起来比较容易, 软件系统所具有的结构比较容易理解、扩展以及更改。针对对象方法开发的那些软件系统, 其构成部分一般是对象类, 对象所具有的封装性把抽象以及信息隐蔽所具有的特性给淋漓尽致地表现了出来。
(3) 面向对象方法中所包含的继承机制对软件的服用进行了大力的支持。
OO方法的先进机制和能力:
OO方法是以OO定义当做理论基础而开发出来的提出的, 它的特点有以下几种:
(1) 抽象性。
抽象是把我们实际生活里比较复杂的事物给具体化, 用比较精炼而且简单的手段来反应出他在计算机的发展过程里发挥了巨大的作用, 程序设计语言简单地说是通过不断发展以及发展的相关手法而产生的。具体表现为: (1) 抽象表达能力非常强; (2) 所具有的抽象的数据类型, 使得对象级上比较高层次的抽象得以达到。
(2) 封装性。
封装的基本含义有以下几点:
(1) 明确清晰的范围以及外部边界在其软件的所有构成部件的里面都是需要具备的; (2) 让部件彼此相互联系以及作用得以达成, 应该使每一个部件装有比较好的接口得以确保; (3) 因为部件里面的设计以及实现是不知道的, 因此, 软件的质量以及可靠性就显得至关重要, 但是OO方法里面的类是封装良好的模块, 以对象当成封装的组成单位的特性恰是供应了此种完好的封装机制。
(3) 继承性。
继承性是OO方法的独特之处。继承性显示并引申了OO方法的共享机制。此外, 相异的类或者对象中间横向共享机制大部分是通过多重继承性得以达成的。目前软件向开放体系结构发展, 对系统进行开发的时候其接口必须采取公用的, 让信息之间的交换以及共同享用从而达成。OO方法的继承性恰好是从概述到详尽、普通到特别、抽象到具体, 充分采用现有的系统或建好的类实施引申或者是更改, 来建立属于本身的新系统, 让软件系统所具有的开放性得以实现, 让工作量得以简化, 使软件所具有的重用能力得以提高。
(4) 多态性。
多态性其实就是选择一个相关的操作名称把那些数据类型不一样的多种多样的操作都得以实现, 多态性得以实现的方法有:运算负重载和函数名重载等因为多态性所具有的特点, 使得软件的灵活性以及重用性得到了有效的强化。
3 面向对象方法的核心问题
面向对象方法与结构化方法一样, 其核心问题也是模型问题。
OOA模型:
OOA关心的是构建现实世界的模型问题。如何解决现实世界的建模问题呢?根据系统科学的思想, 首先需要对复杂的系统进行分解, 最常用的分解方法就是分层。采用P.Coad和E.Yourdon的分层方法将OOA模型划分为5个层次, 即:主题层、对象层、结构层、属性层和服务层。OOA的主要任务就是要在问题域上构建具有这5个层次内容的OOA模型。
(1) 主题层。
主题提供OOA模型中各图的大体情况, 分析员跟客户就可以在这个平台上进行交流, 这样利于人们对复杂系统的模型构成进行很好的理解。
(2) 对象层。
对象属于属性和专用服务相结合的封装体之一, 就是抽象地对此领域的人、事、物等比较具体客观的事物做详细的描述。类把对象给构建了出来, 类所描述的是一个或者是多个的事物, 所有描述的事物都能用相同的属性及服务进行描述。
(3) 结构层。
在OO方法里, 组装结构与分类结构是比较重要的2种结构, 两种结构分别对“整体与部分”组织和“一般与特殊”组织进行描述。组装结构一般对人类思维大都选择的第2个基本法则来遵循, 就是把整体对象跟整体对象的组成部分给有效的区别开来。分类结构 (即一般与特殊) 遵循了人类思维普遍采用的第3个法则, 在OO方法中, 是类、成员和它们之间的区别。
(4) 属性层。
属性就是对于一个对象的抽象刻画描述类里面的任何对象都含有它应有的属性值, 属性值简单的说就是信息数据, 但这些信息数据是有状态的。
(5) 服务层。
服务层其实是接到一条信息后对信息进行相应的处理的层, 服务其实是把现实事物进行抽象的模型化。
参考文献
[1]董剑利, 牛兰庆.面向对象的方法及其精髓[J].甘肃教育学院学报 (自然科学版) , 1999, (02) .
面向不同对象的双语教学探索 篇11
摘 要: 文章结合电磁场与电磁波双语课程,论述了专业课程双语教学,在面向普通高等院校学生与中外合作项目学生时,其目标、性质、教学模式区别,以及在实施过程中遇到的问题和解决办法。
关键词: 双语教学 普通高等院校学生 中外合作 教学模式
引言
国家为了推动高等教育与国际接轨,鼓励高校开展双语课程教学历来已久。全国开设双语课程教学的高校非常多,研究双语课程教学模式的学者也很多。高校中双语课程实施的对象可分为两类,一类是普通高等院校学生,包括本科生与研究生;另一类为中外合作办学学生。面向这两类学生,在实施双语课程教学时,教学的性质、目标、教学方法都有所不同。
“电磁场与电磁波”是电子信息类专业和通信工程类专业一门重要的专业基础课程,也是“微波技术”和“光纤通信”等课程的基础。其内容在移动通信、微波通信、光纤通信、射频电路、高速集成电路等相关领域有着广泛而深入的应用。本文以“电磁场与电磁波”双语课程教学为例,分析普通双语课教学与中外合作中双语课程教学的区别。
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.
面向对象方法 篇12
面向对象程序设计课程是计算机科学与技术专业的专业课, 理论性和操作性较强。教授学生基础的编程理论以及面向对象的编程方法, 通过本课程的学习, 可以有效的培养学生的编程逻辑思维能力和动手编程的能力, 并可以帮助学生提高编程中必备的合作能力。
该课程在教学中存在以下问题, 首先, 课程学时较少, 但需要教授的知识点较多, 有些语法较为复杂, 学生很难在有限的时间内很好的掌握;对学生只能做到基本理论知识的教授, 而很难再进一步, 让学生理解的更为透彻。其次, 在教学方法上, 基本都以小程序为例去讲解一些主要的理论知识点, 帮助学生理解。但学生的主观能动性无法很好的激发, 导致离开例子, 学生无法很好的编写程序, 或者无参考情况下, 无法独立完成基本程序的编写。
针对面向对象课程教学问题中存在的问题, 国内许多教学工作人员对该课程如何达到更好地教学效果, 培养实践能力和编程能力强的学生进行了研究。范振钧[1]提出了基于任务驱动的教学方法, 以解决问题为导向, 协助学生完成程序的编写, 在编写程序的过程中掌握知识。李玉梅[2]将案例驱动教学、多媒体教学、研究型学习三种方法结合起来, 试图提高学生学习的兴趣, 培养学生编程的逻辑思维能力, 加强学生的动手能力, 试图提高学生的整体水平。张焕生[3]提出了面向对象程序设计教学中理论教学、时间教学在方式、内容和考核方式等方面进行改革的相关措施, 以提高教学质量, 培养合格人才。
以上提出的教学改革方法中主要侧重于教师教学方法的改变, 以及考试改革, 但是对于面向对象程序设计这样一门对理论性和实践性要求都较高的课程来说, 如果不充分调动学生课下的学习积极性, 很难取得良好的教学效果。如何调动学生对该课程的学习积极性, 不要从一开始就掉队, 直接产生对课程的“讨厌感”非常重要。
因此, 除了对教学方式提出一些必要的教学改进之外, 主要是调动学生的学习积极性, 首先给学生提供有一个宽松的学习环境, 进行由浅入深, 由易到难, 由慢到快的循序渐进式的学习, 保证学生在学习课程的过程中不掉队;其次, 通过解决实际问题、课后开放趣味性实践作业、网络幕课讲解课堂知识点等方法提高学生对该课程的兴趣, 加强学生通过编程解决实际问题的成就感以全面提高教学质量。
2. 教学方法
针对该门课程存在的问题, 提出了四化教学方法, 通过教学内容“例题化”增加了学生的感性认识, 增强了学生面对问题求解的信心, 以便加深对知识的理解;通过教学形式“多样化”提高学生编程能力、逻辑编程思想;通过教学策略“分层化”帮助学生不断加深对面向对象程序设计的认识和理解, 循序渐进提高编程能力;通过教学过程的“阶段化”培养学生一步一步独立编程及团队合作编程的能力。最终希望学生通过上述方法的学习, 可以较好的掌握面向对象编程的方式, 方法, 具有较好的动手编程能力和团队合作能力。
(1) 内容例题化, 教学内容的设计必须以实例求解为主线索, 且实例必须贴近生活中可能需要解决的事情, 体现分析、设计能力的培养。针对书中每个重要的理论只是, 选择合适的编程题目, 从简单到复杂的传授给学生, 拿到问题, 如何分析, 如何设计, 以及如何编程解决的能力。以此提高学生抽象问题, 解决问题的能力。具体内容要从“实例”引导人手, 将枯燥的概念和公式融入到形象的比喻中, 加大学生学习程序设计的兴趣, 并促进学生的理解和记忆。
(2) 形式多样化, 选择合适的时间点, 通过验证式教学和课题式教学的结合使用加深或强化学生对课堂理论知识的掌握。理论知识较难掌握, 往往上课的时候觉得已经掌握的知识点, 过一段时间又模糊了, 必须及时和反复的巩固和加深学生对课堂所学理论知识的理解, 项目采用递进式的层次验证方法帮助学生加深对课堂所学知识的理解和使用。验证式教学通过单个实验项目, 了解学生对单一知识点理论掌握和使用情况, 考查学生调试、测试程序能力。课题式教学在验证式教学很好完成的基础上, 提出较为复杂的问题, 涵盖若干个相关知识点, 学生根据自己的兴趣爱好确定一个课题进行课题设计, 通过查找相关资料, 提出研究课题, 写出实施计划, 程序实现流程, 考查学生在掌握从过程编程方法到面向对象编程方法的转换能力和现实问题的抽象, 分析, 解决问题能力。
(3) 策略分层化, 课程知识点较多, 难度不一致, 并且学生基础也不一致, 为了兼顾所有学生, 必须采用分层化的教学方法, 按基础, 综合, 实用三个层次, 逐渐递进的引导学生完成具体的教学内容。基础部分可以照顾编程基础较差的学生, 使之不至于从开始就掉队。实用部分主要偏向基础好, 且对编程兴趣较大的学生, 提高这部分学生的编程水平。同时, 借助于网络幕课的使用, 加深学生对关键知识点的理解, 通过互动和知识点实时测试, 提高学生学习该课程理论知识的兴趣。
(4) 过程阶段化, 面向对象程序设计课程课堂学时有限, 只有利用课内课外相结合的方式才能保证较好的教学效果。因此, 课前预习, 课程中根据在预习过程中碰到的难点听课, 及课后的实践, 成为学习本课程必不可少的三个阶段。希望可以通过这三个阶段, 调动学生学习本课程的积极性, 培养学生独立编程能力和团队合作意识。
3. 总结
通过四化教学法, 从两方面保证课程的改革质量, 一是提高学生对面向对象程序设计课程的学习兴趣, 二是结合网络幕课, 选择更为科学的教学教授方法。在保证学生掌握课程理论知识点的基础上, 通过验证式教学加深和巩固学生对理论知识点的掌握, 和基础的编程能力。提高学生的综合素质和竞争能力。通过本文的研究, 为面向对象程序设计课程提供理论基础, 对培养学生程序设计和编写能力提供一定的保证;为其他类似课程的教学模式研究提供参考。
摘要:传统的面向对象程序设计语言课程教学存在内容抽象, 学生水平不一及教学模式单一等问题, 本文提出了一系列的课程教学方法, 包括教学内容“例题化”、教学策略“分层化”、教学形式“多样化”、教学过程“阶段化”的教学方法, 通过教学方法的改变, 帮助学生更好更快的掌握面向对象编程的方法。
关键词:面向对象程序设计,教学方法,网络慕课
参考文献
[1]范振钧, 王建秋.面向对象程序设计课程教学改革探析, 通化师范学院院报, 2011.4.
[2]李玉梅.课程教学改革的研究与实践, 教学与改革, 2012.6
【面向对象方法】推荐阅读:
面向对象程序设计方法08-27
面向对象的软件开发方法分析论文09-09
面向对象与面向过程06-01
面向对象11-10
面向对象分割07-18
面向对象仿真10-16
面向对象程序06-11
面向对象建模06-27
面向对象测试08-02
面向对象分析08-02