面向对象思想(精选12篇)
面向对象思想 篇1
1 引言
面向对象的思想不仅仅局限于软件设计, 它已经拓展到更多的领域, 如分布式系统、应用平台、交互式界面、数据库系统、人工智能、嵌入式软件系统等领域。作为计算机专业的求学者和从业人员, 不管钻研或从事哪个方向的, 都应该对面向对象编程思想有所了解。
通俗地讲, 面向对象编程思想可以概括如下:系统中的一切事物都是对象;将属性和对属性执行的操作封装成为整体, 这个封装体即是对象;属性和操作相同的对象抽象成为类, 对象则是类的实体;发送消息可以使对象执行相应的操作;在现有类的基础上增加属性或操作可以构成另一个类, 这是类的继承。
2 面向过程编程思想所存在的问题
2.1 可维护性差
用传统的面向过程方法所开发出的软件, 由于可修改性较差, 维护时产生的费用仍很高, 造成其可维护性差。
2.2 重用性差
重用性指软件不用修改或略加修改就能重复使用。面向过程程序设计阶段软件重用性极差, 引起软件危机, 软件工程这一学科由此而诞生, 提高重用性是软件工程的重要目标, 而面向对象的继承机制很好地解决了软件重用性这一问题。
2.3 软件功能与用户需求不一致
用传统的结构化方法开发大型软件系统涉及各种不同领域的知识, 在开发需求模糊或需求动态变化的系统时, 所开发出的软件系统往往不能真正满足用户的需要。
3 面向对象的重要概念
3.1 类
类是属性与操作相同的对象的抽象。因此, 类是对象的抽象, 对象是类的实例。例如“人”是所有人的一个抽象的总称, 他是一个类, “鲁迅”是具体的一个人, 这就是个对象。再如“班级”是个抽象的类名, “计算机系13级软件1班”是具体的一个班级对象。
类的属性用来表示对象的各种特征, 用数据结构来描述。如长方体有三个基本属性长、宽、高;时间有三个基本属性小时、分、妙;人的基本属性有姓名、年龄、性别、工作单位等。在不同的处理需求下对于同一事物的属性描述是不一样的。
类的操作是对于对象行为的描述, 包括操作的名称和操作实现过程。
3.2 对象
对象是任何被人类研究的实物, 不管是简单的实数还是结构复杂的核潜艇都可以认为是对象。除了具体的事物, 对象还能表示抽象的规则、计划。
3.3 对象的属性和操作
对象的属性用各类数据描述。如一个餐桌的属性包括长、宽、高、材质和颜色, 前三种属性值用实型数据表示, 后两种属性值用字符串表示。对象的操作用于改变或访问对象的属性。如一个餐桌对象有一个求桌面面积的操作, 这个操作需要访问此餐桌的长和宽。对象将其属性值与操作结合在一起形成一个整体, 将这个整体封装在对象中。
3.4 消息和方法
当要求对象执行某种操作时, 必须由外界向对象发送一条消息, 消息包括对象名和方法名, 有时还要加若干参数。类中操作的实现过程叫做方法, 一个方法有方法名、参数、方法体。
3.5 类与类的特殊关系
在现实世界中存在很多类, 有些类之间是毫无关联的, 但有些类之间具有一定的特殊关系, 有两种这样的关系:继承关系和组合关系。
如果现有一个定义好的类是“人”, 还需要再定义一个“男人”类, 可以不用对“男人”类进行重新定义, 而是选择在“人”这个类的基础上增加一个性别属性即可。“人”称为父类或基类, “男人”称为子类或派生类, 这两个类的关系叫做继承, 可以说这两个类是一种“是”的关系, 即男人是人。
如果现有一个“日期”类, 还要定义一个“学生”类, 属性中要体现出生日期, 那也可以不用在“学生”类中重新定义出生日期这一属性, 可以直接用已有的“日期”类来定义生日, 这两个类的关系叫做类的组合, 可以说这两个类是一种“有”的关系, 即每个学生都有生日, 而生日是日期信息。
4 面向对象的显著特征
4.1 封装
封装很好地实现了信息隐藏, 可以达到数据保护的目的, 即对象的属性一般不被外界直接访问, 而是通过对象的方法来访问, 从而保护了对象的属性, 为软件的模块性提供了保证。另外, 类定义将外部接口 (用户可见) 与内部实现 (外界不可见) 分离, 对象的方法其内部实现细节对外界是不可见的, 用户只管调用外部接口完成对象的一系列操作。
4.2 继承
子类继承父类的所有属性和方法, 避免了许多重复性的工作, 在一个现有类的基础上新增一些属性或方法级大地减少了软件设计的工作量。继承是面向对象编程语言区别于面向过程编程语言的最显著的特点。如果子类只有一个父类称为单继承, 子类存在多个父类叫做多重继承。在软件设计工作中, 继承是信息分类与组织的切实可行的方法, 它简化了创建类的过程, 提高了软件的可重用性, 使得软件的可扩充性大大加强。
4.3 多态
多态指相同的方法作用于类型不同的对象上可以得到不一样的结果。每个对象通过满足自身意愿的方式响应同样的消息。例如在听到统一的上课铃声后, 老师们各自进入自己任课的班级, 而不是进入同一个班级, 并且所讲的内容也都不同。多态性使得软件的可重用性和灵活性进一步增强了。
5 结语
面向对象编程思想以其独特的形式将数据以及在数据之上的操作细节封装在类中, 改变了面向过程编程思路的程序结构和整体格局, 由于其继承性可以加快软件开发速度, 并增强软件可重用性, 便于软件扩充功能, 多态性可提高软件设计的灵活性, 故从过去较长时间至今一直以来仍占据着程序设计的主流地位, 也一直是衡量各层次程序员与计算机从业人员业务素质的标准。
参考文献
[1]彭莉芬、陈俊生.浅析面向对象的三大特征[J].福建电脑, 2010 (05) .
[2]谭大海、刘兴勇.面向对象分析与设计[J].科技信息, 2014 (10) .
[3]张忠华、李德蓉、肖章林.浅析面向对象程序技术的特征和思想[J].装备制造与教育, 2014 (01) .
面向对象思想 篇2
这学期的面向对象课程对我来说是收获匪浅的一门课。通过老师课件的讲解,自己一些相关书籍的阅读和实践作业的完成,逐步对课程有了由浅及深的认识。
面向对象(Object Oriented,OO)是一门以实践为主课程,课程中可以分开两块OOA(面向对象系统分析)和OOD(面向对象系统设计)。OOA(面向对象系统分析)主要内容: 研究问题域和用户需求,运用面向对象的观点和原则发现问题域中与系统责任有关的对象,以及对象的特征和相互关系.OOA不涉及针对具体实现采取的设计决策和有关细节,独立于具体实现的系统模型。是一个完整确切反映问题域和用户需求的系统模型。OOA的优势:复用、可扩展、可维护性、弹性。
OOD(面向对象系统设计):以OOA模型为基础,按照实现的要求进行设计决策,包括全局性的决策和局部细节的设计,与具体的实现条件相关。OOD的步骤:细化重组类→细化和实现类之间的关系,明确其可见性→增加属性,指定属性的类型和可见性→分配职责,定义执行每个职责的方法→对消息驱动的系统,明确消息传递的方式→利用设计模式进行局部设计→画出详细的类图和时序图。
面向对象的分析与设计方法将致力于解决传统软件研发过程中由于软件模块化结构化程度不高带来的软件重用性差、软件可维护性差、开发出的软件不能满足用户需要等方面问题。面向对象的概念包括:对象、对象的状态和行为、类、类的结构、消息和方法。对象概念将包含对象唯一性、抽象性、继承性、多态性的重要特征。面向对象的要素包含:抽象、封装性、共享性三方面。
在设计模式的研究过程中,我们组选择的是迭代器(Iterator)的设计模式研究。完成设计研究后,我对迭代器的设计模式有了更为深刻的理解。迭代器(Iterator)提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。并了解到迭代器设计模式一般在以下三类场合使用较多。
访问一个聚合对象的内容而无需暴露它的内部表示。 支持对聚合对象的多种遍历。因为遍历状态是保存在每一个迭代器对象中的。
为遍历不同的聚合结构提供一个统一的接口。根据实现方式的不同,效果上会有差别。同时还简化了容器的接口。但是在java Collection中为了提高可扩展性,容器还是提供了遍历的接口。在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。
在Java Collection的应用中,提供的具体迭代器角色是定义在容器角色中的内部类。这样便保护了容器的封装。但是同时容器也提供了遍历算法接口,你可以扩展自己的迭代器。至于迭代器模式的使用。客户程序要先得到具体容器角色,然后再通过具体容器角色得到具体迭代器角色。这样便可以使用具体迭代器角色来遍历容器了。
OOA和OOD之间没有明显的界限。OOA与OOD的不可分割性正好说明了OO思想的强大,即软件过程阶段的无缝连接,在交流与沟通中不会产生鸿沟,这是相对结构化思想的好处,因为从功能模块到某块详细控制逻辑设计两者之间的联系不是十分紧密,需要分析人员与设计人员的再沟通。
面向不同对象的双语教学探索 篇3
摘 要: 文章结合电磁场与电磁波双语课程,论述了专业课程双语教学,在面向普通高等院校学生与中外合作项目学生时,其目标、性质、教学模式区别,以及在实施过程中遇到的问题和解决办法。
关键词: 双语教学 普通高等院校学生 中外合作 教学模式
引言
国家为了推动高等教育与国际接轨,鼓励高校开展双语课程教学历来已久。全国开设双语课程教学的高校非常多,研究双语课程教学模式的学者也很多。高校中双语课程实施的对象可分为两类,一类是普通高等院校学生,包括本科生与研究生;另一类为中外合作办学学生。面向这两类学生,在实施双语课程教学时,教学的性质、目标、教学方法都有所不同。
“电磁场与电磁波”是电子信息类专业和通信工程类专业一门重要的专业基础课程,也是“微波技术”和“光纤通信”等课程的基础。其内容在移动通信、微波通信、光纤通信、射频电路、高速集成电路等相关领域有着广泛而深入的应用。本文以“电磁场与电磁波”双语课程教学为例,分析普通双语课教学与中外合作中双语课程教学的区别。
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.
基于面向对象思想的汉字特征研究 篇4
关键词:面向对象,汉字,汉字特征
0 引言
现在世界上存在的人类自然语言文字可以分为两种:字母文字和象形文字[1]。一般学者们认为人类语言文字的进化过程是从结绳记事、刻画符号、象形文字到字母文字的进化过程。现代汉字和甲骨文的体系结构没有发生本质变化,由此得出汉字是人类早期的文字之一,所以汉字应该走世界文字发展的共同方向:字母文字。人类进入信息化时代后,汉字又面临受到前所未有的挑战:汉字表达不准确、汉语不易编程。汉字真的要走世界文字发展的共同方向吗?汉字的特征是怎样的?汉字与现存的其他主要文字有什么本质的区别?对于这些问题的解释,学者们往往是站在自然语言本身和民族的立场,让人们信服的力度不够强。
自然语言和计算机语言在基本思想上是相通的,本文将在软件理论中寻求答案。在过去的半个世纪里,计算机编程语言经历了机器语言、汇编语言、面向过程语言、面向对象语言四个发展阶段。面向过程语言和面向对象语言称为高级语言,它们接近人的语言思维。特别是软件危机出现时,出现了一门新兴学科:软件工程学。软件工程方法学的核心是面向对象方法学[2]。面向对象编程(OOP)是通过模仿人类建立现实世界模型的方法,包括概念、分类、抽象、归纳等进行软件开发的一种新的设计方法。它具有以下基本特性:抽象、封装、继承、多态[3,4]。模式设计中有面向对象三大基本原则:针对接口编程,而不是针对实现编程、优先使用对象组合而不是类继承、封装变化点[5]。下面将运用面向对象的思想逐步分析汉字的抽象性、封装性、继承性、多态性,然后结合面向对象的三大原则对汉字综合分析研究。
1 汉字面向对象性质
1.1 汉字的抽象性
象形者,画成其物,随体诘诎,日、月是也[6]。象形字,就是对客观世界中可见可摸的具体事物物体,抽象出其共同的外部特征。象形字是文字的第一层抽象,是文字抽象的第一步。如:日、月、山、水、川、刀。鸟(鳥)字像一只活休憩在枝头侧身小鸟;龟(龜)字像一只龟的侧面形状;马(馬)字就是一匹有马鬣、有四腿的马;鱼(魚)是一尾有鱼头、鱼身、鱼尾的游鱼,门(門)字就是左右两扇门的形状;日字的甲骨文字体是一个圆形加中间一点,圆形恰是太阳的形态,中间一点好似太阳黑子。“人”字,以最简洁方式抽象出世界上人的共同的特征:直立行走,这个字是人类一个伟大的发明。
指事字是在象形字的基础上加着符号以表示抽象事物的造字方法,也就是当没有、或不方便用具体形象画出来时,就用一种抽象的符号来表示,例如“上”、“下”、“凶”……等等。在甲骨文中用横线“一”为界,在横线上用一点或较短的短线指出上方的位置,就是“上”字;而在横线下面画符号,则是“下”字。“凶”字是指地上有一个深坑,走路的人没看见而踏空掉进坑里,“ㄩ”代表深坑,中间的“×”符号就是象征掉下坑的那种惊吓的感觉和危险的情形[7]。
会意字是用几个偏旁义组合成一个新义的造字方法。会意是为了补救象形和指事的局限而创造出来的造字方法。和象形、指事相比,会意法具有明显的优越性:第一,它可以表示很多抽象的意义;第二,它的造字功能强。《说文解字》收会意字1167个,比象形字、指事字多得多。因为会意字是两个或两个以上的形体的会合,所以可以表示许多抽象的、用象形或指事的方法难以表示的意义。如“木”和“木”可以组合为“林、森”[7]。
下面重点解说一下三个典型的抽象字:王、法、时。
“王”是贯穿“天”“地”“人”三者之物,才可为“王”。《说文解字》这样记载:“古之造文者,三画而连其中谓之王。三者,天、地、人也,而参通之者王也。”
“法”是会意字,是一个更加抽象的概念,繁体字“灋”。“水”,表示法律、法度公平如水;“廌”(zhì),神话传说中的一种神兽,它能辨别曲直,在审理案件时,它能用角触理曲的人;“去”,表示去除不好的部分。基本义:通过刑具(廌)来去除有罪人的不好的部分,对所以人像水一样公平,就是“法”的本意,与今天的法律基本思想是一致的。
时间概念极为复杂,很难抽象出时间概念的本质。英文单词“time”就像一段密码,只记录了语音,并没有给出时间概念本质特性。甲骨文中“时”字是“旹”,上“之”下“日”,“之”表示脚本,日表示太阳,合起来就是太阳的脚步,后来加了一个“寸”表示刻度。2008北京奥运会开幕出现了中国古代计时工具:日晷,时间就是太阳行走的刻度。直到今天,人们对时间的定义还是以太阳为参照。汉字非常巧妙地将复杂的时间概念抽象为一个简单的形象的汉字“時”。
简而言之,象形字是对具体事物外部共同特征的抽象,指事字会意字是对复杂事物内部涵义的抽象。从另一方面分析,名词类汉字多是数据抽象,动词类汉字多是行为抽象。可见汉字的抽象能力很强,且抽象度适中,较英语更适合人们生活中使用。英文单词对事物的抽象度把握得不好,没有抽象出事物的共同属性。
1.2 汉字的封装性
(1)字型的封装每个汉字就是一个独立的模块,与其他汉字自然分开,就像是一个个准备好的部件。而英语单词的封装性较差,单词随着词形时态变化而变化,单词长度也随之变化。单词与单词不能自然分开,需要添加一个字母的空间来区分不同的单词。由于汉字良好封装性,人们不需要在不同词汇间再添冗余的空格来进行标识。由于当前技术所限,计算机对汉语分词技术较英语分词技术低一些。汉语书写方式非常灵活,可以从上向下、从左向右、从右向左书写,甚至可以顺时针方向书写。英文书写方式较为单一,在一些特殊空间给书写带来了不便,比如空间有限的建筑上从左向右书写的空间更小。
(2)属性和动作封装核心汉字都可以看作一个抽象类,每个基本汉字就好比一个类。“人”具有的属性和操作都被隐藏起来了,从字面上看不出的。人={人的属性,人的动作},人的属性={姓名,地址,年龄,手机号,单位},人的动作={看,说,吃,听}。人的一个实例是“我”,“我”具有“吃”的动作。需要时可以直接调用该动作,我吃饭=我.吃(饭)=吃(我,饭);“吃”是个抽象类,人和其他动物共享此抽象动作。
1.3 汉字的继承性
大部分汉字从字形上看,很容易发现存在着继承关系。特别是汉字中占了90%的形声字,继承性表现的更为突出。形声字是合体字,对象形字的继承,同时继承了“语义”和“语音”,即是双继承。形声字对语音的继承可以单独讨论,这里不考虑对语音的继承,只研究对语义的继承。这样的话,汉字的继承关系就是单继承关系。
以鱼类为例,“鱼”一个抽象概念,是鱼类的总称。鱼类可以分为淡水鱼和海水鱼。淡水鱼类有鳊、鲢、鳙、鲤、鲫、鲶、鳢、鲥、鲋、鲈……,其中每个字代表一种鱼,也就是“鱼”的一个子类,这是自明的。
以鸟类为例,“鸟”的概念是个抽象类,是对所有鸟类的总称。中国先人创造出这个抽象的“鸟”字,后来顺着对自然认识的加深,已经可以区别一些常见鸟,于是就造造出了常见的鸟字:鸡、鸭、鹅、鸽、鹰、鹊……。由动物学鸟类的族谱关系如图1所示,为了方便起见,使用向下的箭头表示分类和继承的树型关系。
上古时期中国的先人们,识别一种新的鸟类时就会造出对应的汉字来标识。新的汉字继承了“鸟”字,从字形上人们就能知道是一种鸟,比如:鹏(传说中最大的鸟)、鸾(传说凤凰一类的鸟)、鸷(凶猛的鸟,如鹰、雕、等)、枭(本义:指一种恶鸟,捕捉后悬头树上以示众)、鸱(古书上指鹞鹰)。对应其他语言就没有明显的继承性,如英文中的bird与chook、duck、goose看不出继承关系。
再以树木为例,古汉语中树木概念为抽象为“木”,所以具体树木子类造字就必须继承“木”字。由植物学树木分类如图2所示。
继承性的例子很多,再比如“车”、“牛”、“马”、“女”、“金”、“气”……。这种继承性造字方法比英语中词根构词法功能强大,造出的字易读语义性也强,系统性强。有了汉字继承的方法,在对新事物命名时就有章可循,减少了随意盲目依个人喜好对事物命名。对新生事物进行分析,找到他所属于的类别,在类的继承树上即可找到恰当的命名。比如人类最近发现的质子数为109的新元素,通过分析知道这是一种过渡金属元素,依照继承原理中国人造出了汉字“钅麦”(读音是对英语读音的继承,暂不讨论)。后来又发现了110号元素,命名为“钅达”。
1.4 汉字的多态性
钱能:“若语言不支持多态,则不能称面向对象的[3]。”可见多态性对语言分类时的重要性。所以,如果某种文字不具有多态性,那么就可以断定其不是真正的面向对象的文字。人的思维方式也是自然的多态形式,面向对象编程的多态性就是用软件形式也模拟人思维的多态性。人类的语言是思维的外在物资表现,应该也具有多态性。汉语的多态性可以分为两类,一是表达多种状态的事物,二是表达事物的多种状态。
第一类多态:一个汉字接口,表达多种状态的事物。汉语的名词没有明显的性、格、数的变化,这正是多态性的表现,最典型的例子是三种人称代词。第一人称代词“我”字,无论是表示主语还是宾语都是汉字“我”,而英语中主格我的概念是“I”,宾格我的概念是“me”。“我”字性别是自明的,性别取值为{男,女,不确定}。第二人称代词“你”字,可是多种状态的“你”,男性的“你”或者女性的“你”,主体的“你”或者客体的“你”。有个特殊的汉字“妳”[8,9],“你”的异体字,表示第二人称是女性的你。“妳”是冗余的、原始的汉字,现在基本已经淘汰了。古汉语中的“他”字和现在汉语中的“他”有点差别,古汉语中的“他”泛指第三方,可表男女及一切事物,如“他山之石”、“他乡”、“其他”……。现代汉语中的“他”则用于称代自己和对方以外的男性第三者,近似于英语中的单词he。可见古汉语中的“他”较今天的“他”更具有多态性。为什么会出现倒退现象呢,这与“她”字有关。古汉语中“她”[9]字原本是“姐”的异体字,现在汉语中的“她”表示女性的第三方。英语第三人称有若干单词:he、she、it、they、her、him、them……,也许是受其影响,认为这样表达准确,上世纪初刘半农赋予“她”同英语单词her同样的语义。当信息时代到来,互联网个人资料需要保密,人们需要表达泛指的第三人称的概念时,却发现找不到对应的汉字了,只好使用拼音“ta”。(英语中没有泛指的第三人称单词,用he or she来表达)。所以使用“妳”、“她”字并不是表示对女性的尊重,相反是对女性的歧视。汉字中的“人”字(人字旁)不专指男人,是对男女的统称,对人类的抽象标识。正因为“妳”和“她”的出现,“你”和“他”的概念范围缩小,专指男人。而英语中的男人单词“man”,可以表示为男人和人类的概念。中国人的祖先的思维是真正的多态形式,他们将这个世界拟人化,分为你我他。正如Unix系统把一切设备看作文件来处理,意义深远。
前面说的是名词,其实动词的多态性更加明显,这就是第二类多态:一个汉字接口,表达事物的多种状态。汉语中的动词没有时态变化,时空观是相对的时间观,不是绝对的时空观。汉语的时空观较英语的时空观更为科学,因为宇宙中一切物质是运动的物质,从现代物理学中得知绝对时空观是相对时空观的一个特例。所以对世界中的运动可以从总体出发,抽象出本质特征,而不是局限于特定的时空,这样的“运动”或者“状态”就应该具有世界本源的多态性。
比如“吃”这一动作,汉语句子“A吃B”就具有最常见到多态性,“我吃饭”、“你吃馒头”、“他吃苹果”、“狼吃羊”、“羊吃草”……。对于中国人来说只要是可以食用固态物质就可以使用“A吃B”句式,思维方式是多态的,人们不会考虑因为“吃”的主体或者客体的不同而使用不同状态的“吃”,就连药片人们也说“吃药”。而英语世界的人们就要根据“吃”的不同状态使用不同的“吃”:老虎吃肉(Tigers eat meat)、吃早餐(break one's fast、to have breakfast)、吃晚饭(sup on、to have dinne)、吃火锅(blocked shot)、吃快餐(snack)、吃草(browse)……。就连eat也有多种状态变化,其他的英语动词就不用说了。ate,eaten,eating,eats,一个汉语动词对应多个状态的英文动词或短语,这就是多态性最直接的表现。名词可以看作是对象,动词就是对象的方法,动词的意义是以对应名词所产生的。比如“我吃苹果”用面向对象的方法表示是“我.吃(苹果)”,可以看出动词“吃”就是对象“我”的方法。“我”是人的一个实例,人是动物的一个子类。“吃”的方法是对动物抽象出的一个统一方法,每个具体动物都对“吃”操作进行了重写,也就是说他们有着自己“吃”的实现方式。“吃”的具体含义是有主体动态确定的,这就是后绑定,人们在使用时已经感觉不到具体实现的细节了。其他就不用举例了。
1.5 三大基本原则分析
回顾一下计算机软件中面向对象语言的发展:在OO开发的早期,继承被过度地使用;随着时间的发展,人们发现优先使用组合可以获得重用性与简单性更佳的设计,当然可以通过继承,以扩充可用的组合类集。因此组合与继承可以一起工作,但是基本法则是“优先使用对象组合,而非(类)继承”,这就是模式设计中建议使用的原则。
从上面的分析可以看到,汉字已经初步具有了面向对象的性质。但是存在一个问题:与计算机软件中面向对象语言发展类似,由于继承性被过分使用导致汉字的总数是无限增加的。东汉《说文解字》收字9千多,清《康熙字典》收4万多,到1994年《中华字海》收字竟8万多。如果元素周期表中的元素是成千上万个,那么就要造上万个汉字来表示吗?这里要指出人们的一种误解:语言的词汇总量与语言的精确性成正比。汉字总数的增加并不能说明汉语表达能力的增强,字词的无限增加恰恰说明了这种语言的低效性。汉语是怎么解决这个汉字总数无限增加的危机呢?
先分析一个实例。如果为国家建立一个本体,会有货币这一概念。世界上有200多个国家,货币的种类繁多。如果按照上面的分析,首先可以抽象出所以货币的父类“元”,然后为各国货币名称造一个字,继承抽象货币“元”,也就是生成一个子类。这样的话货币名称层次明显、可读性会大大增强,但是要增加100多个汉字。在汉语中,可以发现有这些货币名称:人民币元(华元)、欧元、韩元、日元、美元、缅甸元、加拿大元、澳大利亚元、新加坡元、新西兰元、津巴布韦元、港元、澳门元……。从这可以发现一个尚未形成的规律,既是国名(区名)+元。也可以看到,汉语已经为世界部分国家的货币名称定义好了接口,货币接口不变,具体内部实现可以由该国新政府去完成。比如华元是接口,内部实现是人民币,美元是对外接口,dollar是内部实现,屏蔽具体细节。这和面向对象的基本原则之一基于接口编程的基本思想是一致的。更重要的,应该看到这是继承和组合的规律完美的结合。世界货币词汇如图3所示。
纵向看,是继承关系,欧元、美元都是元的子类;横向看是使用组合规律,这恰恰是面向对象的基本原则:优先使用对象组合,而不是继承。这种结合方式没有增加汉字,货币名称可读性强,语义明显。名称有规律可循,代码重用率高。如果有某个国家改朝换代了或者说这个国家需要更改货币名称,不需要关心该国内部细节,该国家进行内部修改,但对外接口一样不变,仍然可以正常使用。再比如,当出现一个新的国家时(最近几年确实也出现过几个新国家),那么该国家的货币怎么命名呢,世界货币怎么扩展?这里要用到开闭原则,对扩展开放,对修改封闭。
这是解决汉字无限增加最高效的方法。重新分析前面的提到的继承的几个实例,对“鱼”、“鸟”、“木”类进行扩展,加入新的子类,构词树如图4-图6所示。
上面的例子是单独一个类的词汇树研究,下面分析多棵树组成的词汇网络图。首先给出几个基本概念。由前面的鸟类可以找到抽象的“鸡”的概念,鸡的子类是公鸡、母鸡、小鸡、家鸡、野鸡等等。从cattle、moggy、moo-cow、ox、cow、bull抽象出父类“牛”。公鸡(chanticleer、cock、rooster)、公鸭(drake)、公牛(ox)、公猪(boar)、公猫(tomcat)、公兔(Buck)、公驴(jackass)、公羊(ram、tup)、公山羊(bill goat)、公山羊的(capric、caprine)等等概念,与之对应的是母鸡(hen)、母狗(bitch)、母牛(cow)、母驴(jennet)、母羊(ewe)……等概念。从这些概念中可以抽象出“公”、“母”两个概念,用于区分动物性别,在汉语中也确实存在对应的汉字。可以再从鹿肉(venison)、鸡肉(chicken)、鹅肉(geese)、牛肉(beef、beeves)、羊肉(mutton)、猪肉(pork)、果肉(sarcocarp)肉汤(broth)肉店(shambles)……概念中可以抽象出“肉”的概念,对应汉字是“肉”。“鸡”、“牛”、“公”、“肉”四个大类的关系如图7所示。
国家汉字标准(GB2312-80)只收录了6763个汉字[10],常用汉字2500个,汉字总数不在多而在精。汉语言空间下世界是一个有着固定网络分层结构概念世界,这是一个有机空间,任何一个新概念都有着对应空间位置,而不是新概念随意存放。顶层概念是这个世界的基本元素,把这个世界分成了若干个基本词汇树,顶层概念提供了统一的造字构词接口,以最大限度高效重复使用代码。从纵向看,上层概念与下层概念都有着继承关系;从横向看,每个新概念是以类的组合形式构成。这样一种有机结构使得汉语词汇有着很强的扩展性和自明性。
2结论
本文运用计算机软件理论中面向对象的思想对汉字进行了初步分析,重点分析汉字的抽象性、封装性、继承性和多态性。可以得出这样的结论:汉字是一种面向对象的文字。汉语中的构词系统符合模式设计中推荐的面向对象三大原则,从而最大程度解决了词汇无限增长的趋势。这些都是对现代汉字研究有着抛砖引玉的作用,为汉字研究寻找到一个新的道路。接下来将继续研究中文编程等问题。
由于这是初步尝试用新理论来研究汉字,一些地方存在着不足,如汉字的封装性解释得不到位、可以参考文献较少,这有待进一步研究。
参考文献
[1]http://www.china-language.gov.cn/.
[2]张海潘.软件工程][M].北京:清华大学出版社,2008.
[3]钱能.C++程序设计教程[M].2版.北京:清华大学出版社,2005.
[4]朱喜福,赵敏.Java程序设计[M].北京:人民邮电出版社,2005.
[5]Erich Gamma,Richard Helm,Ralph Johnson,et al.Design Patterns El-ements of Reusable Object-Oriented Software Pearson Education,2002.
[6](东汉)许慎.说文解字[M].中华书局.2005.
[7]百度百科.http://baike.baidu.com/.
[8]现代汉语词典(2002年增补版)[M].北京:商务印书馆.
[9]古代汉语大字典[M].上海辞书出版社,2007.
面向对象编程的总结 篇5
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向对象有三大特性,分别是:封装、继承、多态。封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。任何类都可以从另外一个类继承,即这个类拥有它所继承类的所有成员。被继承的类称为父类或基类。C# 只支持单继承,不支持多重继承,即在C# 中一次只允许继承一个类,不能同时继承多个类。在C# 中,接口允许多继承,可以通过继承多个接口来实现类似于C++中的多重继承。
多态是同一个类在不同场合下表现出不同的行为特征。
使用抽象方法与虚方法都可以实现多态性。抽象方法是一个未实现的方法,使用abstract关键字修饰,含有抽象方法的类必然是抽象类。抽象方法要在其子方法中通过override关键字重写。
面向对象软件测试方法研究 篇6
关键词:软件测试;面向对象;类测试
中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2013) 24-0000-01
面向对象软件测试技术是针对使用面向对象技术开发的软件而提出的一种测试技术。面向对象开发技术和传统开发技术相比有新的特点,使用面向对象技术开发的程序具有高质量、高效率、易扩展、易维护等优点,这也给它的测试技术带来新的挑战。面向对象软件测试与传统的软件测试相比,由于面向对象技术开发的软件会出现传统软件技术中不存在或者不突出的错误,使得传统的软件测试中次要方面成为了现在的主要问题,影响了软件测试的方法和内容,增加了软件测试的难度。
一、软件测试
(一)软件测试
软件测试是使用人工操作或者利用测试工具按照测试方案和流程对软件产品进行功能和性能方面的评估,检验软件产品是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。
(二)面向对象对软件测试的影响
面向对象软件具有抽象性、封装性、继承性和多态性等特点,这些特点对软件测试产生了不同的影响。面向对象程序中子类可以继承父类的功能,父类进行了充分测试后,子类也要设计相应的测试用例进行充分测试,对子类进行测试时不仅要测试子类中的方法,还要重新测试与子类中重定义方法相关的类。面向对象软件测试时,对象的状态通常是信息隐蔽的,测试人员需要在测试类中添加适当的信息来表明对象的实现方法及其内部状态。对于面向对象软件的多态性形成的动态绑定的测试使用传统的静态分析策略是不合适的,需要使用动态的测试标准来解决这个问题。
二、面向对象软件测试方法
面向对象软件测试方法是从传统的软件测试方法中演化而来的,有与传统的软件测试相类似之处,但由于面向对象的软件开发具有继承性和多态性等特点,为了支持和加强数据隐藏的特性,面向对象的软件测试必须向一个类的接口添加操作,所以说面向对象的软件测试方法更复杂一些。
(一)面向对象软件单元测试
面向对象软件单元测试主要是类测试,包括方法测试和对象测试。类是面向对象程序设计的基本单位,对象是类的具体实例,类测试是来验证类的实现和类的说明是否完全一致,如果类的实现是正确的,那么类的每一个具体实例的行为也将是正确的。
面向对象的类测试首先要确定测试方法,通常可以通过代码检查和执行测试用例两种方法来测试类的代码。代码检查方法容易受人为错误的影响,在代码量很大的情况下也会加大它的工作量,而编写一个好的测试用例需要很丰富的经验和较高的技巧。通过类实现的功能来分析所要编写的测试用例,然后根据类的边界值来扩充测试用例。构建测试用例一般是基于前置条件或后置条件,为所有可能出现的情况及情况的组合确定测试用例的需求,在这些可能出现的情况组合下,根据这些需求来构建测试用例,而且还要针对实际情况创建特定输入值的测试用例,并确定它们的正确输出。
测试驱动程序是一个运行测试用例并能够收集运行结果的程序。在面向对象的软件测试中,设计核心类的测试驱动程序十分重要,要求该程序必须思路严谨、结构简单清晰并易于维护。当确定了类的可执行测试用例,测试驱动程序就要创建类的实例来运行该测试用例,并给出测试用例运行的测试结果。
(二)面向对象软件集成测试
面向对象软件集成测试主要是类簇测试。面向对象软件是由若干对象组成的,这些对象互相协调合作来实现软件的功能,在面向对象的软件开发中,对象间的相互协调即对象的交互对于程序的正确性来说是非常重要的,对象的交互方式决定了程序能做什么,从而也就决定了程序是否正确。对象的交互测试是在对类的单独测试的基础上实现的,它来确保对象之间相互传递消息的正确性,它一般执行测试的是嵌入到应用程序中的交互对象。
在面向对象的软件测试当中,除了要考虑对象交互特征面之外,还需要具体的测试技术去实现测试的要求,目前常用的面向对象软件集成测试的方法有抽样测试和正交阵列测试。抽样测试提供了一种运算法则,不需要首先明确测试用例的总体,从一组可能的测试用例中选择测试序列;正交阵列测试是一种特殊的抽样方法,它通过定义一组交互对象的配对方式组合来进行测试,同时要尽量限制测试组合的配置数目,正交阵列测试系统就是挑选某个样本的特定测试技术。
(三)面向对象软件系统测试
在对面向对象软件进行系统测试时,要保证被测系统的完整性,搭建与真实用户实际使用环境相同的测试平台,并且需要参考面向对象分析的结果,对软件的架构进行验证,确保软件可以完全再现问题空间以及完整实现用户需求。系统测试不仅是要检测软件的整体功能行为表现,也是对软件设计开发的再确认,它针对的是非功能需求的测试,包括功能需求以外的所有需求以及注意事项等。系统测试是针对完整软件产品的测试,包括软件、软件运行所依赖的硬件、外设、数据、支撑软件及接口等,确保开发的软件与其依赖的各种资源能够协调运行,形成完整的软件产品。系统测试是软件测试过程中非常重要的阶段,它对测试技术的要求也是最高的。在进行面向对象软件的系统测试时,测试技术人员需要与软件的用户进行交流,根据用户提出的需求给出系统的修改建议,结合用户需求对被测试软件进行测试分析,根据分析结果建立测试用例。
三、结束语
面向对象的软件测试技术是面向对象软件开发中的重要组成部分,本文从面向对象软件的特点出发,分析了面向对象软件测试对传统软件测试的影响,介绍了面向对象软件测试的方法。
参考文献:
[1]王艳丽.面向对象软件簇级测试用例自动生成方法研究与实现[D].长春工业大学,2011.
面向对象思想 篇7
关键词:面向对象,设计模式,模块化,映射
在手机开发平台中,从硬件到软件,采用了分层架构设计,整个系统分成Hardware、BIOS、OS、GUI和APP等层结构,并进行了合理地封装。每一层构成了功能完备的子系统,并为上层提供服务。层与层之间采用消息的方式进行通信,很好地保证了子系统之间的信息隔离。同时,按照功能的需求对子系统又可以进行进一步划分。在模块划分过程中,按照粒度粗细可以将整个系统分成三个级别的模块:子系统(粗粒度)、模块(中粒度)和组件(细粒度),每个子系统可以划分为各个模块,在模块内部又可细分为各个组件。在不同级别模块的划分上,存在不同的特点与难点。针对上述手机平台功能性需求比较复杂,数据量相对少而简单,但对系统的实时性和效率要求较高的情况,可以把面向对象的分析和设计方式引用到手机开发平台设计中,利用模块化的设计思想提供良好设计公共接口,进行接口与实现的分离,从而实现手机软件开发的模块化,并且有利于后期整个系统的扩展和维护。
C语言是一种面向过程的程序设计语言[1],在C语言的基础上建立的C++语言是一种面向对象的程序设计语言。如果在开发C语言程序的同时,使用面向对象分析方法,这样开发的程序将会具有面向地对象程序的设计优点[2]。C语言运用比较灵活,执行效率高,与汇编语言联系紧密,可以开发出非常精巧的软件系统,但C语言没有名字空间和类的概念,缺少封装机制和访问级别,数据和操作各自分离,给模块化工作和维护带来较大难题,为此本文使用一个映射机制将对象的分析模型转换到过程设计模型,即对象映射到组件,从而实现模块化编程。
1面向对象分析设计思想
利用面向对象的方式进行思考[3],既可以提高软件开发的模块化,又符合人类思维的特点,它是人类认识世界的方式。对象包括数据和对数据进行操作的行为。对象在收到请求或消息后,执行相应的操作。请求或消息是使对象执行操作的唯一方法,操作又是对象改变内部数据的唯一方法。由于这些限制,对象的内部状态是被封装的,它不能被直接访问,它的表示对于对象外界是不可见的,外界只能通过其公开的接口(操作)访问对象的数据以及相关的操作。将面向对象的分析设计方式引用到手机软件开发中,可以提高手机软件开发的模块化,增加可理解性和可维护性。在手机运行环境中,存在大量的功能性需求。在进行模块的划分工作后,每个组件对应一个对象,而每个功能性需求对应对象的一个具体行为。由于在手机运行环境中,功能要求复杂,数据结构相对简单;同时,数据内容具有不断更新的特点。为了避免对象创建和销毁时不必要的开销,保证数据传输的实时性,提高运行效率,可以采用SINGLETON的设计模式[4]。在这种模式下,每个对象只需保证一个实例,而且可以严格控制客户怎样、以及何时访问它,提高运行效率,满足手机运行时所需要的功能性需求。因此,可以为对象提供一个全局变量,供对象的所有操作进行访问,而这些操作可以由组件中的函数实现。如图1所示,介绍了不同阶段从建模到实现的关系。
将对象的数据和操作映射为组件的数据和函数后,需要提供组件的封装和访问机制。对于每一个组件,针对三个级别的模块划分,相应需要提供三种级别的封装和访问机制[5]:public、internal 和private,参见表1。public 提供了模块外访问的接口,可以被其他模块使用,在子系统设计时划分模块的过程中就已经确定;internal 提供了模块内部访问的接口,是模块内其他组件通信的桥梁,由模块的设计者提供并实现;而private 是组件内部使用的一些私有接口,提供了进行内部操作的辅助行为。
这些机制为对象的封装和访问提供了良好的方法,充分保留了模块设计和实现时的信息,降低了不同人员交流的难度,增加了模块的可理解性与可维护性。
2结构化开发环境的编码实现
在结构化开发环境中,由于实现方法是非面向对象的,需要使用一个映射把面向对象的分析模型转换到过程设计模型,即需要将对象映射到组件(每个源代码文件)。在每个组件中,对象的数据封装到一个structure 结构中。由于考虑手机开发的特点并采用SINGLETON 设计模式,每个对象只需保证一个数据备份,因此可使用一个全局变量记录这个结构的数据,以便在对象的操作中共享这一个全局变量,为提高对象的模块化,其访问级别应该设为private。同时,使用public 访问机制向模块外公开其访问接口或使用internal 访问机制向模块内公开其访问接口,其中,对数据的访问采用公开的Set 和Get 方法进行。
利用C语言[6]开发环境的特点,可以在组件中将对象的封装与访问通过三个文件File.i、File.h和File.c 实现,这三个文件的关系见图2。隐藏或暴露一个接口的方式只需将这个接口的声明从一个文件移动到另外一个文件中。将模块中的所有组件组织成一个包后,可以定义一个统一的模块接口文件module.i,其内容包含了该模块中所有的File.i 文件。模块接口文件在所属的子系统中定义,由模块中的组件实现,并供其他模块使用,整个子系统中各模块间的关系如图3所示,图3中的虚线显示了各模块和各组件间的依赖关系。
从图3中可见,在子系统设计中进行了模块的划分,将模块组织为包,声明了模块的接口module.i,并指出了各模块间的依赖关系。在模块设计中,进一步划分了各个组件,将module.i中的接口分布在各个File.i 中得以实现,模块的可理解性[7]和可维护性都得到了提高。
3源代码开发示例
以“用户来电”这一场景进行分析,“用户来电”的时序图如图4所示,从时序图片断中可以看出各模块间的交互关系,这些交互关系定义了每个模块对其他模块的外部接口。其中CallLog 模块的外部接口有:接口1——存储来电记录(StoreCallLog ToQueue),接口2——查看来电记录(Display CurrentCallLog),接口3——显示号码(Display PhoneNumber)等。
这些接口可大致分为两类:接口1 与Data 直接相关;接口2 和接口3 与UI 直接相关,而后者又与Data 间接相关,即需要访问Data 的某些接口。因此在Call Log 子模块——allLogData中,接口被分为三个层次,如图5所示。图中符号“+”代表该接口可被外部模块访问,“#”代表该接口可被模块内部其他子模块访问,“-”代表仅能在该子模块内部访问,其中包含相关的数据信息。
从图5可知:CallLogData 子模块中必须被维护的外部接口为StoreCallLogToQueue 函数,该函数被Call 模块所调用;-CALLLOGITEM 数据结构被局限于CallLog 模块内部访问,可以被CallLogUI 子模块引用;而_CALLLOGQUEUE 数据结构被局限于CallLogData 子模块内部访问,不能被其他任何文件引用等。这些信息在分析与设计阶段已经被充分考虑,此处以源代码的形式在实现阶段保留下来,分别被不同的开发人员所理解和维护。
4结束语
本文通过前述三种封装和访问机制,保证了架构中各个模块接口的实现和模块的独立性[8],应用面向对象思想和三级封装和访问机制之后,模块与模块之间的依赖通过.i文件进行,内部依赖通过.h文件进行操作,相互依赖性减少,模块的独立性增加;系统设计信息和模块设计信息分离,分级暴露数据结构和全局变量的定义;另外模块接口不变,内部接口的修改对其他模块没有影响,修改代码也少。总之,在结构化编程语言中采用面向对象思想进行设计,一方面需要有面向对象分析的思想,另一方面需要提供恰当的封装和访问机制,这样才能更好地实现模块化,提高手机开发平台的可扩展性和可维护性。
参考文献
[1]黄锡伟,胡建彰.一种基于面向对象思想和结构化技术的软件开发方法.小型微型计算机系统,1996;17(4):17—24
[2] Erich G,Helm R,Ralph J,et al.设计模式—可复用面向对象软件的基础.李英军,马晓星,蔡敏,等译.北京:机械工业出版社;2000
[3]车万方,张凤鸣,宋志平.基于UML的C3I系统体系结构的面向对象分析和设计方法.系统工程理论与实践,2003;23(7):88—94
[4]赵慧.面向对象技术模式之Singleton及其应用.南通职业大学学报,2004;18(2):43—46
[5]龙鹏飞,张芳.面向对象方法在嵌入式应用软件开发中的应用.计算机应用与软件,2007;24(8):53—56
[6]谭浩强.C程序设计(第四版).北京:清华大学出版社,2010
[7]何昭.基于面向对象框架的软件开发方法.计算机工程,2002;28(4):5—6
面向对象思想 篇8
软件无线电系统具有开放、标准、可扩展的特性,同时具有较高数据吞吐率的硬件体系结构[1],已被广泛应用于雷达、电子战、测控等军事网络系统。随着此类系统工程的日益庞大,传统从下而上的大系统集成设计方式,已经无法满足应 用体系的 构建需求。 系统体系 (SystemofSystem,SOS),又称“系统的系统”,为此类大 型应用系 统的开发提供了一种解决方案。
系统体系将系统描述成由众多组件系统(ComponentSystem)集结而成[2]、组织关系松散的自适应体系,尤其适合于构建软件无线电系统这样一个由若干个天线、数字接收机、信号处理机、控制计算机和数传板等有限硬件和大量信号处理软件组件集成的相互协作的复杂系统。
在以往软件无线电系统产品的研发过程中,通常采用面向过程的设计方法。由于面向过程的设计方法倾向于针对特定需求开发一种相对稳定的集成系统体系结构(内向型体系结构),而软件无线电的应用领域十分宽泛,应用的作战环境复杂、作战使命千变万化,系统组成日益复杂,使用面向过程的开发思想,显然已难以满足软件无线电系统体系设计的要求。相对于传统的设计方法,面向对象的设计方法自始至终保 持连贯可 重用性,具备良好 的扩展性,这种自底向上归纳和自顶而下分解相结合的方法,更适用于软件无线电系统体系设计。
本文将面向对象的思想引入软件无线电系统体系设计中,以系统建 模语言 (SystemModelingLanguage,SysML)为建模工具,举例说明一个典型的软件无线电系统体系的设计过程。通过分析这种面向对象思想的设计方法,指出其应用价值。
1软件无线电系统体系
系统体系是一系列以任务为导向的专用系统的集合,集合而成的新系统不只是原有组件系统功能和性能的简单堆砌,而是能够根据系统目标和不断变化的需求进行重组,完成固定系统所不能达到的系统目标。系统体系具有组件系统自治管理、相互协作、松耦合集成的特点,并具有能够根据需求变化柔性应对的特性。本文将系统体系的概念引入软件无线电系统设计中,目的就是根据软件无线电的特点寻找一种适合软件无线电系统体系的设计方法。将软件无线电的组件系统定义为各自独立的分系统,将整个系统体系视为使用方,每个组件分系统视为提供方,则一个具备SOS特性的典型的总线式软件无线电体系结构可用图1来表示。
从图1可以看出,标准组件提供方负责建立、维护、升级和发布标准组件库,如适应不同工作性能、状态和环境的信号处理组件。所有组件系统均按照技术标准保证技术实现,并分类、分层管理,定期发布组件索引库,提供指标、接口和能力等条件的搜索接口。
使用方在搭建软件无线电系统时,首先根据系统需求明确执行的技术标准、接口协议和总线系统,分析系统需要的组件类,并分解、计算出组件接口和指标,然后根据这些因素在组件系统指标库中搜索适用的标准组件,通过搭积木的方式实现系统。
由此可见,使用方不需要关注组件的具体实现细节,只需将设计重点放在分析系统的技术标准、接口和指标能力上,从标准组件库中选择最优的模块组合,从而实现软件无线电系统体系根据需求状态而“柔性”变化。同时,相对统一的组件系统指标库和技术标准,也可以保证不同软件无线电系统之间的横向复用性。
2面向对象设计过程
2.1面向对象思想与建模语言
起源于软件工程领域的面向对象思想,强调从客观世界固有的事物出发,用人们认知世界和描述客观事物的思维习惯,强调客观事物的对象映射,对象与对象之间的关系如实地反映客观事物及其关系。使用面向对象方法可以保证系统设计的可重用性、可扩展性和可维护性。
SysML是在UML2.0基础上外扩的一种面向对象建模语言,支持包括 美军的国 防部体系 结构框架 (DepartmentOfDefenseArchitectureFramework,DODAF)和我军的C4ISR (Command、Control、Communications、Computers、Intelligence、Surveillance、Reconnaissance)系统在内的系统体系架构标准。SysML能对系统工程的各种问题进行建模,适用于系统工程的不同阶段,特别是在系统工程的详细说明阶段和设计阶段,使用SysML来说明需求、系统结构、功能行为和分配非常有效[3]。因此,可以使用SysML对具有面向对象思想的软件无线电系统体系进行建模。
SysML的图形分类如图2所示,共定义了9种视图,分为4类,即需求图、结构图、行为图和参数图。行为图包括活动图、时序图、状态图和用例图;结构图包括块图、内部块图和包图。在完成系统建模的过程中,可以根据需要选取SysML中9种视图中的任意组合进行分析描述。
2.2软件无线电系统体系的面向对象设计过程
众所周知,面向对象设计方法具有抽象性、封装性、继承性和多态性。利用其抽象性,将每个组件系统视为一个类或者对象,从而确保组件系统的管理独立;利用其封装性,保证组件系统独立操作的能力;利用其继承性保证组件系统的演化发展;利用其多态性保证组件系统在不同软件无线电系统中的呈现行为;面对对象的设计方法对组件系统的地理位置无特殊要求。通过以上分析可以看出,面向对象的以上四大特性可以满足系统体系的五大特征,因此,在复杂的软件无线电系统设计过程中,使用面向对象的设计方法,能够始终保持系统体系的“柔性”特征。
使用面向对象的方法进行软件无线电系统体系开发,须遵循两个基本原则:“自顶向下,宽度适当”和“基于信息的交互”[4]。体系结构产品描述的首要原则就是“自顶向下,宽度一致”[5]。所谓的自顶向下就是将软件无线电系统视为一个“黑箱”,依据对其应用需求的分析,将这个“黑箱”划分为天线、接收机,处理机和控制台等顶层组件,再分别对这些组件逐层分解成二级组件、三级组件……随着分解层数的增加,分解的组件成几何级数增长,将导致管理和研制成本的急剧增加,因此要根据项目的技术特性适度控制分级的层数;同时,为了避免分解层次的“烟囱式结构”,也需要控制分解粒度,即控制每一个组件组成的横向宽度。一个软件无线电系统被自顶而下地从系统级分解到分系统级,从分系统级分解到单机级,再从单机级分解到独立的子模块级,在完成系统体系架构的同时,也保证了系统的纵向重用性和横向扩展性。
按照面向对象方法,系统体系中每个模块可以抽象为一个类。系统设计师在构建软件无线电系统时,以无线电信息的获取、处理、传输和应用为主线,将系统工作过程中涉及的模块映射为一个个相互交互的类或者对象,依据模块的接口、能力等确定类的输入和输出元素,使用对象、类之间基于数据的交互机制来实现软件无线电系统内部组件之间的信息交互。
基于以上设计原则,使用SysML建模语言和面向对象的设计方法来描述软件无线电系统体系的设计过程,可以分为4个步骤:建立需求模型、确定结构模型、明确模块之间的交互模型、设置参数模型。本文以图1中所示的总线式软件无线电系统体系为例,描述面向对象方法进行系统设计的4个步骤。按照系统特性和关键技术要求等因素可以对软件无线电系统的组件系统进行进一步分解,在分解建模的过程中,可以选取SysML中9种视图中的任意组合进行分析描述。
2.2.1系统需求模型建立
利用需求模型建立系统需求是系统设计的第一步,一个简易的软件无线电 系统需求 可以描述 为如图3所示。需求模型按照层次化的方式描述系统需求之间、需求与其它需求之间的关系。
如图3所示,一个简易的软件无线电系统需求包括总体需求、功能需求、性能需求和资源需求等基本需求,并可以在基本需求的基础上从横向和纵向上扩展,丰富系统的需求描述。
2.2.2系统结构建模
系统需求描述完以后需要进行系统结构建模。可以使用SysML中的块定义图 和内部块 定义图对 系统结构模型进行描述。块定义图是对系统组成结构和系统结构层级化的可视化定义 和展示,模块层级 化关系包 括组合关系、聚合关系和泛 化关系等。内 部块图从 模块组件 如何相互连接的角度来描述模块的内部结构情况和联系方式。一个简易的软件无线电系统的 块视图如 图4所示,图中顶层为软件无线电系统(系统),其中数传系统、控制计算机、信号处理机、数字接收机和天线是其固有资源(资源),信号分析处理机可以在不同系统中应用是其临时资源(实体)。
2.2.3系统交互模型确立
系统需求和结构特征固化了以后,系统设计的重点就是要明确系统组件之间的行为关系。SysML中提供了活动图、用例图、状态图和时序图4种视图来表示系统的行为特征。根据软件无线电系统体系的特点,可以选时序图作为内部组件交互关系的主要视图描述。
2.2.4系统参数模型设置
系统设计的最后一步是设计参数结构及关系,以表示各个组件属性值之间的耦合关系,以及各属性值的变化对其它属性的影响程度,如软件无线电系统中采样速率和带宽之间的参数关系。借助于SysML建模方法,可以使用SysML的参数图来描述系统性能指标参数方面的要 求、约束及关系、定义系统属性以及属性之间的关系。
通过以上4个步骤完成软件无线电系统体系的分解,建立需求模型、结构模型、交互模型和参数模型,分别从不同的角度对总线式软件无线电系统进可视化描述,实现系统的总体架构设计。
3面向对象软件无线电系统体系设计应用价值
使用面向对象软件无线电系统体系的设计方法,可以使系统设计人员只关注某个层次的组件设计、组件属性和组件之间的关系,而不需要深入到各个组件的内部详细设计。与传统设计方法相比,采用面向对象系统体系设计方法具有广泛的优势,两者特性比较如表1所示。
从表1可以看出,面向对象体系系统设计方法,将系统组件抽象成一个类或者对象,保证了系统的封装性和继承性。其系统体系特性具备扩展性,子系统之间能够实现松耦合、动态组合和自治管理。这种设计方式非常适用于软件无线电系统应用领域,能够满足越来越复杂的系统架构和需求多变性要求。
4结语
本文将系统体系的概念和面向对象的设计思想引入软件无线电系统开发中,提出了一种软件无线电系统的设计方法。以一个总线式软件无线电系统为例,从系统顶层开始分解,将组件系统抽象成一个独立的类或者对象,使用当前流行的系统建模语言SysML进行系统建模。利用这种逐层分解、分析建模的设计方法,可以使软件无线电系统体系的设计具有面向对象的特性。对比分析表明,这种设计方法具有较好的应用前景。
摘要:为了适应并促进软件无线电应用系统的发展,提出一种基于系统体系(System Of System,SOS)的概念和面向对象思想的设计方法。通过对软件无线电系统体系和面向对象设计方法特性的分析,确定使用面向对象设计方法的合理性。以一个简要的软件无线电系统体系设计为例,使用系统建模语言(System Modeling Language,SysML),介绍面向对象设计具体步骤。
再谈面向对象和面向过程技术 篇9
面向对象和面向过程的程序设计技术现在再来谈论,似乎是一个过时的话题。但是,教学中至今针对两者的关系理解不够透彻的学生不在少数。在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.
从面向过程到面向对象的变革 篇10
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.
面向对象思想 篇11
关键词:农业;学习对象;粒度;语义结构;分类法
中图分类号:TP311.52;S126 文献标志码:A 文章编号:1002-1302(2014)03-0357-03
作为一种可重用、易获取、适应性强的数字化教学内容构件,学习对象(learning object)正受到国内外教育技术界的日益关注,并已逐渐应用于高校、企事业单位的E-learning平台和知识管理系统等。学习对象的核心特性是可重用性[1],其理想状态是可供不同时间、不同地点的不同使用者出于各种目的而使用。但纵观当前各类E-learning平台,学习资源多以课程为单元进行整体设计,课程结构一般由篇或章节构成,在实际使用时缺乏可重用性和灵活性,往往造成网络教学资源的重复建设。因此,本方案拟结合客户(某大型农业企业培训学校)的实际需求[2],改变传统的课程加工模式,尝试采用基于知识模块的学习对象模型,即按照一定的粒度和方式,将知识分解为内容相对完整的模块,同时,根据具体的学习和授课需求又可以将这些模块灵活组装,针对不同学习者呈现不同的学习路径和页面风格,从而构建出一个多层次、多粒度的可重用知识体系(图1)。
1 研究背景
1.1 学习对象理论
学习对象是结合了面向对象的计算机科学思想和有关教学理论而产生的一种新型计算机辅助教学构件。学习对象较典型的定义是任何具有可重用特性并用来支持学习的数字化资源[3]。根据该定义可知,学习对象可以是一个小程序、动画、文本块、视频流或其他形式,也可以是在技术支持学习的过程中用到的多媒体内容、教学内容、学习图标、教学软件及软件工具,所涉及到的人、组织或事件等。
学习对象的核心特性是可重用性,其实现需要内容设计、技术手段和应用方法3个方面的因素保证[4]。内容设计因素是指一个学习对象应该尽量独立完成知识点或知识块的教学目的,无需过多地求助于其他教学资源或学习对象;技术设计因素是指学习对象采用数字化设计,易被搜索获取到,能够跨平台使用,并具有兼容性技术构造;应用方法因素是指学习对象要具有灵活性、适应性,如能够适应学习者的特征、实现个性化定制、能够被灵活改制等。
1.2 需求分析
本研究的目标是对客户现有知识资源进行分析评价,制定基于知识模块的可重用学习对象模型的设计原则,为实现课件模块的开发、重用和共享提供基本流程规范和设计层面的支持,从而建立具有独到竞争优势的高效在线培训体系,进而成为未来构建智能知识服务系统的数据基础。
通过分析结果可知,该农业企业培训学校知识资源的主要特点表现为:(1)信息量大。从知识的领域范围来看,涵盖了农业系统、管理、教育在内的多个领域,是一个跨领域综合的知识集合。(2)信息的表现形式多。信息形式多种多样,包括教学及相关辅助资源在内的多种知识资源,如制度、案例、记录、报告、标准、规范等。(3)信息格式复杂。包括文本、音频、图片、PPT等多种格式的信息混杂在一起。(4)信息收集地点分散。信息来源丰富,如教师的课堂录音、课件PPT、相关管理部门、网络等。(5)使用信息的用户不同。用户类型包括企业普通员工、企业管理部门、普通企业客户等。每种类型的参与者都有各自的信息需求,需要的信息范围、侧重点都不一样。(6)资源数量和资源类型不断扩展,内容不断变化更新。
根据上述资源特点,可分析得出在该项目中学习对象的应用需求,具体包括:(1)支持微型学习。微型学习是指随时随地可能发生的、可持续性地处理碎片化学习内容的学习活动,要求课程学习内容和资源的获取具有随意性,课程学习内容具有实效性、可操作性和可再生性。有别于传统的以1节课为最小粒度的学习对象,学习者可能只需要学习知识体系中一个很小的片段。(2)支持个性化学习。该需求打破了传统固有的课程结构,学习者可以根据自己的学习起点、学习层次等实际需求,进行跳跃式或查漏补缺式的学习等,同时可以根据实际学习效果自主调整学习策略和学习路径。(3)支持自主组课。组课的过程是面向特定教学群体的知识重用过程。该需求要求对知识资源的内在逻辑结构进行梳理分类,同时能够对学习对象的语义结构进行准确描述。
1.3 研究重点
根据上述应用场景得出学习对象的分析流程(图2)。由图2可知,在学习对象的分析流程中需要考虑若干问题。其中,设计合理的知识粒度层次、对其语义结构属性进行准确表达,同时对知识资源进行分类梳理,是本试验重点研究的关键问题。具体研究重点如下:(1)粒度。学习对象的力度大小是决定学习对象重用共享的重要因素。目前对学习对象的粒度缺乏明确规定[5]。粒度划分过大,重用性会降低;粒度太小,知识体系结构的复杂度会增加;如何根据用户的实际教学需要,确定适宜的学习对象粒度是大家需要解决的首要问题。(2)描述。应采用最本源的概念形式对学习对象进行简明清晰的描述,以准确表达学习对象的语义内容,对粒度划分进行指引,减少加工人员的主观性偏差,同时为教师组课提供辅助。(3)分类。为了实现学习资源的交换、共享和重用,需要对各类知识资源的逻辑关系、耦合关系进行梳理、整合,建立科学合理的类目体系,以便对资源进行分类组织。
2 模型设计
2.1 学习对象粒度
当一个学习对象规模越大时,它的内容就能越完整,更有利于实现教学目标,所表现出的教学意义也就会越高;但同时,它的灵活性与可重用性却随着规模的增大而相应变小。在综合分析用户需求及资源特点的基础上,本项目提出以知识模块为最小教学单元的多粒度学习对象模型(图3)。其中,知识模块是模型中最小粒度层级;章节指若干知识模块的组合;课时为若干章节组合所得的一节课;课程是具有完整教学意义的多个课时组合;课程体系则指一门完整知识体系的教学结构集合。学习对象各个层次的聚合特性如表1所示。
nlc202309032002
从表1可以看出,当一个学习对象规模越大时,它所包含的教学信息越多、内容越完整,更有利于实现教学目标,所表现出的教学意义也就会越高;但同时其灵活性随着粒度的增大而相应变低。
本研究所提出的知识模块是学习对象模型的基础与核心。将原始文献拆分为若干相对独立的知识模块,从而使知识点脱离原有的上下文语境,可以单独使用,也可以与其他模块组合成章节,在知识的表达和传递上更加灵活,具有更强的适应性。
将知识模块的划分原则设定为:(1)知识模块相对独立。模块内容应表达单一的知识含义,即与语言中的“语素”含义近似,模块内容只包含一个单一的知识含义,不存在一个知识模块中多重表意的现象。(2)知识模块已是最小知识单元,不能再细分。
2.2 知识模块描述
根据上述粒度原则可知,知识模块是最小知识单元,每个模块都可以从若干角度对某个概念进行说明,大家将这些角度称为概念的属性[6]。每一概念的属性和包含的知识内容就是一个知识模块,它单独表意,没有再细分的必要。有研究表明,当一个知识点的粒度处于不可再拆分状态时,其内容往往是围绕着一个特定概念的某种属性而进行论述的,换句话说,一个概念加一个属性就可以完整表达一个基本的知识内涵,因此为了实现知识处理的简单化和关系描述的标准化,可以将每个知识单元的描述概念化,即定义一个2元组:知识模块=(概念|属性)。此外,一个知识模块还有可能同时描述多个概念,对于这种情况则将知识模块定义为:知识模块=(概念1,概念2,…,概念N|属性|概念间关系)(图4)。
一篇文献中可能有多个概念,一个概念也可能有多个属性,概念和属性之间是“一对多”的关系。可以通过对现有知识资源进行分析,总结出一些通用属性以作指引。例如,从知识阐述形式的角度可以总结出定义、背景、解释、分析、比较等属性;从知识约束内容的角度可以总结出条件、目的、范围、影响、优缺点等属性。此外,一般来说,不同类型的文档都有其通用的层次结构,可以针对资源的不同类型总结其结构属性。知识模块的语义描述对用户的检索和精确定位、自主组课都至关重要,同时也为原始课程文档的拆分确定了依据和原则。
2.3 知识资源分类
为了有效地创建、组织和编列学习对象,有必要对各类知识资源的逻辑关系、耦合关系进行梳理、整合,建立科学合理的类目体系[7]。目前常用的线性分类法层次性好,能较好地反映类目之间的逻辑关系;实用方便,既符合手工处理信息的传统习惯,又便于电子计算机处理信息。但其缺点在于结构弹性较差,分类结构一经确定,不易改动。同时,当分类层次较多时,代码位数较长、效率较低。分面组配分类法可以较好地解决电子资源分类问题,而且本身建设成本较低,能够适应资源的变化,揭示细小专深的主题。但是绝对的组配也会带来类目及其不均匀,临时组合对标引要求较高的问题。因此,本方案采用半分面组配式分类法,结合线性分类法和分面组配法的优点,在有效控制分类法规模的同时,提高分类体系的适应性和灵活性,降低标引难度。
笔者以《中国农业百科全书》《中图分类法》等为参考,首先从知识内容的角度切入,以学科脉络为主要依据,按照信息资源描述的主题内容建立分类主分表,以涵盖知识资源的全部领域范围(表2)。
3 总结
本研究提出了一种面向农业领域的可重用学习对象模型,针对当前企业E-learning和知识管理系统中存在的可重用性需求,重点对学习对象的粒度、知识模块描述、知识资源分类等关键问题进行研究,为学习对象最大程度的重用和个性化学习提供支持,为下一步技术平台开发和应用奠定良好的基础。
参考文献:
[1]胡小勇,祝智庭. 可重用学习对象的分类法[J]. 电化教育研究,2003(8):9-12,17.
[2]李建龙,李 鹤,刚成诚,等. 5S一体化集成技术及其在农业科学中的应用进展[J]. 江苏农业科学,2010(5):26-29.
[3]David A W. Connecting learning objects to instructional design theory:a definition,a metaphor,and a taxonomy[EB/OL]. [2013-05-08]. http://archive2.nmc.org/projects/lo/sap_pa_wiley.shtml.
[4]祝智庭,胡小勇. 学习对象理念的发展历程[J]. 电化教育研究,2002(9):14-19.
[5]Reusable Learning-Glossary[EB/OL].(2010-10-08)[2013-05-08]. http://www.innovativelearning.ca/archive/resources/examples/glossary.htm.
[6]Information mappin[EB/OL]. [2013-05-08]. http://www.namahn.com/resources/documents/note-IM.pdf.
[7]马张华. 信息组织[M]. 3版.北京:清华大学出版社,2008:74-130.
[8]陈洪澜. 论知识分类的十大方式[J]. 科学学研究,2007,25(1):26-31.
面向对象思想 篇12
关键词: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.