




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
易语言面向对象学习易语言面向对象学习 当前有很多编程语言都是支持面向对象的 如 DELPHI VC JAVA 等 但大家 对于概念性的一些内容 取很难去理解 学习 有的学习者因为概念入不了门 使得放弃 了进一步深入学习 现在 易语言 3 8 版也支持类 Class 了 因此 本文通过介绍易 语言的面向对象的概念 使大家更加容易地学习了解 再去学习其它语言中的相关知识就 不会那么难了 一 枯燥的理论一 枯燥的理论 1 对象和类 要讨论 面向对象 大家必须首先搞懂什么是 对象 面向对象编程语言中的 对 象 概念和我们日常生活中说的 对象 东西 或 实体 非常相似 其实编程语言中 的 对象 就是从现实生活中的 对象 实体 的概念发展而来的 可以指你面前的这 台戴尔电脑或你家楼下的那辆奔驰轿车 也可以指你们公司的销售员小张 编程语言中的 类 的概念也和现实生活中的 类 非常相似 也是对某一类有共同 特征的 东西 实体 也许我们应该称 对象 的概括 可以看出 类 是一个抽象的 概念 比如当你提到 电脑 这个概念时 你指的不是你面前的这台电脑 不是你家隔壁 超市西面出口处用于结帐的那台电脑 也不是世界上任何一台具体的电脑 而是指 电脑 这个抽象的概念 是 具有处理器 存储器和输入 输出设备的电子设备 同样 员工 指的也不是你们公司是小张 不是我们公司的小王 也不是世界上任何一家公司的任何一 个具体的工作人员 而是 服务于某家公司并定期领取薪水的人 上面我们所说的 电脑 和 员工 就是两个 类 因为它们分别概括了某一类型的 对象 的基本特征 另外要 说明的一点是 类 和 所有这类对象的集合 也是不一样的 因为后一个概念虽然也 很全面 但它指的仍然是一大堆具体的对象 而不是一个抽象的概念 这也许有点像在玩 文字游戏 希望你能适应并喜欢这种游戏规则 毕竟做任何事情都是需要 规则游戏 的 面向对象编程也不例外哦 2 类的 成员 与 方法 每个类一般有它的属性 比如每个员工都有自己的 姓名 每到月底都可以领到 日工资 乘以 本月出勤天数 算出来的工资 这里的 姓名 日工资 和 本月出 勤天数 就是 员工 这个类的属性 或叫属性 或叫 成员成员 而每月工资的计算方法 日工资 本月出勤天数 就的 员工 类的一个 方法方法 在易语言中的类模块中 一个类看起来就 像一个程序集 类的成员看起来就像一个程序集变量 类的方法看起来就像程序集中的一 个子程序 注意 只是看起来像看起来像 它们之间还是有很明显地区别的 3 实例化 实例化指的是从一个类到这个类的对象 实例 就像上面说的从 员工 到你们公司 的小张 一个类并不是一个可操作的实体 它只是一个概念 只有对象才是可操作的 比 如你们公司必须把薪水发放给具体的人 比如小张 而不是发放到抽象的 员工 或 销 售员 在易语言中 生成一个类的实例对象 实例化 就是定义一个以这个类为数据类型 的变量 可以在通过点 来使用这个对象的方法 进而操作这个对象 类似于 调用 窗口 1 移动 来移动 窗口 1 4 继承 电脑 员工 这两个 类 虽然强大 概括了许许多多的 对象 但是他们毕竟 太宽泛了 有时候我们需要更具体一点的概念 比如别人问你 你家的那台电脑是台什么 样的电脑 你就绝对不会回答 我家的那台电脑是一台 电脑 而是说出你的电脑的 品牌 或具体的配置 比如一台 戴尔 8530 电脑 或 一台奔腾 3 电脑 同样 你会对 别人说 你们公司的小张是一个 销售员 前面提到的 戴尔 8530 电脑 和 销售员 同样都是类 但是他们分别比 电脑 员工 这两个个类更加具体 这里你从 电脑 到 戴尔 8530 电脑 和从 员工 到 销售员 用的就是 继承 因为前面的每两对概 念中的后一个都具备了前一个的所有特征 比如 销售员 肯定服务于某家公司并定期领 取薪水 但是有都比前一个具有更多或更具体的特征 比如销售员有具体的工作 负责销 售 销售员 的薪水可能比普通的员工要高一些 没错 编程语言中的继承就是这样的 总的说来 继承 指的是从一个相对比较宽泛的类到一个相对具体一点的类 在一个继承 关系中相对较宽泛的类被称做后一个类的 基类 相对较具体的类被称做前一个类的 派 生类 当然 从这个相对较具体的类还可能会得出更加具体一点的类 这又是一个继承关 系 这时 这个 相对较具体的类 又成为了 更加具体一点的类 的基类 后一个就是 前一个的 派生类 这样的 具体化 还可能无限继续下去 但是 继承 绝对不能具体 化到某个具体的 实体 也就是对象 比如从销售员 具体化 到你们公司的销售员小张 因为继承只能发生在两个 类 之间 一旦从类具体化到了对象那就不叫 继承 了 就 成了 实例化 二 牛刀小试二 牛刀小试 1 定义一个类 生成实例对象 有了理论基础 我们来牛刀小试一把 就以公司的员工为例子吧 打开易语言 3 8 新建一个窗口程序 插入一个 类模块 输入如下代码 本程序定义了一个类 员工 这个类说明了所有公司员工的共同特性 都有一个姓 名 当然 员工的共同属性肯定不止这些 这里为了简单 仅仅考虑 姓名 并给它定义 了一个文本型成员 姓名 同时提供了两个公开方法用于操作这个成员 其中 取姓名 方法只是简单地返回该类的唯一成员 姓名 置姓名 方法用于给 姓名 成员赋值 为了确保 姓名 成员包含合法的姓名信息 程序在 置姓名 方法里加了参数合法性检 查 有了一个类 下面我们来进行 实例化 即从 员工 这个抽象的概念具体化到一个 公司的员工 张三 然后在启动窗口上放置一个按钮 并输入如下代码 这里的程序定义了一个 员工 类型的变量 张三 也就从 员工 类实例化实例化了一个 对象 张三 由于 张三 是 员工 类的对象 所以他就具有了这个类的所有成员和方 法 然后我们就可以调用张三这个对象的两个公开方法对它进行操作了 易语言中所有的 类成员均为私有成员 所以我们无法直接通过对象给它的成员赋值 只能通过调用公开方 法 张三 置姓名 张三 设置员工的姓名 而我们在 员工 的 置姓名 方法 中加了参数合法性检查 所以实现了对类成员的保护 其实这个保护是不完整的 如果没 有调用 张三 置姓名 张三 这个员工还是没有姓名的 即用 张三 取姓名 方 法取得的为空文本 下面在讲 初始化 方法时将解决这个问题 这里顺便说一下类方法的访问限制 一个类的方法可设置为 公开 或 受保护 如 果一个类的某个方法被 公开 就意味这这个方法可以被该类的其他方法 该类的实例对 象和它的派生类访问 即调用 否则 这个方法就是 受保护 方法 受保护方法只能被 该类的其他方法和它的派生类访问而不能通过该类的实例对象来访问 比如上面的 张三 置姓名 张三 就是通过对象直接访问类的公有方法 你可以试着把 员工 类的 取姓名 公开 栏 的勾号去掉把它变成一个受保护方法 再运行该程序 易语言编译 器就会报错 错误 10123 指定方法 取姓名 未被公开 不能在外部被调用 看来我 们的易语言还是很聪明的哦 关于类方法在继承中的访问限制 我们将在最后面具体讨论 注意 易语言中没有类的公有 公开 成员 它的所有成员均为私有 所以 一个类注意 易语言中没有类的公有 公开 成员 它的所有成员均为私有 所以 一个类 的所有成员都只能在类的内部使用 而不能通过的所有成员都只能在类的内部使用 而不能通过 对象名对象名 成员名成员名 值值 的方式来直接访的方式来直接访 问类的成员 所以 如果你想把一个类的某个成员公开给外部使用 就必须给这个类添加问类的成员 所以 如果你想把一个类的某个成员公开给外部使用 就必须给这个类添加 相应的方法来取和置这个成员的值 相应的方法来取和置这个成员的值 2 初始化 与 销毁 在上面的 员工 类的代码中 还有两个方法我没有提到 那就是这节的标题提到的 那两个方法 仔细研究一下 你会发现这两个方法非常特别 第一 方法名都是以下划线 开头 第二 它们都是 受保护 的 第三 它们都没有返回值和参数 第四 这两个方 法是在我们插入一个类模块时自动生成的 形式的特殊决定了它们功能的特殊 这两个方 法是 私有 的 即未公开的 也就是说它们只能在类内部使用 在什么时候使用呢 我 们做个实验 在这两个方法中输入如下代码 更改 按钮 1 被单击 子程序如下 然后运行调试运行这个程序 我们发现易语言是这样输出的 在弹出信息框之前 员工类 初始化 张三 置姓名 张三 取姓名 弹出信息框之后 子程序即将结束 员工类 销毁 我们可以发现 初始化 是在 员工 类生成对象 张三 时被调用 销毁 是 在该对象超出作用域 将被销毁时调用 由于 张三 对象是一个局部变量 所以它的作 用域 生存周期 和它所在的子程序是一样的 于是 在进入这个子程序后 执行第一行 代码之前 张三 就被创建 初始化 方法被自动调用 在这个子程序最后一行代码执 行完毕即将退出时 张三 就被销毁 销毁 方法被自动调用 你也可以用类似的代码 验证一下对象作为程序集变量和全局变量使时的情况 另外 每生成该类的一个实例对象 该类的 初始化 就被调用一次 每销毁一个对象 该类的 销毁 方法就被调用一次 有点像窗口的 创建完毕 和 销毁 事件 你可以多招几名员工 生成 员工 类的 多个实例 即定义多个 员工 类型的变量 验证一下哦 这两个方法的这种特性在编写程序时可以给我们很大的帮助 让我们有机会在一个对 象被创建时做一些初始化工作 比如打开一个文件 初始化类的私有成员 在这个对象被 销毁时 做一些善后工作 比如关闭打开的文件 根据这种特性 我们可以改进以上的代码 实现对 姓名 成员的初始化 更改 员工 类的 初始化 方法代码如下 这样 就算没有调用 员工变量 置姓名 张三 这个员工也会有一个名字 未 命名 了 因为在这个员工被创建时 员工 类的 初始化 方法被自动调用了 人嘛 怎么能没有名字呢 注意 不要更改注意 不要更改 初始化初始化 和和 销毁销毁 方法的方法名 参数 返回值和访问限制方法的方法名 参数 返回值和访问限制 即是否 即是否 公开公开 否则易语言就会把它们当作普通的成员方法或报编译错误 否则易语言就会把它们当作普通的成员方法或报编译错误 三 一个更丰富的三 一个更丰富的 员工员工 类类 为了更好地继续我们的讨论 首先我们应该把上一篇中的 员工 类丰富一下 这次 除了可以设置和取出每个员工的姓名外 还要实现一个功能 计算月工资 为了简单其间 我们假定月工资计算公式如下 月工资 日工资 本月出勤天数 下面看看这 在易语言中如何实现 打开上次的那个例程中的 员工 类模块 添加两个成员 为了能存取这两个私有成员 我们添加如下四个方法 注意 我这里把 置日工资 方法设置为 受保护 即没有公开 这样当一个员工 对象被创建出来后 就无法在外部对该员工的 日工资 进行修改了 比如 张三 置日工 资 50 是编译不成功的 这样才能保证公平性 每个员工的日工资都的一样的 你想多 挣钱 就要努力出满勤 或成为一个销售员 下面将继承时 我们会发现 销售员的月工 资还包括提成 更改 初始化 方法如下 在初始化时 每个员工对象被创建时 调用该类的 受保护 方法 置日工资 设置 其日工资为 30 元 注意 虽然这个方法没有公开 我们还是可以在这里调用 是因为在易 语言中 非公开的方法都是 受保护 的 是可以在类内部被其他方法 这里是被 初始 化 调用的 参看本篇开头 然后 我们的主角出场了 计算月工资 这个方法很简单 就是根据月工资计算公式计算出员工该月应得的工资并返回 这个类的使用也很简单 比如公司新招聘了两名员工 张三 和 李四 到该发工资时 然后分别计算二人本月应得的工资 张三和李四中的任何一个都不能用过 置日工资 方法来更改自己的日工资 因为它 是一个 受保护 的方法 四 再说继承四 再说继承 上面我们提到 员工不能通过改变自己的日工资来提高收入 但是可以自己成为一个 销售员 我们假定销售员的工资计算方式为 工资 日工资 出勤天数 销售额 0 2 可以看出 销售员也是员工 他除了具有所有员工都具有的姓名 出勤天数 日 工资外 还多了一个 销售额 属性 并且工资计算方式也不一样了 如果我们从头写一 个 销售员 类的话 我们得把上面 员工 类中除了 计算月工资 以外的代码复制一 份到销售员类里 然后加上 销售额 成员 和相应的存取方法 并编写新的 计算月工 资 方法 你有没有发现这样做我们的新类中有写东西和以前的 员工 类有重复呢 这 种重复除了无谓的浪费外还造成代码的维护困难 面向对象正是要解决这个问题的 看看 下面这个 销售员 类是任何写的 现在新插入一个类模块 我们的 销售员 类继承 自 员工 类 所以它拥有了 员工 类的一切 虽然我 们的 销售员 类没有 取姓名 置姓名 等方法 但是如果你实例化了一个 销售员 类型的对象 变量 销售员 1 你同样可以使用 销售员 1 置命名 和 销售员 1 取姓名 这两个方法从何而来呢 答案只有一个 从 员工 类继承来的 这就是 继承的好处 我们不用重复编写 销售员 类的 取姓名 置姓名 等在 员工 里已经 写好的方法了 销售员 除了继承了它父亲 员工 的 遗产 外 也有自己独有的成员 销售额 和独有的 置销售额 方法 如果只是继承遗产而没有创新 这继承还有什么意思呢 下面我们集中看销售员的 计算月工资 方法 首先它调用了 取出勤天数 和 取日 工资 这是 遗产 然后有和销售额做了运算 这是创新 返回 问题是 它既然继承 自员工 并且继承了员工的一切东西 那么它是不是也继承了员工的 计算月工资 方 法呢 答案是 Yes 第二个问题 那它既然继承了员工的 计算月工资 它又有自 己的 计算月工资 那它是不是有两个 计算月工资 方法呢 答案是 No 销售员既然重写了 计算工资 方法 那么通过销售员对象调用的 计算工资 实 际上执行的是销售员自己的 计算月工资 也就是说 如果派生类重写了基类的某个如果派生类重写了基类的某个 同名方法 那么在这个派生类中 从基类继承来的那个方法就被同名方法 那么在这个派生类中 从基类继承来的那个方法就被 覆盖覆盖 掉了 掉了 看下面的 例子 这次李四如愿以偿 成了销售员 虽然他的出勤天数和张三是一样的 但是他又调用 了自己的 计算月工资 于是 收入的差距就产生了 五 类的多态性五 类的多态性 类的多态性表示 可以将一个继承类对象赋予到其基类数据类型变量中 此时对此基类的多态性表示 可以将一个继承类对象赋予到其基类数据类型变量中 此时对此基 类对象变量进行操作 将反映出继承类对象的特性 类对象变量进行操作 将反映出继承类对象的特性 本篇文章中的程序与前两篇有很大的改动 为了解释清楚类的多态性 现在在 员工 基类中增加一个空的 置销售额 的方法 结构要一致 如下所示 再新增加一个新的名为 技术员 的类 其基类为 员工 类 如下所示 然后回到窗口程序集 1 中 添加一个 员工 类型的程序集变量 职工 程序内容全 部更改为以下所示 大家可以看出 本程序中将继承类对象继承类对象 技术员 和 销售员 分别赋给基类对象基类对象 职工 这样 职工 就有了继承类对象的特性 在对销售人员的操作时 职工 的方 法操作就等同于对销售员继承类对象的操作 大家也可以看出 基类 员工 有一个 置 销售额 方法 而继承类 销售员 里也有一个 置销售额 方法 但当调用基类的 置 销售额 方法时 却因为事先已被赋予了继承类的对象 因此实际调用的是继承类的方法 下面如果职工类型太多 也可以用数组循环的方法一次计算出来 下面是使用数组的 例程序 可以看到也是将继承类对象分别赋给基类对象 调用时使用数组操作分别调用基基类对象 调用时使用数组操作分别调用基 类类 在此 只是简单地使用数组说明 而没有使用循环 实际上使用数组更能体现 类的多态性 的优越性 因为如果继承类很多的话 只需 使用一个循环就可以实现所有操作 非常方便 六 虚拟方法六 虚拟方法 实际上通过上述例程就可以了解什么是虚拟方法了 我为大家分析一下程序面板中类的定义 可以看到 基类 员工 中有一个 置销售 额 方法 继承类 销售员 中也有一个 置销售额 方法 当子类变量赋值给父类变量 后 可以达到覆盖基类方法的目的 当然也可以定义一个抽象虚方法 纯虚函数 即一个空方法 只提供方法的框架而不 编写任何代码 实现的过程完全通过子类的覆盖来实现 虚拟方法 又称为虚函数 是一种虚拟出的方法 其他编程语言中通过 virtual 关 键字来定义虚函数 虚拟方法就是允许被子类重新定义父类的方法 这就是常说的函数的覆盖 overload 基本上面向对象是模仿了人类的认知世界 在编写一个大型而实用的程序时 使用对 向对象的创作手法要比传统的编程手法有效 如果程序需要改动 也只是需要将某一部分 的方法改变 从而无需将程序的所有环节改变 在面向对象的程序设计之前 必须事先作 好类的规划 使得程序更加清晰 去除重复性的劳动 代码的维护也不再困难 七 总结七 总结 前述简单讲解了易语言支持类的构造 析构 继承 虚拟方法 多态 封装特性 下 面再归纳一下 以加深大家对这些概念的理解 1 对象的构造 对象的构造 构造顺序为 先构造基类对象 再构造其继承类对象 如果类中具有对象成员 则先构造顺序为 先构造基类对象 再构造其继承类对象 如果类中具有对象成员 则先 于其所处对象构造 于其所处对象构造 表示必须先创建基类对象 才能在此基础上创建继承类对象 如果类中有对象成员 则会先于其所处对象建立 例如本程序中的 员工 是基类 而 销售员 是继承类 先 有基类 再建立继承类 2 对象的析构 对象的析构 析构顺序为 先析构继承类对象 再析构基类对象 如果类中具有对象成员 则在其析构顺序为 先析构继承类对象 再析构基类对象 如果类中具有对象成员 则在其 所处对象后析构 所处对象后析构 表示在类销毁时 先将最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泸州市中石化2025秋招笔试模拟题含答案油田工程技术岗
- 中国广电枣庄市2025秋招笔试行测题库及答案网络优化与维护类
- 梅州市中储粮2025秋招面试专业追问题库仓储保管岗
- 盐城市中储粮2025秋招笔试题库含答案
- 中国联通邵阳市2025秋招面试无领导高频议题20例
- 常德市中储粮2025秋招质检化验岗高频笔试题库含答案
- 中国移动天津市2025秋招心理测评常考题型与答题技巧
- 长沙市中储粮2025秋招面试专业追问题库基建工程岗
- 2025年中职入门考试题及答案
- 中国移动来宾市2025秋招行业解决方案岗位专业追问清单及参考回答
- 《劳模工匠之光》课件 第1、2单元 民族大厦的基石、改革攻坚的先锋
- 2025至2030年中国阻焊油墨行业发展运行现状及投资潜力预测报告
- 电力电子技术课件 单结晶体管及其触发电路
- 研究《农村集体经济组织法》对推动新型农村集体经济发展的影响及实践策略
- 2025年党建知识应知应会测试题库(附答案)
- 规范网络文化市场促进健康有序发展
- 测绘新技术之无人机的
- 基于PLC的立体仓库控制系统设计
- 2025年北京市交通发展年度报告-北京交通发展研究院
- 2025年新九年级数学暑假衔接讲练 (人教版)专题07 一元二次方程单元测试 (学生版)
- 施工单位工抵房管理制度
评论
0/150
提交评论