1. オブジェクト指向プログラミングとは


演習 1-1 (個人): 現在人気のあるプログラミング言語の トップ 3 を調べて指定場所に「言語名」及び「その言語はオブジェクト指向型言語か手続き型言語か」を書いて下さい。


演習 1-2 (個人): オブジェクト指向プログラミングの「メリットとデメリット」を調べて指定場所に「メリットとデメリット」を書いて下さい。


演習 1-3 (個人): オブジェクト指向プログラミング言語にはプログラム内で動的に確保したメモリ領域が不必要になったら自動で開放する機能が備わっていることが多いです。
この機能のことをカタカナで何と呼ぶのか調べて指定場所に「機能名」を書いて下さい。


2. クラスの定義方法

3. インスタンスの生成


演習 1-4 (個人): テキストのソース1を実行してインスタンスを生成してみましょう。

結果:

math = 80 english = 70

フォルダ「OBSC_1_4」を新規作成し、その中に移動します
フォルダ「OBSC_1_4」の中で新規に2つソースを作ります。Main クラスのファイル名を「Main.java」、 Score クラスのファイル名を「Score.java」とします
Main クラス(ページ3のソース1)と Score クラス(ページ2のソース1)を書きます。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


演習 1-5 (個人): Scoreクラスに public int chemistry という int 型のフィールドを追加してみましょう。

結果:

math = 80 english = 70 chemistry = 30

演習 1-4 で作った「OELM_1_4」をフォルダ「OELM_1_5」に丸ごとコピーし、その中に移動します。
Score クラスを開き、フィールドに public int chemistry; を追加します。
メインメソッド内を以下に置き換えて下さい( chemistry に値をセットしてから english の後に表示するように置き換えてます)。

Score sc = new Score();
sc.math = 80;
sc.english = 70;
sc.chemistry = 30;

System.out.println( "math = " + sc.math+ " english = " + sc.english + " chemistry = " + sc.chemistry );

コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


4. 複数インスタンスの生成


演習 1-6 (個人): テキストのソース1を実行して複数のインスタンスを生成してみましょう。

結果:

太郎: math = 5 english = 3
花子: math = 80 english = 70

フォルダ「OBSC_1_6」を新規作成し、その中に移動します
フォルダ「OBSC_1_6」の中で新規に2つソースを作ります。Main クラスのファイル名を「Main.java」、 Score クラスのファイル名を「Score.java」とします
Main クラス(ページ4のソース1)とScore クラス(ページ2のソース1)を作成します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


演習 1-7 (個人): メインメソッド内で sc_jiro (次郎) インスタンスも追加で生成してみましょう。

結果:

太郎: math = 5 english = 3
花子: math = 80 english = 70
次郎: math = 10 english = 25

演習 1-6 で作ったフォルダ「OBSC_1_6」をフォルダ「OBSC_1_7」に丸ごとコピーし、その中に移動します
Main クラスを開き、メインメソッド内で sc_jiro インスタンスを作成します。
sc_jiro.math に 10、sc_jiro.english に 25 を代入します。
メインメソッドの花子の表示部の下に以下のコード(次郎の表示)を追加して下さい

System.out.println( "次郎: math = " + sc_jiro.math+ " english = " + sc_jiro.english );

コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


5. メソッドとメッセージ・パッシング


演習 1-8 (個人): テキストのソース4ソース3を実行し、average メソッドと set_math メソッドを使ってみましょう。

結果:

太郎: math = 5 english = 3 平均 = 4.0
花子: math = 80 english = 70 平均 = 75.0
太郎: math = 20 english = 3 平均 = 11.5
花子: math = 80 english = 70 平均 = 75.0

フォルダ「OBSC_1_8」を新規作成し、その中に移動します
フォルダ「OBSC_1_8」の中で新規に2つソースを作ります。Main クラスのファイル名を「Main.java」、 Score クラスのファイル名を「Score.java」とします
Main クラス(ページ5のソース4)とScore クラス(ページ5のソース3)を作成します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


演習 1-9 (個人): Score クラスに、math、english フィールドの値をランダムにセットするメソッドを追加してみましょう。

メソッド仕様:

(1) メソッドの定義は public void rand_set()  ※ (注意) 引数は無し
(2) メソッド内で math と english 両方のフィールドに 0 以上 100 以下の整数をランダムにセットする

結果:

太郎: math = 45 english = 10 平均 = 27.5
花子: math = 62 english = 37 平均 = 49.5
太郎: math = 20 english = 10 平均 = 15.0
花子: math = 62 english = 37 平均 = 49.5

※ 乱数を使っているので、実行するたびに結果が変わります

演習 1-8 で作ったフォルダ「OBSC_1_8」をフォルダ「OBSC_1_9」に丸ごとコピーし、その中に移動します
Score クラスに上で挙げた仕様の rand_set メソッドを追加します。
Main クラスを開き、sc_taro の math, english に値をセットしている行

sc_taro.math = 5;
sc_taro.english = 3;

を消し、代わりに sc_taro の rand_set メソッドに置き換えます。
同様に sc_hanako の math, english に値をセットしている行

sc_hanako.math = 80;
sc_hanako.english = 70;

を消し、代わりに sc_hanako の rand_set メソッドに置き換えます。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


