面向对象方法学概述十篇

2024-09-12

面向对象方法学概述 篇1

软件维护活动成本占软件产品总成本的40%上,回归测试是软件维护活动一个必要组成部分,它用来确保修改后软件的正确性,提高软件产品质量。回归测试成本是昂贵的,它占软件维护活动成本的1/2左右。软件产品在软件维护阶段,由于用户需求或者功能发生变化而需要对软件作出修改,要确保修改后软件的正确,进行的测试被称为回归测试。回归测试需要解决3个基本问题:(1)怎样鉴别那些受到修改影响的部分(修改影响分析);(2)采用什么策略来重测受到影响的部分;(3)测试用例排序,即测试用例的执行顺序。

1 鉴别受到修改影响的部分

作为面向对象软件,类是一个最小单元,以它来创建软件类关系图进行分析软件修改受到影响是比较全面的,本文在类关系图的基础上提供一个有选择策略测试技术。

找出受影响的类从3个方面考虑:(1)统计修改的类以及受影响的类。建立类间关系图,找出修改的类以及影响的类;(2)统计类中成员函数发生的变化的类。建立图类成员函数图,找出相应的继承关系类和应用关系的类,为了考虑程序的安全性,我们除了要考虑全部涉及修改的类以及它的继承类外,还要考虑其引用类;(3)根据所有修改的类,进行测试用例选择。

2 重测受到影响部分的策略

对受到影响部分,重测所有用例会花费不必要的成本,而通过测试选择技术,复用已有用例,从原有用例集中选择部分用例进行测试,可以减少回归测试成本。当测试一个程序时,测试员衡量测试用例集对程序的覆盖范围,这样的工具很多,我们可以用矩阵来表示,如表1所示。

测试用例本文采用的方法是对所有受影响的类,从测试用例集中找出覆盖这些类的测试用例。

从表1中可知:测试用例t1类c1和类c2,测试用例t2覆盖了类c1和类c3,t4覆盖了类c1,c3和c4,而t3没有覆盖任何类。而我们选择最少覆盖的一个类的测试用例,为了精简测试用例,故我们选择测试用例t2和t4就可以测试受影响的类c1、c2、c3和c4。

3 测试用例排序方法

回归测试选择技术存在以下不足:(1)最小策略可能导致用例的错误检测能力下降;(2)在无法对所有被选择的用例进行测试的情况下,不能保证测试可信度。

测试用例排序技术是根据给定的测试准则对测试用例集中排序,对优先级高的优先测试。我们将测试用例排序技术引入回归测试选择技术中,可以有效解决以上不足。(1)测试用例优先排序使用如下准则进行排序;(2)错误检测率,即尽可能早的在测试过程中暴露错误;;(3)覆盖率,即使用例覆盖尽可能多的程序语句、程序流图的边和分支;(4)系统可靠性,即尽可能早的确认系统可靠性;(5)高风险错误检测率,即尽可能早的发现可能导致较高风险的错误;(6)相关代码错误检测率,即尽可能发现与特定代码相关的错误。

本文采用准则1,即错误检测率来作为排序准则。因为高错误检测率有如下优点:(1)有助于开发人员尽早开始程序调试、修改,从而加快版本发布进程;(2)有助于尽早获得对程序修改正确性的反馈,有助于在测试过程意外中断时,尽可能提高测试效率。

本文采用平均错误检测覆盖率来对用例进行排序,考虑测试用例集T,包含A、B、C、D、E,错误检测情况如表2所示:

我们根据表的例子来说明测试用例排序不同,对代码检测率也不同。如测试用例执行的顺序是A-B-C-D-E如图1所示,执行测试用例A后,能够检测出两个错误,还有80%未检测出来,再执行测试用例B后,又多检测出了两个错误,还有60%未检测出来,依次类推,最终未检测的覆盖率为50%。而测试用例排序为C-E-A-B-D如图2所示,执行测试用例C后,未检测错误40%,再执行E后,则全部检测完错误,故未检测的覆盖率为16%。

因此对于测试用例排序是非常重要的,而对于我们找出测试用例t2和t4,如果执行的顺序是t2、t4,则未检测的覆盖率为50%,而t4、t2执行未检测的覆盖率只有25%。

4 结束语

完全回归测试不仅没有必要,而且由于测试成本等原因,也是不可能的。本文对面向对象软件类进行分析,从而产生测试用例,再对测试用例进行排序。这种方法即经济,又可靠和有效。

摘要:对面向对象软件回归测试的方法进行研究,该方法先对类及受影响的类进行分析,找出这些类,然后从测试用例集中找出覆盖所有受影响的类,最后进行测试用例排序进行执行。这种方法有效、经济和安全。

关键词:测试用例,类分析,用例选择,用例排序

参考文献

[1]张志军.面向对象软件的回归测试策略研究[D].中国优秀博硕士学位论文全文数据库(硕士),2005.

[2]陈茹.基于多层次功能模型的软件回归测试技术研究[D].中国优秀博硕士学位论文全文数据库(硕士),2004.

[3]Ren F,Shash F,Tip F,et al.A Tool for Change I mpact Analysis of Java Programs.Technical Report DCS-TR-551,Depart ment of Computer Science,Rutgers University.2004(6).

[4]Rothermel G,Harrold MJ,Dedhia J.Regression Test Selection for C++Software.Journal of Software Testing Verication,and Reliability.2000,106,10(6):77109.

[5]Mary Jean Harrold,James A Jones,et al.Regression test selection for Java software.2001:312-326.

[6]胡岳峰.两两组合覆盖测试用例生成研究及优化[D].中国优秀硕士学位论文全文数据库,2008.

面向对象方法学概述 篇2

面向对象是一种思想。马克思主义哲学在开篇就定义到:“世界是物质的, 物质是运动的”。前半句话就是面向对象的体现, 把世界万物都作为对象来考虑。

