ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 编程利器-面向对象思想

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-28 14:12 | 显示全部楼层 |阅读模式
本帖最后由 HHAAMM 于 2012-11-28 18:21 编辑

控制计算机要用到控制计算机的指令,为了更方便指令的编写,人们对指令的编写方式做了一次次的更新改造。
在机器语言>汇编语言>过程语言(期间还出现了可视化语言)之后又出现了以"面向对象思想"为基础的语言。
面向对象思想出现的基础是指令编写人员渴望的指令可"重用性",面向对象语言就是为代码可重用而出现的。
如何去提高效率?重复使用资源,或者把别人的东西拿来就用。这是很不错的主意!

面向对象中的"对象"基本可以理解成任何东西。一座城市可以是一个对象,往大了说国家、地球都可以是对象;望小了说一个家庭、家里的沙发也都可以是对象。
与现实生活不同的是代码编写中的"对象"是存在于计算机内存中的,但他不是凭空出现,他来自于"类"。

类就像是个模子一样,往一个模子里灌入石膏就可以得到一个这种形状的东西。
要产生代码编写中用到的"对象",第一步就是要先做这个"模子",这个模子有个统一的名称-类。

面向对象代码设计思想是-为了完成任务要用到什么对象、编写些类用以产生这些对象。
面向对象语言支持对类的重用,只要系统类库中存在的什么时候都可用,而且在不改变基础类的情况下也可以对重用的类进行修改。
这里举一个小例子:
如果一个工程中多处都要用到设置单元格字体、底色、边框的代码,通常的做法是写一个专门处理这些的函数或过程,每当用到时调用这个函数或过程传入参数。
面向对象思想处理这个问题是将这个函数或过程当做一个类,一个专门设置单元格的类。你可能会说这看起来没什么不同。直观的感觉这可能真的没什么不同。
但在一些特殊情况出现时差别就出来了。假如现在某些地方还要设置单元格字体颜色,面向对象语言可以采用继承的方法产生一个类,该类中添加设置字体颜色的代码。你可能会说,这样还是没什么不同,我再写个处理字体颜色的过程或函数调用不一样吗。是的,到目前为止真的没体现出太大的差别。只是,到了下一个工程开始的时候,差别可能就出现了。
开始另一个工程,当中还要用到设置单元格字体、底色、边框的代码。相信你还会按部就班的写两个过程,如果写好并测试可用需要花费十分钟时间的话,面向对象语言处理这个问题只要几秒钟,引用上次写的这个类并实例化一下,一切ok,似乎现在差别开始出现了。
或许你会说,在新工程里我将上次写的函数或过程复制过来,比你的方式也麻烦不算太多。好吧就这样,我们分别以这两种方式弄了20个新工程给用户。
谁也不能保证自己的代码没bug,假设我们都忽略了合并单元格问题,假设20个用户都接二连三的反应遇合并单元格出错,假设你将这20个工程一一打开修改。面向对象语言处理这个只是你的二十分之一的工作量,只是需要修改下最开始的那个类,其余的19个看都不用看。到了这时你要是还觉得没差别,那我就无语了!
(未完待续,菜鸟作品不要笑话望斧正)


该贴已经同步到 HHAAMM的微博




TA的精华主题

TA的得分主题

发表于 2012-11-29 09:57 | 显示全部楼层
面向对象的优势 提高复用性 和 降低耦合度
高复用性意味着少敲代码 如果你写出一个优秀通用的类 下次只需要引用 不用再次写了
低耦合度意味着 你可以花费较小的代价(时间 精力等)来修改你的项目工程

另外类的继承 有助于建立一个自上而下的体系 将共性与差异有条理的建立出来 再配合多态 那是要多爽有多爽
数据的封装 有助于建立起一些依附于类而存在的数据 随类的建立而存在 随类的销毁而清理
还有接口的实现  事件驱动 这些尚在学习 就不多说了

我觉得较好的学习面向对象的方法就是 在模块中仅写一个入口函数
其他代码全部由N个类模块完成(这是完全可行的)
完成后想方设法精简 并 使之通用
我目前就是这么干的 不过VS的类库有时候太周到了....
我实际工作中的需求对于VS来说实在太好搞定了

TA的精华主题

TA的得分主题

发表于 2012-11-29 13:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
面向对象的缺点,构造和析构开销大

TA的精华主题

TA的得分主题

发表于 2012-11-29 13:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
呵呵,道理都很明白,一般的小程序用不了这么多{:soso_e113:}说到底,vsto也不过就是一个类

TA的精华主题

TA的得分主题

发表于 2012-11-29 22:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
向各位大师学习,向分享知识致敬

TA的精华主题

TA的得分主题

发表于 2012-12-2 19:55 | 显示全部楼层
继承不能只考虑代码的重用.面向对象的思想真正强大在于解除主函数中的耦合.接口才是最重要的,才是实现可扩展程序的途径
即使是用vba也可以写出很好的程序(vba可以实现接口,继承只能用聚合等方法间接实现)
建议参考一下java的设计模式.会有很大的启发.

TA的精华主题

TA的得分主题

发表于 2013-1-16 07:47 | 显示全部楼层
excelhomesnake 发表于 2012-12-2 19:55
继承不能只考虑代码的重用.面向对象的思想真正强大在于解除主函数中的耦合.接口才是最重要的,才是实现可扩展 ...

“vba可以实现接口,继承只能用聚合等方法间接实现”
个人认为,
在VBA中可以实现接口,而且功能不差
继承则不行,可以实现比较简单的多态
我试过,用jscript可以实现比较复杂的继承和多态。但是和其它的语言思路差别比较大

TA的精华主题

TA的得分主题

发表于 2013-3-3 16:52 | 显示全部楼层
你这大段文字...其实我一直都没能明白,直到我自己用....计算机是实验科学..不要抱着书读...

TA的精华主题

TA的得分主题

发表于 2016-6-15 14:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
正在学VSTO,版主有没有什么群拉我进去一下,想找个组织,我QQ:190262897
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 03:38 , Processed in 0.049375 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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