電子書籍の厳選無料作品が豊富!

プログラミングのライブラリ、モジュールの概念は理解出来たのですが、
クラス、インスタンス、メソッドの概念がいまいち理解出来ません。

わかりやすく例えるならどのような例えになりますか?

A 回答 (7件)

クラス


 ある物事に注目した状態(フィールド。プロパティとも。)や振る舞い(メソッド)を持ってるひな形。
メソッド
 振る舞い。
インスタンス
 クラスの動作を実際に利用できるようにした実体。

1つのクラスは、その物事に対する状態と振る舞いを持つため、その物事に対する責任を有することになります。
(何かバグがあった時に、そのクラスに原因があるということ)

他回答で犬が例に挙がっていますので、それに準ずるなら
犬は、状態として、犬種がある。
犬は、状態として、名前がある。
犬は、状態として、歳がある。
犬は、状態として、体力がある。
犬は、振る舞いとして、歩く/走るがある。
犬は、振る舞いとして、吠えるがある。
犬は、振る舞いとして、食事を摂るがある。

このように考えたら、
状態(プロパティ)として、予め設定するもの、振る舞いによって変化するものなどがあります。
振る舞い(メソッド)として、動作を行うものがあります。

クラス名をdogとしたら、
dog pochi = new dog();
dog hachi = new dog();
この時のpochi、hachiがインスタンスになります。

下記のように、必要な初期状態などが設定され、振る舞いを行ったりします。
(実際はこんなに単純ではありません)
pochi.DogBreed = "雑種";
pochi.Name = "ポチ";
pochi.Age = 2;
pochi.PhysicalFitness = 100;
pochi.Run() // 走れ、走ると体力が減る
pochi.Bark() // 吠えろ、吠えると体力が減る
pochi.Eat() // 食べろ、食べると体力が増える

hachi.DogBreed = "チワワ";
hachi.Name = "ハチ";
hachi.Age = 3;
hachi.PhysicalFitness = 80;
hachi.Run() // 走れ、走ると体力が減る
hachi.Bark() // 吠えろ、吠えると体力が減る
hachi.Eat() // 食べろ、食べると体力が増える


例えば特定の形式(項目の数や型)のCSVを出力をしたいと考えた時、
(A)CSVファイルの出力に責任を持つクラス、
(B)出力する形式に責任を持つクラス
などと分解されます。

(A)は
状態として
 ・1行目に項目名を出力するかどうか。
 ・区切り文字は何か。(CSVはカンマとは限らない)
 ・文字値をダブルクォーテーションで囲むかどうか。
 ・数値をダブルクォーテーションで囲むかどうか。
 ・文字内に区切り文字があった場合に、除去するのか、他の文字に置換するのか。
 ・文字内に改行文字があった場合に、除去してすべて出力するのか、改行文字までを出力するのか。
 ・出力するデータはなにか。
振る舞いとして
 ・指定したファイルパスに状態に応じた形で出力する。
などがあります。

(B)は1行分のデータを定義するとし、3項目あるとしたら
状態として
 ・1項目目の項目名と値。
 ・2項目目の項目名と値。
 ・3項目目の項目名と値。
振る舞いとして
 ・項目名を配列として取得する。
 ・項目値を配列として取得する。
などがあります。

これらはクラス設計においての考え次第ですが、こんな感じ、ということです。
    • good
    • 0

私はこの本で理解しました。


通称OOSC。途方もなく有名なOOP/OODの解説書。
結構難しい本ですが
とても読む価値が有ります。

2版も有りますが、取りあえず安く手に入る1版で充分。

https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%8 …
    • good
    • 0
この回答へのお礼

難しそうですね
読んでみます
ありがとうございました

お礼日時:2019/10/02 09:42

たとえでは、理解が間違ってしまうという話があります。


車クラスとか、トラッククラスとか、、、

オブジェクト指向プログラミングを中心にした入門書を読むのがいいです。
    • good
    • 0
この回答へのお礼

入門書読んでみます
ありがとうございました

お礼日時:2019/10/02 09:42

一般にクラスはアプリケーションですね


インスタンスはクラスにアクセスするために一度変数などに保持しておくもの
メソッドは関数です

webにおけるhtmlやcssのクラスは意味合いがちょっと違うの注意
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2019/10/02 09:41

class inu というものを作ったとしましょう。

「犬」のクラスです。
メソッドにvoid inu::naku() を作ります。何かを操作するための命令です。これを命令すると鳴いてくれるはずです。

インスタンスは、上記のようなクラスを使って作られるものになります。
class Inu pochi ;
pochi.naku();
こうすれば、ポチが鳴きますが、pochiがインスタンスです。
    • good
    • 0
この回答へのお礼

なるほど、犬に例えるとわかりやすいですね
ありがとうございました

お礼日時:2019/10/02 09:41

オブジェクト指向言語を勉強されているのですかね?


その場合、概念も大切ですが実際にどのように使うのかシンタックスもあわせて勉強しましょう。そこでの説明にもクラス、インスタンス、メソッドという言葉が出て来て実際どのようなものなのかがわかります。

で。
誤解を恐れず言うならクラスは実現したい機能のひな型。インスタンスはそこから生成された実際に動作させる実態。メソッドはクラスの機能の呼び出し口。
そんな感じで。

例えば人は(標準実装としては)「腕」というクラスのインスタンスを2つ保持している。腕には「物を掴む」とか「腕を上げる」とか「肘を曲げる」といった多くの機能があり、各機能を実行するメソッドは脳が呼び出す・・・ってな感じで。

参考まで。
    • good
    • 0
この回答へのお礼

人間に例えるとわかりやすいですね
ありがとうございました

お礼日時:2019/10/02 09:40

IT用語を読むだけでもポイントを掴める


http://e-words.jp/
    • good
    • 0
この回答へのお礼

読んでみます
ありがとうございました

お礼日時:2019/10/02 09:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!