第26講 クラスの学習その1
第1話 クラスとは?
クラスの定義をウィキペディアから引用してみましょう。
クラス(class)は、クラスベースのオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。クラスから生成したオブジェクトのことをインスタンスという。
クラスには、インスタンスの保持するデータ(メンバ変数、フィールド(UMLでは「属性」ともいう))と操作(メソッド、メンバ関数)が記述される。アクセス範囲(public、private、protectedなど)や可変かどうか(final、 constantなど)等についても記述されている。
初心者には、何を言っているのかさっぱりわかりませんね。
わかりやすく言い直すなら、抽象データ型とインスタンスは型と実例です。
このように説明されても、?はまったく消えません。
まず、皆さんクラスという言葉を聞いて最初に何を思い浮かべますか。
そうですよね。学校のクラスですよね。
このクラスと実は、C++のクラスは同じです。
ですから、本当は皆さんははじめからクラスを理解しています。
本当は理解しているのに、それを自覚していないだけです。
ですから、皆さんのクラスに対する観念を掘り下げていくだけで、C++のクラスも理解できます。
基本的にクラスで思い浮かべるのは、~県立~高等学校の普通科の3年4組など皆さんが通っていた学校の実際のクラスではないでしょうか。
これが、実例です。
実例を思い浮かべると同時に、次のことも知っています。
自分が属していたクラスと部活動の友達が属していたクラス、あこがれていた人が属していたクラス、
それぞれ実例は違っていても、それぞれのクラスのタイプが同じであることです。
また、違うタイプがあることも知っています。
クラスにはいろいろなタイプ=型があります。
男子しかいないクラス(男子高のクラス)、女子しかいないクラス(女子高のクラス)、男女両方いるクラス、普通科のクラス、専門学科のクラスなど様々な型があります。
さらには、40人学級とか35人学級など様々なタイプ=型があります。
クラスといっても、小学校低学年のクラス、中学校中学年のクラス、高等学校高学年のクラス、塾のクラスでは、タイプも性格も違います。
同じ高等学校の中にも普通科と専門学科の両方のクラスが設けられている学校もあります。
つまり、違うタイプのクラスが併置されています。
型と実例は、抽象と具体と言い換えてもいいわけです。
皆さんは、猫という抽象を知っています。猫というクラス=タイプを知っています。
そして、猫というクラスには、『ミケ』がいたり、『もペ』がいたり、『トラ』がいたりしているこを知っています。
『ミケ』『もペ』『トラ』は、同じ猫=同じタイプ=同じ型であっても、三毛だったり、黒一色だったり、白一色だったり、模様も違うし、食の好みや性格も違います。
逆に言うと、模様も性格も違うのに共通の属性=タイプがあります。
まだ、イメージが掴めない方のために、文書のひな形と実際の文書を例に挙げましょう。
書式と実際の文書といってもいいかもしれません。
インスタンスの保持するデータと操作とはどういう意味でしょうか。
インスタンスは~県立~高等学校の普通科の3年4組などの実際のクラスです。
クラスには、生徒の人数、生徒名、各生徒の今までの教科の成績、身体計測結果などの様々なデータがあります。
データは比較的イメージがつかみやすいと思いますが、
操作とは何でしょうか。
クラスの生徒は、時間ととともに刻々と変化していきます。
教科の実力をつけたり、部活動の力を伸ばしたりします。
その変化の様子を操作と考えてもよいですし、
同じデータでも、得点の合計を算出したり、得点の偏差値を算出したり、
様々な操作を付け加えることが出来ます。
クラスとは、データと操作の集合体の型ですし、インスタンスはその具体的なデータと操作です。
C言語では、クラスとはメンバー変数(データ)とメンバー関数(操作)の集合体であるとしていました。
VCでは、それをフィールド(データ)とメソッド(関数)と呼んでいますが、
結局は、クラスとは変数と関数の集合体です。
そして、インスタンスとはそれを具体化したのものです。
つまり、生徒名のところに具体的な名前を代入したり、
教科の点数を入れたりしたものです。
クラスPは、
struct P{
メンバー変数;
メンバー関数;
};
のように宣言します。
関数とは違い
}の後に文を閉める;がないとエラーします。
例えば、
struct P{
生徒名;
生徒の国語の成績;
生徒の数学の成績;
生徒の英語の成績;
得点合計処理;
得点偏差値処理;
};
です。
紺の部分がメンバー変数ですし、ピンクの部分がメンバ関数
この場合インスタントは、
{
花田太郎;
50; //国語成績
65; //数学成績
48; //英語成績
f1(50,65,48); //得点合計処理
f2(50); //国語得点偏差値処理
f3(65); //数学得点偏差値処理
f4(48); //英語得点偏差値処理
}
などとイメージしていただければよいでしょうか。
具体例がないと理解は難しいものです。
次回は実際に、プログラミングをしてクラスを理解していきましょう。
第25講第5話へ 第2話へ
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座