6. コンストラクタ


演習 1-10 (個人): テキストのソース 1、2 を実行し、引数なしコンストラクタを使ってみましょう。

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
太郎: math = 5 english = 3 平均 = 4.0
花子: math = 80 english = 70 平均 = 75.0

フォルダ「OBSC_1_10」を新規作成し、その中に移動します
フォルダ「OBSC_1_10」の中で新規に2つソースを作ります。Main クラスのファイル名を「Main.java」、 Score クラスのファイル名を「Score.java」とします
Main クラス(ページ6のソース2)と Score クラス(ページ6のソース1)を作成します。
コンパイルして実行します。
チーム内で答え合わせをして下さい。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


演習 1-11 (個人): テキストのソース 3、4を実行し、引数有りコンストラクタを使ってみましょう。

結果:

引数有りコンストラクタ実行
引数有りコンストラクタ実行
太郎: math = 5 english = 3 平均 = 4.0
花子: math = 80 english = 70 平均 = 75.0

フォルダ「OBSC_1_11」を新規作成し、その中に移動します
フォルダ「OBSC_1_11」の中で新規に2つソースを作ります。Main クラスのファイル名を「Main.java」、 Score クラスのファイル名を「Score.java」とします
Main クラス(ページ6のソース4)と Score クラス(ページ6のソース3)を作成します。
コンパイルして実行します。
チーム内で答え合わせをして下さい。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


演習 1-12 (個人): テキストのソース 1 の Score クラスを書き換えて、フィールドの値をランダムにセットする引数なしコンストラクタを作ってみましょう。

コンストラクタ仕様:

(1) 「System.out.println("引数なしコンストラクタ実行"); 」の行は残しておく
(2) math と english 両方のフィールドに 0 以上 100 以下の整数をランダムにセットする ※ 演習 1-9 を参照

結果:

引数なしコンストラクタ実行
引数なしコンストラクタ実行
太郎: math = 70 english = 70 平均 = 70.0
花子: math = 29 english = 33 平均 = 31.0

※ 乱数を使っているので、実行するたびに結果が変わります

演習 1-10 (※ 1-11 ではありません)で作ったフォルダ「OBSC_1_10」をフォルダ「OBSC_1_12」に丸ごとコピーし、その中に移動します
Score クラスを開き、コンストラクタを仕様に合わせて書き換えます。
Main クラスを開き、sc_taro の math, english に値をセットしている行

sc_taro.math = 5;
sc_taro.english = 3;

及び sc_hanako の math, english に値をセットしている行

sc_hanako.math = 80;
sc_hanako.english = 70;

を消します。
コンパイルして実行します。
チーム内で答え合わせをして下さい。
指定場所に「MainとScoreクラスのソースコード」と「実行結果」を記入して下さい。


7. オーバーロード


演習 1-13 (個人): テキストのソース 1 で示した OLtest クラスに以下の仕様のメソッドを追加してオーバロードを試してみましょう。

メソッド仕様:

名前は「show」
引数は「String a」と「int b」の2つ
a + b を表示する

Main クラス:

public class Main{

    public static void main(String[] args) {

       OLtest ol = new OLtest();
       ol.show();
       ol.show( "ほげ" );
       ol.show( 123 );
       ol.show( 123, 456 );
       ol.show( "ふが", 789 );
    }
}


結果:

引数なし
引数は文字列クラス: ほげ
引数は整数クラス: 12
引数は整数クラスx2: 123-456
ふが789

フォルダ「OBSC_1_13」を新規作成し、その中に移動します
フォルダ「OBSC_1_13」の中で新規に2つソースを作ります。Main クラスのファイル名を「Main.java」、 OLtest クラスのファイル名を「OLtest.java」とします
OLtest クラスをページ7のソース1をコピーしてから上の仕様に従って作成します。
Main クラスは上のソースを使用します。
コンパイルして実行します。
チーム内で答え合わせをして下さい。
指定場所に「Main と OLtest クラスのソースコード」と「実行結果」を記入して下さい。


演習 1-14 (個人): コンストラクタもオーバロード可能です。 下の仕様に従って Score クラスに引数有りコンストラクタを追加してみましょう。

引数有りコンストラクタ仕様:

引数は「int a」と「int b」
「引数有りコンストラクタ実行」と表示する
math に a をセットする
english に b をセットする

結果:

引数なしコンストラクタ実行
引数有りコンストラクタ実行
太郎: math = 79 english = 88 平均 = 83.5
花子: math = 12 english = 34 平均 = 23.0

※ 太郎の方は乱数を使っているので、実行するたびに結果が変わります

演習 1-12 で作った「OBSC_1_12」をフォルダごと丸ごとコピーし、フォルダ名を「OBSC_1_14」に変更します。
Score クラスを開き、上の仕様に従って引数有りコンストラクタを追加します。
Main クラスを開き、sc_hanako インスタンスを作成する際に、以下のように引数有りコンストラクタの方を呼び出すようにします

Score sc_hanako = new Score(); 

→  

Score sc_hanako = new Score(12,34);

※ sc_taro は引数なしコンストラクタのまま

コンパイルして実行します。
チーム内で答え合わせをして下さい。
指定場所に「Main と Score クラスのソースコード」と「実行結果」を記入して下さい。