在线工博会

针对OOP的分析
Matt Scott
为节省流量,手机版未显示文章中的图片,请点击此处浏览网页版
面向对象的程序设计(OOP)是一种程序设计方法,它有助于结构化和模块化的软件编码。
事实上,从梯形图到功能块,应用任何程序设计语言都可以实现模块化编码,但OOP完全是为模块化设计的。
这意味着OOP工具和程序设计语言连接的离散模块或者代码块及其规则,都是OOP编程语言的一部分。
其次,模块化程序设计是简单的、整体化的或多层方式的程序设计。这些程序不应用模块,宁愿将所有代码写在一个连续行里。整体的程序设计忽略了高级的程序设计技术,并且直接为了快速修复。这常常意味着编写代码的程序设计人员不用优先考虑程序总的结构。这常常发生在需要快速写一个程序的状况下,这样便难免会出现一些问题。
没有预先定义结构而编写的程序可能变得非常复杂,甚至是除了原始程序编写人员,所有其他的人员都不能理解。随着程序变得更加复杂,或在一段时间后需要再次访问该程序时,即使是原始程序人员也可能变得困惑。
相比之下,在编码之前,结构化和模块化的程序设计需要思考和计划编制。OOP对于结构化和模块化程序的设计是一个理想的工具。
通常,模块化编码特别是OOP相对整体的编码有许多优点(见表1),比如 :容易测试、代码的再使用、不同硬件对象平台的可移植性。

(图片)

表1:应用OOP的原因

开发OOP是有原因的,通常状况下,它能带来很好的结果,可以完成那些没有OOP实际上不可能做到的事情。应用OOP,熟练的程序设计人员能以一个有组织、有计划的方式来编写应用程序。
OOP的内涵
OOP是模块化代码概念的高级扩展。通过建立清晰的思路、可以重复使用的模块代码,可以避免一些程序的重复设计。程序代码也变得更有组织性和可读性(见图1)。
个别的代码或级别模块,能“继承”彼此的内容。一个子级能继承一个父级的内容。通过增加新代码或修改旧代码可以改进继承的内容。如:编写一个父级程序允许和一个PC和一个特殊品牌的PLC进行数据交换。
对于不同的PLC,也能创建一个子类,因为子级继承了父级公共的功能,同时它还能提供给编程设计人员一个增加硬件详细资料的方法。
例如,一个对象包含数据和对数据进行操作的代码。把多个对象或模块连接在一起建立程序。
通过让对象包含彼此的存储地址,以树形结构把对象连接在一起。接着可以从一个对象到一个对象的跟踪这些地址,这个功能称为遍历。由于程序的遍历,所以每个对象都能被访问,并且程序能搜集有关那个对象的信息,或者提供服务,比如对那个对象的操作管理设定。
比如:通过遍历对象的树,遍历功能可用来为整个程序创建一个测试和实体文档,对象的树中包含了描述对象和对象要求的测试及实体文档的文件名。遍历功能以一个有组织的方式收集了所有的测试和实体文档信息。
通过遍历相似的对象的树,程序设计人员能收集描述这些对象的所有的相关信息。然后在另一台电脑上应用一个相同的结构使用这些信息来创建一个新程序,这个技术称为序列生产过程。
通过连续化一个包含图形用户界面(GUI)事件描述的对象,一个完整的GUI事件能从一个硬件平台传送到另一个硬件平台。
何时应用OOP
OOP确实比整体代码设计预先要做更多的工作,因此,OOP应该应用于确实需要的情况下。
当预先不知道一个程序的所有最终用途和应用软件时,OOP特别有用。一些OOP编程语言也适用于软件程序需要控制许多硬件的情况下。比如:一个公司的软件工程师负责对几个设备实施一个先进的控制算法。这些设备包含多种软件操作系统和硬件平台。OOP的内在灵活性允许软件工程师创建一个基本程序,接着可以很容易地对每个平台改正。
当设备或过程需要以不可预知的方法连接在一起时,也适合应用OOP。编写每个模块的程序来控制一个特别的过程,然后这些模块能根据需要连接在一起。
如果当一个过程发生变化时,创建带标准组件的连接模块,可以让我们仅仅和那些需要的模块交换。旧工程中的现有模块也能很快地应用在新工程中编程。
如果第一次正确地配置设计了一个模块,建立一个持久的解决方案,并能反复利用。如果在一个模块里发现了错误或有些改进,那么,在所有存在这个模块的程序里更新这个模块就很简单。
S88配方管理技术应用许多一样的条件,包含了许多和OOP一样的原理,因此,OOP特别适合于S88的执行。
虽然S88最初的构思是为了批量控制,美国宝洁公司和其它大的处理程序正应用S88概念进行连续的过程控制。
按照美国宝洁公司的技术负责人David Chappell所说,他们公司已经成功地建立了几个混合(批量和连续)过程控制应用。Chappell说,这些混合系统在S88.00.01标准模块方法中受益很多。
应用OOP开发GUI
Deseret Labs应用微软公司的MFC开发GUI。当购买微软公司的VC++编程软件时,它会提供MFC库。文本编辑器、按钮以及其它的GUI元件都是MFC库的一部分。这样的库常常包含在编程语言软件包中。
微软公司把包括在MFC中的GUI元件看作控制器和ActiveX控件。这些元件是用户交互对象实体,一个用户能按这个对象实体来模拟一个旋钮、按钮或者拨号盘的操作。
当创建GUI时,应用同样的程序来管理它所有元件的位置、大小和其它属性是重要的。否则,必须写单独的程序来管理每个GUI元件。OOP的继承方法对完成这个任务很适合。
就VC++编程语言来说,GUI元件源自于Cwindow类。Cwindow(MFC库的一部分)是一个核心窗口功能性类,它包含了类的位置、大小以及其它的几乎继承了所有MFC类的功能。图1所示的是一个简单的GUI类层次结构的继承排列图表。

