メソッド
「操作」を定義したものだよ
関数とは似て非なるものだけど同じものだと思ってもいいよ
オブジェクト指向の話で出てくるよ
簡単に書くよ
メソッド(英:method)とは
関数
(処理のまとまり)のこと(嘘)。
本当は
オブジェクト指向
(「モノ」に注目した考え方)における「操作」を定義したもののこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「関数」と「オブジェクト指向」について結構ガッツリ説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。
オブジェクト指向は「『モノ』に注目した考え方」です。
「どんなやつで、どう動く」に注目した考え方です。
例えば、そうですね。
あなたがシューティングゲーム(射撃ゲーム)を作ろうとしているとしましょう。
シューティングゲームの基本的な登場人物は
1.自分
2.敵
3.弾
です。
そして、それぞれの登場人物には「どんなやつ(属性)」と「どう動く(操作)」が設定されます。
例えば
・「自分」は3回「弾」に当たると爆発する(どんなやつ)
・「敵」は左に動ける(どう動く)
・「弾」の色は威力と対応している(どんなやつ)
などが「どんなやつ」と「どう動く」です。
あとは、用意した
1.自分
2.敵
3.弾
を組み合わせて、あれやこれやする処理を たくさん作ればゲームは完成します。
例えば
「1」の「3」が「2」に当たったら「2」が消える
(「自分」の「弾」が「敵」に当たったら「敵」が消える)
のような処理を必要な分だけ作り込めば良いでしょう。
ここまでを振り返ってみてください。
「自分」「敵」「弾」といったモノ(オブジェクト)に注目して、あれこれ考えていますよね。
このような考え方がオブジェクト指向です。
誤解を恐れずに言えば、オブジェクト指向のイメージは人形劇です。
人形劇をやるときは、まず人形を用意します。
そして、人形同士を関わらせることで1つの物語を作り上げます。
人形劇の中心は人形です。
物語は「人形に何をするか(どう動かすか)」によって決まります。
オブジェクト指向では、まずモノ(オブジェクト)を用意します。
そして、オブジェクト同士を関わらせることで1つの処理を作り上げます。
オブジェクト指向の中心はオブジェクトです。
処理は「オブジェクトに何をするか」によって決まります。
人形劇は、人形を用意して、その人形同士をあれこれすることで物語を作ります。
オブジェクト指向は、モノ(オブジェクト)を用意して、オブジェクト同士をあれこれすることで処理を作ります。
似ていますよね?
まずはオブジェクトを用意して、そのオブジェクトをあれこれしちゃうぜ!
なのがオブジェクト指向です。
以上を踏まえて
「関数」をカッコつけて言った表現
が「メソッド」です。
……ウソです。
ごめんなさい。
本当は
オブジェクトの操作を定義したもの
が「メソッド」です。
メソッドと関数は似て非なるものだけど同じものです。
オブジェクト指向の説明をしたときに
それぞれの登場人物には「どんなやつ(属性)」と「どう動く(操作)」が設定されます。
と書きました。
これは、ちょっとカッコ付けた言い方をすると
オブジェクトには「属性」と「操作」が定義される
です。
この話における「操作(を定義したもの)」がメソッドです。
あと、ついでなので書いておくと「属性(を定義したもの)」は「メンバ変数」と言います。
気が向いたら、併せて覚えてあげてください。
メソッド:オブジェクトの「どう動く(操作)」を定義したもの
メンバ変数:オブジェクトの「どんなやつ(属性)」を定義したもの
です。
繰り返しになりますが、メソッドは「オブジェクトの操作を定義したもの」です。
それに対して関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
メソッドと関数は別の物です。
ただし、です。
実際のプログラムにおいて、オブジェクトの操作を定義したメソッドは「何かを入れると何かをやって何かを返してくれる、処理のまとまり」だったりします。
これが混乱を招く原因のひとつでしょう。
「メソッド」と「関数」は別の意味を持つ用語です。
ただし、メソッドは関数の特徴を持っている場合がほとんどです。
そのため「メソッドと関数って同じもの?」という疑問が出てくる場合があります。
変な例えですが「メソッド」が「合コン」で「関数」が「飲み会」みたいなものです。
「合コン」と「飲み会」は意味するところが大きく違います。
合コンは男性と女性が仲良くなるのが目的です。
単なる飲み会は必ずしもそうとは限りません。
ですが、端から見たら、どちらも酒を飲んでバカ騒ぎしているだけです。
違いが、よく分かりません。
「メソッド」と「関数」の違いも、そんなイメージです。
用語の意味自体は根本的に違います。
ただし両方とも「処理のまとまり」です。
実際のプログラムを作るときは違いが分かりにくかったりします。
以上でメソッドの説明自体は終わりですが、せっかくなので実際のプログラムっぽい例を挙げておきます。
例えば、そうですね。
Javaで書いた以下の内容のソースコード(プログラムの元ネタ)が あったとしましょう。
//クラス「ピヨ太」
class Piyota{
//年齢
int age;
//性別
String sex;
//年齢を設定
void setAge(int _age){
age = _age;
}
//年齢を返却
int getAge(){
return age;
}
//性別を設定
void setSex(String _sex){
sex = _sex;
}
//性別を返却
String getSex(){
return sex;
}
}
このコードは「ピヨ太」クラスを定義しています。
よく分からなければ、ピヨ太君の設計図だと思ってください。
※「クラスって何よ?」と気になる方は、用語「クラス」の説明を ご覧ください。
このピヨ太君の設計図ですが、大きく分けて2つの要素からできています。
それは
//年齢
int age;
//性別
String sex;
の部分と
//年齢を設定
void setAge(int _age){
age = _age;
}
//年齢を返却
int getAge(){
return age;
}
//性別を設定
void setSex(String _sex){
sex = _sex;
}
//性別を返却
String getSex(){
return sex;
}
の部分です。
前半部分はピヨ太君の「どんなやつ(属性)」が書いてある部分です。
ピヨ太君は「年齢」という要素を持っています。
ピヨ太君は「性別」という要素を持っています。
後半部分はピヨ太君の「どう動く(操作)」が書いてある部分です。
ピヨ太君は「年齢」を設定できます。
ピヨ太君は「年齢」を答えられます。
ピヨ太君は「性別」を設定できます。
ピヨ太君は「性別」を答えられます。
このコードにおける後半部分の
//年齢を設定
void setAge(int _age){
age = _age;
}
//年齢を返却
int getAge(){
return age;
}
//性別を設定
void setSex(String _sex){
sex = _sex;
}
//性別を返却
String getSex(){
return sex;
}
がメソッドです。
前半部分の
//年齢
int age;
//性別
String sex;
がメンバ変数になります。
一言でまとめるよ
まぁ「メソッド」って単語が出てきたら「オブジェクトの操作を定義したものだけど、動きとしては関数
(処理のまとまり)と同じなんだな~」と お考えください。





