VBA と Java のオブジェクト指向プログラミング

Top > Excel VBA でデザインパターン > Adapterパターン(継承)

Adapterパターン(継承)


継承を使ったAdapterパターンのサンプルプログラムをExcelVBAで記述すると
以下のようになります。モジュールごとにプログラムを示します。

標準モジュール:modCBanner
'=================================================>>>>>>>>>>
'標準モジュール:modCBanner
'===========================================================
'VBA のクラスにはコンストラクタを定義できないので
'標準モジュールに定義されたプロシージャを変わりに使う。
Option Explicit

'*** コンストラクタ2 ***
Public Function Init2(pstrValue As String) As clsCBanner
    Dim obj As clsCBanner
    Set obj = New clsCBanner
    'コンストラクタの呼び出し
    Call obj.Init2(pstrValue)
    Set Init2 = obj
End Function
'<<<<<<<<<<=================================================
クラスモジュール:clsCBanner
'=================================================>>>>>>>>>>
'クラスモジュール:clsCBanner
'===========================================================
Option Explicit
'プロパティ情報
Private mstrValue As String

'標準モジュールに定義されたコンストラクタから
'呼び出されるメソッド。
Public Sub Init2(pstrValue As String)
    mstrValue = pstrValue
End Sub

Public Sub ShowWithParen()
    Debug.Print ("(" & mstrValue & ")")
End Sub

Public Sub ShowWithAster()
    Debug.Print ("*" & mstrValue & "*")
End Sub
'<<<<<<<<<<=================================================
クラスモジュール:clsIPrint
'=================================================>>>>>>>>>>
'クラスモジュール:clsIPrint
'===========================================================
Option Explicit

Public Sub PrintWeak()
    'VBA の IDE は実体の無いプロシージャを
    '自動的に削除してしまうので
    'コメント行を書いておく
End Sub

Public Sub PrintStrong()
    'VBA の IDE は実体の無いプロシージャを
    '自動的に削除してしまうので
    'コメント行を書いておく
End Sub
'<<<<<<<<<<=================================================
標準モジュール:modCPrintBanner
'=================================================>>>>>>>>>>
'標準モジュール:modCPrintBanner
'===========================================================
'VBA のクラスにはコンストラクタを定義できないので
'標準モジュールに定義されたプロシージャを変わりに使う。
Option Explicit

'*** コンストラクタ2 ***
Public Function Init2(pstrValue As String _
) As clsCPrintBanner
    Dim obj As clsCPrintBanner
    Set obj = New clsCPrintBanner
    'コンストラクタの呼び出し
    Call obj.Init2(pstrValue)
    Set Init2 = obj
End Function
'<<<<<<<<<<=================================================
クラスモジュール:clsCPrintBanner
'=================================================>>>>>>>>>>
'クラスモジュール:clsCPrintBanner
'===========================================================
Option Explicit
'スーパクラスの情報
'インターフェイスの継承と委譲で
'実装を継承しているように見せかける。
Implements clsCBanner
Private mobjSuper As clsCBanner
'インターフェイスの継承
Implements clsIPrint

'標準モジュールに定義されたコンストラクタから
'呼び出されるメソッド。
Public Sub Init2(pstrValue As String)
    'スーパークラスのコンストラクタの実行
     Set mobjSuper = modCBanner.Init2(pstrValue)
End Sub

'clsCBannerを継承しているようにみせかける。
Public Sub ShowWithParen()
    Call mobjSuper.ShowWithParen
End Sub

'clsCBannerを継承しているようにみせかける。
Public Sub ShowWithAster()
    Call mobjSuper.ShowWithAster
End Sub

'clsIPrintを実装しているようにみせかける。
Public Sub PrintStrong()
    Call mobjSuper.ShowWithAster
End Sub

'clsIPrintを実装しているようにみせかける。
Public Sub PrintWeak()
    Call mobjSuper.ShowWithParen
End Sub

'-----------------------------------------------------------
'clsIPrint のインターフェイス
'-----------------------------------------------------------
Private Sub clsIPrint_PrintStrong()
    Call Me.PrintStrong
End Sub

Private Sub clsIPrint_PrintWeak()
    Call Me.PrintWeak
End Sub

'-----------------------------------------------------------
'clsCBanner のインターフェイス
'-----------------------------------------------------------
Private Sub clsCBanner_init2(pstrValue As String)
    '何もしない
End Sub

Private Sub clsCBanner_ShowWithParen()
    Call Me.ShowWithParen
End Sub

Private Sub clsCBanner_ShowWithAster()
    Call Me.ShowWithAster
End Sub
'<<<<<<<<<<=================================================
標準モジュール:modCMain
'=================================================>>>>>>>>>>
'標準モジュール:modCMain
'===========================================================
Option Explicit

'*** メイン処理 ***
'VBA のクラスにはクラスメソッドを定義できないので
'標準モジュールに定義されたプロシージャを変わりに使う。
Sub Main1()
    Dim objP As clsIPrint
    Set objP = modCPrintBanner.Init2("Hello")
    Call objP.PrintWeak
    Call objP.PrintStrong
End Sub
'<<<<<<<<<<=================================================

Top > Excel VBA でデザインパターン > Adapterパターン(継承)

このページへのコメント

6aj8Ac Very neat article.Much thanks again. Much obliged.

0
Posted by check it out 2014年01月21日(火) 10:40:17 返信

9XTZvJ Very informative article. Great.

0
Posted by tips about seo 2013年12月21日(土) 08:03:07 返信

VBADP02_01 - VBA 鐃緒申 Java 鐃塾ワ申鐃瞬ワ申鐃緒申鐃緒申鐃夙指醐申鐃竣ワ申鐃緒申鐃淳ワ申 - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 ≪潟若 c若 潟若 http://www.pslcbi.com/moncler2014.html

0
Posted by ≪潟若 c若 潟若 2013年12月10日(火) 10:21:43 返信

VBADP02_01 - VBA 鐃緒申 Java 鐃塾ワ申鐃瞬ワ申鐃緒申鐃緒申鐃夙指醐申鐃竣ワ申鐃緒申鐃淳ワ申 - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 ≪潟若 泣ゃ4 http://www.pslcbi.com/moncler2014.html

0
Posted by ≪潟若 泣ゃ4 2013年12月10日(火) 00:25:02 返信

VBADP02_01 - VBA 鐃緒申 Java 鐃塾ワ申鐃瞬ワ申鐃緒申鐃緒申鐃夙指醐申鐃竣ワ申鐃緒申鐃淳ワ申 - Seesaa Wiki鐃淑ワ申鐃緒申鐃緒申鐃緒申 for 鐃緒申鐃殉¥申鐃夙フワ申鐃緒申 moncler ≪潟若 http://www.pslcbi.com/moncler2014.html

0
Posted by moncler ≪潟若 2013年12月08日(日) 01:42:24 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

×

この広告は60日間更新がないwikiに表示されております。

編集にはIDが必要です