目前, 面向对象的思想已经涉及到软件开发的各个方面。例如:面向对象的分析 (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

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

关键词:面向对象程序设计 结构化程序设计

一、面向对象设计方法

软件设计有两种主流设计方法:以结构化程序设计为基础的结构化软件设计和由面向对象设计方法导出的面向对象的软件设计, 20世纪70年代末到80年代初的结构化设计方法即传统设计方法,以区别于后来兴起的面向对象的设计方法。在软件设计周期中,面向对象设计方法是一种全新的设计和构造软件的方法,它使计算机解决问题的方式更符合人类的解决问题的思维方式,更能直接的描述客观世界,同时也可以增加的代碼的可重用性,是目前和未来软件开发的方向[1]。

面向对象设计在整个软件设计中占据着非常重要的部分,面向对象设计也是将分析阶段所建立的分析模型转变为软件设计模型,但是面向对象分析和面向对象设计之间没有明显的界限,面向对象的方法是基于抽象、信息隐藏、功能独立和模块化等重要软件设计概念基础上的,现阶段的软件设计基本上都运用了面向对象的设计方法[2]。面向对象的开发支持鼓励软件实践中的信息隐藏,数据抽象和封装,可以对单独对一个对象内部进行隔离修改,那么就使得运用面向对象开发的软件更容易修改、扩充和维护[1]。

对象和类是面向对象程序设计的基石,其基本的机制便是方法和消息。消息是要求某个对象执行类中某个操作的规格说明;方法就是对象执行的操作。面向对象程序设计三个重要特征:封装性,继承性和多态性。

(一)对象(Object)和类(Clasess)

对象即指现实生活中无所不在、各种各样的实体,它可以使具体的事物,也可以是抽象的实体[2]。从对象的构成和内容来看,设计程序时使用对象有以下优点:对象是对物体的直接抽象,这种抽象简化了实际物体的模型,同时以一种可以操作的形式将实体表达出来。进行了数据的封装后,掩蔽了实现的复杂性,对于用户使用起来就更加方便。

在现实生活中,具有相似性质,执行相同操作的对象,称为同一类对象,即类是同一种对象的集合与抽象[2]。例如,在Visual Basic中窗体都是Form类的实体,一个单独的窗体也是一个类。

(二)数据封装(Data Encapsulation)

数据封装是类的一个重要特性。数据封装是把数据和相关的操作设在一个包中,那么程序不能直接访问对象中的变量,只有通过对象的方法才能作用于数据。

(三)继承(Inheritance)

我们首先在对象的基础上创建对象,新的对象就会继承原先对象的所有属性和特点,同时根据实际情况也可以选择和修改父对象的属性和功能,这就叫做继承。利用这点,可以将旧的程序扩充为当前所需要的,也可以从已知的类中派生出新的类来。

(四)多态性(Polymorphism)

多态性就是多种表现形式,不同事物具有不同表现形式的能力,具体来说,可以用“一个对外接口,多个内在实现方法”表示。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。

二、结构化程序设计与面向对象程序设计

结构化程序设计是由算法和数据结构组成,算法指处理数据的特定的方法。结构化程序设计首要想法是如何处理数据,然后再选择最为方便处理的数据结构,那么重点主要集中在数据上了。结构化程序设计的基本思想是:系统按功能要求分解为若干个子模块,子模块再根据需求进一步分解为子模块,不断的进行分解,从上往下进行分解,这样的形式是自顶向下的“瀑布式”设计,仅运用了顺序、分支和循环三种结构设计编码。

面向对象程序设计中,用户需要做的事向对象传送消息。编程人员在设计过程中要做的就是向对象处理适当的消息以及它的内部数据,这样就最大限度了提高了代码的可重用性,缩短了调试时间。面向对象程序设计与结构化程序设计是相反的,面向对象的程序设计是从下往上的“喷泉式”的设计,对象是数据处理方法紧密结合的整体。

三、Windows及应用程序与面对对象的程序设计

Windows中的图形用户接口包括窗口,下拉式菜单,对话框等各种控件,这就使得Windows应用程序非常容易使用。我们用结构化的程序设计方法开发Windows应用程序非常困难,即使要在屏幕上生成一个简单的窗口或是一个简单的下拉式菜单也要编写几十条甚至几百条复杂的代码,写这些代码的前提必须是我们对Windows具有非常深入的了解。那么在这种情况下,一种开发时间短、质量高、复用性高等比结构化程序设计方法优良的设计方法。由于Windows的进城的核心也是对消息的处理,因此Windows程序编程是以消息为核心。消息也是面向对象程序设计的基本机制,程序的进程的核心也是对消息的处理,因此面向对象程序设计比结构化程序设计更适合于开发Windows应用程序。利用面向对象程序设计的封装性可以把Windows应用程序的所具有的行为进行封装,形成一个类层次库,这样就为Windows应用程序提供一个一致、直观和简单的与Windows的接口。面向对象程序设计具有继承性这一特性,Windows的应用程序可简单、方便的继承和选择性的使用Windows特性而不必重写这些代码,同时,编程人员也可以借用其他应用程序的功能代码,或是稍作修改,也不必考虑Windows底层的细节。那么这样看来,类层次库就大大的降低了Windows程序设计的复杂性,编程人员也不必一条一条代码的编写,显著的减少了创建Windows应用程序界面所需的源代码量,因此面向对象的程序设计在开发应用程序方面显示出巨大的优越性。

四、结语

面向对象的程序设计方法是当前软件设计的一个主要潮流,采用这种方法开发出的软件具有极大的稳定性、可维护性和可重用性,面向对象程序设计方法运用于软件设计中极大的提高的功能代码的复用性,大大的提高了工作效率。

参考文献:

[1]李双双,李探.面对对象的设计方法[J].计算机光盘软件与应用,2010年第5期

[2]史济民,顾春华,李昌武,苑荣.软件工程——原理、方法与应用(第二版)[M].北京:高等教育出版社,1990

面向对象方法学概述 篇4

面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。面向对象方法学具有下述4个要点。

(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成。

(2)把所有对象都划分成类(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。

(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。

(4)对象彼此间仅能通过发送消息互相联系。

也就是说,对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性。

2. 面向对象方法学的优点是:(1)与人类习惯的思维方法一致(2)稳定性好(3)可重用性好

(4)较易开发大型软件产品(5)可维护性好

3. 对象的概念,对象的特点?

对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以惟一地标识它的名字,而且向外界提供一组服务(即公有的操作)。特点:

① 以数据为中心。不设置与数据无关的操作;

② Object主动处理而不被动地等待被处理,外部只能通过message请求操作;

③ 实现了数据封装。具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法; ④ 具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信;

⑤ 模块独立性好:内聚强(①)、耦合松(③ ④)

4. 类、实例、消息、方法、属性、封装、继承、多态性、重载的定义。

类:是对具有相同数据和相同操作的一组相似对象的定义。

实例:是由某个特定的类所描述的一个具体的对象。

消息:是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。

方法:是对象所能执行的操作,也就是类中所定义的服务。

属性:是类中所定义的数据。

5. 模型的概念,面向对象建模的概念。要建立哪些模型?

所谓模型,就是为了理解事物而对事物做出的一种抽象,是对事物一种无歧义的书面描述。建立三种模型:

① 描述系统数据结构的对象模型(object model).② 描述系统控制结构的动态模型(dynamic model).③ 描述系统功能的功能模型(function model).6. 对象模型是表示静态的、结构化的系统的数据性质。类图是描述类及类与类之间的静态关系。包括定义类、定义属性、定义服务。7. 表示关系的符号:类与类之间通常有关联(Association)、泛化(Generalization)、聚合(Aggregation)、组合(Composition)、依赖(Dependency)等关系。

8. 动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列

关联 泛化 聚合 组合 依赖

9.Association

Generalization

Aggregation

Composition

Dependency

动态模型三要素:

① 事件(event):引发 object 状态改变的控制信息(瞬时)。② 状态(status):即 object 的 attributes 所处的情形(可持续)。③ 行为(action): Object 要达到某种 status 所做的操作(耗时)。10.功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。功能模型由一组数据流图组成。

在面向对象方法学中,数据流图远不如在结构分析、设计方法中那样重要。11.UML提供的用例图也是进行需求分析和建立功能模型的强有力工具。在UML中把用用例图建立起来的系统模型称为用例模型。

面向对象方法学概述 篇5

在产品数字化设计制造过程中,三维CAD模型作为产品信息的重要源头,已成为进行工程分析、模拟装配、数控编程等后续工作的主要数据基础。这就使得有效保证CAD模型的准确性和规范性显得非常重要,因为只有从源头上保证数据的正确性,才能使后续工作顺利、高效、准确地进行[1]。然而建模中不可避免地会因为各种原因导致CAD模型存在各种问题,如模型有效性问题和标准化问题。如何快速发现问题并对其进行修正就显得非常重要。最早提出CAD模型质量问题的行业是欧洲的汽车工业。德国从上世纪90年代以来一直在研究汽车工业方面的CAD模型质量标准及与此有关的软件工具。美国波音公司也对CATIA系统上的建模过程提出了企业内的标准。我国虽然早在2002年就推出了CAD/CAM模型数据质量方面的国家标准(GB/T 18784-2002),但是在国内许多企业都对CAD模型质量问题没有足够的重视,缺少能够有效检查和管理产品模型质量的技术手段。一般侧重于在建模阶段建立符合数字化标准的CAD模型,目前在检查CAD模型质量上所做的研究工作及成果主要集中在专门行业、专门种类、特定CAD平台下的模型检查[2~5],缺乏高效方便的管理方式和统一完善的组织形式,对于一般企业的CAD模型质量管理人员而言可操作性差,难以推广应用。

鉴于此,本文提出一种面向对象的CAD模型检查方法。将检查实例抽象成可描述的对象,封装了待检查的元素对象、判断检查是否通过的判断条件、检查函数。以CAD模型的分类为基础建立对象的集合。对CAD模型质量进行检查并输出检查结果供返回修改或后续应用。

1 概念与总体思路

给出以下5个基本概念:

定义1元素对象(Element Object,EO):CAD模型中需要检查的最小单位,是CAD模型中的一个或多个产品数据的一部分,包括:几何元素、表达式、尺寸、参数、几何特征、约束、曲面性质等。

定义2检查实例(Check Instance,CI):是对单个EO执行检查的过程。

定义3检查对象(Checker Object,CO):是对模型检查实例(CI)的抽象和描述,是CAD模型质量检查过程中的基本单元,封装了元素对象、判断条件及检查函数。

定义4检查对象集合(Set of Checker Objects,SCO):多个检查对象的集合。依据需要检查的CAD模型的分类来定制。

定义5检查执行(Check Execution,CE):通过实例化检查对象或者检查对象集合,驱动CI的执行。

面向对象的CAD模型检查方法的总体思路为:基于面向对象的思想,将CI抽象成可描述的对象,通过抽象、封装、继承及多态机制支持对象的分类表示及层次结构。根据元素对象的分类对CO进行管理,依据CAD模型的类别对SCO进行管理。借助相应CAD平台下的二次开发工具获得元素对象,建立检查函数,构造检查对象的实例,实现CE的驱动,在CE中调用各个CO并执行其中封装的检查函数,以判断条件来判断模型是否具有期望的特征及属性,并输出检查结果供返回修改或后续应用。

2 关键技术

2.1 元素对象的分类

从需求上本文的元素对象仅考虑两个大类:模型是否满足标准化要求;模型本身是否有缺陷。其他的检查类型原理是类似的。

标准化检查包括:国标检查、行标检查、企标检查、部门标准检查等等。具体包括模型文件的命名规范、模型文件的存放路径规定、草图约束、标注规范、视图的规定、坐标系的规定、线宽的规定、图层以及颜色规定等等。

模型本身缺陷的检查包括:实体是否存在面面相交,平面或者片体上是否有裂缝,实体表面是否有微小的凸起等等。

从CAD模型的数据内容上考虑检查对象可分为图对象和文对象。图对象主要是CAD模型中的几何元素、特征、属性等,包括点对象、直线对象、曲线对象(包括自由曲线、圆、弧)、平面对象(包括实体上的平面、片体)、曲面对象(包括自由曲面、锥面、球面、柱面)、实体对象。文对象包括尺寸标注、约束、表达式、说明性文字等图对象之外的模型数据。

2.2 检查对象的描述

即将检查实例(CI)抽象出为可描述的对象。每个检查对象(CO)必须是能够独立地描述要检查什么,判断检查是否通过,如何检查。因此检查对象必须至少包括以下3个成员:

元素对象:每个检查对象的唯一性标识,指明要检查的模型文件中的数据对象。可以是CAD模型中的一个数据对象或者多个。比如草图所处的图层,标注的线型线宽、系统的距离容差、面光滑性、面边缘等等。可通过相应CAD平台的二次开发函数得到,其表示方式、数据结构依赖于相应的CAD平台。

判断检查是否通过的约束条件:由模型质量控制管理人员确定,以此判断检查内容是否通过。可以是一个固定数值、约束数值范围、字符串、表达式、列表等等。比如检查曲面的曲率半径是否小于某个给定的值R,则设置一个表达式Radius

检查函数:读取待检查的模型文件,根据检查对象指定的元素对象得到相应的数据,然后与判断条件进行比较或者匹配,判断检查是否通过,并输出检查结果。比如检查曲面的最小曲率半径时,先得到模型零件中所有曲面的曲率半径,通过匹配给定的表达式,检查是否存在曲率半径小于给定值的曲面。

检查对象的结构如图1所示:

2.3 检查对象集合

在实际应用中常常是针对某个零件(模型)进行多项检查,如果每次逐个选择检查对象并设置相应的参数然后依次执行检查则效率会很低。因此对于某一类零件的公共检查部分,可以将需要检查的检查对象集中在一个“大检查对象”里,实际上这是一个检查对象的集合。并可根据实际情况在标准化定制时对其中检查对象进行灵活的删减、增加或者修改。如图2所示:

检查人员对公共检查项按照标准化要求、下游应用要求等等配置集合中各个CO的判断条件。比如所有的草图必须放在21层~30层,所有的片体必须没有裂缝。这些要求在企业中相当长的时间内都是不变的,只有当执行的标准变动时需要修改检查项的判断条件,可很好的实现对模型检查知识的重用和管理。对于非公共检查项,需要根据具体情况进行逐个定制。

3 关键技术的实现

3.1 检查对象及其集合类的实现

将检查对象及定制的检查对象集合按上述方法封装为类,其定义格式如下:

检查对象类定义:

其中检查函数为相应CAD平台的API接口或者由接口为基础通过二次开发得到。

3.2 检查流程

面向对象的CAD模型检查流程如下:

1)读CAD模型文件;

2)读检查对象集合,得到集合中所有的检查对象;

3)读取第一个检查对象,得到元素对象、判断条件,运行检查函数,判断元素对象是否符合约束参数的要求并记录检查结果的相关信息;

4)执行下一个检查对象;

