ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 设计模式思想在Excel VBA 类中的基础应用

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-18 08:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:类和类模块
谢谢楼主!收藏了。

TA的精华主题

TA的得分主题

发表于 2014-4-18 11:13 | 显示全部楼层
VBA 从语言本身就不支持继承,更谈不上构造和析构等等。所以谨慎看待把基于面向对象思想的设计模式舶来VBA 编程的做法,即使楼主举得那些例子,也不过是模拟实现的,和真正的面向对象语言中,比如C# 的类继承,实现接口等等是两码事。
专业开发人士告诫学生,如果不是项目达到一定规模谈不上设计模式。学习设计模式的学生要真正掌握设计模式的思想也是在写一定规模的项目上有了思考之后,恍然大悟的感觉。
由于俺不是圈里人,更不是专业开发者,以上两句不知道对错,舶自CSDN 论坛。
从上面可以知道,设计模式是用于开发相当规模的项目上的。而VBA 恰恰不善于写大规模的项目,使用VBA 开发较大型项目通常被指责为滥用VBA 的表现。

1、VBA 本身不支持面向对象,只能模拟样式。不免有形无实,真正用起来捉襟见肘。
2、VBA 不善于开发较大规模的程序,并不真正适用于设计模式。

基于以上两点:本人不看好设计模式思想在VBA 开发中的应用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-18 11:21 | 显示全部楼层
hehex 发表于 2014-4-18 11:13
VBA 从语言本身就不支持继承,更谈不上构造和析构等等。所以谨慎看待把基于面向对象思想的设计模式舶来VBA  ...

呵呵,实用才是王道,无谓人云亦云……

TA的精华主题

TA的得分主题

发表于 2014-4-18 11:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-18 11:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-18 16:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 夜行 于 2014-4-18 16:11 编辑
liucqa 发表于 2014-4-17 16:02
关于设计模式的书,百度都有.
*****************************************************

谢谢大大帮助推荐的书籍与给的意见……

VBA只是工具,此帖只想介绍一些编程的思想,设计模式的思想应该在大多数的编程语言中都可以实现。
个人经历也是如此,刚开始就写一些小程序,渐渐的演变成各种需求的实现,所以很难说某一天,我们会不会成为真正的IT人。但相信我已经在路上了,也相信坛子里绝大多数热爱编程的人也是梦想着有一天能够成为真正的IT大牛,所以上万行的代码,也不是什么太惊人的事情,如果能使代码更易于维护,更健壮,代码数量的增加应该还是可以另人接受的。

希望能帮助在路上同行的朋友看得更远一些。

TA的精华主题

TA的得分主题

发表于 2014-4-18 20:18 | 显示全部楼层
夜行 发表于 2014-4-18 16:06
谢谢大大帮助推荐的书籍与给的意见……

VBA只是工具,此帖只想介绍一些编程的思想,设计模式的思想应该 ...

嗯,给企业写应用的话,还是需要有设计模式思想的,我看过不少外企的VBA代码,老外写的应用代码无一例外都非常有条理,这个是从小练出来的,国内差距不小...

点评

“无一例外都非常有条理”,深有同感  发表于 2014-4-19 07:46

TA的精华主题

TA的得分主题

发表于 2014-4-19 07:59 | 显示全部楼层
hehex 发表于 2014-4-18 11:13
VBA 从语言本身就不支持继承,更谈不上构造和析构等等。所以谨慎看待把基于面向对象思想的设计模式舶来VBA  ...

个人认为,切不可拘泥名词。只要能解决问题就好
关于“类继承”,通过一些从权处理,用VB/VBA也能实现。
比如,继承关系路径可以采取ISM模型,这是因为在处理继承关系路径时,编程的人肯定对各种路径了然于胸。而ISM是通过矩阵、高等代数实现的,VBA处理这种东西更是拿手好戏。EH中有很多巧妙的实例代码。
知道路径后,如果仅仅处理属性就简单了。如果需要处理方法、过程等,可以用VB中的“代理”,也能实现
这样一来,处理多层继承、多根继承都可以办到。
但如果非要追究这种方法是不是普遍适用,那就不保证了。不过C++是不是也能保证对任何情况都能实现多层继承、多根继承,我也不知道
另外,17楼关于训练有素、有条有理,也是十分重要

TA的精华主题

TA的得分主题

发表于 2014-4-19 09:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 hehex 于 2014-4-19 10:00 编辑
yiyiyicz 发表于 2014-4-19 07:59
个人认为,切不可拘泥名词。只要能解决问题就好
关于“类继承”,通过一些从权处理,用VB/VBA也能实现。 ...

随便吧。是拘泥于名词还是不具备可行性,做起来再说。VB 从语言特性上就不支持面向对象,而且楼主的实现也是从普通的方法实现的模拟所谓“构造”函数,“析构”函数,有多少实用意义?指导意义更大一点。
换句话说,楼主其实是提出了一种编程的设计标准,如果说是从某些设计方法得到启发也好,如何也好。
能不能提升到设计模式的高度?

用vba 模拟继承,模拟多态的代码都见过,那有什么意义,模拟就是模拟。不是真的实现,就像用VB 模拟多线程编程一样,语言本身不支持,你在代码层上玩出花来又如何?

不否认楼主下了一番功夫,也没有贬低他工作的意思。我也有言论的自由,这里是论坛,不是一言堂。
是不是提点谨慎意见,发表点个人观点就要被扣帽子成了拘泥名词?

个人认为切不可盲目追求一些貌似高大上的东西,切忌浮躁,脚踏实地才是根本。最后说一句,4人帮的设计模式书可以看看,先明白是咋回事。如果那本难读的话,《大话设计模式》写的相当不错,就算不懂c# 可以先浏览一下,大体明白思想。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-19 10:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liucqa 发表于 2014-4-18 20:18
嗯,给企业写应用的话,还是需要有设计模式思想的,我看过不少外企的VBA代码,老外写的应用代码无一例外都 ...

正如老师所说,老外的代码都是非常有条理的。甚至非IT 专业,俺在一家外资银行工作。一个外国同事发了一个用vba 做的outlook 2010 的工作应用上的插件,从变量的声明到所有编码的英文注释都非常清晰。让俺这个对outlook vba 一知半解的人也能看懂个大概,能明白他的设计思想,关键是这个人并不是IT 部门的,而是运营
(Operation)部门的同事。

人家学的东西比较规范,从"Hello World" 开始就按标准来的,而我们完全不可能比。去年那个是否要定义变量的帖子老师也在场,一个几乎不需要有任何争论的东西,俺上去说两句被大量的非定义者骂个狗血喷头。以后在EH除了做义工还是乖乖潜水的好。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-12 05:12 , Processed in 0.055465 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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