| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> VB.NET >> vb.net教程 >> 文章正文
VB.Net中文教程(2) Composite样式            【字体:
VB.Net中文教程(2) Composite样式
作者:-    文章来源:-    点击数:    更新时间:2007-1-20

1. 从Whole-part关系谈起
回想传统的软件师﹐常甚专注于撰写程序(procedure) 来处理某些资料(data)﹐较少关心软件的整体结构(architecture)。在现在的OO软件中﹐把资料及其相关的程序结合在一起﹐封装(encapsulate) 在对象之中。软件师在使用对象时﹐通常把对象视为黑箱(black-box) ﹐不会关心于对象内部之细节﹔因之能专注于对象之间的关系。软件师的主要工作﹐就是在于建立对象之间的互助合作(collaboration) 关系﹐为对象安排应尽之角色(role)﹐至于对象内部之细节﹐反而不顶重要。如此﹐可让软件师着重于软件的整体架构上﹐而不会一头栽进程序的执行细节之中。这避免了见树不见林的缺点﹐放宽了软件师的眼界﹐为软件的多用途(reusability) 及弹性(flexibility) 着想﹐可创造长寿的软件﹗
对象之间的常见关系有许多种﹐其中之一就是Whole-part关系。像一朵花是由花蕊、花瓣、衬叶等所构成的﹐这朵花是个「整体」(Whole)﹐而花蕊、花瓣等则是这整体的「一部分」(part)。再如﹐下图的Windows画面上﹐Form1 对象包含着3 个控制对象(control) ﹐这些控制对象成为Form1 的一部分。因之﹐Form1 是个整体﹐而各控制对象则是Form1 对象的一部分。


图1 、Form1 对象包含3 个控制对象

我们可使用UML图形表示为﹕

图2、Whole-part关系与继承关系

这图包括了Whole-part关系﹐以及继承关系。
● 菱形 符号表示Whole-part关系﹔就是Form1 对象可包含有数个control 对象。
● 箭头 符号表示继承关系﹔就是control 对象可细分为数个种类。

本文专注于Whole-part关系﹐为Composite样式建立基础。Whole-part关系可分为两种﹕
◎「部分」对象之个数是确定的。例如﹐1 辆汽车含有1 个方向盘﹐1 个Form对象含有1 个抬头(caption) 对象﹐1 只青蛙有4 条腿等等。在这种确定情形﹐可视为下述「可变」情形的特例。
◎「部分」对象之个数是可变的。例如﹐1 个Form对象内含多个控制对象﹐1 棵树含有成千上万叶子﹐1 位学生的成绩单上列有各科目的成绩等等。这种Whole-part关系通常得藉集合(collection)对象来表达之﹐如VB 的ArrayList对象就可派上用场了。


2. 简单的Whole-part关系

最单纯的Whole-part关系就是某对象「内含」(contain) 其它对象。例如﹐
s 1 张订单上面列示着多个采购的产品项目
s 1 支棒球队拥有数字教练及多位球员
s 学生的成绩单上印有多项成绩
s 1 篇文章是由许多句子所组成
s 屏幕上的选择表(menu)内含数个选择项
s 1 份考卷包含数十道考题
......

就拿订单(order form)的例子来说﹐订单上常列有多个采购项目(order line)。


图3、 订单的例子

每个采购项目通常包括有产品名称、采购数量、金额等。为了简单起见﹐假设采购项目只含产品名称及金额两个项目﹐可藉UML图表示「订单」与「采购项目」之间的Whole-part关系﹐如下图所示﹕


图4、以UML表达简单的Whole-part关系

在以VB落实这个UML模式时,则可藉VB的ArrayList集合对象来实作(implement)「订单」与「采购项目」之间的Whole-part关系﹐如下图所示﹕


图5、以UML表达简单的Whole-part关系

现在的VB软件师需要很习惯于掌握这种Whole-part关系﹐且常藉集合对象来表示之。请看实际的VB程序﹐其中定义Order 及OrderLine 两个类别﹕

'ex01.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
Imports System.Collections
'----------------------------------------------------
Class OrderLine
Private pname As String
Private amt As Double
Public Sub New(ByVal na As String, ByVal am As Double)
pname = na
amt = am
End Sub
Public Function Name() As String
Name = pname
End Function
Public Function Amount() As Double
Amount = amt
End Function
End Class

Class Order
Private OrderID As String
Private lines As ArrayList
Public Sub New(ByVal id As String)
OrderID = id
lines = New ArrayList()
End Sub
Public Sub AddLine(ByVal ln As OrderLine)
lines.Add(ln)
End Sub
Public Function Amount() As Double
Dim total As Double = 0
Dim ln As OrderLine
For Each ln In lines
total = total + ln.Amount()
Next
Amount = total
End Function
Public Function getOrderID() As String
getOrderID = OrderID
End Function
End Class
'------------------------------------------------------------------------
Public Class Form1
Inherits System.WinForms.Form

Public Sub New()

[1] [2] [3] [4] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • VB.Net中文教程(1) 类别与封…

  • VB.Net中文教程(3) 继承与封…

  • VB.Net中文教程(4) 类别继承…

  • VB.Net中文教程(5)程序多重定…

  • VB.Net中文教程(6) 母子对象…

  • VB.Net中文教程(7) Me参考值

  • VB.Net中文教程(8) 对象(Obj…

  • VB.Net中文教程(9) 重新定义…

  • VB.net入门(10):补充:类~属…

  • VB.Net中文教程(11) Prototy…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |