ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10770|回复: 30

[分享] 编写拥抱变化的代码(六)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-9 20:56 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:类和类模块
本帖最后由 夜行 于 2015-5-9 21:07 编辑

这篇主要聊聊类之间的依赖关系。
在第四篇中列出的两个类Parts与Rects类(这边不再重复列出原有的类代码了,有需要的直接链接查看:http://club.excelhome.net/thread-1203253-1-1.html


它们的合作之前都是Parts类依赖于Rects类,Parts类需要Rects类的perimeter。这种依赖关系可以反转的
反转后两个类的代码如下:
Parts类:
  1. Private pric

  2. Property Get price()
  3.     price = pric
  4. End Property

  5. Function init(price)
  6.     pric = price
  7. End Function

  8. Function total(perimeter)
  9.     total = price * perimeter
  10. End Function
复制代码
Rects类:
  1. Private leng
  2. Private wid
  3. private part

  4. Property Get length()
  5.     length = leng
  6. End Property

  7. Property Get wide()
  8.     wide = wid
  9. End Property

  10. Function init(length, wide,p)
  11.     leng = length
  12.     wid = wide
  13.     set part = p
  14. End Function

  15. Function perimeter()
  16.     perimeter = (length + wide) * 2
  17. End Function

  18. Function total()
  19.     total = part.total(perimeter)
  20. End Function
  21. '……
复制代码
它们之间的合作是这样的:
  1. Dim o As New Parts
  2. Dim rect As New Rects

  3. Sub new_parts()
  4.     o.init 2   '单价
  5.     rect.init 3, 4,o '长、宽、零件
  6.     rect.total
  7.     '……
  8. End Sub
复制代码
两种依赖关系,都能很好的工作,这似乎是说,不管谁靠谁,只要能靠着,就行!
但现实真的很残酷!
除非你的代码千年、万年不变,那什么都没得说,直接忽略所有文字。

依赖方向的影响是很深远的,它贯穿在你整个程序生命周期中,随着变动的加剧,它们逐渐会成为问题的根源。
好的依赖方向会让人后续维护代码的工作变得更轻松。

对于上例来说,比较简单,无论谁依赖谁都是可以的。但碰到复杂点的类之间的合作,多个类的合作,依赖关系的选择就需要我们进行深入的研究。
我们基于怎样的判断来选择呢?没有万全的方法,更多的是靠经验:应当依赖那些不容易发生变化的类。
  • VBA固有的类,肯定是我们可以依赖的,它们稳定;而外部的类,相对就没有那么稳定可靠了。
  • 抽象类比具体类应该更稳定,对于VBA来说,抽象类就是指接口类了。
  • 如果一个类本身就已经拥有许多依赖关系,这时,我们就要慎重对待了,说不定,我们就是那最后一根压垮骆驼的稻草。

以下纯粹无病呻吟,可以忽略……

不知不觉,接触VBA也有7个年头了,期间也写了许多或难看或幼稚的代码(现在懒的时候也经常写),最常用的基本上就是数组、字典,渐渐都有点倦怠,似乎都没什么新意,当然好的东西还有许多,但貌似都是奇技淫巧,这些东西貌似等真正需要的时候再去学习也为时不晚(貌似都没有真正需要过)。

相信大多数长期学习VBA的,都跟我有同样的经历,不经意间接触到了别的编程语言,才会真正觉得:
语言那么多,应该去看看!——OO会带你到达另一个世界——回过头来,你会体会到:见山是山,见山不是山,见山还是山的三重境界。对于奇技淫巧你会由衷的赞叹,但你只是旁观者;而对于OO,它会改变你的思想,长驻在你的心间,你可以随意的按自己的意愿塑造属于自己的OO,沉淀得越久,OO将象空气、阳光一样,让你不可或缺了。



这个小系列就到这了,希望能帮助一些还只在VBA的世界里打转的朋友们打开一条门缝,看看VBA以外的世界!
——谢谢大家的捧场!

评分

7

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-5-9 22:35 | 显示全部楼层
然而这是一个变量要不要定义都能撕起来的地方

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-10 07:42 来自手机 | 显示全部楼层
PLINQ 发表于 2015-5-9 22:35
然而这是一个变量要不要定义都能撕起来的地方

哈哈哈,,,,撕撕更健康,,,,

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-10 11:38 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-10 18:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个自己顶一个,嘿!——为了排列整齐……哈哈……

TA的精华主题

TA的得分主题

发表于 2015-5-10 21:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-5-10 21:53 | 显示全部楼层
本帖最后由 liucqa 于 2015-5-10 21:55 编辑

除非你的代码千年、万年不变,那什么都没得说,直接忽略所有文字。
希望能帮助一些还只在VBA的世界里打转的朋友们打开一条门缝,看看VBA以外的世界!



理解两句话就理解了文章的中心思想

**************************************************8
OO:
面向对象(Object Oriented,OO)是软件开发方法

TA的精华主题

TA的得分主题

发表于 2015-5-10 22:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 汇铁 于 2015-5-10 22:49 编辑

嘿,,,七年。你要是,七年只写一个程序。当然是因为难,要写七年。你或会有新的说法。
我的意思,折腾有难度的程序,就不会倦怠。至少,我是这样认为的。
另,你总结的这篇东西中的写法。对没把程序写大的一般人,应该是体会不到这样写的好处的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-11 11:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liucqa 发表于 2015-5-10 21:53
除非你的代码千年、万年不变,那什么都没得说,直接忽略所有文字。
希望能帮助一些还只在VBA的世界里打转的 ...

大大慧眼如炬!
呵呵……

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-11 21:17 | 显示全部楼层
汇铁 发表于 2015-5-10 22:42
嘿,,,七年。你要是,七年只写一个程序。当然是因为难,要写七年。你或会有新的说法。
我的意思,折腾有 ...

写VB的,估计都是懒人,喜欢拿来主义……嘿嘿……
太高大上的东西,看得都累啊……呵呵……

你说的对,这系列的受众,在这个坛子里,应该还是比较小,一方面也是我水平不好,说得不够清楚哈……责任还是在我……其实本心是:我是从这个论坛开始编程的道路,所以有点东西可以反馈的话,也算稍尽一份心力,至于能有多大用处,则实在不是我有能力控制的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 01:34 , Processed in 0.053092 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表