5)执行完集合中所有的检查对象,输出记录的检查结果供建模修改或后续应用,如图3所示。

3.3 检查结果的表示

可用XML文件输出检查结果,记录检查的CAD模型文件、检查对象集合、检查对象及每个检查对象的检查结果。检查结果有3种状态:通过,即CAD模型中包含元素对象并符合判断条件;未通过,即CAD模型中包含元素对象但不符合判断条件,当结果为未通过时记录模型文件中具体的未通过检查的对象;警告,即CAD模型中不包含元素对象。如图4所示:

4 实例

如图5为某航空发动机涡轮叶片CAD模型,需要检查其表面是否有裂缝及是否所有的草图都全约束,其中判断是否有裂缝所用的距离容差是0.025mm。以UG/NX5CAD系统为例验证本文提出方法的有效性。

在UG/NX5平台下可利用UG软件内嵌的面向对象的解释性语言KF(Knowledge Fusion),设计检查对象类及检查对象集合类。利用UG/Open API得到元素对象,建立检查函数,在检查函数中对元素对象与判断条件进行比较或者匹配,判断是否通过检查。

限于篇幅这里只给出了检查表面是否有裂缝的部分CO:

检查结果如图6所示。

结果显示叶片表面没有裂缝,但是有2个草图没有全约束,并给出了这两个没有全约束的草图的名字和所在的层。

