読者です 読者をやめる 読者になる 読者になる

留年戦記

留年と工学と人間関係と毎日戦っている人のブログです. 今年は留年回避済み.プロマネのお勉強中.留学試みたりTOEICの得点向上を試みたり.普通に学校の勉強を頑張ったり工学(プログラミングも回路も)について学んでみたり.時々レーザーカッターのパラメータを記事にしてます.

【オブジェクト指向】グローバル変数?そんなものはないっ!静的メンバを使うのだ!

つい先日までオブジェクト指向にはグローバル変数という概念が存在するものだと勝手に思い込んでいたあこさんです.

今回は解説込々なのでプログラミング初心者だ!という方も楽しめると思います!

 

まさか!グローバル変数という概念がないなんて!(´・ω・`)!!!

 

「でも,どうやって変数と共有するの?」って思われますよね….

私もこれに躓いて,エラーに書いてある「静的メンバ」というものに気づきましたorz

(それまで全然エラー気づいてなくて,うーんおかしいって唸ってました)

 

1,オブジェクト指向は積み木の塊.くっついているわけではないのだ.

f:id:aconote:20161206115125j:plain

オブジェクト指向とは,あくまでオブジェクトと呼ばれる…前回言った粘土で作られた積み木の集まりなのです.間違えてはいけません.レゴのように一個一個のパーツが組み合わさっているのです.それぞれが一つの物体ではないのです…!

つまり,グローバル変数(どこからでも共通で呼び込める変数)というものは存在しえないのです…!

グローバル変数とは

イメージでいうならオンラインクラウドですね.

AというPCがあって,そこからクラウド内のファイルを変更したとき,BというPCからクラウドの中を見ると変更されていますよね.

このようにどこかで変更されたときに,それを更新して次に別のところで引き出すときに新しい更新したデータを渡してくれる変数のことをグローバル変数と言います.

 

2,オブジェクト指向に存在しないグローバル変数…その代わりは…?

同等の機能を持つものがないはずないじゃぁないですかぁ!!

「静的メンバ」といってすべてのオブジェクトに置いて同じ変数を扱う.みたいな内容の変数が定義できるんですよ!

 

と,言うと頭の中に「???????*∞」となる人が大半ですよね…(;'∀')

私も最初,宣言したもののオブジェクト名(積み木の名前)じゃなくてクラス名(鋳型の名前)で変数呼び出してるから「なんでじゃぁぁっぁあああ」ってなってました(笑)

 

実は…ついこの間知ったんですが…この鋳型から作られた積み木たちは積み木たち間だけで通信を行う特殊な通信機能を持っているようです.

だんだん,積み木が宇宙船みたいに見えてきましたね….

あこさん的には「こんなはずじゃなかった…orz」って感じです.

 

で,その通信機で何をしているかというと,型の一部の形(引き出しの中身)が変わると「お前たちも引き出しの中身を変えろっ!」という連絡が来るのです.で,積み木たちは自動で引き出しの中身を変更します.

 

これが,「静的メンバ」と呼ばれるもので,常に同じ型から作られた積み木の引き出しには同じものが入っている場所のことを言います.

 

こうすれば,クラスという単位でグローバル変数の役割ができます…!

 

3,で,どうやって使うの?C#では…

今回,私はC#でしか書いていないのでC#での書き方になりますが,動的メンバ(オブジェクト毎の引き出し)の場合は「オブジェクト名.メンバ名」(「積み木の名前.引き出しの名前」)で変数を引っ張ってきましたね.

静的メンバの場合は「クラス名.メンバ名」(「鋳型の名前.引き出しの名前」)となります.

 

使い方でクラス名を使うことが最初理解できず夢の中まで苦しみました(;'∀')

そりゃ,全部で共有されている変数なのでクラス名で引っ張ってくるのが普通ですよね….あふん…orz

というわけで,皆様もグローバル変数がない!!!どうしよ!!!と思ったらこの話思い出してくださいね!!

 

過去のオブジェクト指向の記事はこちら!!!興味のある方はこちらもどうぞ~!

 

aconote.hatenablog.com

 

 

aconote.hatenablog.com