ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-20 08:24 | 显示全部楼层
本帖已被收录到知识树中,索引项:类和类模块
本帖最后由 yiyiyicz 于 2014-4-20 08:56 编辑
hehex 发表于 2014-4-19 17:14
设计模式是好东西不是,是。为什么设计模式的帖子鲜见于VBA 开发论坛,个人认为在这种场合其适用性有限 ...


我没有说过,“用VBA开发ERP是典型的滥用”。
用VBA开发MRPⅡ,事实上有人干过了,这在EH中有介绍
我只是觉得,对于海量数据用VBA是不太合适。另外,其他的开发工具有很多现成的东西,比自己从头来要省力。但是,用EXCEL+VBA开发的许多MRPⅡ的功能部件,却是大规模ERP望尘莫及。
BOM+SCHEDULE,有函数版的。不过这主要用于演示,对于小规模的模拟,也是不错的选择。
BOM计算,EH中有自顶向下/自底向上的,有递归的,有XML的,有用堆栈的,有用透视表的,这些都是用VBA实现的,不下十种。还有整理BOM数据的。这些丰富灵活的功能,任何一款ERP软件都做不到
SCHEDULE,有规范的排产功能,有包含PAS的。这些虽然比较灵活,但大型ERP软件往往是包含了。特别的是,用排队方程+概率模式的模拟软件,就是用VBA做的。而这恰恰是ERP的软肋,目前的ERP都是不能闭环运行的,因为存在原理性缺陷。也正是用排队方程+概率模式的模拟软件修补了这个原理性的缺陷
生产成本核算,VBA实现起来并没有困难。
当然,对于物料移转的处理,VBA确实弱。

还是说“面向对象”
看来,你在“接口”上有点绕不过弯子。
你可能觉得,实现继承就要用接口(implements)。我前面讲到的JS+VBA混合编程,没有用到IMPLEMENTS,照样也实现多层继承。EH中有实例代码。
用ISM模型,也就是使用简单的IMPLEMENTS,同样能实现多层继承和多根继承。EH中好像只有非常简单的实例代码,需要仔细体会
这些方法,是合理的,得到比较广的应用。又何来“模拟”一说。
有个现成的例子:BOM原理本来是用线性代数表达的,但是现在几乎没有人用矩阵的方法来计算BOM。原理肯定是科学合理的,但后人实现BOM,却不见得非要延用线性代数的数学方法。这不是很说明问题吗?
你该知道,EH中大多数人都不是学软件出身,但很多人有这样的特点,数学好,善于逻辑思维。为了能应用简单化,用各种方法实现工程应用。这不就是大家在这里讨论的目的吗?你又希望达到什么目的呢?
天堂有路,也给你指出来了。如果走起来有困难,大家再一起讨论,这是一种态度;如果偏要“咬定教条不放松”,那只能是地狱无门你偏闯。

TA的精华主题

TA的得分主题

发表于 2014-4-20 11:34 | 显示全部楼层
yiyiyicz 发表于 2014-4-20 08:24
我没有说过,“用VBA开发ERP是典型的滥用”。
用VBA开发MRPⅡ,事实上有人干过了,这在EH中有介绍
我 ...

本来已经不想再回帖了,看您误会了,还是再解释一帖。
那句话不是您说的,是帖子里的学导老师说的,之所以称为老师,是因为俺从他的网抓系列教程里,切实学到了东西。称老师不为过,而貌似跟您这还没学过什么,也不敢有您这样的老师。

至于您非要这么理解“面向对象”,无所谓。面向对象是一个泛的概念,也是软件工程的一个概念,恰恰是软件行业的东西。您非要扯您那一亩三分地的东西,非要说用非面向对象语言实现了面向对象,这是你的自由。我不看好,这是我的自由。你在这里频频人身攻击,居然扯出什么天堂有路你不走,地狱无门偏进来的话了。合着坚持自己的观点,就是咬定教条不放松。和你这种素质的人没法讨论,要是中世纪你还把俺架上火刑柱了。只能说明你这个人有问题,本人不屑与您这样的人讨论任何问题。

这里说了,虽然我不看好楼主的东西,但是尊重他的劳动,捍卫他说话的权力。(其实他写的那些东西扯设计模式也有点披虎皮,根本就谈不上,只不过是规范式编程的一些思想罢了)但是,这并不意味着任何人可以肆意妄为的对不同意见者施以人身攻击。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-20 14:32 | 显示全部楼层
本帖最后由 夜行 于 2014-4-20 15:24 编辑

当然不是所有的设计模式在VBA中都能实现的,就象HTML5提出后,现在也没有哪个浏览器声称自己支持它的所有特性一样,但都在持续发展中!在我印象中2003版本的VBE是不支持鼠标滚轮的,但后面的版本支持了,也是不断发展的例子。