5 结论

本文提出的面向对象的产品CAD模型检查方法,可推广应用到各种不同的CAD系统。通过以检查对象类的形式表达产品CAD模型的质量检查,使得开发人员可以根据要检查的CAD模型随时更改、添加和定制检查对象,而标准化人员、CAD模型质量管理人员可以灵活定制其中的判断条件,方便控制CAD建模质量,提高了对产品CAD模型检查过程的处理和组织能力。通过检查及时发现并改正产品CAD模型中存在的错误或不足,从而提高产品CAD模型的建模品质,为企业标准化与并行工程提供支持。

参考文献

[1]符刚,林晓星,徐秋杰.CAD模型质量保证方法研究[J].航空制造技术,2006,(3).

[2]李广文,黄翔,李迎光,鲁泳.CAD装配模型质量的研究[J].中国制造业信息化,2004,33(1)。

[3]陈青.汽车覆盖件CAD模型质量验证技术研究[J].机械工程师,2007,(7).

[4]尹卫星,胡青泥,齐晓松,吴金来.改进CAD模型数据质量的研究[J].机械工程师,2006,(2).

面向对象方法学概述 篇6

Microsoft Visual Basic(简称VB)是一个基于Windows环境的可视化、面向对象的程序设计语言。《Visual Basic程序设计》课程的教学目的是要求学员在VB的编程环境下,理解Windows应用程序开发的基本思想,掌握Windows应用程序开发的一般方法,并能使用VB这一编程工具开发初步的Windows应用程序。这一教学科目是飞行学员的未来作战和科研能力的重要基础和支撑技能。

与许多程序设计语言一样,VB也有自己的数据类型、函数、表达式、控制结构等语法规则,还有自身的事件过程和方法。其中,面向对象的事件驱动编程机制是VB与传统的面向过程程序设计语言最大的不同。在VB的教学过程中,注意培养学员面向对象编程的思维方法是学好VB课程的关键。否则,学员可能只停留在应试的水平,而没有真正达到“飞行学员人才培养方案”中《VB程序设计》的教学目的和要求。

2 重要概念

向学员介绍与知识点相关的基本概念是授课教员首先进行的教学工作。针对VB程序设计“面向对象”思维的概念应强调如下几点:

(1)对象:对象由程序代码和数据组成,是抽象的概念。

(2)面向对象的程序设计:把程序和数据封装起来作为一个对象,并为每一个对象赋予应有的属性,使对象成为实在的东西,这就是面向对象的程序设计。

(3)事件驱动编程机制:事件驱动编程机制是VB程序设计的主要特点。

通过着重强调以上几个概念,使学员对面向对象的基本知识有所了解和掌握,这对教员后续内容的讲授起到铺垫作用。

3 思维转变

利用计算机处理数据的最终目的是要获得有用的信息。要让计算机解决一个问题,首先必须针对要解决的问题编程,计算机才能在程序的控制下一步一步地工作,完成对问题的求解。针对一个具体的程序设计语言,学习者只有在采取了与该语言相适应的编程思维方法,才可能运用合适的程序设计技术来解题。所以,编程的思维方法是制约程序编写质量的“瓶颈”,这同时也是学员上机编程最难过的“门槛”。