(图片)

通常把GUI的操作称为面向事件的程序设计。那意味着有一个永不结束的循环来扫描系统,处理比如鼠标或者键盘键的按下。然后这个循环把这个事件的信息(以及CPU控制)传送给事件接受者。
就VB编程语言来说,如果一个对象收到来自事件循环的CPU控制,但不返回信息,则整个应用程序将冻结。应用VB编程语言,对于一个特殊的窗口,获取自身的事件循环和停止其余的应用程序也是可能的。VB.NET和其它的OOP编程语言,比如VC++也能解决这个事件循环问题。
应用VC++编程语言,事件循环/GUI体系结构是多线程安全的。一个线程是一个代码的文库,比如一个事件循环,它和其它的线程同时执行。更精确的是,一个线程是一个由操作系统管理的数据文库。
当操作系统为CPU时间任务制定计划时,它检查数据。操作系统将设置 CPU,开始执行代码、稍后停止和恢复去做更多。
由于单个多线程访问同样的数据空间,所以在设法同时交换相同的数据时会彼此不同步。要避免这类事件的发生就需要同步,这意味着彼此的多线程块在访问资源时同步。同步代码成为多线程安全的,并能承受多个同时的线程且能避免不同步现象的发生。
因此,VC++程序能操作多个GUI窗口,彼此不会相互阻塞,又容易同时管理I/O访问。而这些只是通过OOP、特别是C++来提高程序设计效率便可实现。
控制算法
控制算法作为对象很容易应用OOP来编程。保持算法的通用性是一个非常重要的概念,因为当特殊算法失灵时,通用控制算法是可用的。
许多OOP库都支持高级的控制概念,比如模糊逻辑和神经网络。模糊逻辑算法对管理极端复杂的事物是非常有效的。神经网络算法对学习那些仅仅有少许训练的例子是有能力的。模糊神经系统兼有两种算法的功能。
1、复杂的代码能被其它的程序设计人员很容易的重新利用;
2、容易重新配置、变化和扩展代码;
3、开发有概念技术的难题;
4、OOP比梯形逻辑方式占用更少的内存和CPU时间;
5、能将复杂的编程设计任务自动化;
6、简化实体验证;
7、最小化的代码冗余;
8、代码的可调试性和相对可移植性。 1/24/2005


电脑版 客户端 关于我们
佳工机电网 - 机电行业首选网站