面向对象的程序设计(共12篇)
面向对象的程序设计 篇1
随着Internet和计算机应用的不断发展,面向对象技术的研究和应用也不断向深度和广度方面扩展。在深度方面,分布对象技术、软件Agent技术、构件技术和模式与框架技术为我们的技术发展带来了良好的发展机遇。在广度方面,面向对象技术与电子商务、面向对象与XML和面向对象与嵌入式系统等为我们发展新的应用提供了舞台。
1 面向对象
面向对象是当前计算机界关心的重点,它是当今软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
1.1 基本概念
1)对象:对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
2)对象的状态和行为:对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
3)类:具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的实体化就是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
4)消息和方法:对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。
类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。
1.2 特征
1)对象唯一性:每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
2)分类性:分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
3)继承性:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
4)多态性:多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。
1.3 要素
1)抽象:抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。类实现了对象的数据(即状态)和行为的抽象。
2)封装性(信息隐藏):封装性是保证软件部件具有优良的模块性的基础。面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。
3)共享性:面向对象技术在不同级别上促进了共享。如同一类中的共享,在同一应用中共享,在不同应用中共享。
1.4 面向对象技术
面向对象技术包括面向对象分析(object-oriented analysis,简称OOA)、面向对象设计(object-oriented design,简称OOD)及面向对象程序设计(object-oriented programming,简称OOP)三部分内容:
1)面向对象分析(OOA)指软件需求分析的一种带有约束性的方法,用于软件开发过程中的问题定义阶段。其主要活动是对问题进行抽象建模(包括使用实例建模、类和对象建模、组件建模和分布建模等),产生一种描述系统功能和问题论域基本特征的综合文档。
2)面向对象设计(OOD):将面向对象分析所创建的分析模型转变为作为软件构造蓝图的设计模型。面向对象设计的独特性,在于其具有基于抽象、信息隐蔽、功能独立性和模块性建造系统等四个重要软件设计概念的能力。
3)面向对象程序设计(OOP):指使用类和对象以及面向对象特有的概念进行编程。
2 计算机程序设计
计算机程序设计的本质就是把现实生活中我们遇到的问题,通过抽象然后利用计算机语言转化到机器能够理解的层次,并最终利用机器来寻求问题的解。在此过程中,涉及到两方面问题:一,如何把我们所面对的问题抽象化?使问题能够很好的被抽象语言描述。二,如何把已经抽象解决了的问题映射到机器能够理解的语言里面去。从第一方面体现了程序设计思想而第二方面则体现了程序设计语言,有此可见,两者是有密切关系的,其中的连接点就是抽象机制。
2.1 程序设计语言的概论
程序设计语言的发展是一个不断演化的过程,其根本的推动力就是抽象机制更高的要求,以及对程序设计思想的更好的支持。具体的说,就是把机器能够理解的语言提升到也能够很好的模仿人类思考问题的形式。
2.2 程序设计范型的演化
1)过程式程序设计:过程式程序设计范型是:确定需要哪些过程;采用能找到的最好的算法。
2)模块程序设计:设计程序的着重点已经从有关过程的设计转移到了对数据的组织,这种转移也反映了程序规模增大的情况。相关的过程与他们所操作的数据组织在一起,通称为一个模块,程序设计范型变成:确定需要哪些模块;将程序分为一些模块,使数据隐藏于模块之中。
3)基于对象程序设计:允许程序员直接定义类型,这种类型的行为方式与内部类型几乎完全一样,这样的类型常常被称为抽象数据类型,其程序设计范型是:确定需要哪些类型;为每个类型提供完整的一组操作。
4)面向对象程序设计:在基于对象程序设计范型的基础上,加入继承和多态这两个重要的概念就演变出了现在最流行的程序设计方法———面向对象程序设计,其范型是:确定需要哪些类;为每个类提供完整的一组操作;利用继承去明确地表示共性。
3 面向对象程序设计
传统的结构化分析与设计开发方法是一个线性过程,以过程为中心进行功能组合,软件的扩充和复用能力很差。区别面向对象的开发和传统过程的开发的要素有:对象识别和抽象、封装、多态性和继承。
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
下面将使用C++的类机制来设计一个数组抽象
1)数组类的实现中有内置的自我意识,首先它知道自己的大小。
2)数组类支持数组之间的复制,比较等操作。
3)可以查询数组里面的最大植和最小值,以及需要的数值。
4)可以排序。
关键字private和public控制地类成员的访问,一般来说公有成员提供该类的接口—即实现这个类的行为的操作的集合。私有成员提供私有实现代码—即存储信息的数据。这种类的公共接口与私有代码的分离称为信息隐藏。这样我们就可以对数组进行整体操作,实现了数据和算法的捆绑。一般来说我们的实现也许就是针对特定用户的,而不具有普遍性,也就是说有的用户也许根本不需要排序这样的功能,但是我们却为其加入了,我们如何才能支持各种用户对于我们的数组类的要求呢?面向对象程序设计方法为我们提供了这样的一种能力,即继承机制和多态机制。
我们可以把普遍和共同的属性通过基类来实现,而各种特殊的要求,我们通过继承和多态来表达需要的更多于基类的行为。
通过一个数组的演化,我们可以清楚的看到面向对象程序设计的核心思想是:抽象数据类型,继承和多态。我们也可以清晰的感受到面向对象程序设计对于过程式程序设计的好处和优点。
4 结束语
计算机硬、软件技术的发展日新月异,在很短的时间内即涌现出大量的各种各样的软件开发工具,并在迅速不断地更新换代,为编程人员提供了多样化的开发平台,带来了极大的方便,面向对象程序设计技术必将应用到更多的程序设计方法中。
摘要:面向对象技术提供了一种新的认知和表示世界的思想和方法,它对计算机工业的影响是深远的。面向对象技术包括面向对象分析(object-oriented analysis,简称OOA)、面向对象设计(object-oriented design,简称OOD)及面向对象程序设计(object-orientedprogramming,简称OOP)三部分内容。面向对象程序设计是一种方法,这种方法为数据和函数提供共同的独立内存空间,这些数据和函数可以作为模板以便在需要时创建类似模块的拷贝。
关键词:面向对象分析,面向对象设计,面向对象程序设计,函数
参考文献
[1]Stroustrup.C++程序设计语言[M].北京:机械出版社,2004.
[2]Lippman.C++PRIMER中文版[M].李师贤,蒋爱军,梅晓勇,等,译.中国电力出版社,2008.
[3]Yourdon E.Object-Oriented System Design,An Integrated Approach[M].Yourdon Press/Prentice Hall,1994.
[4]Meyers S.effective C++[M].third edition.北京:电子工业出版社,2006.
面向对象的程序设计 篇2
一、培养学习兴趣
为了使初学者能尽快地掌握计算机知识,进入计算机的应用领域,在课程讲授过程中,要特别注意培养学生的学习兴趣。初接触计算机时,很多学生感到新奇、好玩,这不能说是兴趣,只是一种好奇。随着课程的不断深入,大量的感念、规则、定义、要求和机械的格式出现,很容易使部分学生产生枯燥乏味的感觉。为了把学生的好奇转化为学习兴趣,授课时作者从具体问题入手,让学生先从感性上认识新知识,继而再讲授理论要点。
在首次课上,给学生找一些《高等数学》、《线性代数》等已学课程的问题,用算法语言来求解,使学生体会程序设计的用途和一种全新的解决问题的方法。在课程的进行中,引导学生学一种算法,就尝试在同行课程中应用。作者还经常介绍一些趣味性算例,如:“迷宫问题”等[1],来培养学生的学习兴趣,让大家积极主动地获取知识,打好程序设计基础。整个教学过程中应该把解题思路、方法和步骤当作授课的重点,从而让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维模式。
二、循序渐进讲解
绝大部分学生是第一次接触面向对象程序设计的概念,通俗、易懂的教学原则同样适合于这门课的教学。在课程讲授过程中,作者没有把重点放在语法规则的叙述上,而是放在算法和程序设计方法上,通常由几个例题引出一种语法规则,通过一些求解具体问题的程序来分析算法,介绍程序设计的基本方法和技巧,既注重教材的系统性、科学性,又注重易读性和启发性。从最简单的问题入手,一开始就介绍程序,要求学生编写程序,通过反复编写、运行程序来掌握语言规则和程序设计方法。同一个语法规则、同一种算法,在选择例题时也是由简到难,逐步呈现给学生。在学习上不要求学生死记语法规则,而是要求学生能把各个孤立的语句组织成一个有机的程序。注意培养学生良好的编程风格,让学生在编制程序过程中不断总结、巩固,达到学会方法、记住语法规则,提高设计技巧的目的。
三、改进教学方法
作者要求学生事先预习,实际上就是要求他们课前自学,讲课时以学生预习过为起点,只讲难点、重点,这样既给了学生思维分析的余地,又节省课时。这就要求必须精选教学内容,注意详略安排。如在讲到“类与对象”,“继承与派生”[2]这些关键性章节时就讲的特别精,使学生能够熟练掌握、理解透彻,而讲到“输入输出流”时,让学生做到一般了解即可。课堂上找一些程序设计较好、解题思路清晰的例题让学生自己读,找出精妙之处和不理解之处,对普遍性的问题共同讲解,个别问题课后解答。
作者特意地设置一些不同深浅的笔误和口误,马上让学生肯定对与错,以考查学生注意力集中的程度,提高他们的敏锐性和判别力。对有些问题,给出一种程序设计方法后,让学生讨论,还有没有其它的程序设计方法和思路,让他们发表意见,提出自己的解题思路和编程方法,给学生交流不同思路和观点的机会。这就要求老师既能引导又能放开,既有事先的精心备课,又有课堂上的`因势利导,同时也可以从学生讨论中提出的问题来丰富教材内容,使得教与学相得益彰,共同进步。
四、习题与上机实践
做习题是复习所学内同的过程,也是深入学习的过程。作者每次课后给学生布置一些有代表性的习题,以巩固课堂上所学的内容。也通过学生的作业情况来了解学生对课程内容的掌握程度。对作业中比较普遍出现的错误,在下次课上当堂讲解,使得学生能对学过的东西理解透、掌握牢。作业中新颖的程序设计方法和思路,也当堂宣讲或作业批注,以鼓励创新型的学习方法。
每次实际上机操作前,都根据实验教学计划,有系统地布置上机实习作业,让学生明确上机任务,编写好上机调试的程序,使学生在每次上机实践中都有收获。作者让学生按照自己的姓名、学号命名自己的程序文件,调试成功后存入磁盘,并撰写实验报告,课程结束后结合学生的程序和实验报告来评定实验成绩。课程结束前作者坚持进行总结,把所学的内容作一个概要分析,前后联系起来,使学生对所学课程内容能够融汇贯通。
参考文献
1.刘璟,周玉龙.高级语言C++程序设计.第二版[M].北京:高等教育出版社,
面向对象的程序设计 篇3
关键词:中断;Linux;面向对象思想
中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)12-21356-02
Research of Interrupt Design Based On Object-Oriented Thinking In Linux Kernel
FANG Hong,LV Tai-zhi
(Department of Information Engineering,JiangSu Marine Institute,Nanjing 211170,China)
Abstract:This paper introduced the problem of interrupt design and the basic solution under Linux.By applying object-oriented thinking and design model,Top Half and Bottom Half of interrupt mechanism were analyzed on structure and action, Finally,the paper pointed out that the highly performable and flexible framework of interrupt handling was realized in Linux kernel.
Key words:interrupt;Linux;object-oriented thinking
1 引言
中断是计算机系统中不可缺少的工作机制,对系统性能有重要影响。但其与硬件密切相关,作为支持多种硬件平台的Linux操作系统,在中断机制设计方面必须权衡性能和可移植、可扩展性等方面的矛盾。运用面向对象的技术构建高质量的软件体系结构,用高效的c语言来编程实现,将二者的优点有机结合起来,已成为Linux内核设计中的发展趋势。在Linux内核中,出于性能的考虑,将中断的处理分成上半部分[1](Top Half)和下半部分(Bottom Half),因此內核的中断处理机制也被分成两部分,本文基于Linux内核2.6.20,运用面向对象的方法及相关设计模式,对这两部分进行了深入分析。
2 Top Half分析
Top Half已被设计成一个独立的中断处理层。设备驱动通过使用该层提供的接口,使中断处理部分完全独立于硬件,从而大大提高了代码的可移植性;中断硬件驱动则可以实现和使用该层定义的中断硬件接口和中断处理回调接口,对中断处理层提供支持,同时也可以利用该层提供的标准中断处理流程,简化设计和实现。
2.1结构分析
通过分析中断相关内核源代码[2],抽象出Top Half的类图(图1)。类的提取主要来源于相关头文件中的struct结构,也有一些是直接从代码中抽象而来,并没有相应的struct。为了取得一定的对应关系,类的命名尽量采用了与之对应的struct结构的命名。对于包含函数指针的struct,可以有两种观点:第一种将其视为定义了抽象方法的抽象类,第二种将其视为包含了预定义接口的类。本文采用第二种观点,因为它更能体现面向对象设计的基本原则(编程中使用接口,而不是接口实现;优先使用组合而不是继承)。manager主要定义实现上层接口,设备驱动可以进行请求、禁能、释放中断等操作,无需知道中断硬件的细节,从而使设备驱动中断处理相关的代码无需改变就可以方便地移植到不同平台。manager内含一个包含irq_des的线性数组,以此实现全局管理。irq_des与中断号一一对应,是将底层硬件隔离及实现中断处理流程的关键。它包含的irq_chip通过定义一组接口方法,将不同的中断硬件行为统一进行了封装。一方面底层中断硬件驱动只要根据自身功能部分或全部实现这组方法,就可以向上提供满足需要的中断处理功能,方便了底层的设计;另一方面负责中断处理流程的handle_irq,通过使用chip的方法与硬件交互,从而将中断流程处理与硬件细节处理分离。由于不同类型的中断,其中断处理流程不尽相同,不同于以前的在一个函数中处理各种类型中断的方法,內核目前将其细分成6种类型(edge level simple percpu bad fasteoi),并分别提供了标准的实现,这样可以针对特定类型,优化代码,提高处理性能。虽然有多种类型的处理方法可供使用,但内核仍抽象出单一的中断处理接口handle_irq供底层调用,在这里,使用了策略(Strategy Pattern)设计模式[3],6种类型的中断处理方法(具体策略)是handle_irq(策略接口)的不同实现,而irq_des则提供了策略赖以存在的上下文(Context)。策略模式使中断处理更具灵活性、可扩展性。例如可以方便地增加新的中断处理类型以及根据需要重新实现特定类型的中断处理方法,却对使用者没有影响。chip和handle_irq相结合一方面屏蔽了底层中断硬件的变化对上层的影响,另一方面给中断硬件驱动的设计实现带来了便利;而性能却因为优化了不同中断类型的处理代码而得到提高。
图1 Top Half类图
为了有效利用紧缺的中断资源,内核支持中断共享,这主要通过irqaction来实现。irqaction的设计使用了职责链(Chain of Responsibility)模式[3],该模式的设计意图在于使多个对象都有机会处理请求,通过将这些对象连成一条链,并沿着这条链传递该请求来实现,它降低了请求的发送者和接收者之间的耦合。由于中断共享时,有多个中断处理函数,但只有具体的中断处理程序知道是否要处理中断,且要求支持中断处理函数的动态增减,所以非常适合运用职责链模式。action包含一个handler,它定义了处理中断请求的接口,具体的中断处理则由使用中断的设备驱动程序以中断处理函数的方式来实现。在handle_irq的具体实现中,均会调用handle_IRQ_event方法,该方法遍历irqaction链,并依次调用handler接口方法,最终实现中断的处理。职责链模式虽然有诸多优点,但也有缺点:主要是处理效率偏低,因为处理一个请求可能要遍历到最后才能完成,这就要求共享同一中断的设备不能太多,同时要求中断处理程序尽快判断出中断是否需要处理,若不需要应及时返回。
2.2行为分析
中断的实际处理过程是一个软硬件相结合的、异步和并发的复杂过程,虽然内核中断处理层屏蔽了中断处理的细节,但使用中断的设备驱动编写者仍需要理解中断处理的主要过程,特别是中断处理函数被调用的上下文环境,作为一个较高层次的抽象,下面描述了一个中断被处理的基本过程。首先设备驱动使用request_irq申请登记中断处理函数,相应设备触发了一个中断,经过底层软硬件的一系列处理,最终会调用irq_desc的handle_irq方法,该方法又会调用handle_IRQ_event,它遍历irqaction链,调用中断处理函数,中断处理函数在进行必要的处理后,一般会在标识出要延迟处理的工作后返回,最后在判断出没有硬软中断嵌套及有软中断需要处理的情况下,调do_softirq进行下半部分的处理。
3 Bottom Half分析
在内核中,Bottom Half的实现机制主要有软中断(softirq)和任务片(tasklet)[4],tasklet是基于softirq的,二者的主要区别是同一软中断处理函数可以同时运行在多个CPU上,而同一任务片同时只能运行在一个CPU上,不同的任务片可以同时运行在不同的CPU上。因此需要软中断实现者自己处理因多CPU 存取共享数据产生的同步问题,在获得高性能的同时,增大了编程难度。而任务片则在性能和编程难度间找到了一个合理的平衡点,被大多数设备驱动所采用。
3.1结构分析
通过分析与tasklet和softirq相关的源代码,可以抽象出两者的类图(图2),smanager负责提供初始化、请求、触发、处理软中断的方法,其中do_softirq负责实际处理软中断,该方法在软中断层有标准实现,但在某些平台上(如i386平台)则由体系相关部分实现以支持软中断栈,但系统运行时只能使用一种实现,为此内核使用条件编译,在编译时确定使用哪一种实现,这实现了一种编译时的“多态”。smanager内含一个包含32个softirq_action的线性数组,以此实现对软中断的全局管理,数组下标隐含了软中断的优先级,下标越小,优先级越高。softirq_action实际上是软中断相量,设计的相当简单,它包含一个action接口由具体的软中断来实现。内核已实现并装入了几种软中断,这些软中断一经装入就不会被卸下,所以内核目前没有提供释放软中断的方法。一般推荐由内核开发者来实现软中断,而不是设备驱动的编写者。
tmanager通过tasklet_action实现action接口方法成为一种软中断,tmanager负责对外提供创建、调度、禁能tasklet的方法,它内含几个与CPU个数相等的数组,每个数组包含一个tasklet相量链(与CPU一一對应),在这里,再次采用了职责链设计模式,因为与中断共享类似,多个tasklet实际上共用了一个软中断触发标志位,且要求支持tasklet的动态增减,但tasklet的动态性更强,仅执行一次就被从链表中删除。在内核中实现了两类不同优先级的tasklet,其结构和行为基本一致,本文以普通优先级的tasklet为主进行论述。
3.2行为分析
软中断的运行可分为触发和执行两步。触发机制类似于内核中的信号机制,raise_softirq方法设置触发标志位(每个CPU均有一个整型标志字,每位依次与软中断号相对应,置1表示该软中断需要处理);软中断的实际执行由do_softirq方法完成,该方法可以在多CPU上同时执行,首先判断当前CPU是否已运行软中断,若是则退出,以避免重入可能导致的死锁;然后依次遍历软中断数组,对于标志位置1的软中断则调用其action方法,进行实际的软中断处理。
图2 softirq和tasklet类图
tasklet的运行也分为提交和执行两步,提交由tasklet_schedule完成,它会把tasklet插入到与当前CPU所对应的tasklet链中,在插入前会判断tasklet是否已被调度到其它CPU上(通过成员state判断),若是则返回,以此保证某个tasklet在多个tasklet链表中的唯一性,然后调raise_softirq触发软中断;执行由tasklet_action(被do_softirq调用)完成,它遍历与当前CPU对应的tasklet链表,调用func接口方法实现处理,并将处理过的tasklet从队列中删除。在tasklet处于运行状态时,该tasklet可以再次被调度到tasklet链表中,但不能被运行,直到前一tasklet运行完毕。提交和执行机制共同保证了同一tasklet在多CPU上的串行执行以及不同tasklet在多CPU上的并行执行。
4 结论
通过充分运用面向对象的基本设计原则(封装变化;编程中使用接口,而不是接口实现;优先使用组合而不是继承)以及设计模式,Top Half 和Bottom Half被设计实现成了一个中断处理的框架结构,融高效与灵活为一体,本身也可以被抽象提炼出一种设计模式。其设计思想和方法值得学习和借鉴。
参考文献:
[1]陈莉君.Linux操作系统内核分析[M].北京:人民邮电出版社,2000.102-125.
[2]Linux2.6.20内核源码[EB/OL].http://www.kernel.org.
[3]Erich Gamma.等.著.李英军.等.译.设计模式:可复用面向对象软件的基础[M].北京:机械工业出版社,2000.9:147-218.
[4]毛德操,胡希明.Linux 内核源代码情景分析[M].杭州:浙江大学出版社,2001.222-333.
面向对象的程序设计 篇4
面向对象程序设计的思想, 是软件技术这个专业针对学生培养的重要素质之一。尤其是在高职高专教育的课程体系里面, 面向对象程序设计这门课程在各个高校里面一直都位居举足轻重的位置。
在众多的高等职业教育里面, 计算机软件体系的课程, 尤其是针对软件开发这一体系的课程基本都是先学程序设计基础, 然后开设面向对象程序设计, 从我从事多年的教学经历来看, 学生们在学习程序设计基础这门基础课程的时候对于程序的控制结构比较难以理解, 到了学习面向对象程序设计这门课程的时候, 对类与对象的理解就更加困难了, 尤其是给同学们树立类与对象的思想。
2面向对象程教学内容—类与对象的教学设计
在这门课程的教学当中, 如果不让学生树立面向对象的思维, 那么学生就很难进入本门课程的学习, 学习尤其要注重理解性记忆, 如果全靠死记硬背把概念记住, 是不可能深入学习面向对象的精髓的。本门课程要求学生理解面向对象编程思想, 掌握面向对象基本概念、集合框架、多线程、IO以及异常处理, 能够运用JDBC开发C/S模式下的中小型数据库应用软件, 能够运用JUNIT工具进行单元测试, 培养团队协作、交流沟通、自学、抗压能力, 提升软件工程规范及编码规范意识。
所以要达到以上目标, 就要很好地给同学们树立面向对象程序设计的思想, 很多教材都是编排在第一章第一节讲解类的概念, 在第一章第二节讲解对象的概念, 这种方式的讲解无论是本科的学生还是专科的学生理解起来都是很困难的。所以在做本课程的教学设计的时候, 就应该改变以前传统做法, 争取达到让学生做到易学易懂易做。在这里仅仅以Java语言为例子说明讲解怎样让学生理解类与对象的思想。
首先, 按照标准定义给出类和对象的概念。类是对事物的抽象和归纳, 是具有相同标准的事物的集合与抽象。对象是由属性 (Attribute) 和行为 (Action) 两部分组成, 属性用来描述对象的静态特征, 行为用来描述对象的动态特征。这两个概念, 对于初次接触面向对象这门课程的学生来说是很抽象的, 而且是很不容易理解的, 所以在讲解的过程中作为教师一定要给出让学生容易理解的例子以及代码, 帮助学生理解这个概念, 而不是一味地去灌输这个抽象的概念。在讲解这个概念的时候也要尽可能地用简单通俗易懂地语言灌输给学生, 也就是要把抽象问题具体化, 复杂问题简单化。比如给两个简单的例子如下, 来帮助学生理解类与对象的概念以及他们之间的联系就一目了然。
对比以上两段代码, 左边这段代码着重培养学生们面向对象的思维, 帮助学生理解“类”这一个非常抽象的概念, 这样就把人“类”这个非常抽象的概念用代码加以具体化, 让学生们更好地加以理解和掌握, “人类”就是一个抽象化的概念, 它把人类所共有的特点以及人类的一些共同的动作行为封装在了一对大括号里面, 所以说“类”是属性和方法的集合。右边这段代码用以帮助理解对象这个概念, “对象”就是对类进行实例化, 在这个例子里面, “张三”就是人类的一个具体实际的例子, 也是学生们用眼睛能够观察体会到的实体, 也就是对“人类”进行的实例化。这两段代码简单详细地解释了“类”是一个抽象化的概念, 而“对象”是该类的一个实体。所以在讲解这两个概念的时候, 要改进以前的方式方法, 不能为了概念而一味地去给学生灌输概念, 更不能把“类”和“对象”这两个概念分开分步骤地去讲解。二是要把这两个有着紧密联系的概念放在一起简单明细地去讲解。
3教学设计的小结
以这样的方式把面向对象程序设计里两个重要的概念理解了, 同时也让学生树立了面向对象程序设计的思想, 那么在后续的课程里, 让学生学习类的三大特征:封装性, 继承性, 多态性, 也就显而易见了。让众多学生进而深入地学习这门课程也就便得简单明了。
摘要:在面向对象程序设计中, 类是一个抽象化的概念, 而对象是该类的实例化。因为类是抽象的, 所以类是不占用内存空间的, 而对象是实例, 所以对象一旦建立就要调用构造函数为其属性和方法分配所占用的内存空间。类是用于创建对象的蓝图, 它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
关键词:类与对象,面向对象程,程序设计
参考文献
[1]姚骏屏, 何桂兰主编.陈素琼, 任姚鹏副主编.Java面向对象程序设计与系统开发[M].西安电子科技大学出版社, ISBN 978-7-5606-3649-8, 2014 (12) .
[3]江开耀.软件工程与开发技术[M].西安电子科大出版社, 2009.
[4]钱银中.java程序设计案例教程[M].机械工业出版社, 2009.
面向对象的嵌入式系统设计方法 篇5
摘要:通过UML语言对嵌入式系统建模,急准确地完成了分析人员与用户需形式化层次上的一致性,也为程序开发人员建立了清晰的程序结构和行为准则,大大缩短了系统开发周期,并使系统的升级和重用成为可能。本文通过一个用Atmel89C52单片机实现简单变频调速器系统,说明UML应用与嵌入式系统的分析设计方法。
关键词:嵌入式系统面向对象分析设计UML有限状态机
1概述
随着我国装备制造业的发展,嵌入式系统已经成为制造业的核心技术。它被广泛地应用到工业控制、仿真系统、医疗仪器、信息家电、通信设备等众多领域。目前,围绕嵌入式系统展开研究和开发,已经成为计算机软硬件技术发展最活跃的方向之一。
嵌入式系统不同于通常纯粹的软件系统或硬件系统,而是软件与硬件通过在一起的,有些功能既可以用软件实现,也可以通过硬件实现。另外,嵌入式系统设计所面临的挑战不仅涉及到计算机软件和硬件,也会涉及到许多非计算机工程中的问题,诸如机械尺寸问题、功耗问题和制造成本问题等。即使是计算机工程方面的问题,大部分系统在实时性、可靠性和多速率等问题方面也都有特别要求。
目前,实现嵌入式系统的硬件方法主要有:定制逻辑(ASIC)、现场可编程门阵列(FPGA)和嵌入式微处理器三种。在实际系统实施中,绝大多数系统是采用嵌入式微处理器方式,如单片机、单板机或嵌入式微处理器芯片等。这是因为用微处理器实现嵌入式系统是一种十分有效的方法,它使得在不同价位上设计不同特性的产品系列成为可能,并且能够扩充新特性以满足飞速发展变化的市场需求。
2嵌入式系统设计面临的问题和解决办法
过去嵌入式系统分析和设计方面的主要问题为:①分析设计没有一个统一的标准;②分析设计方法不统一;③从分析设计到制作和编程没有一个始终一贯的工程化方法,使得产品形成的每一个过程人为因素影响十分严重;④分析设计的成果不能被开发类似项目或产品的重用。以上4个方面的问题成为多年来制约嵌入式系统发展的主要瓶颈,使得大部分从事嵌入式系统应用开发的组织和团体,基本上是采用小组甚至是作坊式的`动作模式。这使得开发较复杂或大型系统的工作变得十分困难甚至无法进行,或因为系统需求的不断变化或小组成员的流动导致项目失败。我们知道,人类之间要想达成对任何事件的交流,前提是实现对该事物形态(或表现形式)和行为的标准化,之后才可能实现对该事物形态(或表现形式)和行为的标准化,之后才可能实现对其的存储、处理和交流。嵌入式系统制作过程产品以上4方面问题的主要原因是没有一个对嵌入式系统需求、分析、设计、制作、测试和维护过程的结构特征和行业特征统一的工程化描述方法。目前,面向对象技术正是建立在对真实世界抽象思维的基础上,统一建模语言(UML)为这种思维提供了可视化工具,解决了以上难题。使用UML对嵌入式系统建模,不仅可以使系统分析设计实现标准化,而且完全可以实现系统分析、设计和制作、测试分别由不同的项目成员在统一、一贯的方式下完成,也使得系统分析和设计模型在相似系统中重用成为可能。
3系统建模
面向对象的嵌入式系统建模同任何软件密集型系统建模一样,从系统中的类建模开始。为了解类的结构,首先对系统工作过程作一个总体陈述。无论是采用问题空间词汇抽象方法还是采用用例(usecase)驱动建模方法,目标都是找到系统以类或对象作为构造块的类图。如果采用用例驱动的系统分析方法,该内容也可以用用例视图加以模型规格说明,然后使其作为系统白盒测试依据。由于使用用例视图做的规格说明篇幅比较大,本文仅用文字描述说明这部分内容。
本文所例举的系统为一小型变频调速器系统。对任何一个三相交流电机,在输入单相交流电源的情况下,实现6Hz到[9Hz,50Hz]区间内任一频率的稳步启动运转。系统用户界面包括2位数码显示器、一个运行/停止指示器、电源开/关指示器、6个按钮键盘和电源开关。2位显示器用于显示电机当前正在运转的频率,6个按键分别代表启动、停机、正点动、反点动、频率加和频率减。启动命令使电机从6Hz以每步0.2Hz的步长稳步提升到当前设置频率上后在该频率上稳定运转;正点动命令使电机稳定在6Hz上正向运转;反点动命令时,电机转动频率与正点动上同,但旋转方向相反;频率加命令在电机运转时使电机以1Hz/s的速率增加运转频率和当前预置频率,在电机停止时仅改变预置频率;频率减命令与频率加命令相反;停机命令则无论电机运行在什么状态下,都使电机停止运转。
系统类图如图1所示。图中有2个硬件类Button*和Light*,1个主动类Microcontrollor和3个一般类Convertor、Watchdog和Display。Button*类代表所有按钮;Light*类代表2个发光数码管和1个运行指示灯;主动类Microcontrollor是系统主控模块,完成所有对象的调度和管理;3个一般类为3个功能独立的程序模块。
图2为系统实施图。微处理器节点是系统的主控节点,采用Atmel89C52。其内部8KBFlashROM和128BRAM资源已能满足系统需要,因此不再增加外部存储器。与其它节点的连接完全通过其本身的串并接口就可完成。按钮节点代表所有按钮,在系统变化时也可以用键盘取代,本例为6个单独机械按钮。显示节点代表系统显示部分,本例为2个数码管和1个表示电同运行状态的发光二极管。运行监控节点具有两部分功能,其一是通过WatchDog技术监视微处理器的运行状况,另一个是监视变换器输出的脉冲宽度。变换器邛树熊设计为专用电路,通过微处理器并行口接受三相正弦脉冲,根据电机功率转换成本相电机线圈所需要的脉冲电压。三相电机节点不属于嵌入式系统本身,但为了说明本嵌入式系统与控制对象关系而布置在同一实施图中。
图3为系统有限状态机行为模型。系统开机上电后,经过初始化处理自动进入到等待状态,在等待状态,Microcontrollor对象根据用户键盘按钮命令,调度相应的操作对象。当用户发出正或反点动命令时,系统进入点动运行态,此时Convertor对象输出6Hz正或反相序三相脉冲。当用户松开正或反点动按钮时,系统返回等待状态。在系统预置频率设定正确的情况下,用户按启动按钮时,系统先进入到启动运行态。在此状态时系统从6Hz开始按每步0.2Hz的步长稳步增加电机运转频率,直到达到预置频率时进入到稳定运行态。在稳定运行态用户可以改变预置频率,步长为1Hz。每次预置频率的改变事件,都会产生从稳定运行态到启动运行态的交替变动。当系统运行出现故障时,进入到故障处理状态处理,完成后自动返回到等待状态。
4系统实现
4.1数据处理
由于本文例举的系统为一小型变频调速嵌入式系统,所有三相正弦波形的PWM脉冲都由Atmel89C52的P1.0~P1.5端口输出。当把任何频率正弦波形分解成N等分时(N为6的整数倍),则要用N个等幅而不等宽的矩形脉冲来等效,每个脉冲区间如图4。每个频率正弦波划分为6个相序,每个相序为60°。每个相序分为N/6个区间,每区间分为7个小区间。每个区间采用中心对称脉冲波形,因此在每个小脉冲边沿只有一相功率驱动开关换相而使驱动电源电流平衡变化。在任何一相换相时,由软件自动加死区保护(死区时间一相上下臂开关同时关闭,如图4中竖双线间部分),以免功率驱动开关在换相瞬间上下臂同时导通而损坏元件。
虽然对于不同频率每个相序内脉冲区间数和占空比有所不同,但输出的波形却是相同的。又因为每个区间的7个小区间波形是中心对称的,因此在输出最后3个小波形时,只要把前3个小波形的占空时间和输出波形数据倒读并输出就可以完成。另外,每个脉冲区间仅需要4个占空定时T区间,t2,t3,t4(见下节说明),并且每个相序仅需要4个脉冲波形数据就可以了。三相正弦波区间数据关系如表1.
表1三相正弦波区间数据关系
相序IIIIIIIVVVI电压关系Ua>Ub>UcUb>Ua>UcUb>Uc>UaUc>Ub>UaUc>Ua>UbUa>Uc>Ub波形数据2AH,29H,19H,152AH,26H,25H,152AH,26H,16H,152AH,1AH,16H,15H2AH,1AH,19H,15H2AH,29H,19H,15区间数N/6N/6N/6N/6N/6N/6小区间定时t4,t3,t2,t1,t2,t3,t4
4.2系统资源配置
当系统的分析与设计采用面向对象方法时,并不意味着所使用的编程语言也一定是面向对象的。事实上,这种分析设计方法的具体实现可以使用任何编程语言(如汇编语言或C语言);但是,在程序设计上要尽可能地使用面向对象的思想,如体现程序结构方面的封装性、消息传递等。这种才会使程序结构清晰,便于应付随着需求变化而产生的不断更新和系统维护。
在实现本系统时,系统最重要的资源是程序存储器和定时器。由于采用了上小节所讨论的数据处理技术,大大压缩了数据空间。在实现时,把6Hz~50Hz频率空间划分成7个大的区段,使每个区间的脉冲周期在900μs左右,区间周期定时使用单片机内部的T2定时器的常数自动重装入方式。由于区间周期与输出频率关系是确定的(T区间=1/Nf频率),片内T0定时器用于区间内小区间t2、t3、t4定时,而t1定时由t1=T区间-2×t2-2×t3-t4计算得到。T1定时器用于监视系统输出的脉冲宽度,当P1口任何一端输出脉冲宽度超过1000μs时,系统通过中断进入故障处理状态。另外,系统还设一WatchDog电路X5045,监视系统程序运行情况。当程序运行异常时,系统通过复位进入到故障处理状态。系统的显示接口通过单片机串行接口实现。
5讨论
面向对象的程序设计 篇6
关键词:面向对象;关系型数据库;映射;类;属性
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)20-0012-02
1 引言
面向对象(Object Oriented,OO)是把面向对象的思想应用于计算机软件开发中,以对象为内核,以类、继承、封装、多态等概念构造系统,进行客观事物的软件开发设计的一种方法。面向对象,对象其实就是一个封装体,包含数据和控制命令。随着计算机技术和开发软件的不断升级,面向对象的方法和应用已经不仅仅局限于软件开发和程序设计,已经逐渐扩展到数据库系统、分布式系统、网络管理、人机交互等计算机领域,甚至对人工智能、计算机辅助工具、信息系统等產生深远影响。计算机和网络都离不开数据库,面向对象的广泛应用,也给数据库技术增添了新鲜血液。面向对象方法与数据库技术,尤其是关系型数据库如何有效结合,更好的支持数据库的应用,是一个非常值得研究的课题。
2 面向对象的关系型数据库
2.1 关系型数据库
电子商务、云存储、云计算等计算机信息系统,已经是当今信息技术的重要手段,而数据库技术是计算机系统的重要组成部分和核心内容。数据库类型有网状、层次和关系几类,其中关系型数据库以其集合的操作方式得到了最为广泛的应用。关系型数据库是一种建立在关系数据库模型基础上的数据库,用集合代数方法对数据库单元中数据进行处理,是一组相互之间有关联关系的表,表的关系通过相关字段进行关联,表中的数据可以根据需求情况进行存取且不用重新组织数据库表格。新建一个关系型数据库时,每一行包含一个数据实体,是被列定义的种类。目前应用较多的数据库有oracle、sqlserver、mysql等。
2.2面向对象分析法
面向对象分析法(Object-Oriented Analysis,OOA),是指一个软件开发项目在开发过程中,首先要对业务情况进行调研,然后用面向对象的思想对该项目业务进行归纳、分类、分析。OOA强调的是业务对象之间的关系以及对象的属性和行为。面向对象分析法使用户和设计者之间的沟通更容易,设计者能够更好地理解用户的需求,设计者了解了用户的需求,才能更好地设计出用户与数据库之间的映射方式,从而设计出用户满意的数据库。
OOA方法的程序设计,从结构框架来说,一个是针对开发者的外部层,外部层是应用程序的整体设计;内部层针对物理存储,称为物化视图,是基于远程表格的,也可以称之为快照;概念层介于外部层和内部层之间,是内外部的映射,用DDL表示,概念层是关系型数据库的真正表现形式。对象与关系型数据库通过映射发生关系,映射方法就是将关系型数据库进行概念层的设计。从对象到关系型数据库的映射内容包括:属性与列的映射,关系型数据库中的继承,类与表的映射,映射的关联,聚合和组合以及实现关系等。
将对象建模和映射的过程就是将对象转换成概念层的数据库模型,对象模型转换为关系型数据库的映射有如下关系:
1)每个对象是唯一的,有唯一的标识符,具有唯一性。对象的标识一般用主键或者是系统自动生成的伪标识符来标识,而不是通过描述对象的属性来标识。
2)类与关系型数据库中的表的转换,可以通过直接调用表的名称,或者可以通过在类的名称前加前缀的方式修改成表的名称来实现。
3 基于面向对象技术的关系数据库的设计方法
3.1 整体思路
基于面向对象技术的关系型数据库的设计方法,首先要确定应用程序中的领域类,领域类中将数据信息和对数据的操作、调用方法进行了封装。领域类实例化,就得到对象,因此,需要提前把对象的存储、地址、检索方法、调用方法等问题设计好,做好准备工作。
在面向对象的关系型数据库中,数据通过对象形式存储到数据库中,并且对象之间的关联关系是自动存储的。关系型数据库本身不存在集合和分解的问题,可以由与对象相关的状态图像构成。面向对象的关系型数据库是通过对对象进行查询、检索、调用的,不存在对某个表的一行或一列进行某些操作。因此需要提前定义对对象的各种操作方法。比如:writeObject()是一个写入并存储一个对象及所有对象相关;read Object()是读取一个对象及所有对象相关。每个对象有唯一的标识ID,在写入和读取时通过唯一的标识ID进行。
以消费者对电子账户的写入、读取操作为例子,来说明面向对象数据库数据存储模式,如图1所示。将消费者对电子账户的操作对象的属性描绘成字段,指向其他对象需要映射到相应的外部关键字上,此处的操作动作不能封装。数据库中的每一个表对应一个类,对数据库中的表的操作设定为函数。
3.2 对象映射成关系数据库
RDBMS的表都是二维表,一个二维表是一个管理单元,二维表及表与表之间的关联关系用来描述对象模型的属性,即对象模型与关系型数据库的映射关系。将每个对象的类存储到数据库的表中,一个类对应一个对象实例,并进行存储。不仅对象实例映射到关系型数据库中,对象之间的关联关系也要映射到关系型数据库中,这样才能进行后续的操作。
对象之间的关系有四种:关联、继承、聚合、组成。关联是关系型数据库中对象之间的关联关系,聚合不仅需要对关系型数据库的整体进行操作,还需要对部分进行操作,即读取时需要整体读取的同时也需要在部分数据中进行读取。关联是不需要的,在关联中存储和读取的执行操作不明显。关联和聚合的区别在于对象之间的联系程度不同。
对关系型数据库中的数据不但有存储、调用等动作,还有删除的动作,那么将数据库对对象的存储和删除也是一样,对象映射成关系型数据由一些规则,如下:
1)一个类与一个库表对应映射,也可以多个类与一个库表对应映射。
2)类中存在父子关系的类,映射关系时可以分别与父和子类分别映射,或者不对父类进行定义,让子类具有父类的属性;不对子类进行定义,让父类具有子类的属性。
3)映射关系定义为一个表,包含一对一、一对多、多对多等关联关系,也可在类表之间定义外键。
4)聚合的方式有两种:一种是用一张表将所有对象类的属性合并;一种是分别用两张表分别将对象类的整体和部分分别合并,利用外键关联整体与部分的关系。
5)有些类是没有属性的,没有属性则没有映射表。
6)映射后的关系型数据库表需要进行冗余操作,使其关系范式合理。
4 结论
面向对象的关系型数据库系统以其模型简单、数据独立的优势,成为数据库技术发展的主流方向,本文针对面向对象的技术和关系型数据库的特点,将两者相结合,研究了将面向对象技术方式应用于关系型数据库,进行系统设计方法的研究,重点描述了对象映射成关系数据库的方法。
参考文献:
[1] 杨玉芬,李明明.高晓旸对象管理在面向对象数据库中的应用研究[J].吉林大学学报(信息科学版),2013,9(5):548-553.
[2] 肖刚.面向对象数据库在教学信息管理系统中的应用[J].硅谷,2012(6):79.
[3] 陆登,李善平,郑春昭. 基于对象数据库的扩展Java集合框架[J].计算机应用与软件,2011(1):133-136.
[3] 陈文宇.面向对象的关系数据库设计[J].电子科技大学学报,2002(1):53-56.
面向对象程序设计浅析 篇7
面向对象程序设计 (Object-Oriented-Programming, OOP) 是一种全新的程序设计思想, 目前已成为程序设计的主流思想, 面向对象程序设计的基本单元是类和对象。对于面向对象中一些基本概念的深刻认识, 对于一个初学者而言格外重要。但是, 最初接触到这些概念又会让那些初学者感到晦涩难懂。本文将大量的引入生活中的例子来阐述面向对象中一些概念, 以便初次接触这些概念的人能轻松把握。
在面向对象程序设计方法出现以前, 程序设计都是面向过程的。面向过程的程序设计重点在与函数的设计, 函数是组成面向对象程序的基本单元。面向过程程序设计的优点是:符合人们的思维方式, 按照由上到下的方式, 从整体把握一个要解决的问题。但是, 当处理一个较为复杂的问题时, 面向过程的程序设计将显得力不从心。因为, 在处理问题的过程中, 我们会遇到很多意想不到的问题, 这些问题在最初我们却又无法涉及到, 以前对问题的理解或许就不再适用。
为了解决这些问题, 出现了面向对象对象的程序设计。面向对象的程序设计是以数据为中心, 类作为表现数据的工具, 是划分程序的基本单位。它采用的是由下至上的解决问题的模式, 从问题的一部分入手, 逐渐构建出整个程序, 比较适用于较为复杂的项目的解决。
这样就给我们提出了一种全新的解决问题的思维模式:将一个大的项目分解为若干小的项目, 逐一突破, 继而完成整个项目。
2、类和对象
类和对象是构成面向对象程序设计的基本单位。
2.1 对象
2.1.1 对象的概念
对象就是一组变量和相关方法的有机结合体, 其中变量表明对象的属性, 方法表明对象所具有的行为。
2.1.2 生活中对象的概念
现实世界是由各种对象组成的, 在生活中, 我们所指的对象就是“东西”, 几乎任何东西都可以看做是对象。将一个东西看做对象, 我们便可以独立的去审查它的性质、行为, 进而研究它和其他对象之间的关系。同样, 我们在程序中引入对象的概念, 就可以把一个程序看做是多个对象相互作用的结果。
下面以电视机为例讲述对象的概念。绝大多数人对于电视机的内部构造及工作原理并不理解, 但是却又能十分熟练的来使用电视机。因为, 电视机的设计本来就是让我们不需要了解其内部构造就能够使用。电视机对用户来说, 可以视为一个“黑匣子”, 此时, 电视机对我们来说就是一个对象。当用户通过遥控器对电视进行操作的时候, 其内部需要经过一系列复杂的过程, 但是, 这些复杂过程对用户都是屏蔽的, 作为用户只需要知道按下按键将会转换到另一个频道即可。
由此, 我们可以看到对象这个概念的魅力所在, 使用对象的人无需了解其内部构造, 只需要简单了解对象的表面 (接口) 便能应用。因此, 我们不需要成为汽车工程师也能开车, 不需要成为电脑工程师也能使用电脑。这是面向对象程序设计的第一个特点:封装。
电视机的发展经历了从黑白到彩色再到今天的数字电视, 不断的推陈出新都是在最初电视机的基础上发展而来。这便是面向对象程序设计的第二个特点:继承, 即在原有的基础上加以修改创新。
早先设计的录像机, 在今天仍然可以用于新技术的电视机上, 原因在于, 电视机的音频、视频的输入/输出接口没有变化, 这就是“接口”的稳定性。接口的稳定保证了若干对象在各自发展的同时, 还能够进行交互。
2.2 类
2.2.1 类的概念
类, 是具有相同操作功能和相同数据格式的对象的集合和抽象描述。
2.2.2 生活中类的概念
分类在日常生活中无处不在。如下图所示:
诸如上述分类在生活中比比皆是, 不再赘述。
2.3 类和对象的关系
一个类的定义就是对一类对象进行的描述, 是构成对象的模板。类是抽象的, 对象是具体的。如我们用模子来制作月饼, 于是一个月饼加工厂生产出的月饼的外形都一样, 只是各个月饼的馅料各不相同。这时, 我们可以说模子就是一个类, 而样子相同的各个月饼就是由这个类创建的对象。另外, 我们通过一张图纸可以制造出好多辆汽车, 那么这张图纸便是类, 一辆辆的汽车就是由这个图纸类创建出来的若干对象。在程序设计中我们涉及的是由类创建出来的一个个真实的对象。
3、接口
由于封装这个对象的重要特性的存在, 外界将无权访问对象内部的一些信息和功能。此时的对象被视为一个“黑盒子”, 让使用对象的人不用 (也不能够) 了解对象内部的构造及工作情况。这时候, 类的设计者便可以设计一个清晰的接口, 从而达到对对象的操作。可见, 接口的存在可以让用户在不了解对象内部构造的情况下, 轻松的对该对象进行操作。
接口是一种非常有效的工具, 使得程序员能够将对象的定义和实现完全分离, 从而实现了在不破坏现有应用程序的情况下, 使对象得以发展。
4、多态
类中具有相似功能的不同方法可以用同一个方法名进行定义, 从而使用相同的方式对这些具有不同功能的方法进行调用, 这种现象称为多态。
多态在生活中的例子也不难找到。下面引入智能洗衣机的例子来阐述多态。现有一台智能型的洗衣机, 用户只需将脏衣服放进洗衣机后按下【开始】键即可。接下来的任务全部由洗衣机自动完成。这时候, 洗衣机会按照衣物的质地和脏的程度来决定洗的方式和次数。
当用户放进一条比较脏的牛仔裤时, 洗衣机会强洗15分钟, 漂洗5分钟;
当用户放进一件不是太脏的丝绸衣物的时候, 洗衣机会轻柔洗涤5分钟, 漂洗1分钟。
上述这样根据衣物的质地和脏的程度来决定洗涤方式的洗衣机表现出来的便是多态这个特性。不同的洗涤方式是由衣物 (程序中对应的参数) 所决定的。
多态的有两种实现机制:方法重载与方法重写。
方法重载的特点:在一个类中包含多个名字相同的方法, 但各个方法的参数列表是不同的。这个不同体现在参数的个数、参数的数据类型等不同。那么, 这些参数列表的不同之处就决定了最终将会调用那个方法。如同, 上述智能洗衣机的例子, 各个不同的参数即是放进洗衣机中的不同衣物, 它们的不同决定了洗衣机表现出的不同状态。
方法重写是发生在子类与父类之间的, 子类中有和父类中相同的方法名, 但是方法所完成的任务不同。这就和我们生物中所说的遗传非常相似。孩子继承了家长的相貌, 但是又和家长的长相不完全一样, 在家长相貌的基础上又有不同之处, 这个遗传的现象形象的解释了面向对象中方法的重写。
5、结束语
面向对象程序设计中的基本概念, 对于初次接触的人而言非常重要, 对概念的深刻理解和较好的把握将为今后的程序开发打下坚实的基础。本文通过引入了日常生活中较多通俗易懂的例子, 来诠释了面向对象程序设计中的一些基本的却又晦涩的概念, 希望能够给那些对这些概念把握不准确或者理解欠缺的人扫清障碍。
摘要:面向对象程序设计中的概念的理解往往对于初学者而言晦涩难懂, 本文主要引入一些日常生活中的常见例子深入浅出的介绍面向对象中的类、对象、接口、多态等基本概念, 解决初学者对面向对象概念的匮乏或理解欠缺。
关键词:面向对象,类,对象,接口,多态
参考文献
[1]杨学全.C#技术基础[M].北京:高等教育出版社.2008.1
基于面向对象的图像实时显示设计 篇8
本设计的应用程序是采用面向对象技术,在Microsoft Visual C++6.0下开发完成的。Visual C++就是一个典型的面向对象的编程语言。而在Windows的界面设计和软件开发环境中,也可以说处处贯穿着面向对象的思想。
在Windows中,程序的基本单位不是过程和函数,而是窗口。一个窗口是一组数据的集合和处理这些数据的方法和窗口函数。从面向对象的角度来看,窗口本身就是一个对象。Windows程序的执行过程本身就是窗口和其他对象的创建、处理和消亡过程。Windows中的消息的发送可以理解为一个窗口对象向别的窗口对象请求对象的服务过程。因此,用面向对象方法来进行Windows程序的设计与开发是极其方便的和自然的。
1 多个线程的设计
在系统中,对数据的实时处理有着很高的要求,由于WINDOWS操作系统支持多任务调度和处理,基于该功能所提供的多任务空间,程序员可以完全控制应用程序中每一个片段的运行,从而编写高效率的应用程序。
多任务操作系统将处理器的运行时间分成小的时间段,并分配给多个线程,每个线程在操作系统规定的时间段内运行。当线程使用完分配的时间段后,线程暂停执行;操作系统再将下一个时间段分配给其它线程执行;操作系统不断地将一个线程执行切换到另一个线程,经过一定时间的运行后,多个线程就同时完成了任务。由于各线程运行的时间段非常短,大约是20 ms,所以多线程能很好地满足系统中实时多任务处理的要求。
当系统需要同时执行多个进程或多个线程时,有时会需要指定线程的优先级。线程的优先级一般是指这个线程的基优先级,即线程相对于本进程的相对优先级和包含此线程的进程的优先级的结合。操作系统以优先级为基础安排所有的活动线程,系统的每一个线程都被分配了一个优先级,优先级的范围从0到31。运行时,系统简单地给第一个优先级为31的线程分配CPU时间,在该线程的时间片结束后,系统给下一个优先级为31的线程分配CPU时间。当没有优先级为31的线程时,系统将开始给优先级为30的线程分配CPU时间,以此类推。除了程序员在程序中改变线程的优先级外,有时程序在执行过程中系统也会自动地动态改变线程的优先级,这是为了保证系统对终端用户的高度响应性。比如用户按了键盘上的某个键时,系统就会临时将处理WM_KEYDOWN消息的线程的优先级提高2到3。CPU按一个完整的时间片执行线程,当时间片执行完毕后,系统将该线程的优先级减1。
MFC类库提供了多线程编程支持,对于用户编程实现来说更加方便。非常重要的一点就是,在多窗口线程情况下,MFC直接提供了用户接口线程的设计。
MFC区分两种类型的线程:辅助线程(WorkerThread)和用户界面线程(UserInterfaceThread)。辅助线程没有消息机制,通常用来执行后台计算和维护任务。MFC为用户界面线程提供消息机制,用来处理用户的输入,响应用户产生的事件和消息。但对于Win32的API来说,这两种线程并没有区别,它只需要线程的启动地址以便启动线程执行任务。用户界面线程的一个典型应用就是类CWinApp,它是CWinThread类的派生类,应用程序的主线程是由它提供,并由它负责处理用户产生的事件和消息。类CwinThread是用户接口线程的基本类。CWinThread的对象用以维护特定线程的局部数据。因为处理线程局部数据依赖于类CWinThread,所以所有使用MFC的线程都必须由MFC来创建。
对于数据采集程序,可以用一个单独的线程进行数据采集。这样,能最大限度地保证采集的实时性;而另外的线程同时又能及时地响应用户的操作、进行数据和图像显示及数据的存储等功能。否则,程序在采集数据时就不能响应用户的操作;在响应用户操作时就不能进行数据采集。尤其当采集的数据量很大,数据处理任务很重时,如果不采用多线程,采集时漫长地等待是很难让人接受的。
所以在软件的设计过程中需要添加一个额外的线程来专门处理数据采集的问题,创建线程是通过下面的步骤实现的,分别时实现控制函数和启动线程,它 并不必须从CWinThread 派生一个类。
(1)实现控制函数。
控制函数定义该线程。当进入该函数,线程启动;退出时,线程终止。该控制函数声明如下:
UINT BulkReadThreadProc(LPVOID pParam)
(2)启动线程。
由函数AfxBeginThread创建并初始化一个CWinThread类的对象,启动并返回该线程的地址。则线程进入运行状态。
m_pBulkReadWorkerThread=AfxBeginThread(BulkReadThreadProc,
&m_bulkreadThreadInfo,
THREAD_PRIORITY_NORMAL);
但是,多线程要比普通程序设计复杂得多。由于任意时刻都可能有多个线程同时执行,所以,许多的变量、数据都可能会被其他线程所修改。所以编程时有一个非常重要的问题就是线程同步。所谓线程同步是指线程之间在相互通信时避免破坏各自数据的能力。同步问题是由前面说到的Win32系统的CPU时间片分配方式引起的。虽然在某一时刻,只有一个线程占用CPU(单CPU时)时间,但是没有办法知道在什么时候,在什么地方线程被打断,这样如何保证线程之间不破坏彼此的数据就显得格外重要。在MFC中,可以使用4个同步对象来保证多线程同时运行。它们分别是临界区对象(CCriticalSection)、互斥量对象(CMutex)、信号量对象(CSemaphore)和事件对象(CEvent)。在这些对象中,临界区对象使用起来最简单,它的缺点是只能同步同一个进程中的线程。另外,还有一种基本的方法,本文称为线性化方法,即在编程过程中对一定数据的写操作都在一个线程中完成。这样,由于同一线程中的代码总是按顺序执行的,就不可能出现同时改写数据的情况。
在程序设计的过程中,线程要向界面窗口报告状态,为了实现这个功能,采用的方法时是通过消息实现的,由于消息本身携带的消息量有时不够用,消息参数只是一个指向某消息对象的指针,而消息对象需要在堆内存中new生成(因为线程不能等待消息处理完毕就继续执行),界面接受到消息对象后delete之;但是这时界面退出后,如果线程仍然生成新的消息对象,则消息对象得不到释放,所以在这种情况下,界面接受到WM_CLOSE消息将要释放之前,要等待线程完全退出之后再真正释放。
2 图像的显示程序
图像的实时显示是利用DirectDraw实现的。DirectDraw是DirectX技术的核心,它可以直接操作显示内存,进行硬件位转换操作,硬件覆盖操作和页面切换操作。作为一种软件接口,DirectDraw在维护Windows GDI设备兼容性的基础上提供了对显示设备的直接访问。因此,DirectDraw并不是高级图形API,而是一种实现游戏和Windows子系统软件(如3D图形软件包)的设备无关方法。
DirectDraw所支持的硬件范围广泛,从简单的SVGA到高级硬件实现(裁剪、拉伸、非RGB颜色支持等)都完全支持。那些硬件没有实现的特征将由DirectX使用软件仿真。简略地说,DirectDraw使用了设备无关方法实现了对显示内存的设备相关访问。
DirectDraw应用程序往往能够获得超过标准Windows GDI应用程序,甚至MS-DOS应用程序的功能。DirectDraw通过COM接口提供服务。这些COM接口包括IDirectDraw,IDirectDraw2, IDirectDrawSurface, IDirectDrawPalette, IdirectDrawClipper等。DirectDraw的设备无关性是通过硬件抽象层(hardware abstraction layer, HAL )实现的。对于那些硬件没有实现的功能,则使用硬件仿真层(hardware emulation layer , HEL)实现。当应用程序调用DirectDraw时,它将根据硬件的能力决定是调用HAL功能还是HEL功能。HEL有时会调用GDI的一些功能,有时则会直接访问硬件以完成一些简单的并与具体硬件无关的任务,比如内存访问等。HAL和HEL联合使用可以提供一组可靠的与设备无关的特征,但是这种设备无关性还有一定的缺陷,而且在DirectDraw中表现得最明显。因此,与GDI不一样,DirectDraw不是完全与设备无关的,而只能算几乎与设备无关。如果通过分析宿主系统能力并作出相应的调整,可以使应用程序获得最佳的性能。
图像实时显示的实现流程如图1所示。
图像的实时显示的实现总共分为以下几步:
(1) 创建DirectDraw对象
要使用DirectDraw必须使用DirectDrawCreate来创建一个带有IDirectDraw接口的DirectDraw对象,以便用户可以通过它来访问其它DirectDraw功能。
(2) 设置协作级别
在调用DirectDraw其它方法之前必须先设置屏幕协作级别,否则它们中的某些方法会失败。协作级别用于控制应用程序和系统及其它应用程序之间的交互程度。
(3) 设置显示模式
DirectDraw的显示模式内容包括宽度、高度、格式和刷新频率。
DirectDraw提供了一套完整的用于管理显示模式的方法具体操作可以通过EnumDirplayModes方法列举当前可能的显示模式并可以用SetDisplayMode来改变模式。
(4) 创建DirectDraw主图面
主图面就是用户能够看到的当前界面,每个DirectDraw对象只有一个主图面。在DirectDraw启动之前,主图面就已经存在了,那就是GDI用于绘制Windows用户界面的图面。在创建指向它的DirectDraw图面对象之前,没有办法访问主图面。
(5) 创建off_screen图面
创建了主图面以后接着要创建off_screen 图面,off_screen 图面是不能直接被看见的。它主要是作为存储可视部件的存储缓冲区,这些缓冲区可用于组成主图面或切换图面。创建off_screen 图面的过程和创建主图面的过程基本上一致,唯一的区别在于off_screen 图面要提供更多一点的细节。
(6) 设置剪裁器
剪裁器可以将DirectDraw所能输出的范围限制在屏幕上的某个区域范围,范围之外的其它部分将被剪裁掉。DirectDraw提供了DirectDrawClipper类来实现剪裁功能。
(7) 视频显示
视频显示的工作主要将从采集处理板读进来的、连续不断的图像数据装入主画面。其方法是先将图像写入off_screen 图面,然后用位转换Blt 操作将off_screen 图面整体拷贝到主图面中。
3 实验调试结果
当系统的数据采用模拟码源的数据时,所获取的数据图像如图2和图3所示,模拟码源的数据都是已知的,而且是根据需要进行设定的
图2中用到的模拟码源是由0xFF到0x00的递减数据,即是从255到0的灰度图像,完成由黑到白的渐变。
在图3中,数据来源于三个通道,分别是0xFF—0x00,0xFF—0x00,0x00—0xFF,体现在图像的RGB值上是(255,255,0)到(0,0,255)的渐变图像,颜色用红色逐渐过渡到青色,由于黑白打印机的限制,打印后的图像可能看不到这种颜色的渐变,表现为灰度的形式。
摘要:选用VisualC++开发用户界面程序,采用面向对象的程序设计,提供了友好的操作界面;采用DirectDraw技术实时显示图像,减少了系统响应用户命令的时间,更好地满足了实时显示图像数据的要求。
面向对象的程序设计 篇9
关键词:面向对象的程序设计,演示,Vfp6.0,归纳
面向对象的可视化程序设计,最适宜的教学手段是采用演示可视化的方法,使学生通过屏幕上的投影,清晰的看到面向对象程序设计时,各操作阶段所形成的界面,最终得出的目标文件,以及目标文件的运行结果。
Vfp6.0是一种当今比较流行的运用于微机的数据库管理系统,具有很强的命令和语言功能,不仅支持过程化编程技术,还支持面向对象的可视化编程技术[1]。为了真切、形象、生动地教授这门课程,采用演示方法进行教学。
演示教学方式相对于传统教学的课堂板书式的教学方式,存在着新的值得探索的课题,新的值得把握的处理艺术。对于演示教学方式不仅要注意演示的操作及其描述,还特别要注意对演示的内容的归纳总结。演示教学把学生引入了科学的迷宫,而归纳可以使学生走向畅游科学的道路。面向对象的程序设计所涉及的新知识及各个方面的要素很多,对于任何初学者而言,完全如同进入迷宫。所以,如何使用归纳,其作用尤为突出,学生能否掌握面向对象的程序设计的方法,关键就在于此。
在Vfp6.0中,表单设计最完整、集中地体现了面向对象程序设计的方法和特点,单独地讲述面向对象程序设计的方法,存在着枯燥和空洞的问题,学生难于接受。所以,面向对象程序设计方法的教学适宜与表单设计的讲授结合起来,使两者内容并行地深入。
在表单设计的教学中,特别强调对于面向对象程序设计的基本步骤的归纳:
1. 确定对象;
2. 确定对象的属性;
3. 确定某些对象的事件;
4. 编写事件的响应代码。
上述归纳,可以使学生在设计表单时不至于不知方向,避免发生混乱。
在学生把握了面向对象程序设计的基本步骤之后,进一步向学生指明:为了修改表单,为了使设计简明,可以将面向对象程序设计的基本步骤进行穿插,但面向对象的程序设计仍然由四个基本步骤组合而成。在表单设计中,简明化是指先实现功能(核心内容),然后进行美化(外观形式处理)。同时指出,就像使用Office的Word等软件使用中要先“编辑(内容处理)”,“后格式(样式处理)”一样,两者的道理是一样的。这种方法可以避免由于内容犬牙交错所造成的问题复杂化。简明化可以避免混乱,可以把由错误所造成的损失降低到最小。
经观察发现,学生在表单设计的上机操作时,最感兴趣的是对表单行进美化,而最大的困难是编写程序代码,在程序代码这一表单设计的核心内容实现之前,学生已经对表单进行了复杂的美化,而学生在编写代码时又难免出错,由于不注意简明的原则,学生的表单设计极易发生混乱,造成失败,费工多时的美化工作也随之付之东流。所以,所做的“先功能后形式”的归纳对于学生顺利完成表单设计的上机操作产生了良好的效果。
在讲课时,不仅要使学生掌握具体内容,还要通过具体内容掌握一般的处理问题的思想方法。上述的表单设计方法所体现的是,要善于把待处理的对象分解成若干基本的层次,并且按层次处理问题,这样对复杂问题的处理就等同于对若干简单问题的处理。这种思想方法可以有力地提高学生的素质。
对设计表单所作的归纳体现的另一种思想方法是,要认识复杂结构的关键环节。对于利用表单设计器设计表单时,存在表单控件工具栏、布局工具栏、表单设计器工具栏、属性窗口、代码窗口、数据环境生成器、表单生成器………,这些工具构成了创建表单的强大功能,但是面对这么多的工具,怎样合理的使用,最好的方法是从表单设计器工具栏开始,只要打开表单设计器工具栏,就可以通过直接点击工具按钮的方式,方便地打开其它表单设计工具。所以在用表单设计器设计表单时,要意识到首先寻找或者打开表单设计器工具栏,这种意识有利于把握表单的设计,减少周折。本例说明复杂往往是一种表面现象,复杂结构的整个组成部分具有规律性的联系,并且存在着关键环节,从关键环节开始就可以把握整个结构。在计算机教学中,有些要诀似乎是老生常谈,例如说,点击右键可以出现和当前被点击的对象相关联的快捷菜单;在Vfp6.0中,如果当前运行的程序不同,所显示的主菜单和下拉菜单的选项也不同,但是学生未必对这些要诀产生应有的意识。利用Vfp6.0系统,学生进行各种操作时,经常出现不知所措的情况。所以,经常适时适地强调这些学生熟视无睹的要诀及技巧,对于提高学生计算机使用技能是很有益处的。广而论之,对于那些所熟知的道理,究竟有没有意识到去遵循呢?又遵循了多少呢?其实很少,宝库就在身边,不要忘记去利用。
不能给学生提供一堆知识材料,要提供一个科学框架。忘却是难免的,随着时间的推移,材料会丢失,但是框架将保存,在需要时,材料将会被很快地填充到框架中。那么如何形成一各框架,这就要进行归纳,只有通过归纳才能在教学中形成科学的框架。所以,对于利用现代多媒体教学方式,进行可视化演示教学时,不可被形式所局限,不仅要注意演示的操作步骤描述,还要特别注意对于演示内容的归纳总结。
参考文献
面向对象的设计思想和方法初探 篇10
面向对象是一种思想。马克思主义哲学在开篇就定义到:“世界是物质的, 物质是运动的”。前半句话就是面向对象的体现, 把世界万物都作为对象来考虑。
目前, 面向对象的思想已经涉及到软件开发的各个方面。例如:面向对象的分析 (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
面向对象的程序设计 篇11
关键词:计算机网络设计;面向对象技术;可扩展性;软件系统
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)03-0540-02
一直以来,计算机网络技术的开发者致力于计算机网络软件技术的开发。随着计算机科学技术的发展,计算机网络软件技术也在不断地向前发展。计算机网络在进行软件设计的时候,涉及的因素非常的多,主要有网络拓扑、网络路由、网络开销以及网络安全等。面向对象技术在进行计算机网络设计的时候具有较高的优势。该文主要是运用面向对象技术,对计算机网络设计的软件系统的可扩展性进行了设计。
1 面向对象技术的概念及其特点
面向对象技术指的是把对象当做基础,通过消息或事件对驱动对象进行执行处理的一种计算机程序设计技术。世界是由众多的事物或对象构成的,他们之间通过发出信息来进行处理。所以,面向对象的技术相对于面向过程的技术具有更大的优势。面向对象的技术是以数据为中心进行系统描述,由于数据的稳定性相对较高,因此通过面向对象技术的计算机网络软件系统更具有稳定性。面向对象技术具有抽象性、多态性、继承性和封装性等特点。
面向对象技术具有抽象性。抽象性指的是对事物进行的抽象概括和描述,从而实现了客观世界转向计算机世界。抽象是一个比较难的过程,同样也是面向对象技术的第一步。
面向对象技术具有多态性。面向对象在进行设计的时候借鉴了现实世界事物的多态性,具体体现在不同的事物在收到同样的消息时,会产生许多不一样的行为方式。
面向对象技术具有继承性。面向对象技术的继承性是由软件开发的特征所决定的。软件开发时,通过继承,完成了软件模块的独立性、重用性,同时缩短了软件的开发周期,提高了软件的开发效率。
面向对象技术具有封装性的特点。通过对对象进行封装,实现了软件开发的设计者和使用者的分离。封装实际上是对象的复杂性隐藏了起来,通过代码重用,降低了软件的开发难度。
正是由于面向对象技术的这些特点,面向对象技术自提出以来便受到了人们的重视,目前,面向对象技术正广泛的应用于数据库等软件设计中。
2 计算机网络设计软件系统的可扩展性
一直以来,软件的可扩展性是软件开发者的目标,开发软件的可扩展性能够有效的延迟软件的生命周期。具体来说,软件的可扩展性体现在软件的功能具有可扩展性和软件的规模具有可扩展性。相对于计算机网络设计的可扩展性来说,主要指的是计算机网络设计的功能具有可扩展性。从计算机网络设计软件系统的主要内容来看,计算机网络设计的软件主要可以向以下三个方向发展:
第一,计算机网络设计的软件向性能分析的功能扩展。当前,随着科学技术的不断发展,信息技术不断的推陈出新,促使网络软件开发人员能够充分地通过先进的网络性能模型来完成对开发项目的质量进行合理的、科学的评价,进而扩展新型的网络性能的模型。
第二,计算机网络设计的软件向可视化的功能扩展。随着信息技术不断的发展,新的科技产品和网络协议正在不断地出现。在第一代的网络技术带动下,计算机网络软件基本实现了跟踪网络技术和网络视频等功能。
第三,计算机网络设计的软件向软件的外界接口扩展。进入信息化社会,平板电脑、手机、U盘等外界接口的需求量也越来越多。许多时候,人们会用到多个的网络软件接口,完成资料的保存、处理等。因此,积极的拓展计算机网络软件的外部接口,能够最大限度地方便用户,提高软件的使用效率。
3 面向对象的可扩展计算机网络设计软件系统的设计和实现
3.1 计算机网络设计软件系统的系统结构
依据计算机网络设计内容,我们把计算机网络软件划分成四个功能模块,即系统调度、网络拓扑的设计、网络性能的仿真和网络性能分析。系统调度主要负责完成系统的各个组成间的功能调度。网络拓扑主要负责设计网络拓扑结构的可视化,设计网络路由器,设计网络设备的参数输入,设计子网的划分等。通过网络性能仿真对网络进行仿真运算,通过网络的性能分析,利用依据性能需求形成的分析性能的模型,对设计的计算机网络软件系统的费用、运行效果和安全性能做出科学的、合理的结果分析。为确保软件的外部功能得到有效扩展,在进行软件系统的网络设计的时候,添加通用的数据库的接口模块,实现数据库和系统接口,通过通用的数据库系统完成和其他软件系统的接口。利用分层模型,通过五个功能模块把计算机的软件结合在一起。计算机网络软件系统内的各个模块通过计算机设备参数和对象的接口,均能够实现其功能。计算机网络软件系统的结构图如下图1所示。
3.2 计算机网络设计软件系统的数据接口和面向对象的分析
在面向对象技术的基础上,我们将计算机网络设计软件系统的功能扩展在封装方面,在对对象的内部属性和服务进行封装的时候,为确保整个系统的体系机构不出现变化,只需要将对象的界面固定住,不出现变化即可。通常情况下,网络设计人员多期望能够设计出一张便于编辑的拓扑图,方便设计人员进行自由的删除、插入等,而且同子网建立起有效的连接。关于需要对网络的预期效果和业务量等进行仿真技术,网络设计人员在设计出满意的网络设计图后,应当绘制成图表,添加到数据库里。
对象和类的标识属于设计和分析面向对象的重心任务,其好坏会直接决定着软件的实现和软件后期的扩展能力。在计算机网络设计软件系统中,系统调度模块在编程工具里有类库和解决的办法,在进行设计的时候,只需要集中分析网络仿真、性能分析和设计网络拓扑中的事件,形成事件响应表即可。
3.3 计算机网络设计软件系统的建立
利用上文中的系统结构与数据接口,通过VC++编程工具,在Windows平台下,我们成功的完成了设计以太网的子网,并且进行了仿真实验。在拓扑图里,较好的实现删除、添加和拖动主机,与以太网的总线和集成器能够方便的建立或删除连接。计算机网络设计软件系统很好的实现了仿真运算,在不同的负载中,计算机网络的丢包率、时延和拥堵等状况。该软件具有完善的网络设备库,很好的扩展了的数据库的接口,具有功能扩展简易,代码实现简单的特点。
4 结束语
综上所述,该文主要探讨了面向对象的可扩展计算机网络设计软件系统的一系列问题,主要包括面向对象技术,计算机网络设计软件系统的可扩展性以及面向对象的可扩展计算机网络设计软件系统的设计和实现。随着计算机网络技术的不断发展,计算机的网络结构也会更加的复杂,这就要求我们不断的探索适应性强、效率高,使用周期长的计算机网络设计软件系统,为人类和社会的发展创造更大的价值。
参考文献:
[1] 丰永庆,张磊.基于面向对象的可扩展计算机网络设计软件系统研究[J].电脑知识与技术,2013(8).
[2] 张书锋.面向对象的可扩展计算机网络设计软件系统探究[J].电脑开发与应用,2013(9).
[3] 刘建国,石冰心.可扩展的计算机网络设计软件的设计与实现[J].计算机应用,2012(1).
[4] 孙建召,曾巧明.基于面向对象Petri网的工作流建模及性能分析[J].计算机技术与发展,2012(10).
[5] 徐广斌,张尧学,周悦芝.基于虚拟机的透明计算系统设计及实现[J].清华大学学报(自然科学版)网络预览,2013(10).
面向对象设计的软件工程开发分析 篇12
面向对象设计是一种软件工程方法学的发展主流方向之一, 当前被广泛应用, 其有效性在实际应用中也得到了证实。对于面向对象的方法, 以对象为基础, 在其中事物都是由对象构成的。对象有内部特征和运动规律并且分别与不同的对象彼此互动。在面向对象的方法中, 对象主要具有两方面的特征属性, 其中包括数据和操作, 分别对应于对象的内部属性特征以及其外部运动的规律。面向对象的方法使软件的开发以及其相关的维护工作更便利, 增强了软件的可重用性, 并且同时其生产率大大提高。
一、面向对象的设计与分析简要介绍
面向对象的分析过程中的主要的阶段包括:一是提取和抽象概括用户需求;二是模型的建立。而设计是将用户的要求转换成可实现的最优方案的过程。从分析到设计的过程是一个逐步扩充和完善在分析阶段中所建立的模型的过程, 二者虽然是两个不同的阶段, 但却是相辅相成互相制约和影响的。只有分析的准确, 才能建立适合的模型并很好地解决用户所提出的需求和问题。在一般情况下, 分析的结果会在一定程度上反映设计的结果, 而设计的阶段中又会反复理解分析的结果, 进而完善分析过程中的结果。
二、面向对象的软件开发方法
现在, 随着面向对象的技术的飞速发展, 当前出现了很多的软件开发方法。其中, 在面向对象的软件工程开发中, 比较常见且广泛应用的有OMT和Booch等方法。它们根据各自不同的特点被应用在不同的领域中。虽然UML方法在该领域的方法中占有重要作用, 但是这些面向对象的方法对于研究者仍然具有很关键的指导作用, 在实际应用和开发过程中, 综合考虑这几种方法在分析建模过程中具有重要的意义。
(一) Booch方法。
Booch方法是Grady Booch从20世纪80年代开始研究, 后来这个方法在实际的应用中得到了逐步的完善和改进。Booch方法可被分为两个主要的过程。面向对象分为微观和宏观两个不同的过程, 微观的过程通常包含:一是将类和对象抽象化, 从问题中挖掘类和对象, 确定实现对象功能的行为。二是建立抽象出来的类的状态和行为。利用类图建立识别对象和类的关系, 确定类对象的边界以及辨别出相互协同作用的类对象。三是找出设计最优的算法和数据结构来实现对象类与对象。在宏观软件工程的开发过程中, 为了方便进行风险评估和方便快速的修改, 在该过程中确定一些相应的成果和活动。宏观过程更注重风险和结构, 因此, 结构以及完整性等在该过程中显得尤为重要。其中包括:概念化和需求的建立。概念化过程中要求具有较强的创造性, 没有固定的模式, 该过程主要是建立核心的需求。在分析过程中需要提供软件开发所需要的模型, 在该过程中注重系统的行为, 以此来区分系统的功能特点。设计的过程中, 体统结构的实现很重要。
Booch方法是UML技术方法的基础起源。其中的概念有:类、对象、操作和继承等。其主要的模型分为逻辑的和物理的, 两类中都包含各自的静态和动态视图。Booch的主要优势有很强的表达能力, 并且其设计的迭代和增量的思想对很多软件工程开发的设计阶段的建模提供了重要的指导。
(二) OMT方法。
OMT (Object Modeling Technique) 方法是由Loomis, Shan和Rumbaugh最先提出的, 该方法目前在数据库的关系设计中得到了应用。随着不断的发展, 后来该方法应用于面向对象的分析和设计领域中。有了之前的实体和关系模型, 在这个方法中又进一步扩展了类、行为以及继承等。OMT方法主要有三种模型:一是对象的模型:表述对象的静态的结构 (e.g.类、属性) 以及它们之间的相互作用关系 (e.g.操作和继承等) 。二是动态的模型:描述系统动态的变化特点, 例如:随时间的变化等。其主要的概念包括:状态和活动等。三是功能的模型:不同数据值之间在系统内的转换, 包括处理, 数据存储, 数据流和控制流的概念。OMT方法目前已得到广泛应用, 并且该方法在分析数据密集型的信息系统中占有重要的地位。
(三) UML方法。
目前, UML这种建模的语言其特点是有一个清晰、易于表达且功能强大, 在该领域包括了新的思路, 新方法和新技术。UML的模型包括静态, 动态, 系统环境模型等。此外, 交互式可视化建模工具所提供的代码等将模型转换成一种编程语言。例如:XMLDTD代码和JAVA代码等。还可以利用相应的工具和方法将这些代码逆向转换为UML。UML支持大部分面向对象开发过程, 它融合了之前建模技术的经验以及目前优秀的标准建模方法的特点。基于UML的建模可以分为静态和动态两种, 其中基于例图和对象图以及类图等创建的模型为静态的模型。然而, 基于状态图, 活动图等创建的模型为动态的模型。在大多数情况下, 一般采用这些对象模型的组合。由于类之间的关系为静态的模型, 对象之间的相互作用关系为动态的模型, 分别可以用类图和顺序图来描述这些状态以及它们之间的相互联系等。可视化建模是用直观的方式将模型描述出来的过程, 其中利用的基本信息是标准的图形元素。其中的一个重要的问题是选择合适的图形标注方法。比较常用的方法包括Booch, OMT以及UML。对象建模技术 (OMT) 图注方法则使用比Booch方法更简单的图形描述系统。UML方法融合吸收了之前建模技术的各种的经验和特点、方法和思想等。目前, UML是当今公认一种标准的建模语言, 并且近年来, UML技术不断发展完善, 融合了基于Web系统、数据的模型等新的思想。
三、面向对象设计的软件工程开发分析方法的优势
该方法的主要特点包括:对象是基本元素, 简单的对象组成复杂的软件对象, 对象又构成了系统;划分对象类, 不同的对象类对应各自的一组数据和方法;根据子类和父类来设定层次结构;对象之间可以相互联系。
面向对象的方法的优点有:更贴近人类的思维方式;具有较高的稳定性;可复用性强;易于大型产品的开发;方便维护。
四、结语
目前, 随着计算机硬件, 计算机应用的迅速发展, 计算机性能得到改善。然而, 在计算机的软件工程开发领域还面临重大的挑战。面向对象的软件工程方法, 由于它的先进性, 已被广泛应用于计算机技术领域且占据主流。用户的需求分析与设计阶段在这个过程中比较重要。面向对象的方法中非常重要的目标是合适地解决分析与设计过程中的复杂性同时提高其可重用性。因此, 当前软件工程开发分析领域面临的一个重点和难点是面向对象的分析与设计, 开发和研究应用性强, 可实现性以及复现性强的面向对象软件工程方法是一个重要的研究课题和方向。
摘要:随着计算机软件的规模以及它的复杂性不断迅速增长, 面向对象的软件工程方法成为当今软件技术的主要研究方向。本文主要针对这一问题, 首先简要概述了面向对象设计与分析, 然后探讨了主要的几种面向对象的软件开发方法, 最后针对其优点进行了进一步的概述和讨论。
关键词:面向对象设计,面向对象分析,软件工程开发
参考文献
[1] .胡家芬.思维导图在《C语言程序设计》语法教学中的应用研究[J].电脑编程技巧与维护, 2012
[2] .魏艳红.简单案例在C语言教学中的应用[J].现代电子技术, 2012
【面向对象的程序设计】推荐阅读:
面向对象程序06-11
“面向对象的程序设计基础”课程总结07-22
面向对象程序设计方法08-27
面向对象程序设计实习报告10-08
《面向对象程序设计》课程教学大纲05-22
面向对象程序设计实验教学大纲09-06
面向对象的思想05-30
面向对象的分析11-10
他们为什么说面向对象有问题,探讨面向对象的一些缺陷06-03
C 面向对象程序设计课程教学大纲05-29