|
本帖最后由 夜行 于 2015-5-6 22:32 编辑
咳咳……说了不写,为啥还写呢?——因为版主给了颗糖吃!
本系列基本上是一篇探讨一小点的内容,让大家容易消化,自己写得也没那么累哈。
纯分享啊,无偿啊……各种赔本啊……懒一点也情有可原是吧……
至于会写到哪算数,咳,这是个问题,睡觉前我会想想,目前还没想过,顺其自然哈……
前面几篇中我们探讨了如何管理外来参数的问题,后面几篇,我们来看看如何跟其他的类合作:总的原则当然是低耦合啦。
在最初学习时,经常会冒出个想法,前辈们经常都说要低耦合,那干脆不耦合不行吗?
——不要说我笨哈,这真是我的学习过程,答案公布如下,免得有人跟我一样纠结中:
不耦合就谈不上类的组合运用啦!
所以耦合是必须的,只是如何减少这种耦合度才是我们要考虑的!
那如何减少耦合度呢?——只知道应该知道的,不该知道的东西不要知道!
知道的太多,后果……你懂的!嘿嘿……
扯了一篇的闲话,下面上重点,来看两个类:
零件(Parts类):它负责计算长方形零件(因为现有公司只生产长方形)的总价,总价 = 单价 * 零件周长,当然还有其他功能,我们暂时忽略。
- Private pric
- Private leng
- Private wid
- Private rect As Rects
- Property Get length()
- length = leng
- End Property
- Property Get wide()
- wide = wid
- End Property
- Property Get price()
- price = pric
- End Property
- Function init(price, length, wide)
- pric = price
- leng = length
- wid = wide
- End Function
- Function total()
- Set rect = New Rects
- rect.init length, wide
- total = price * rect.perimeter
- End Function
- '其他功能方法……
复制代码
长方形零件(Rects)
- Private leng
- Private wid
- Property Get length()
- length = leng
- End Property
- Property Get wide()
- wide = wid
- End Property
- Function init(length, wide)
- leng = length
- wid = wide
- End Function
- Function perimeter()
- perimeter = (length + wide) * 2
- End Function
- '……
复制代码 它们之间的合作是这样的:
- Dim o As New Parts
- Sub old_parts()
- o.init 2, 3, 4 '单价,长,宽
- o.total
- '……
- End Sub
复制代码
这两个类,表面看上去似乎挺平常的,但其实暗藏杀机,我们后面一一分解,这篇分解不完,下篇继续分解。
首先一个耦合是Parts类的,知道了Rects类的名字,如果Rects类的名称改变,相应的Parts类也要改变了。
另外Parts类的total方法中,引用了Rects类,那表明它只能计算长方形零件总价了,如果公司产品创新,有了正方形、三角形、圆形等等零件,这个方法就无能为力了。
当然还有其他问题,我们先关注以上这两点。
其实对于Parts类来说,它只要知道一个可以响应周长的对象就可以了,所以更改后的代码如下:
- Private pric
- Private part
- Property Get price()
- price = pric
- End Property
- Function init(price, rect)
- pric = price
- Set part = rect
- End Function
- Function total()
- total = price * part.perimeter
- End Function
- '其他功能方法……
复制代码
它与Rects类的合作如下所示:
- Dim o As New Parts
- Dim rect As New Rects
- Sub new_parts()
- rect.init 3, 4 '长、宽
- o.init 2, rect '单价,零件
- o.total
- '……
- End Sub
复制代码
将Rects类的实例创建移动到Parts类外部,能将这两个类解耦出来,Parts类现在可以跟任何实现了计算周长方法的零件进行合作了。
这一点能够在VBA中较为方便的实现,依赖于VBA是一种弱类型的语言,变量不需要强制事先声明是哪个类型,它能根据实际需要自动进行切换。
好吧,这篇就告一段落了,这篇中还有一些问题,我们留到下一篇中继续分析。
大大们觉得还行的,赏点花吧……
苦求中——跟求月票似的……哈哈……
前面三篇链接如下:
http://club.excelhome.net/thread-1200059-1-1.html
http://club.excelhome.net/thread-1200435-1-1.html
http://club.excelhome.net/thread-1200865-1-1.html
|
评分
-
5
查看全部评分
-
|