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

留年戦記

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

【オブジェクト指向】学び始めで簡単解説<その2:クラスとオブジェクトの違い>

プログラミング

最近学ぶことがすごく楽しくて色々頑張ろうと意気込んでいるあこさんです.

 

今回はオブジェクト指向の「クラス」についての解説です.

その1から見るっ!という方は

よく「クラスとオブジェクト」って何が違うの!?!?

っていう事起きますよね.

きっとこの記事を読み終わったあなたは「ふっふっふ~,クラスとオブジェクト?その違いも分からないの?私は知ってるわ!ふふふふふふ」と言えるようになっていると思います.

 

1,クラスとは

まぁ,違いを知る前にクラスについて話をしようと思います.

f:id:aconote:20161125222321j:plain

ここからは上級者向け解説.プログラムなんて分かるかっ!って方は一回ほど(というより次の空行の下まで)スクロール( ˘ω˘ )

クラスにはそれぞれクラス名があります.(●は名前って書こうとしてクラスのことは名前と言わない!ってなって消した後です(;'∀'))

で,そのクラスは

・フィールド

・メソッド

と呼ばれるもので構成されます.

フィールドは要は変数のことです.

そしてメソッドは処理(関数)のことです.

それぞれ1つだけとは限らずいくつも中に含まれることがあります.

フィールドとメソッド,それぞれを「メンバ」と呼び,「クラス名.メンバ名」で外から呼び出すことが出来ます.

C言語など手続き型言語をやったことのある方なら,イメージに近いのはインクルードですかね…(ちょっと違うところもあるけど)

関数の塊です.(まぁ,違うところもあるけど.しつこいけど(;'∀')何度もいいますよ.違うところありますからね!!!!同義ではありません!!ニアイコールです!!!

 

で,ここから初心者向け解説.

お待たせいたしました.

「クラス」を学校のクラスに置き換えて考えてみましょう.

クラスには構成員(変数)として「教師」と「生徒」がいます.

仮に構成が,教師1人と生徒3人だとします.

それぞれの枠に「教師」「生徒1」「生徒2」「生徒3」という名前があります.

これが変数です.

そして,クラスでは「生徒に教師が勉強を教える」という作業と「生徒が部活動を行う」という仕事があるとします.これらが処理です.

作業作業の工程のマニュアルがクラスの中に書かれています.

ここで注意!あくまで枠があり,マニュアルがあるだけです!

まだ,クラスの状態では中に人間もマニュアルを実行することもありません!

 

2,クラスとオブジェクトの違い

f:id:aconote:20161125224956j:plain

よくある説明として「クラスは設計図」「オブジェクトは実体を持ったもの」という言い方はあります.

私はこの言葉は割と良いイメージだと思っています.

 クラスというのはあくまで「こういう形式でメモリを使いますよ」っていう内容を記述したデータの塊なのです(というとプログラミングやったことない人はちんぷんかんぷんになりそう(;'∀'))

本当の初心者の方はクラスと呼ばれる工場の設計図があって,それに基づいてオブジェクトという工場が生成されると思ってください.

※でここで復習.多様性ってあったじゃないですか.

この話,ここに繋がってきて,オブジェクトがPC工場とカメラ工場と全然違うものでも一つのクラスから生成するためにはクラスが抽象的(というか色んなものに対して当てはまるよう)に書かないといけないです.で,これが多様性と呼ばれるものなのです.

オブジェクトとクラスの違いは「実体」と「設計図」です.クラスのままではそこにデータを入れることはできません.

(このクラスという概念,なんであるのか?って考えたんですが大よそ,データ量の問題とオブジェクトに展開するのが簡単だからだと思います.本当は分かりませんが.

オブジェクトになると,メモリ確保を行うわけで最悪大きなメモリを使用することになりますよね….で,クラスだとどのくらいのメモリを確保してそれがどんな名前なのかを記述したデータがあればいいわけなので実体よりも少ないメモリで済みます.あと,一度書き込まれているオブジェクトから新しいオブジェクトの生成って普通に考えて難しいですよね(どこまでが書き込んだ内容なのかをどこかに記述しておかないといけないため).たぶん,そんな理由からクラスとオブジェクトという概念が生まれたんだろうなって思いました)

 

次回は「オブジェクトの生成とコンストラクタ」という題でやろうと思います.

ではでは,次回をお楽しみに!

 

こちらの記事も興味があればっ!

 

aconote.hatenablog.com

 

 

aconote.hatenablog.com