ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-19 10:37 | 显示全部楼层
本帖已被收录到知识树中,索引项:类和类模块
hehex 发表于 2014-4-19 09:55
随便吧。是拘泥于名词还是不具备可行性,做起来再说。VB 从语言特性上就不支持面向对象,而且楼主的实现也 ...

反应过度了。只是在讨论,没有扣帽子
不过,在EH中比你更过度的大有人在,还有直接给我投诉了的了
习惯了就好

TA的精华主题

TA的得分主题

发表于 2014-4-19 10:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hehex 发表于 2014-4-19 10:33
正如老师所说,老外的代码都是非常有条理的。甚至非IT 专业,俺在一家外资银行工作。一个外国同事发了一个 ...

发上来让俺也学习一下,嘿嘿

TA的精华主题

TA的得分主题

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

谢谢大大代为辩解,本想着求同存异即可,不予12楼的见解以深辨,再一想,既然开帖了,就为了传播,也再唠叨几句个人感受:一屋不扫何以扫天下?

诚然那些着眼于细节的过程设计是入门的基本功,要加强锻炼,但如果只停留在那个层面,甚至认为以此能解决绝大多数的问题,从此固步自封,那就永远也不能登堂入室,更不用说梦想着以后与外国比肩。(当然你如果是那种C语言的大牛,当我没说哈,C语言到现在都拒绝加入类的概念呢,我能说它不强大?呵呵)

纵观坛子里洋洋洒洒几百万篇的帖子,涉及设计模式思想的却也是凤毛麟角,估计没涉及其他主流编程语言的大多数人都还不了解,何谈滥用一说?我在学习的时候,有人举例说,如果写个”hello,world!"也用上设计模式的思想,这肯定算滥用了。我的观点有点不一样,首先你得会用,如果不会用,就谈滥用,有点那啥……呵呵

至于用到的名词问题,18楼的大大已经有了很好的解释,我深表赞同。

当然坛子里卧虎藏龙,能人辈出,我个人绝不敢自称专家唬人,都仅只是一家之言,供方家参考。
以上言论都只是就事论事的讨论,不针对任何人,也不会扣任何帽子予任何人,勿对号入座。

热烈欢迎大家就事论事的讨论,理不辨不明。

TA的精华主题

TA的得分主题

发表于 2014-4-19 14:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2014-4-19 10:49
发上来让俺也学习一下,嘿嘿

发不上来,外资银行管控贼严。传个代码都会报警的,然后俺的老板就会收到邮件,说俺涉嫌盗窃公司机密。
总之咱们和人家没的比,特别是VBA 领域,都是乱写的,很多“高手”写代码从来不缩进,从来不定义变量的。

TA的精华主题

TA的得分主题

发表于 2014-4-19 14:46 | 显示全部楼层
hehex 发表于 2014-4-19 14:25
发不上来,外资银行管控贼严。传个代码都会报警的,然后俺的老板就会收到邮件,说俺涉嫌盗窃公司机密。
...

哼,用手机拍下来,然后ocr...

TA的精华主题

TA的得分主题

发表于 2014-4-19 15:28 | 显示全部楼层
本帖最后由 yiyiyicz 于 2014-4-19 15:53 编辑
夜行 发表于 2014-4-19 12:43
谢谢大大代为辩解,本想着求同存异即可,不予12楼的见解以深辨,再一想,既然开帖了,就为了传播,也再唠 ...


不必在意每个人的说话方式,有时大家为了维护自己的正确,甚至骂起来的都有。很正常。VBA板块里的牛人多,高论自然多
我在学习类的过程中,觉得“继承”特别重要,用VBA也难实现。后来在其它专业的资料中,看到ISM模型,觉得这是在VBA中实现继承的一条路
ISM,是系统工程中的一种方法。主要数学工具就是矩阵、线性代数、离散数学。
我们都算过行列式,算过矩阵。老实说,那时对矩来矩去的认识并不深,但有句话给我留下了深刻印象。“老毛子卫星上天后,美国认真的检查为什么老美落后了。经过调查,其中原因之一是,老毛子的大学开线性代数和概率论,而当时老美的大学没开”。直到很晚才明白这句话的含义,有些数学目的就是为了应用,算出数据来;而有些数学,则是帮助从实际中抽象出模型,刻画出各种关系及其变化。线性代数就属于后一种。
有了这言的工具,继承就好办了
一般情况下,编程的人对事情需要“继承”的关系是清楚的,否则不可能抽象出模型。不知道的是当事到临头,哪个特定的继承关系被用到,是随机的。那么根据ISM模型(整个事物的关联关系用矩阵表示清楚了),当需要哪一段关系时,只要通过离散数学的运算,就可以从ISM矩阵中知道。可以知道路径数、知道途径哪些个结点、等等。这样继承关系,不管是多层继承还是多根继承,都可以在矩阵中确定。说白了就像给出一张关系表(当然,比关系表反映的内容要灵活多了),然后处理对应关系。
还有一个问题是,当知道继承的路径及其途径结点后,对象的方法怎么继承。用VB中的代理

