作者:empty 页数:779 出版社:empty |
对象是在面向对象的程序设计中提出的。在面向对象技术出现以前,开发人员采用的都是传统的结构化分析方法,将整个系统视为一个大的处理过程,然后将其进行分解成为若干个子处理过程,在程序中用数据描述过程间的联系。这种设计方法不灵活,尤其是在需求分析有变化时,需要对程序进行大量的修改。在这种情况下,人们提出了面向对象的设计思想,即以对象模型为单位,将系统功能的实现细节封装在对象内部,外界只能根据接访问对象中的相关数据。
活中的人、汽车、电脑是对象,人有白皮肤的、黄皮肤的、黑皮肤的,能够说话、走路,能够劳动、生产,这样的事物是“人”。当提到“人”时,便在大脑中形成了“人”的概念。对象是客观事物在人脑中的映像,人脑通过对这种映像进行抽象进而形成概念。例如,现实生在面向对象程序设计中,对象是以数据结构的方式存储在计算机中的,数据结构中包含了对象的属性和行为。属性是一个对象区别于其他对象的标识。例如,人有年龄、姓名、性别、肤色、国籍等属性,而每个人都有自己的年龄、姓名、性别等属性值。对象的行为也称为方法,是指对象能够做的事情。例如,人能够说话、走路、劳动,飞机能够飞行和降落。一般地,软件对象本身具有3项特性,分别是继承、封装、动态联编。“继承”特性在面向对象设计上是非常重要的一项概念,同样的数据和代码,不必在每个需要的地方再重写一遍, 只要归纳整理成一个class, 需要时再重制出所需要的instance即可。简单地说, 继承性是class之间的一种再分类关系, 它会让几个class之间具有相同的数据结构或操作过程,减少重复的代码,达到对象重复使用的目的。“封装性”的意思是把整个对象的数据和处理过程“包”在一起,通过一个标准、简单的接才能访问对象内的数据及使用对象提供的功能, 这所谓的接就是指对象的属性(property)和方法(method) 。由于软件的开发功能越来越强, 相对地也使得系统变得越来越复杂, 为了降低整个系统的复杂度,因此把整体分成许多块对象,将每一块对象的复杂度降低到一般软件开发者可以负荷的程度,而且让开发者能针对每一块对象去做分析、设计的工作,不会影响到其他块对象,这就是对象必须具有的独立特性,而对象封装的目的就是为了达到对象的独立。但是,对象封装的前提是对象里面封装的代码必须是正确的,而且要符合当初设计的需求。
“动态联编”是指在程序运行时, 系统才将message和method联编在一起, 而不是在编译的时候。message是送达对象的接, 用来启动对象的工具, 而method则是在message送达对象接后被选取的操作过程。例如,爸爸叫儿子去买早点,爸爸对象只需要把“买早点”的message送给儿子这个对象, 而不需要知道儿子对象是如何应用method来完成“买早点”的操作, 若是儿子有好几个, 动态联编会自动把message送给适合的对象method运行, 无须担心是哪个儿子对象完成的。因此,通过动态联编的功能就可以不用事先考虑使用对象的类型,只要把message送出即可, 等到程序运行时, 看哪一个对象应该配合这个message, 再把message和这个对象的method联编, 然后运行这个method。由于组件的数量太多, 而且未来程序设计师也有可能自行安装其他的组件, 因此Delphi就将这Delphi提供有一组VCL(Visual Component Library) 组件, 这些组件的数量超过200个,
初学Delphi的人可能分不清组件与控件的区别, 在此作者做一下介绍。控件是从组件继承了运行时可见的功能,因此,在组件类中提供了与位置有关的属性、与显示有关的方法以及与鼠标有关的事件等。在Delphi中, 组件分为窗组件与图形组件两大类。窗组件具有Windows句柄, 能够获得焦点。图形组件又称为非窗组件, 没有Windows句柄, 占用的资源要比窗组件少, 此外,图形组件的重画速度要比窗组件快得多。在开发程序时会用到许多组件,一般应更改默认的组件名称,使其具有一定含义。这样,不但有利于编写代码,而且会提高程序的可读性。例如图1.2所示的窗体界面,可以将编辑框组件分别命名为Operator BH、Operator MC、Operator MM、Operator QX。将窗组件放置在一个窗体或容器中时, 设置Tab键顺序可以使每个组件在创建时被有序化。用户在运行程序时, 可以按Tab键切换窗组件的焦点。如果想修改窗组件的Tab键顺序, 可以设置TabOrder属性, Tab键的控制次序是从0开始的, 因此, Tab键控制次序中的第1个组件的Tab键顺序为0。窗组件有一个TabStop属性, 该属性用于确定用户按Tab键是否可切换焦点。如果该属性为False, 窗组件不处于Tab键的控制顺序中, TabOrder属性无意义.