之所以没点出使用了哪个设计模式,一方面是想激起大家的好奇心,主动去探索,另一方面是不想束缚大家的思想,现有的设计模式,都是前人优秀经验的总结,我们也可以有自己的设计模式,只要是好的编程理念,都可以发展成适合自己的设计模式!

TA的精华主题

TA的得分主题

发表于 2014-4-20 14:51 | 显示全部楼层
本帖最后由 liucqa 于 2014-4-20 14:52 编辑
夜行 发表于 2014-4-20 14:32
呵呵,回头您也扯点谈得上的,不是披虎皮的,真正的设计模式让我瞅瞅呗……
我看丫,就是你觉得我在这论 ...

一个好帖子变成打架贴了


一般来说,面向对象的设计思想并不一定等于设计模式。按照面向对象的思路写代码,也不是说代码就有了设计模式,这两者其实是两个不同的概念。

在谈设计模式的时候,最好明确的说明采用了哪个设计模式,这样也方便会员理解,还能避免冲突。
因为不同的人对设计模式的理解是不同的

此外,在代码的实际编写过程中,不同的设计模式往往交织在一起,清晰的模式需要面向对象语言的支持。
由于VBA不是一个完整的面向对象的编程语言,这会导致很多高级的设计模式很难实现,或者即便勉强实现也失去了模式带来的很多好处。因此,从这个角度来说,vba并不适合用于高级设计模式的开发。
但是,由于VBA支持简单的类和接口,因此简单的设计模式还是可以实现的,作为普通会员来说,从设计模式的思想出发来编制程序,对理解编程也是有好处的。

因此,大家对这个问题理解不同而带来争论,这是很正常的事情,这不一定是攻击,也谈不上争吵,就像盲人摸象,摸位置不同,理解也就不同。

想互相理解也很容易,大家彼此交换一下思考问题的出发点和知识层面的高度就行了

不管怎样,敢于在EH提出设计模式思想的概念,这本身就是论坛会员的进步,这一点值得鼓励和支持

谢谢!




TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-20 14:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2014-4-20 14:51
一个好帖子变成打架贴了

谢谢大大,本来是不想说的啦,想删掉他的帖子,但没删除的功能,又气不过,他之前说不看好之类的,我都不在意的,但说到披虎皮什么之类就有点过了……搞得我跟走江湖卖膏药似的……
呵呵……

大大,能不能跟版主说一下删了回复我的那个帖子啊,当然,我的帖子,我自己删,没什么意思,放那

点评

留着占楼,你可以写点模式介绍的知识嘛  发表于 2014-4-20 14:59

TA的精华主题

TA的得分主题

发表于 2014-4-20 15:28 | 显示全部楼层
本帖最后由 yiyiyicz 于 2014-4-20 15:47 编辑
hehex 发表于 2014-4-20 11:34
本来已经不想再回帖了,看您误会了,还是再解释一帖。
那句话不是您说的,是帖子里的学导老师说的,之所 ...


抛开眼界、学养之外,你的语言也太贫乏了
面向对象,有个重要内容就是继承。我的回帖都是在讲VB/VBA是可以实现继承。也就是实现层面上,无所谓面向对象语言和非面向对象语言(这样分本身就有问题)。这样的实例代码在EH,在网上有各式各样的实际应用。如果从“原则”出发,充满活力的计算机语言怎么可能会繁荣?
何况,大家在这里是为了一点一滴的汲取你所需要的知识、方法,甚至一些代码的写法,是为了将来使用。
就算是你习惯用权威的、批判的、公允的口气质疑别人,不还是心里没底,在学习吗?
记住:靡不有初、鲜克有终

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-20 19:07 | 显示全部楼层
liucqa 发表于 2014-4-17 16:02
关于设计模式的书,百度都有.
*****************************************************

哇噻,大大才是真正的牛人嘿!!!
各种懂!!!

TA的精华主题

TA的得分主题

发表于 2015-4-25 14:49 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-4-25 15:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
eh的特点就是快速而短期解决小问题,的确是缺乏像这样实用的贴。
但老实说,这些对很多人来说,都是太难理解了。就算是eh里面一些所谓的大大。毕竟这里提供的环境就是这样子,用好面向过程已经可以应付这里大部分的问题。
还有一个小小的建议,方法getClass和getClassList,里面用了具体类,事实上,客户端代码是不应该出现具体类,只使用接口或抽象类。一般的做法是,这里使用工厂模式来封装。
另外,之前你的贴中提出用数组作为参数来传递,其实本人觉得使用结构体来传递会更好。

TA的精华主题

TA的得分主题

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

vba是支持接口继承的。这也是在vba这种基于对象的语言中,唯一实现多态的方法。而多态,才是设计模式的核心所在。
但正如你所说的,vba真不适合全面使用设计模式。但如果只是用一些面向对象的封装性,还是有很大的用处,特别是在团队工作的时候。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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