上面讲的不是在VB中实现继承的唯一方法,还可以用指针(VB不建议用指针)。还可以通过添加引用,用JS,混合编程。这个肯定也能实现多层继承和多根继承。

TA的精华主题

TA的得分主题

发表于 2014-4-19 16:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
那么,可能会问,既然你那么在意“继承”,为什么不直接用C++呢?
我从网上看到,VB6编译之后,破译是很难的一件事情。也就是保密性好。据说VB反编译后,很难读。而C等却容易解密。
用ISM还有其他的用处,在复杂的关系中,也就是关系网中,会有环存在。也就是为什么继承路径可能不止一条。工程中处理这样的情况,往往先要去环。ISM在去环处理中,也有特别之处。反正要写罗嗦的矩阵代码,这样就一举两得了。

TA的精华主题

TA的得分主题

发表于 2014-4-19 16:36 | 显示全部楼层
yiyiyicz 发表于 2014-4-19 16:02
那么,可能会问,既然你那么在意“继承”,为什么不直接用C++呢?
我从网上看到,VB6编译之后,破译是很难 ...

VB6 编译之后难破译是相对于托管的.net 语言而言,谁说的C++ 或者C 的代码反编译代价比VB6 低的,您这话说的太外行。无论VB6也好C C++ 的反编译都是不可逆的,所谓的破译都是在汇编级。如果是正常的程序没有加花指令等等后期加防破译措施,谈不上哪个更难破。

本来讨论的是设计模式是否适用于VBA 乃至VB6 这种非面向对象而且非善于开发成规模的语言的问题,居然扯出C++ 来了,设计模式当然适用于C++,Java,C# 这些语言了,本身就是以面向对象语言为基准的。

TA的精华主题

TA的得分主题

发表于 2014-4-19 17:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
夜行 发表于 2014-4-19 12:43
谢谢大大代为辩解,本想着求同存异即可,不予12楼的见解以深辨,再一想,既然开帖了,就为了传播,也再唠 ...


设计模式是好东西不是,是。为什么设计模式的帖子鲜见于VBA 开发论坛,个人认为在这种场合其适用性有限。因为这东西本身就比较适用于较有规模的项目开发,用VBA 做大规模的项目行不行?行。事倍功半,运行效率非常烂。
因此18楼老师也说过用vba 开发erp 等大系统就是典型的滥用。

你拿C 语言做类比的那句话,你发到CU 论坛或者 CSDN 会被喷死的,这世界上到今天没一个专家教授,就算是C# 之父Anders 他也不敢说C 语言没加class 是固步自封。看来你真对C 不了解了,这里不多说了。

第一、俺只是提出对你的观点表示谨慎的态度,尤其是你举的构造函数和析构函数的例子那部分,但是俺绝对支持编程规范化。也尊重你的劳动。

第二、VBA 从语言设计上就是基于对象的而不具备面向对象的特性,而设计模式是基于面向对象的语言而设计的,这点本身就是先天不足。在代码级利用所谓技巧去模拟实现面向对象的所谓特性是付出很大代价的。
就像汇编语言,最基础的连循环指令都没有,就是JMP 来Call 去类似goto 的跳转,可是无论你什么高级语言,面向过程,面向对象最终还不都是编译成汇编然后转换成为机器码的?

正如前文所述,俺只是说对把设计模式直接舶来VBA 的程序设计上的实用性表示一定的怀疑,持谨慎的态度。4人帮的设计模式和程杰的大话设计模式,俺都看过。特别是程杰那本是很认真的看了,说实话很难实际理解。不是套个样式就懂了,搭一个架子说这个是简单工厂模式就是了,真要融会贯通没个10几万行的代码量,没做过一定规模的项目是不可能的。俺不是专业码农,喜欢这些只是个人爱好,就像有人爱搓麻将,有人爱打网游一样。

此问题的最后一贴,不废话了,一方面说理不辩不明,另一方面有一点不同意见先安上拘泥于名词的Title,那还怎么辩,有什么可辨。都举双手双脚赞成不就好了。





TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-19 17:42 | 显示全部楼层
本帖最后由 夜行 于 2014-4-20 14:41 编辑
hehex 发表于 2014-4-19 17:14
设计模式是好东西不是,是。为什么设计模式的帖子鲜见于VBA 开发论坛,个人认为在这种场合其适用性有限 ...

咳,你没看懂我的话啊,我是说C语言很牛的,到那个境界自然不需要什么类啊,面向对象之类的东西啊……呵呵……你老往对立你的方向想东西……呵呵……再说了,老说要十几万的代码量,做大项目,这不都得从小地方着手开始吗?呵呵……总得先打开一点门缝吧?
GoF的书也只是薄薄的一本啊,都只是说个大概啊,呵呵……

说不定坛子真有人看了我的帖子开始对设计模式感兴趣了呢,我们不能突破VBA的限制,也许后面的人能呢。

有人用汇编写3D游戏,也有人用HTML5写手游,以后有人用VBA写操作系统,那又有什么稀奇的,一切皆有可能呢……呵呵……

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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