




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库应用第七章 面向对象程序设计基础Object-Oriented Programming (OOP)代码的可重用性问题:面向过程的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。结构化程序设计认为:一个系统是由模块和模块间的调用构成。其中模块是具备独立功能的程序片断。如何提供重用性,提高代码的质量。OOP编程方法强调代码的可重用性。OOP的观点:系统是由对象和对象间的交互构成。什么是对象?后面可以看到,在VFP编写GUI(Graphical User Interface,图形化用户界面)程序时,对象基本由VFP提供,我们只需编写交互。27.1 面向对象的基本概念
2、面向对象的系统观认为,一个系统是由若干对象和对象间的交互构造而成。它反映了基于面向对象的方法如何构造系统。面向对象程序设计(Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。参考中科永联高级技术培训中心Object Oriented Programming到Wiki(维基百科)了解面向对象的程序设计37.1.1 OOP的核心概念对象属性行为接口消息类41. 对象(Object)简单地说,对象就是现实或抽象世界中具有明确含义或边界的事物。例
3、如一个学生、一辆汽车、一条狗、一把尺子。面向对象系统观认为对象由对象属性和对象行为构成,即对象是属性和行为的封装体。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,或者说是负有责任的角色。接口属性行为消息52. 属性(Attribute)和属性值属性是为刻画对象的一个方面,其所具有的数据称为属性值。简单的来说,一个人就是一个对象,一个尺子也是个对象。当这些对象可以用数据直接表示时,我们就称他为属性,例如:尺子的度量单位可以是厘米,公尺或英尺,这个度量单位就是尺子的属性。例如学生“江华”的籍贯为“江西赣州”。这里“江西赣州
4、”为学生“江华”的籍贯属性取值。属性取值不同,可以使对象具有不同的状态。63. 行为(Method)行为是对象具有的一种处理能力。如人可以吃饭、喝水、思考问题、参加劳动如学生“江华”可以去“注册学籍”、“选修课程”,这些操作表示这个对象具有的行为。如尺子可以度量长度VF根据行为的触发方式不同,行为又分为事件和方法。事件:对用户操作的响应。健盘输入、鼠标点击、焦点变化方法:对象具有的其它行为特征刷新窗口、窗口隐藏、状态失效74. 接口(Interface)简单地说,接口就是特殊的属性和行为,它表示一个对象对外提供的服务。对外服务包括:对象向其他对象公开的属性和行为。对于一个VFP对象来说,就是那
5、些对外公开的属性和行为。由于接口中的属性和行为为其它对象所知道,故其它对象通过发送消息到该对象来实现对象间的交互。85. 消息(Message)消息传递机制:一个对象通过接受消息、处理消息、传出消息或使用其他类的方法来实现一定功能,这叫做消息传递机制(Message Passing)。消息实现了对象间的交互。一个对象通过接口向外界公布其提供的服务,其它对象通过发送消息来与这个对象进行交互,可能有结果返回到发送消息的对象,也可能没有结果返回发送消息的对象。消息的描述除了和对象公布的属性和行为有关外,它还有特定的格式。有关VF消息格式参请阅7.2节相关介绍。96. 类(Class)类(Class)
6、定义了一类事物的抽象特点。通常来说,类定义了事物的属性和它可以做到的(它的行为)。举例来说,“人”这个类会包含人的一切基础特征,例如姓名、体重、身高等属性特征和吃饭、睡觉等的行为能力。类对行为和属性描述被称为类的“成员”。 我们来看定义“人”类的伪代码:类 人开始 属性成员:姓名体重 身高 行为成员: 吃饭()睡觉()结束106. 类(Class) cont.在面向对象系统和程序中,具有相同结构和功能的对象一般用类进行描述,并把对象称之为所属类的实例。简单地说,类描述的是具有相同属性和行为的一组对象(或对一组对象的相同属性和行为的描述)。面向对象的处理问题方法提出将具有相同属性和行为对象抽象到
7、类的方法。类和对象的关系类是对象的抽象,而一个具体对象是某个类的实例。可以将一个图章看成是一个类,而图章所盖出的图章印是一个对象。由于一个图章可以盖出多个图章印,即一个类可以被实例化为多个对象。如“人”这个类定义了世界上所有的人,而张三、李四、这些则是“人”类的实例117.1.2 类或对象的特性类和对象有许多特性重点是:封装性、自治性、可标识性、状态性。还有OO书籍中常见的继承性、多态性、抽象性。121. 对象的可标识性每个对象都有自己的标识号(英语为Identifier,简写为ID)。例如,如果图章具有自动改变序号功能,则每个实例化出来的图章印,虽具有相同的属性和操作,但它们具有不同的标识号
8、序号不同。例如,每个人都有姓名例如,每个学生都有学号132. 对象的封装性对象的封装性表现在对象将属性和行为封装在对象中。对象封装的好处:是可以隐藏对象内部的实现细节,即所谓的信息隐蔽原则,也可以理解为黑箱。信息隐蔽原则使得人们在使用一个对象时,只关心它提供的功能,不关心对象的功能是如何实现。信息隐蔽原则可以避免由于某个对象的属性或行为的改变对其它对象的影响,通过独立的分治原则可以减低问题的复杂性。143. 对象的状态性对象的状态性是通过给对象的属性赋值来表现的。例如,学生“江华”对象。这里类为“学生”,类“学生”的姓名属性值为“江华”。154. 对象的自治性由于对象是属性和行为的封装。对象状
9、态的改变是由该对象本身实施的。即其它对象通过发送消息,请求对象改变其状态,对象的状态是否改变取决于对象当前的状态,在某些状态下可能无法改变对象的状态。165. 类的继承性面向对象的概念中,我们讨论了类与对象间的关系,类与类之间是否存在关系呢?在语义上,一个类与另一个类之间可能存在继承关系。继承性的好处是可以减少代码冗余。实现一次编码,多处使用的特性,即在减少系统开发工作的同时,可以减少系统的维护工作量。这是面向对象编程方式带来的好处。17例子“汽车”类是一个抽象的类,它具有一般汽车具有的属性和行为,它被称为父类(基类)“小汽车”类代表“汽车”类下面的一个分类,这里被称为子类,子类继承了父类所有
10、的属性和行为。即“小汽车”类具有“汽车”类所具有的所有属性和行为。也可以扩展自己的属性和行为继承汽车自重载重颜色启动方式驱动方式18例子类“学生”继承自类“人”人肤色身高体重吃饭睡觉老师单位职称上课学生学号类别年级上课警察继 承江华王丽196. 对象的多态性将同样的消息发给同一个对象,根据对象当前所处状态的不同,对象可能给出不同的响应,这称为对象的多态性。多态性的好处是实现:同样的调用接口可以实现不同的功能。例如:老师的“上课”和学生“上课”,功能不同207.2 VF对面向对象方法的支持根据面向对象的观点,构造一个系统的过程,是根据给出的实际问题,抽象出相关的名词术语,即先刻画该系统中的各个核
11、心概念类。在刻画完成各个类具有的属性和行为后,再将类实例化为类的对象,进一步描述这些对象间的交互,即这些对象间消息的关系,来描述和构造一个系统。21VF对象示例表单或窗口22Visual FoxPro内置基类Visual FoxPro 中基类控件类Active Doc复选框组合框命令按钮控件自定义编辑框标头容器类容器表单集表单表格列页框页面工具栏图例非可视可视基类:Visual FoxPro 内部定义的类,可用作其他用户自定义类的基础。例如,Visual FoxPro 表单和所有控件就是基类,您可以在此基础上创建新类,增添自己需要的功能。 子类:以其他类定义为起点,对某一对象所建立的新类。新类
12、将继承任何对父类所做的修改。23图例非可视可视超级链接图像标签线条列表框选项按钮组命令按钮组OLE绑定型控件OLE容器控件项目挂钩形状微调文本框计时器控件类容器类容器:包容其他相似类的 Visual FoxPro 基类。例如,一个表单类中可以包含一组控件类,将这些类作为一个整体进行操作。 控件:放在一个表单上用以显示数据、执行操作或使表单更易阅读的一种图形对象,如文本框、矩形或命令按钮等。Visual FoxPro 控件包括复选框、编辑框、标签、线条、图象、形状等等。24VFP基类名称25VFP基类名261. 可视对象与非可视对象VFP应用程序包括可见的用户界面和不可见的数据加工处理。即可视的
13、对象和非可视的对象。可视对象(页框、选项按钮组、文本框、复选框、组合框和命令按钮等)构成用户与计算机交互的界面,计算机通过这些界面元素向用户提出问题,用户通过选择或回答界面中的元素选项来回答计算机的提问。即通过这些标准元素实现用户与计算机的对话。非可视的对象主要用来完成用户数据的处理,即非可视对象主要用来完成数据的统计累加等有关按某种流程的操作。272. 容器对象和控件对象根据对象出现的位置不同,Visual FoxPro将对象分为容器类和控件类。容器类对象可以包含其它容器类对象或控件对象,作为它们的父对象。例如,Visual FoxPro中表单是容器类,这里表单就是我们通常的窗口或窗体,表单
14、中允许摆放各种容器和控件,如命令按钮,页框(当然页框也是容器)。28Visual FoxPro 中的对象分类容器和控件的区别: 容器可以作为其他对象的父对象。例如,一个表单作为一个容器,是放在其中的复选框的父对象。控件可以包含在容器中,但不能作为其他对象的父对象。例如复选框就不能包含其他任何的对象。29Visual FoxPro容器类包含的对象 常见容器对象能包含的对象容器任意控件表单集表单、工具栏表单页框、任意控件、容器或自定义对象页框页面页面任意控件、容器和自定义对象选项按钮组选项按钮命令按钮组命令按钮列表头和除表单集、表单、工具栏、计时器和其他列以外的其余任一对象。表格列303. 事件和
15、方法(1)事件和方法都是Visual FoxPro对象的行为。事件和方法的区别是调用方式不同。事件的调用方式是隐式的。事件的调用或触发是由用户的操作来实现的。例如:命令按钮上存在鼠标的单击事件,当用户使用鼠标指向该命令按钮并单击鼠标左键时,将触发预先在单击事件中定义的行为。通常一个对象包括很多事件,例如图7.5所示的为命令按钮部分事件,图中含Event的均表示事件。方法必须显式调用如表单的release方法313. 事件和方法(2)编写事件代码时,需要注意两条规则:每个对象的事件触发是独立的,容器对象(如窗体、选项组等)不能处理它所包含的对象的事件。例如,在窗体上放置一个命令按钮。当点击命令按
16、钮时,不会执行窗体的Click事件,而仅执行命令按钮的Click事件。如果某个对象没有相应的事件处理代码,则系统会逐层向上检查其父类是否有与此事件相关的事件代码,若有则执行,而该层以上的与此事件相关的代码不会被执行。如果该对象有事件代码,则系统只执行它的代码,而不会再向它的上层去寻找相应的事件代码,即不会再执行其父类的事件代码。如果在该对象的事件代码中使用Dodefault()函数,则系统会向上寻找执行其父类的事件代码。 32Visual FoxPro中的常用事件事件事件被激发后的动作Load加载对象。Init创建对象。Show显示对象。Destroy从内存中释放对象。Click用户使用主鼠标
17、按钮单击对象。DblClick用户使用主鼠标按钮双击对象。RightClick用户使用辅鼠标按钮单击对象。33Visual FoxPro中的常用事件GotFocus对象接收焦点,由用户动作引起,如按 Tab 键或单击,或者在代码中使用 SetFocus 方法程序。LostFocus对象失去焦点,由用户动作引起,如按 Tab 键或单击,或者在代码中使用 SetFocus 方法程序使焦点移到新的对象上。KeyPress用户按下或释放键。MouseDown当鼠标指针停在一个对象上时,用户按下鼠标按钮。MouseMove用户在对象上移动鼠标。MouseUp当鼠标指针停在一个对象上时,用户释放鼠标按钮。
18、344. 属性及其功能Visual FoxPro对象有许多属性,属性值决定对象的状态或外观。例如命令按钮有属性Enabled,其取值为.T. (True) 或.F. (False)。当命令按钮的Enabled属性为.T.时,命令按钮是有效的,当命令按钮的Enabled属性为.F.时,命令按钮是失效的(灰色状态)。 35常见属性属性含义Name指定在代码中引用对象时所用的名称。Caption指定对象标题(即:对象上显示的文本)。Enabled指定控件是否可用。.T.真(默认值):为可用;.F.假:不可用,呈暗淡色,禁止用户进行操作。Visible指定控件是否可见。.T.真(默认值):为可见;.F
19、.假:不可见,但控件本身存在。36常见属性Style指定控件的样式。适用于:复选框、组合框、命令按钮、文本框、选项按钮组。TabIndex指定页面上控件的Tab键次序。TabStop指定用户是否可以使用Tab键把焦点移到对象上。Value指定控件的当前状态。适用于:复选框、列表框、组合框、命令按钮组、编辑框、表格、文本框、选项按钮组、微调按钮。对于列表框、组合框、命令按钮组、编辑框、表格、文本框、微调按钮,Value属性值返回当前对象的状态:如用户选项或用户输入的字符或数值。37常见属性属性含义AutoSize控件是否根据正文自动调整大小。Height指定对象在屏幕上的高度。Widtht指定对
20、象在屏幕上的宽度。Top对于控件,指定相对父对象最顶端所在位置;对于表单对象,确定表单顶端边缘与VFP主窗口之间的距离Left对于控件,指定相对父对象的左边界;对于表单对象,确定表单的左边界与VFP主窗口左边界之间的距离。FontName指定对象显示文本的字体名。FontSize指定对象文本的字体大小。38常见属性FontBold、FontItalic、FontStrikethru、FontUnderline指定文本是否具有下列效果:粗体、斜体、删除线或下划线。FontBold是否粗体;FontItalic是否斜体;FontStrikethru是否加一条删除线;FontUnderline是否带
21、下划线。ForeColor设置控件的前景颜色(即正文颜色)。用户可以在属性窗口中用调色板直接选择所需颜色,也可以在程序中用RGB()函数设置。BackColor设置背景颜色,选择方法同前景颜色。39常见属性BackStyle设置背景风格。0透明:控件背景颜色显示不出来;1不透明(默认值):控件设置背景颜色。BorderStyle设置边框风格。0无:控件周围没有边框;1固定单线(默认值):控件带有单边框。Alignment控件上正文水平对齐方式。0左:正文左对齐;1右:右对齐;2中间:正文居中;3自动(默认值)。WordWarp当AutoSize属性设为.T.时,WordWarp才有效。.T.真
22、:表示按照文本和字体的大小在垂直方向上改变显示区域的大小,而在水平方向不发生变化;.F.假(默认值):表示在水平方向上按正文的长度放大和缩小;在垂直方向以字体大小来放大或缩小显示区域。40常见属性Picture指定在控件中显示的位图文件(.BMP)、图标文件(.ICO)或通用字段。适用于:复选框、命令按钮、选项按钮组、容器对象、图像、表单等。SpecialEffect指定控件不同样式选项。03维:立体效果;1平面:平面效果。对于页框控件SpecialEffect属性0凸起(除容器对象之外的所有对象的缺省值);1凹下;2平面(仅是容器对象的缺省值)。InputMask指定控件中数据的输入格式和显
23、示方式。适用于:微调、文本框、组合框。Stretch在一个控件内部,指定如何调整一幅图像以适应控件的大小。0剪裁,剪裁图像以适应控件;1等比填充,调整图像大小以适合控件,同时保持图像的原始比例;2变比填充,调整图像大小以适合控件,但是不保持图像的原始比例。415. VFP属性的赋值两种方法一种是在程序设计时设置属性,即选中需设定属性的对象,再通过属性对话框直接修改属性值加以设置。如图7.7中所示的命令按钮Caption属性为“Command1”,你可以直接输入为“确定”。另一种方法是程序运行时给对象属性赋值实现的。42设计时刻设置属性在属性对话框中直接输入即可。43如何给对象的属性赋值对象标题
24、(即Caption取值)标识符即Name取值(对象实例名ID)出现的位置表单容器Form1顶层页框Pageframe1表单容器中页面1Page1页框中命令按钮在页面1Command1页面1中命令按钮在表单Command1表单容器中44对象的属性赋值每个对象具有唯一的标识符ID。在VFP中,对象的标识符是通过对象属性Name标识的。要引用VFP中的对象就必须知道对象的Name,但由于VFP中对象分为容器对象和非容器对象。为引用某个特定对象的属性,我们就必须理解VFP对象引用的表示方法。VFP规定从顶层容器对象开始加以引用,以点号分隔。表单名.命令按钮名.属性名 = 属性值ThisFmand1.E
25、nabled = .F. “命令按钮在表单”失效。 表单名.页框名.页面名.命令按钮名.属性名 = 属性值ThisForm.Pageframe1.Page1.Command1.Enabled = .F. 使得“命令按钮在页面1”失效。45VFP对象属性赋值的通用格式 perty = Setting 这里objectvariable是对象变量名,通常它与表单文件(扩展名为SCX)的文件名同名。form表示表单名。control表示控件,如果控件是个容器,则可以包含其它控件。property表示属性名。Setting表示要赋值的属性值,
26、它可以是一个表达式。总之,若想给一个对象的某一属性赋值,需要确定该对象和包含它的容器层次间的关系,再使用由点号 (.) 分隔的容器、控件和属性来处理该对象的属性赋值。 46Visual FoxPro对象引用关键字 属性或关键字引用THIS表示该对象自身THISFORM表示包含该对象的表单THISFORMSET表示包含该对象的表单集Parent表示包含该对象的父对象ActiveControl表示当前活动表单中具有焦点的控件ActiveForm表示当前活动表单ActivePage表示当前活动表单中的活动页476. 对象的方法引用 objectvariable.form.control.method
27、 这里objectvariable是对象变量名,通常它与表单文件(扩展名为SCX)的文件名同名。form表示表单名。control表示控件,如果控件是个容器,则可以包含其它控件。method表示方法名。487.3 OOP编程语言核心问题VFP提供的类库有哪些基类、一般属性、一般事件类什么时候实例化对象。(在进行表单或窗口设计时,将类实例为对象,之后编写对象间的交互)VF对象的分类:可视对象与非可视对象容器对象与非容器对象对象属性的引用方法对象方法的引用方法49控件焦点与Tab序焦点是接收用户鼠标或键盘输入的能力。当控件具有焦点时,才能接收用户的输入。 比如,在有几个文本框的表单窗口中,只有得到焦点的那个文本框才接收由键盘输入的文本。当对象得到焦点时,它将产生GotFocus事件;当对象失去焦点时,它将产生LostFocus事件。 50控件焦点与Tab序在表单设计器中将控件放到表单上后,Visual FoxPro自动给每个控件(但绘图控件如直线、椭圆等除外)都赋予一个TabIndex值。该值决定了缺省情况下程序运行后用户按Tab键时输入焦点的跳转次序。51VFP中关于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电商平台生态系统的商业模式研究
- 社区活动策划新思路从教育角度的案例分析
- 2025至2030年中国光面麦拉膜数据监测研究报告
- 2025年矿山安全生产培训居间代理合同
- 二零二五年度美容美发摊位租赁与服务合同
- 电商时代下的网购防骗技巧分享
- 护师工作计划书范例
- 2025至2030年中国SD读卡器数据监测研究报告
- 2025年度消费者维权赔偿与娱乐演出服务协议
- 2025年度房屋装修施工安全协议书(含竣工验收及售后服务)
- 男生青春期生理教育
- 现代汉语(黄伯荣、廖序东版)课件-第四章语法课件
- 统编版小学语文五年级下册第四单元解读与大单元设计思路
- 压疮护理质控反馈
- 山东春季高考Photoshop考试复习题库(含答案)
- 湖南省长沙市2023-2024学年八年级下学期入学考试英语试卷(附答案)
- 一年级美术课后辅导教案-1
- 2023-2024年人教版八年级上册数学期末模拟试卷(含答案)
- 数据采集管理制度范文
- 幼儿园小班开学家长会课件
- 中药抗骨质疏松作用
评论
0/150
提交评论