目標
クラスを十分に扱える能力の習得。
日本語を適宜クラスに置き換える能力の習得
説明
ここではクラス、メソッドにフォーカスを当てた説明をしていく。
クラスとは、フィールドとメソッドと持つものである。
フィールドとはものごとの状態を表す。
メソッドとはものごとの動作を表す。
すなわち、クラスとはものごとを指す。
この説明が100%全て表しているわけでもないが、一番シンプルに考えれる方法ではある。
プログラミングをする上で重要なのは、いきなり処理を書こうとはしてはいけない。
まずは、プログラミングするものの特徴を見つけ出す。
曖昧な部分は自分で定義していくことが重要になる。
例題
以降、上記の説明にそって問題を解いていく。
例1
部屋の灯りをプログラミングせよ。
public class Light
{
private bool IsOn = false;
public void Switch()
{
IsOn = !IsOn;
}
}
IsOnフィールドが電源のON,OFFの状態を表す。
SwitchはOn,Offを行う動作を表す。
ここでは、Switchという動作がIsOnの状態を変化させていることにも注目したい。
例2
TVをプログラミングせよ。
public class TV
{
private bool IsOn = false;
private int Channel = 1;
public void ChangeChannelByNumber(int Channel)
{
this.Channel = Channel;
}
public void ChangeNextChannel()
{
Channel++;
if (Channel == 13) Channel = 1;
}
public void ChangeBackChannel()
{
Channel--;
if (Channel == 0) Channel = 12;
}
public void Switch()
{
IsOn = !IsOn;
}
}
ここでは状態が二つに増えて、
- 電源のON,OFFを表すIsOn
- 現在のチャンネルを表すChannel
の二つがある。
動作に関しては、
- チャンネルボタンを押した時のチャンネルの変化。(ChangeChannelByNumberメソッド)
- 次へを押した時、チャンネルを一個進める変化。(ChangeNextChannelメソッド)
- 前へを押した時、チャンネルを一個戻す変化(ChangeBackChannelメソッド)
- 電源のON,OFFを押した時の電源の変化。(Switchメソッド)
がある。
ここまでは簡単なものだったので、メソッドの中身なども書いてはいたが難しければ中身をいきなり書く必要はなくまず必要そうなメソッドを用意だけすればよい。
ただし、なんでもかんでもvoidまたはメソッドの引数を空にして用意すればいいわけではなく返り値の型や引数、つまり入力と出力の部分は意識する必要がある。
以降の例題、問題ではメソッドの中身は書かずに変数と、メソッドの返り値、戻り値のみを書く。
例3
テストの結果を取得するシステムをプログラムせよ。
注意
ここでは、まだメソッドの中身を書けなくもないが、中身は書かず概観だけを示す。
要件
生徒N人の、国語、数学、英語のテストの点数を受け取って保存。
ある生徒Xに対して、国語、数学、英語、総合点の順位を取得。
各教科の平均点、最高点、最低点を取得。
public class Grades
{
public List<Score> list = new List<Score>();
public int GetAverage(int Subject)
{
int result = 0;
//実装
return result;
}
public int GetRank(int N, int Subject)
{
int rank = 0;
//実装
return rank;
}
public int GetMax(int Subject)
{
int max = 0;
//実装
return max;
}
public int GetMin(int Subject)
{
int min = 0;
//実装
return min;
}
}
public class Score
{
public int JapaneseScore;
public int MathScore;
public int EnglishScore;
}
まず、要件から状態は何かを探す。
すると、国語の点数、数学の点数、英語の点数という状態がある。
ここで、状態はなるべくまとめた方が分かりやすい。
例えば、
国語のテストの点数、数学のテストの点数、英語のテストの点数の状態、というのと
生徒のテストの点数の状態、というのでは
後者の方がシンプルで分かりやすい。
なので、まとめるためにScoreクラスを作成して、それぞれのテストの点数をフィールドとする。
次に本題の成績を取得するためのクラスを作成する。
まず全ての生徒のテストの点数の状態が必要。
生徒のテストの点数の状態はScoreクラスで表せるので、
全ての生徒のテストの点数はList<Score> で表すことができる。
動作に関しては、
- 平均点を取得する
- 最高点を取得する
- 最低点を取得する
- 生徒の成績を取得する
を各教科にやればいいので、各教科をintで分けるために引数に入れてメソッドを作れば良い。
例題はこれで終了。以降追記するかもしれない。
問題
問1
〇×ゲームをプログラミングせよ。
問2
電卓をプログラミングせよ。
問3
図書館の蔵書を検索するシステムをプログラミングせよ。
問4
商品の在庫管理を行うシステムをプログラミングせよ。