Kの備忘録(仮)

Python、VBA、Excelを中心に記事を投稿

Excel VBAのクラスを学ぶ3 カプセル化と1~3回目までの講座の振り返り

はじめに

前回までの2回はVBA中級講座の受講内容についてまとめてました。

lbibouroku.hatenablog.com

その過程でクラスについていろいろ調べていたところ、結構気になることが出てきたので、別の記事でまとめることにしました。

今回は、「オブジェクト指向の3大要素って何?」「カプセル化って何?」という疑問の消化と、これまでの講座の振り返りです。普段の記事よりも個人的な備忘録の要素が強く、いろんな方のブログの引用が多めです。

◆目次◆

オブジェクト指向の3大要素とは

VBAの場合、継承と多態性は使えなくて、カプセル化だけを意識すれば良いようです。

以下引用

https://excel-ubara.com/vba_class/VBA_CLASS_01.html

VBAのことをネットで調べるとエクセルの神髄さんへたどり着く率高いですね)

心配はいりません、少なくともVBAでは、継承も多態性も使えないのですから、 (継承としてはインターフェースだけ使えますが、急ぎ覚える必要はないでしょう。) 従って、カプセル化だけを意識すれば良いのです。

カプセル化とは

以下引用 https://qiita.com/katolisa/items/6cfd1a2a87058678d646

  • フィールド=private、メソッド=public
  • フィールドを操作するためにgetterメソッドとsetterメソッドを用意する

= カプセル化である。

Javaカプセル化はこちらに掲載されています。

https://qiita.com/iverson3kobe0824/items/f3d7b93f6049b18b170e

やっていることはVBAも同じですね。ちなみにVBAではこんなコードになります。

例)Personクラス

'[Person]クラスモジュール
Private age_  As Long

Public Property Get Age() As Long
    Age = age_   
End Property

Public Property Let Age(ByVal newAge As Long)
    If newAge > 0 Then
        age_ = newAge
    Else
        age_ = 0
    End If      
End Property

'[Module1]標準モジュール
Sub personclass_test1()
    Dim myPerson As Person
    Set myPerson = New Person
    
    myPerson.Age = 60   
End Sub

宣言フィールドでプライベート変数を宣言して、パブリックなPropertyメソッドを経由して値を返します。

2回目の講座で、オブジェクトモジュールで同じことをしていました。つまり、今まで講座で学んでいたことはカプセル化の仕方も含まれていました!

3回目の講座のクラスの講座も同様です。

カプセル化のメリットはこの辺りでしょうか。

  • 変数の中身が書き変わって、変な値で処理しないように制限する
  • 値に制限が書けられる

もうちょっと調べてみました。

カプセル化のメリット

以下引用 https://xtech.nikkei.com/atcl/nxt/column/18/00208/031300003/

カプセル化のメリットは大きく分けて2つあり、1つめは、オブジェクトを利用する人はその操作の仕様だけを知っていれば、オブジェクト内の操作の実装やデータの内容を知る必要がないことです。 2つめは、関連する操作がひとまとめになっているので、理解しやすく変更の影響も局所化できることです。

こう見ると、「保守性が高くなる」という印象ですね。自分でクラスを使って管理できるようになると、実感できそうです。

継承とポリモーフィズム多態性)とは

ほかの言語ではこの2つも使えるらしいので、それぞれの意味を調べました。

  • 継承

以下引用 https://blog.codecamp.jp/java-inheritance

クラスの中身である変数やメソッドを、他のクラスに受け継がせる(=継承する)ことができます。

個人的にこれは便利そうなので使ってみたいです。

同じ命令でも、受け取り手が変わると実行内容が変わる(結果は変わらない・・・?)。

参考サイト https://java2005.cis.k.hosei.ac.jp/materials/lecture18/polymorphism.html

これはイメージがいまいち湧かないですね・・・。難しいです。

おわりに

クラスについて調べると、Javaの記事が多い印象でした。

まずは、クラスを知るには実践あるのみですね。

講座については、1回目からずっと、クラスを学習するための準備をしてきた印象です。

講座の最終的な目標は「VBAの開発や保守を楽に&スマートにできる知識とスキルを身につける」です。個人的な目標としては、「自分以外の人が保守ができるマクロを作る」としているので、まずはクラスの使いどころを掴みたいところですね。

VBA中級講座も折り返し地点なので、引き続き頑張りたいと思います。