传统的面向过程的程序设计,主要是围绕设计算法来进行的,即在程序设计过程中常常考虑的问题是采用什么样的解题方法和步骤。面向过程程序设计工作的本质是功能分解,采用“自上向下、逐步求精”的方法把所要开发的程序按功能分解为若干子功能。在以往的程序设计教学中,给学员强调的都是使用结构化程序设计思想,把一个程序先分解为若干个模块,并且确定各模块间的联系,然后编写代码设计完成每个模块功能。面向对象的程序设计代表了当今程序设计的发展方向,已逐渐成为程序设计的一个热门技术。对于VB这种典型的面向对象程序设计语言,学习者必须由面向过程的思维转变为面向对象的思维,否则将会阻碍学员的程序设计思路,不能真正达到灵活掌握面向对象编程的教学目的。

面向对象程序设计方法是以对象为核心,把程序看作是相互协作而又彼此独立的对象的集合。在程序设计过程中把程序分解为若干个对象,每一个对象都有自己的属性和事件过程。不同对象之间通过发送消息向其他对象提出服务请求,接受消息的对象主动完成指定的功能,整个程序的功能是由所有对象共同完成的。用对象分解取代了传统编程中的功能分解,面向对象的编程思维方法类似于人类习惯的解题思维方法。例如,一座建筑由哪些部分组成,每一部分都有各自的特点、结构,各个部分之间都有一定的功能和相互关联。首先把每一个部分大体勾勒出来,然后按照其各自的功能、特点丰富、完善其内容,最后将每一部分通过代码联系在一起,最终实现完整的程序。这是“面向对象”的本质,在教学中是教员重点向学员传授和逐渐培养的编程思维。

4 强化事件驱动编程机制

在教学中一味地讲授理论知识是远远不够的。“面向对象”编程思维的训练和培养需要通过大量的实践和程序演示才能达到一个较好的效果。针对每一个知识点,选取恰当的程序实例进行演示性的训练教学。根据经验,其完整的教学思路如下:

在Windows环境中,用户对应用程序中所做的任何事情都可看为是事件。Windows是产生用户事件并将事件发送到合适的事件过程中的中介。当用户触发了某个过程的事件时,Windows将会把这个事件传递给VB应用程序,VB将响应事件并执行这个事件的过程代码,这就是VB的事件驱动编程机制。通常,编写一个VB应用程序的基本过程为:

第一步:界面设计(添加应用程序所包含的所有控件)。第二步:设置属性(设定所有界面、控件的相关属性)。第三步:编写代码(编写与应用程序功能相关的代码)。在教学中,学员在开发VB应用程序时,问题较多出现在第三步骤上。有些学员只能简单的在窗体上放置控件,不能针对要解决的问题将控件与其事件过程代码联系起来。这说明学员还没有建立一个完整的、系统的、面向对象的程序设计思想。要加强学员面向对象的编程思维,授课和上机操作中就不能只是介绍控件的属性、程序的控制结构,更重要的是要通过大量的实例让学员真正理解什么是事件驱动编程机制。

例如,利用VB编写一个应用程序,当点击命令按钮时,图片框中的图片每隔0.5秒闪烁一次。在本程序中,能够触发的事件就是对命令按钮的单击事件(Click),VB从Windows获得单击事件后,执行事件中的事件过程,激活计时器控件的可用(Enabled)属性,从而自动执行计时器控件的Timer事件过程,如图1所示。按照这样的“面向对象”编程思路,VB事件驱动的编程机制才能得到强化理解。

5 趣味教学方法的辅助

其实,针对非计算机专业的《Visual Basic程序设计》教学,“面向对象”的编程思想完全可以通过“趣味”教学方法辅助学员进行学习、理解。同时,这也是计算机软件工程中某些知识和思想的体现和应用。具体地,利用VB编写每一个应用程序,在了解其功能后,首先要完成的就是程序的界面设计工作。程序都有哪些功能,每一个功能都需要哪些控件,每一个控件的外观、位置、大小等都应该如何设置。这一系列工作,可以看作是一个儿童搭积木的过程。要通过各式各样的积木,组合成一个物体,就要知道该事物都有哪些主要部分构成,要选择什么样的积木造型去实现它,每一个积木造型的颜色、大小都是什么,要放置在什么位置上,通过这种思想,就可以让学员很好地理解到底什么是“面向对象”程序设计。

当然,程序的界面构建完成后,代码的编写就是在给程序赋予“生命”。没有功能代码的程序就是一个没有制作完成的工具,没有任何可用价值。代码编写工作就将所有的对象、控件联系在一起,赋予各自的功能,从而构造成一个具有一个功能的程序或软件。

6 结语

二十一世纪,军事教育倍受重视,它已成为我国防建设中重要的储备力量来源和保障。我校肩负着培养国家空中作战力量的使命,如何培养优秀的现代军事飞行人才是一个永恒的话题。新形势下,计算机基础教育的内涵已经扩展为以计算机技术为核心的信息技术教育,教学改革的多样性已成趋势。《VB程序设计》作为实践性极强的计算机基础教学科目,任课教员的核心任务不仅要让学员学会使用VB这一程序设计开发工具,更重要的是要培养学员面向对象的编程思想,强化事件驱动编程机制,使学员通过学习VB获得开发Windows应用程序的一般方法,进而培养学员综合运用计算机思维分析、解决实际问题的意识与能力,提高学员的信息化素养,使之具备能够继续学习新的计算机科学、技术和应用的技能,从而更好地服务于未来作战、科学研究的需要。

摘要:《Visual Basic程序设计》作为计算机基础教育重要课程,其主要的目的是培养学员具备基本的简单编程能力。本文分析并讨论了VB编程有效的、快速的教学方法,使学员掌握“面向对象”程序设计的教学方法和技巧。

关键词:Visual Basic,面向对象,程序设计,控件

参考文献

[1]刘瑞新.Visual Basic程序设计教程[M].北京:机械工业出版社,2002.

[2]刘炳文.Visual Basic程序设计教程[M].北京:清华大学出版社.2003.

[3]刘炳文.Visual Basic程序设计教程题解与上机指导[M].北京:清华大学出版社,2003.

面向对象方法学概述 篇7

随着遥感技术更深层次的发展, 人们创造了影像信息自动提取方法, 主要包括监督分类和非监督分类两种。该分类方法是基于像元的分类方法, 而利用像元光谱信息分类具有一定的局限性, 最常见的为“椒盐”现象。

与传统的基于像元的分类技术相比, 基于面向对象的分类技术具有更高的分类精度。该方法是通过多尺度分割遥感影像, 得到同质对象, 然后分析不同类型湿地对象的特征, 例如光谱、形状、大小、纹理、结构、阴影等, 通过建立分类决策树来达到高精度分类的目的。本文将以面向对象的方法提取分类盘锦地区的湿地信息, 以期读取、统计该地区的土地覆盖类型。

