作成日 2009/1/31
最終更新日 2009/1/31
自分自身への参照
ここでは、自分自身への参照について説明します。
VB6.0、VBAでは「
Me」、C++では「
this」ポインタ、Javaであれば「
this」、UML2.0のOCL(※1)では「
self
」が相当します。
このページでは、これの意味、どのようなときに使用するかを、説明します。
-----
※1:OCLはObject Constraint Languageの略で、オブジェクト制約言語のことです。
自分自身への参照といっても、よくわからない。
図を使って説明します。
図1に示す、生徒の情報と、成績の情報があるとします。図2は図1から抽出したクラス図です。
図1 生徒情報と成績のデータ
図2 生徒情報と成績のデータから抽出したクラス図
ここで、派生属性(図2のクラス図で"/"(スラッシュ)が付いている属性)の算出方法について考えてみる。
わかるとは思いますが、
合計得点
= 図1で同じ行にある国語の得点 + 図1で同じ行にある英語の得点
平均点 = 図1で同じ行にある国語と英語から計算した合計得点/2
となります。で、この赤太文字で書いた「図1で同じ行にある」というのが、「自分自身への参照」と考えてよいです(※1)。
-----
※1:じゃあ、「同じ行にある」ではなく、「1つ上にある行にある」や「1つ下にある行にある」を意味するキーワードはあるのかと言うと、ありません。
ここでは、VB6.0やVBAの「Me」、C++の「this」、Javaの「this」、UML2.0のOCLの「self」がどのようなときに使用されるかを説明します。
…。
えーと、すいません。説明しにくいのですが…、実はあまり使用されることが無いのです。
理由は以下の通りです。
- VB6.0やVBAの「Me」、C++の「this」、Javaの「this」においては、省略されることが多い。
ただし、これらの意味を理解し、省略しているということをわかっていないと駄目です。
- UML2.0のOCLの「self」においては、そもそもOCLがあまり使用されていない…。
仕事で使用したことがありません。今のところ(2009/1/31)、他の人が使用しているところを見たこともありません。
知名度が低いのと、そもそもUMLやオブジェクト指向に対して不慣れな人が多いためだと思います。
一応説明します。
- [VB6.0、VBA]標準モジュールではMeキーワードは使用できません。
標準モジュールからはオブジェクトは生成されないので、これは当然のことです。
- [VB6.0、VBA]Meキーワードの次に"."(ドット)をつけてアクセスできるのはpublicなプロシージャ、変数のみです。
C++やJavaはそうではありません。
正直言って不便です。なんでこういう仕様なのでしょうか…。
- [VB6.0、VBA]フォームモジュールを作成すると、モジュール名(例:UserForm1)と同じ名前のグローバル変数が定義されます。これとMeは別物です。よく勘違いしている人がいます。
詳細は「エクセルVBAやVB6.0でフォーム上のコントロールにアクセスするとき、「Me」って使ってる? -
だるまのエクセルVBA」を参照してください。
- [C++、Java]staticメンバ関数(メソッド)内でthisは使用できません。
staticメンバ関数(メソッド)はオブジェクトメソッドではないので、当然です。(VB6.0やVBAにて標準モジュールでMeが使用できないのと同じ理由です。
このページを作成するのに参考にしたページです。
ただし、だるまが以下のページをちゃんと理解してこのページを作成したとは思わないように。
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メールをお願いします。
Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft
Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
Sun、Sun Microsystems、サンのロゴマーク、Java、及び、Sun/Solaris/Java に関連するすべての商標およびロゴマークは米国 Sun Microsystems, Inc. の米国およびその他の国における商標または登録商標です。
OMG、UML、Unified Modeling
Languageは、Object Management
Groupの商標または登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。