当前位置:编程学习 > VB >>

VB.Net中文教程(13) Whole-Part关系

 

请注意 ......
著作权所有人:物泽计算机事业股份有限公司、
              MISOO对象技术顾问团队、对象导向杂志作者、等。
u本文件摘自 对象导向杂志、精通对象观念与技术等书籍著作。
u本文件仅供您的参阅,请遵守著作权法,不得做其它商业用途。


  主题:  Whole-Part关系


??????????  内容  ??????????
v 1. 对象Whole-Part关系
v 2. 组合/部分关系
v 3. 包含者/内容关系
v 4. 集合/成员关系

 

 

1. 对象Whole-Part关系

   类别继承(Class inheritance)和对象组合(Object composition)是软件再使用(Reuse)的两大法宝。类别继承就是建立父、子类别之关系﹔例如﹐「学生」可分为「大学生」、「中学生」和「小学生」三类别﹐其继承关系图标如下﹕
     
         图1、 以UML表达类别继承

    对象组合的目的是﹕创造「复合对象」(Composite object)﹔例如﹐医院内含医师和护士等﹐其组合关系图标如下﹕

      
         图2、 以UML表达对象组合

继承与组合两大法宝能联合使用﹐以组织庞大的软件系统。例如﹐汽车分为客车、卡车、轿车等子类别﹐而且汽车内含引擎、车体、轮胎等零件﹐则此汽车系统图标如下图3和图4﹕


      
             图3、 汽车的类别继承体系

      
             图4、 汽车的对象组合关系

本节里﹐将进一步分析与说明对象组合方法。尤顿(Yourdon) 认为﹐常见组合关系有三﹕
      1)  组合╱部分(Assembly-parts)关系。
      2)  包含╱内容(Container-contents)关系。
      3)  集合╱成员(Collection-members)关系。

 

 

2. 组合/部分关系

    组合/部分关系﹐常称为APO(A part of)关系﹔例如﹐汽车是「组合」﹐其内含各零件是「部分」。门是房子的一部分﹐所以房子是「组合」﹐门是「部分」﹔此外﹐窗子也是房子的「部分」。这房子与门窗之关系﹐图标如下﹕

         
           图5、 房子的对象组合关系

以VB表达如下﹕

ex01.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
---------------------------------------------------------------------------------
Class House
    Class Door
        Public size As Double
        Public Sub New(ByVal s As Double)
            size = s
        End Sub
    End Class
   
    Class Window
        Public size As Double
        Public Sub New(ByVal s As Double)
            size = s
        End Sub
    End Class
   
    Private dr As Door
    Private win As Window
    Public Sub New()
        dr = New Door(50)
        win = New Window(100)
    End Sub
    Public Sub Show()
        Messagebox.Show("Door: " + str(dr.size) + "   Win: " + str(win.size))
    End Sub
End Class
---------------------------------------------------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
        Form1 = Me
        This call is required by the Win Form Designer.
        InitializeComponent()
        TODO: Add any initialization after the InitializeComponent() call
    End Sub
    Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
     ......
#End Region
    Protected Sub Form1_Click(ByVal sender As Object, ByVal
                                      e As System.EventArgs)
        Dim h As New House()
        h.Show()
    End Sub
End Class

以此程序输出如下﹕
                    Door: 50  Win: 100


House 之对象诞生后﹐立即诞生内含之Door对象和Window对象。例如﹐宣告指令──
            Dim h As New House()

此时﹐h 对象诞生了﹐其内含之dr 和win对象亦诞生了。

           

此h 通称为「组合对象」(Composite object)﹐而dr 和win 则称为「部分对象」(Component object)。这种关系具有一项特色﹕组合对象与部分对象的寿命应该是一致的。
    在逻辑(Logical)意义上,这House 结构中﹐门和窗随着房子而具有「生死与共」之亲蜜关系,也就是寿命一致。在计算机实体(Physical)表达时,House 之对象并不「真正」包含Door及Window之对象﹐只是利用两个参考指向它们。所以上图也可想象如下:

         
上述两种实体结构皆表达了「组合/部分」关系。请再看个例子:

ex02.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
----------------------------------------------------
Class Person
    Private p_name As String
    Private p_age As Integer
   
    Public Sub New(ByVal na As String, ByVal a As Integer)
        p_name = na
        p_age = a
    End Sub
    Public Function isEqual(ByVal obj As Person) As Integer
        Dim k As Integer = 0
        If Me.p_name = obj.p_name Then
            k = 1
        End If
        isEqual = k
    End Function
    Public Sub Show()
        Messagebox.Show(Me.p_name + ", " + str(Me.p_age))
    End Sub
End Class
---------------------------------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
      &nb

补充:软件开发 , Vb ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,