1 研究区概况

双台河口国家自然保护区的经度为40°39′N~41°27′N, 纬度为121°23′E~122°29′E, 位于辽宁省盘锦市境内, 气候属于温带大陆性半湿润季风气候, 年平均气温为8.4~8.6℃, 年降水量为611.6 mm, 7—9月降水量占全年的2/1以上。该地区主要植被为芦苇、翅碱蓬等植被群落和人工种植的水稻。

2 数据及预处理

结合研究目的, 本研究选取Landsat8 OLI卫星影像为主要数据源, 空间分辨率为30 m。利用ENVI软件的Flash模块, 结合Landsat卫星的数据信息, 对研究区的影像进行大气校正处理、几何校正, 将误差控制在0.5个像元以内, 并用ERDAS软件的辐射矫正模块对该影像进行辐射矫正。

3 分类系统的建立

双台河口国际重要湿地的主要湿地类型为人工湿地和自然湿地。根据《湿地公约》和相关的文献, 结合野外实地调查数据, 建立遥感分类系统:滩涂、翅碱蓬、水域、芦苇、水田、旱地、建设用地。

4 分类方法与技术流程

基于Landsat8 OLI遥感影像, 利用面向对象的分类平台e Cogniton软件, 采用面向对象的分类方法提取双台河口国家自然保护区的湿地信息。通过多尺度分割遥感图像, 得到同质对象, 然后分析不同湿地对象的特征, 通过设置分类参数建立规则集, 自动获取湿地信息。

5 结果与分析

从野外210个采样点数据和从Google Earth高空分辨率影像上获取的183个土地覆盖类型的验证点中随机选取240个, 将其导入e Cognition软件中, 通过验证点对应的地物提取不同植被的类型参数信息, 重复该过程, 直到准确地区分出芦苇与其他地物的阈值。基于误差矩阵验证双台河地区湿地分析结果是分类精度验证的重要方法。利用剩余153个野外实测采样点建立误差矩阵, 计算出各种土地覆盖类型的分类精度。结果显示, 该保护区的芦苇信息分类的用户精度为87.23%, 生产者精度为89.13%.可见该误差矩阵对湿地信息提取具有较好的自动分类效果。该地区的湿地类型及空间格局如表1所示。

通过统计结果得出, 双台河口国家自然保护区2014年的湿地总面积为47 246.76 hm2, 占总研究区面积的35%。其中, 芦苇湿地面积为44 078.13 hm2, 翅碱蓬湿地面积为3 168.63 hm2, 水域面积为65 447.64 hm2, 水田面积为11 823.66 hm2, 滩涂面积为1 626.5 hm2, 建设用地面积为7 192.62 hm2, 旱地面积为1 825.83 hm2。芦苇湿地主要集中在双台河两侧, 主要原因是双台河能为其提供充足的水源。

摘要:选取位于辽宁省盘锦市的双台河口国家自然保护区作为研究区域, 以中等分辨率的Landsat8 OLI卫星影像为数据源, 利用面向对象的分类方法, 实现对芦苇湿地分布信息的快速提取, 并分析了该方法在芦苇湿地分布信息提取中的有效性。结果表明, 面向对象的分类方法在芦苇湿地信息提取中具有较高的分类型度, 芦苇湿地的生产者精度为89.13%.信息提取结果显示, 双台河口国家自然保护区以芦苇湿地为主, 其面积为44 078.13 hm2。

关键词:芦苇湿地,分布信息,遥感技术,分类系统

参考文献

面向对象方法学概述 篇8

用面向对象方法设计无人直升机信息处理系统

面向对象的`设计方法在系统设计中得到了越来越广泛的应用.地面信息处理系统是无人机的重要组成部分,在无人机执行任务过程中,地面信息处理系统提供的无人机的飞行参数和设备参数是飞行员实施监控的依据.分析了共轴式无人驾驶直升机地面信息处理系统的特点和需求,应用面向对象的设计方法,设计了无人机测控地面站信息处理系统,该系统具有易重复使用、易改进、易测试、易维护和易扩充等特点.经过多次试飞证明,该系统满足飞行要求.

作 者:赵琦 张晓林 作者单位:北京航空航天大学电子工程系刊 名:北京航空航天大学学报 ISTIC EI PKU英文刊名:JOURNAL OF BEIJING UNIVERSITY OF AERONAUTICS AND ASTRONAUTICS年,卷(期):28(4)分类号:V243.5关键词:无人驾驶直升机 遥测 遥控 信息处理 面向对象

面向对象方法学概述 篇9

目前,大部分高校资源环境类专业都开设了计算机程序设计课程,面向对象分析设计(OOA、OOP)是现代计算机程序设计的主流,但由于面向对象程序设计知识难点较多,直接开设则学生难以掌握,所以高校一般以一门面向过程程序设计语言作为入门,并进一步开设一门面向对象程序设计课程[3]。

根据笔者的实际教学经验,学生在学习面向对象程序设计(以C++作为程序设计语言,以VC6.0作为可视化编程环境)课程时主要存在以下问题:(1)对于指针的理解不够深入;(2)对于面向对象特性理解困难(如封装、继承、多态),无法进行面向对象分析和面向对象设计。对于面向对象特性理解困难,原因可能有2点:(1)资源环境类专业面向对象程序设计课程一般安排课时相对较少,由于学时的限制,教学时难以对课程内容进行全面深入地讲述,授课速度较快;面向对象程序设计课程涉及概念比较抽象、知识难点较多。(2)学生在学习了面向对象程序设计后,容易出现思维定势,在转向面向对象程序设计学习时,容易出现理解上的困难。该文提出基于程序结构演化的面象对象程序设计教学方法,探索易于学生深入理解面向对象程序设计的教学方法。

1 常规面向对象程序设计教学方法及其存在问题

目前,在常规的教学方法中,面向对象程序设计讲解过程如图1所示。

在介绍完C++语言语法之后,即开始面向对象机制和面向对象特性的介绍,一般先介绍概念,然后举现实世界中的例子来说明概念,最后用多个较为简单的示例代码来演示、讲解概念。这种教学方法存在以下问题:(1)学生对于概念的理解还存在于现实世界,无法将其抽象为面向对象程序设计方法;(2)由于课程演示的示例程序相对都非常简单,学生通过这些代码无法掌握针对具体问题的面向对象分析方法,在实际编程时,往往难以下手,无法将面向对象方法应用到软件设计中。这些问题导致学生难以继续深入学习和应用。

2 基于程序结构演化的面象对象程序设计教学方法

为了克服常规面各对象程序设计存在的问题,提出基于程序结构演化的面象对象程序设计教学方法,该方法包括以下几个要点。

(1)讲述面向对象的概念时,以代码的演化方式来逐渐推递出面向对象的概念。图2是一个课堂讲述类封装特性的程序代码演化实例。可以看到,程序的开发方式在于功能集成,由单一的数据和控制的独立,逐渐演变为将某些数据和控制按照功能实现过程化为某个函数[4]。随着功能化的进一步加强,于是又将某些相对联系比较紧密的函数集成到一类,这些联系紧密的变量和函数,恰恰可以程序化地描述现实世界具体对象的属性和功能。这种程序结构演化讲解方法非常符合人们记忆和认识客观世界的习惯和规律,从而在课程教学中具有很好的效果。

(2)在针对具体问题时,先介绍学生易于理解的面向过程方法,再介绍面向对象分析和设计方法,对比这些程序设计思路,并分析其优缺点。图3是一个面向过程与面向对象程序设计对比教学实例,以一个分数运算问题演示2种程序设计方法的异同。

在实际课堂教学时,可以先让学生对问题进行分析,让其思考以下问题:问题泛及那些数据?这些数据需要用什么数据结构存储比较合适?要解决问题,需要实现那些功能?这些功能之间是否有相同的操作?例如分类运算,需要存储分子、分母以及这个分数正负符号(也可以通过分子、分母的正负来存储)。分数与分数、浮点数、整数之间需要实现加、减、乘、除运算;在这些运算过程有一些相同的功能操作,比如通分、化简等。Á

然后用学生比较容易理解和熟悉的面向过程方法来求解问题。在求解完成后,学生对问题的理解也清晰起来。再分析面向过程方法的不足,例如分数运算面向过程方法没有办法进行“+”、“*”这样的运算符重载,运算不便;数据与功能分离,不清楚功能与数据之间的联系;内部函数没有办法限制访问[5]。

最后让学生用面向对象分析设计方法来求解问题;因为问题已经用面向过程方法求解完成,所以学生只需要将重点放在从面向过程方法向面向对象方法转换上来就可以了,在转换过程,学生加深了对面向对象特性的理解,对面向对象编程思想也会有很好的认识。

(3)选择几个相对较为复杂的实际工程贯穿整个课程教学,根据课程进度逐渐将工程问题复杂化。例如在讲授完C++语言语法之后就可以让学生思考一个小学的教学管理系统需要管理哪些数据,如何实现那些功能;在介绍类和对象时,让学生分析这个系统中的“小学生”、“教师”角色,并用类进行设计;在介绍继承时,可以多引入一些角色,分析这些角色之间的共性,确定继承关系;在介绍多态时,可以让学生实际编写程序,分析各类的函数是否需要实现重载或虚函数。这样学生学完这门课程等于做了一个小工程,面向对象分析和设计方法也在实践中掌握。

3 结论

资源环境类专业学生在学习面向对象程序设计课程时,对于面向对象特性理解困难,难于理解面向对象程序设计的思想,无法进行面向对象分析和面向对象设计。因此,提出了基于程序结构演化的面象对象程序设计教学方法,主要包括:讲述面向对象的概念时,以代码的演化方式来逐渐推递出面向对象的概念;选择几个相对较为复杂的实际工程贯穿整个课程教学,培养学生面向对象分析能力;在针对具体问题时,先介绍学生易于理解的面向过程方法,再介绍面向对象分析和设计方法,对比教学更利于学生理解面向对象程序设计思想。

参考文献

[1]李师贤,李文军,周晓聪,等.面向对象程序设计基础[M].2版.北京:高等教育出版社,2005.

[2]钱能.C++程序设计教程[M].北京:清华大学出版社,1999.

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

[4]MEYERS S.Effective c++中文版[M].2版.侯捷,译.武汉:华中科技大学出版社,2001.

面向对象方法学概述 篇10

土地利用现状遥感信息提取主要是依据《全国土地分类》标准, 从遥感影像上提取土地利用类型, 即遥感影像分类。传统的遥感影像分类方法是基于像元的分类方法, 包括监督分类和非监督分类法, 前者如最小距离法、平行六面体法、最大似然法等;后者如循环集群法 (ISODATA) 和K-mean法。这些方法都是根据遥感数据的光谱统计值特征与训练样本数据之间的统计关系来进行地物分类的, 对地物形状信息的分析几乎没有涉及。在高分辨率的卫星影像上, 地物的形状结构及不同地物的空间关系信息变得非常丰富, 因此, 传统的根据光谱值进行分类的方法就失去了有效性。虽然人眼可以很容易地识别出高分辨率彩色影像上的地物, 但通过目视解疑进行分类和制作专题图工作量大、周期长, 失去了高分辨率影像反应迅速的优势。同时, 解译结果的好坏往往与解译人员的专业素质高度、密切相关。

面对高分辨率数据分类的难题, 面向对象的分类方法应运而生。面向对象的分类方法是基于影像空间和波谱两方面信息的提取, 它处理的对象不再是单个像素, 而是影像对象或片断。它不仅利用了高分辨率影像的光谱特征, 而且能有效利用其几何信息和结构信息。因而充分利用了高分辨率影像所提供的地物形状结构及空间关系信息, 是高分辨率影像的一种有效的分类方法。

1 面向对象的分类方法

面向对象的分类方法是一种智能化的自动影像分析方法, 与传统的影像处理方法相比, 面向对象的影像分析的基本处理单元是影像对象或片段 (segments) , 而不再是单个像素。即使是分类, 也是对影像对象来进行的。目标对象比单个像素更具有实际意义, 特征的定义和分类均是基于目标进行的。德国Definins Imaging GmbH公司开发了第一个面向对象的遥感信息提取软件——eCognition, 成为面向对象分类的代表软件。eCognition的分类思想包括两个方面:多分辨率分割和模糊逻辑分类。

为了生成影像目标, 首先要进行影像分割, 多分辨率分割是面向对象分类中很重要的一步, 它是基于比例参数、光谱和形状等特征将像素群组成像素块即目标。eCognition允许以任意分辨率进行影像同质区域的分割, 以满足不同目的的分类需要。分割的结果作为目标对象应用于下一步的分类。

eCognition提供了两种不同类型的分类器——最近邻法和成员函数, 二者均作为分类描述符。最近邻分类相似于传统分类方法中的监督分类法, 需要选择训练区, 即样本。样本是一个类的典型代表。当无法描述特征空间时, 最近邻分离器是最好的选择。成员函数法是基于可利用的目标特征的模糊逻辑分类的。对比基于像素的统计分类器, 模糊分类不像严格分类只用“是”或“不是”来表示, 而是用0~1之间的连续数字描述分类成员的一个连续状态。模糊逻辑分类法是一种基于知识和概念的方法, 且容易使用。因此, 如果仅用一个特征或很少的特征, 就可以将一个类同其他类区分开时, 建议使用成员函数分类器;否则, 应该选择最近邻分类器。最近邻分类器比成员函数能更好地处理多维特征空间的联系。

2 信息提取与本底数据库建设

2.1 面向对象分类步骤

面向对象分类方法过程包括影像预处理、图像特征分割与提取、空间对象特征表达、特征信息学习与分类, 以及高层知识系统推理等几个部分。具体来说包括以下几个步骤:

(1) 预处理

影像预处理几何校正、辐射校正以及融合、镶嵌等过程, 从而得到处理的目标图像。

(2) 影像对象生成——图像特征分割

面向对象方法处理的目标是对象而不是像素, 因此, 图像特征分割是面向对象分类的基础。

(3) 创建类层次模型——空间对象特征表达

根据对分类地区的了解以及操作者的经验, 创建相应复杂程度的类层次模型, 并对各类别进行描述, 即给各类指定相应的判别函数来区分各类。目前涌现出了各种分类器, 根据操作者的熟练程度和经验可以选择使用。

(4) 分类并优化——特征信息学习

利用迭代的方法对影像进行分类。初始的分类结果可以通过类层次的扩展和对象层次的重建来优化。在建立决策分类系统时, 建立不同尺度的分类层次, 在每一层次上分别定义对象的光谱特征、形状特征、纹理特征和相邻关系特征。其中光谱特征包括均值、方差、灰度比值;形状特征包括面积、长度、宽度、边界长度、长宽比、形状因子、密度、主方向、对称性、位置;纹理特征包括对象方差、面积、密度、对称性、主方向的均值和方差等。通过定义多种特征并指定不同权重, 建立分类标准, 然后对影像进行分类。

(5) 信息输出

面向对象的分类方式一般可以有两种输出形式:1) 以专题图的方式输出栅格影像;2) 输出分类结果的矢量文件。

2.2 本底数据库建设

以上获得的分类结果虽然可以输出矢量格式文件, 但不能直接拿来进行本底数据库的建设, 需要经过后处理。后处理包括如下几步: (1) 节点平滑。Ecognition输出的矢量文件保留了像素的特征, 存在过多的节点, 需要进行平滑处理。 (2) 小图斑剔除。分类过程存在面积过小的图斑, 根据检测任务要求进行剔除。 (3) 个别错分类别进行更正。对获得的分类结果要对照卫星影像图进行确认, 个别类别因为薄云、薄雾等覆盖造成错分的, 要进行更正。 (4) 转成入库文件格式。土地利用动态监测项目要求提交MAPGIS格式, 因此, 所得矢量文件要进行线面转化、拓扑关系重建、属性注记等步骤转成入库格式。

在接图表文件、数据字典、行政辖区文件的基础上, 建立土地利用工程, 并向项目中添加地类图斑等文件, 建立土地利用类型数据库。对已经入库的土地利用数据, 在进行数据综合处理、逻辑错误检查、属性常规检查、数据预处理等系列检查与处理后, 进行数据运算和报表的输出。根据需要, 输出各县 (市、区) 四大地类统计数据并进行成果分析。

本底数据库建设流程图见图1。

3 应用实例

以贵阳市白云区SPOT5 2.5 m融合数据为例进行土地利用类型信息自动提取。根据本次监测任务的要求, 土地利用类型的提取包括耕地 (11) 、非耕农用地 (10B) 、建设用地 (20) 和未利用地 (30) 四种, 具体解释内容参见《全国土地分类》标准。原贵阳市白云区卫星影像图见图2。土地利用四大类型信息自动提取结果见图3。

根据已有土地利用数据库对试验结果进行精度分析, 发现贵阳市白云区遥感自动分类总体精度在80%以上, 其中, 耕地 (地类代码11) 、建设用地、未利用地 (地类代码30) 和非耕农用地 (地类代码10B) 的精度分别为87.39%、91.24%、88.81%和82.39%。基本符合本次监测任务的精度要求。其中, 未利用地在该区主要表现为荒草地等, 因而与部分耕地和非耕农用地混淆, 造成该类精度下降。同时也影响了耕地和非耕农用地的分类精度。

4 结论与讨论

采用面向对象的分类方法完成本底数据库建设的分类工作, 不仅保证了监测任务对精度的要求, 同时缩短了工作周期、减少了人为工作量, 体现了高分辨率影像反应迅速的优势, 但是, 这种方法也存在一些问题, 需要后期不断的完善和提高, 具体包括以下几个方面:

(1) 完善面向对象分类方法建设本底数据库的技术流程。目前, 大部分研究停留在地物类型的分类上, 很少涉及到与后续数据库建立方面的衔接问题, 其中, 矢量文件的分类后处理不同于栅格数据, 显得尤为复杂和繁琐, 必须建立一套规范的操作程序, 提高工作效率, 减少人为误差。

(2) 面向对象分类斑块边界锯齿化问题严重, 它不仅影响了分类结果的美观, 而且对后续的GIS处理造成了困难。因此, 研究如何在保证面积变化较小的情况下得到平滑的边界是一个重要的问题。

(3) 进行面向地类边界精确提取的图像分割技术研究。目前的影像分割方法仍然存在混分的现象, 研究面向地块边界精确提取的分类技术也尤为重要。

参考文献

[1]赵英时.遥感应用分析原理与方法.北京:科学出版社, 2004

[2]张永生, 巩丹超.高分辨率遥感卫星应用——成像模型、处理算法及应用技术.北京, 科学出版社, 2005

[3]明冬萍, 骆剑承, 周成虎, 等.高分辨率遥感影像特征分割计算法评价分析.地球信息科学, 2006; (1) 3:103—109

[4]Zhang Yujin.Image segmentation.Beijing:Science Press, 2001

上一篇:发展改革下一篇:中国传统文化与旅游