| 回 | 主題 | コマシラバス項目 | 内容 | 教材・教具 |
|
1
|
Javaの基本文法
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第1回では、コマ主題「Javaの基本文法」を扱う。環境プログラミングⅠで扱った条件分岐、繰り返し、配列を短いプログラムで再確認する。if文とswitch文の分岐条件、for文などの評価順序、配列の添字とlengthの関係を追い、後期のクラス学習で必要となる基本的なコード読解力を整える。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、後続のクラスとオブジェクトのコードを読む際に必要な制御構造と配列操作を再確認することから重要である。
|
|
|
コマ主題細目
|
① 条件分岐 ② 繰り返し ③ 配列
|
|
細目レベル
|
① if文とswitch文は、条件に応じて実行する処理を選ぶための構文である。if文ではboolean型になる条件式を調べ、結果がtrueなら対応する処理を実行する。else ifやelseを組み合わせると、点数による評価のように複数の選択肢を表せる。switch文では、一つの式の値をcaseに並べた値と照合して処理を選ぶ。授業では、scoreという変数へ点数を代入し、成績を表示する小さなプログラムを作成して実行する。59、60、79、80など区切りとなる値を入力し、比較演算子を変えたときに選ばれる処理を確認する。switch文ではbreakを書いた場合と省いた場合を実行し、表示される内容の違いを確かめる。条件を書く順序や演算子を一つずつ確認し、目的とする場合分けをJavaの文として表せるようにする。
|
② for文、while文、do-while文は、同じ処理を条件に従って繰り返すために使用する。for文は開始時の設定、続ける条件、値の更新をまとめて書けるため、回数が決まった処理に適している。while文は処理の前に条件を確認し、do-while文は処理の後に確認するので、最初の一回が実行されるかどうかに違いがある。授業では、countという変数を1から5まで変化させて表示するプログラムを三種類の繰り返しで作成する。実行結果を見ながら、条件を確認する時点とcountを増やす時点を比べる。さらに、breakで繰り返しを終了する例と、continueでその回の残りを飛ばす例を作成する。条件式や更新式を変更して実行回数がどう変わるかを確かめ、目的に合う繰り返しを選択できるようにする。
|
③ 配列は、同じ型の複数の値を一つのまとまりとして管理する仕組みである。各要素は0から始まる添字で区別し、配列名.lengthで要素数を取得できる。宣言と生成、初期値をまとめて書く方法を確認し、存在する添字の範囲が0以上で要素数未満になることを理解する。通常のfor文と拡張for文による読み取り方も扱う。授業では、scoresというint配列へ複数の点数を格納し、全要素の表示、合計、平均を求めるプログラムを作成して実行する。通常のfor文ではindexという変数を使って要素を順に指定し、拡張for文ではscoreという変数へ要素を一つずつ取り出す。最後の添字を要素数と同じ値にした場合は実行中にエラーになることを確かめ、添字とlengthの関係を修正する。二つの繰り返し方を処理の目的に応じて選べるようにする。
|
|
キーワード
|
① 条件分岐 ② 繰り返し ③ 配列 ④ 制御フロー ⑤ 添字
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 5件の点数をint型の配列に入れ、for文を使って合計点と平均点を求めるプログラムを作成する。次に、if文を追加し、60点以上の点数だけを表示する。繰り返し回数と配列の添字を確認し、どの文で合計点が変わるかを説明する。最後に配列の件数を変えても正しく動くかを実行して確かめる。
◆次回授業の予習 次回は、一つのmainメソッドにすべての処理を書く方法から、複数のクラスで役割を分ける考え方へ進む。学生一人について、学籍番号、氏名、点数という情報と、点数を表示する処理を用意する。同じ内容を3人分書いた場合に、変数名や処理がどのように増えるかを確認する。関連する情報と処理をまとめる利点を一つ考えておく。
|
|
2
|
クラスの基本的な構成要素
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第2回では、コマ主題「クラスの基本的な構成要素」を扱う。クラス名、フィールド、メソッドという構成要素を識別し、一つの対象をJavaの型として表すための基本形を読み取る。手続きを上から並べるだけの書き方と比較しながら、関連するデータと処理をクラスとしてまとめる理由を考える。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、データと処理を一つの型にまとめるオブジェクト指向の出発点となることから重要である。
|
|
|
コマ主題細目
|
① オブジェクト指向の必要性 ② クラスの構成要素
|
|
細目レベル
|
① これまでの学習では、mainメソッドを持つ一つのクラスの中に、変数、条件分岐、繰り返しなどをまとめてプログラムを書いてきた。処理が増えると、どの変数が何の情報を表すのか、どの処理がどの情報に関係するのかが分かりにくくなる。また、一部分を変更したときに別の処理へ影響する箇所も見つけにくい。オブジェクト指向では、プログラムが扱う対象や役割に注目し、複数のクラスへ仕事を分担させる。たとえば学生の情報を扱うクラスと、結果を表示するクラスに役割を分けると、それぞれが担当する内容を把握しやすい。同じ役割を持つ処理を一か所にまとめられるため、機能の追加や修正もしやすくなる。この細目では実際の動作を細かく追わず、一つのクラスへすべてを書く方法から、役割ごとにクラスを分けて協力させる設計へ進む意義を理解する。
|
② クラスは、扱う対象の情報と処理をまとめて記述するための枠組みである。クラスが保持する情報はフィールド、クラスが行う処理はメソッドとして表す。たとえばStudentクラスなら、学生名を表すnameや点数を表すscoreをフィールドとし、情報を表示するshowInfoや合否を判定するcheckResultをメソッドとして考えられる。授業では、class Studentの波括弧の中にフィールド宣言とメソッド宣言を置いた基本的な構造を読む。型と識別子の組でフィールドを宣言し、戻り値型、メソッド名、丸括弧、処理本体でメソッドを表すことを確認する。ここでは細かな書き方や実践的な設計へ進まず、フィールドは値を保持し、メソッドは処理をまとめるという二つの役割に限定する。クラス名、フィールド名、メソッド名を見分け、ソースコードのどの部分が何を表しているかを説明できるようにする。
|
|
キーワード
|
① オブジェクト指向 ② クラス ③ フィールド ④ メソッド ⑤ 識別子
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 学生を表すStudentクラスを題材にし、クラス名、フィールド、メソッド、波括弧の範囲をソースコードから探す。学籍番号と氏名はフィールド、情報表示はメソッドとして書き分け、それぞれが情報と処理のどちらを表すかを説明する。一つのmainメソッドだけに書いた場合と比べ、Studentに役割を分けると何が読みやすくなるかをまとめる。
◆次回授業の予習 次回は、自分で作ったクラスを型として使い、内容の異なるインスタンスを複数作成する。商品を表すProductに、商品名と価格のどちらを情報として持たせるかを書き出す。価格の表示など、Productが行う処理も一つ決める。同じProductクラスから商品を2個作るとき、商品名と価格が同じである必要があるかを考えておく。
|
|
3
|
クラスの構成
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第3回では、コマ主題「クラスの構成」を扱う。身近な対象を題材に、どの情報を持たせ、どの操作を用意するかを整理した上でクラスを設計する。設計した型から複数のインスタンスを生成し、それぞれが別の状態を持つことを確かめる。既存クラスは、自作クラスと同じように型として利用する。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、対象の責務をクラスとして設計し、型と個々の実体を分けて扱う基礎となることから重要である。
|
|
|
コマ主題細目
|
① クラスの設計とインスタンス生成 ② Java言語の既存クラス
|
|
細目レベル
|
① クラスを作るときは、まず何を表すクラスなのかを決め、その対象が持つ情報をフィールド、対象に行わせる処理をメソッドとして整理する。クラス名にはStudentやProductのように対象を表す名前を付け、フィールド名とメソッド名にも役割が読み取れる識別子を選ぶ。クラスは共通する構造を示し、インスタンスはその構造を基に作られる個別の対象である。授業では、商品名と価格を持つProductクラスを作成し、newを使ってproduct1とproduct2という二つのインスタンスを生成する。product1にはノート、product2にはペンの情報を設定し、それぞれのフィールドを表示して別々の値を持てることを確認する。クラス名、インスタンスを代入する変数名、フィールド名を区別し、一つのクラスから複数の対象を作れることをプログラムの作成と実行によって理解する。
|
② Javaには、自分で作成しなくても利用できるクラスがあらかじめ数多く用意されている。これらを既存クラス(Java標準APIに含まれるクラス)といい、文字列を扱うStringなどが身近な例である。自作したStudentクラスと同じように、既存クラスにも扱う値の種類と利用できる処理が定められている。必要な機能を一から作らず、目的に合うクラスを利用することができる。授業では、文字列を保存するString型の変数studentNameを宣言し、学生名を代入する。続いて、文字数を調べるlength()や文字列の一部分を取り出すsubstring()を使った短いプログラムを作成して、実行結果を確認する。StringはJavaにあらかじめ用意されているクラス名、studentNameは自分で付けた変数名、lengthとsubstringはStringクラスが提供するメソッド名であることを区別する。自作したクラスと既存クラスのどちらも、型として変数を宣言し、用意されている処理を利用できるという共通点を理解する。
|
|
キーワード
|
① クラス設計 ② インスタンス ③ new演算子 ④ 参照変数 ⑤ 標準API
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 商品名と価格を持つProductクラスを作成し、new Product()を使ってproduct1とproduct2を生成する。二つに異なる商品名と価格を設定し、それぞれの値を表示する。一方の価格だけを変更し、もう一方の値は変わらないことを実行して確認する。さらにString型の値でlength()を呼び出し、自作クラスとJavaに用意されたクラスは、どちらも型として利用できることを確かめる。
◆次回授業の予習 次回は、クラスが持つ情報をフィールドとして宣言し、生成したインスタンスから値を読み書きする。StudentにString型のnameとint型のscoreを持たせると仮定し、型とフィールド名を書く。student1.nameとstudent1.scoreのように、インスタンス名の後ろにドットを付けて利用する形も予想する。2人の学生が別々の氏名と点数を持てる理由を文章にする。
|
|
4
|
フィールドの定義とアクセス
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第4回では、コマ主題「フィールドの定義とアクセス」を扱う。フィールドの宣言に焦点を絞り、型、名前、初期値がオブジェクトの状態にどう対応するかを学ぶ。一つのクラスから二つのインスタンスを生成し、一方のフィールドだけを変更するコードの比較によって、値がインスタンスごとに保持されることを確認する。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、オブジェクトごとの状態を正しく保持し、後のカプセル化を理解する前提となることから重要である。
|
|
|
コマ主題細目
|
① クラスとフィールドの定義 ② インスタンスの生成とフィールドの利用
|
|
細目レベル
|
① フィールドはクラスの波括弧の直下に宣言し、そのクラスから作られた各インスタンスが持つ情報を表す。Studentクラスなら、String型のnameやint型のscoreをフィールドとして宣言できる。型は保存できる値の種類を決め、フィールド名は値の役割を示す。メソッドの中で一時的に使うローカル変数とは、宣言する場所と利用目的が異なる。授業では、Studentクラスへname、score、gradeというフィールドを一つずつ追加し、型と識別子を確認する。生成直後の各フィールドを表示して、String型はnull、int型は0、boolean型はfalseが代入されていることを確かめる。その後、具体的な値を代入して再び表示する。学生ごとに継続して持たせたい情報をフィールドとして選び、計算途中だけ使う値との違いを、作成したプログラムの中で説明できるようにする。
|
② クラスからインスタンスを生成した後は、インスタンスを代入した変数名、ドット、フィールド名をつなげて値を設定したり読み取ったりする。student1.nameのような記述では、student1が表す学生のnameフィールドを指定している。同じStudentクラスから作ったインスタンスでも、それぞれが別のフィールド値を持てる。授業では、student1とstudent2を生成し、一方にはSatoと80、もう一方にはSuzukiと65を設定する。二つの変数名を使って氏名と点数を表示し、どの記述がどのインスタンスを対象としているかを実行結果から確認する。次にstudent1.scoreだけを変更し、student2.scoreが変化しないことを確かめる。クラス名、インスタンスを表す変数名、フィールド名を正しく使い分け、複数の対象を一つのプログラムで管理する基本を身に付ける。
|
|
キーワード
|
① フィールド ② インスタンス ③ 参照 ④ ドット演算子 ⑤ 初期値
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 String型のnameとint型のscoreを持つStudentクラスを作る。student1とstudent2を生成し、二人に異なる氏名と点数を代入して表示する。代入と読み取りの各文について、ドットの左側がインスタンス名、右側がフィールド名であることを確認する。存在しないフィールド名を使った例もコンパイルし、どの記述を直す必要があるかを確かめる。
◆次回授業の予習 次回は、クラスが行う処理をメソッドとしてまとめる。Studentの点数を表示する処理と、合格かどうかを確認する処理に、それぞれ分かりやすい名前を付ける。値を返さずに表示する処理と、trueまたはfalseを返す処理で、戻り値型がどのように異なるかを考える。仮引数がないメソッドの基本形も一つ書いておく。
|
|
5
|
メソッドの定義と引数・戻り値
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第5回では、コマ主題「メソッドの定義と引数・戻り値」を扱う。クラスのフィールドとして保持される状態に対して、表示や計算などの処理を行うメソッドを宣言する。戻り値型、メソッド名、仮引数リスト、処理本体を分けて読み、各部分の役割を確認する。メソッド名と仮引数の型・個数・順序で定まるシグネチャも学ぶ。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、フィールドの値を利用する処理を明確な名前でまとめ、後のメソッド利用へつなげる点で重要である。
|
|
|
コマ主題細目
|
① クラスとメソッドの定義 ② メソッドのシグネチャ
|
|
細目レベル
|
① メソッドは、クラスが行う処理を名前付きでまとめたものである。宣言は、処理結果として返す値の型、メソッド名、丸括弧内の仮引数、波括弧内の処理本体から構成される。値を返さない場合は戻り値型にvoidを記述する。処理内容が想像できるdisplayScoreやcalculateTotalのような識別子を選ぶことも重要である。授業では、Studentクラスに点数を表示するdisplayScoreメソッドを追加し、宣言を構成する各部分を確認する。続いて、mainメソッドへ直接書いていた表示処理をStudentクラスのメソッドへ移し、同じ処理を繰り返し書かずに済むことを確かめる。最初は引数や戻り値を持たない短いメソッドから始め、波括弧の範囲、メソッド名、処理本体を正しく記述する。処理を役割に応じて分けることで、プログラムを読みやすくできることを理解する。
|
② メソッドを見分けるための基本となる情報をシグネチャという。Javaでは、メソッド名と仮引数の型・個数・順序によって、どのメソッドであるかを区別する。仮引数の名前や戻り値型はシグネチャには含まれない。まずはメソッド宣言の中から、名前と丸括弧内の型を正確に読み取ることが大切である。授業では、printScore()、printScore(int score)、printScore(String name)という宣言を並べ、それぞれのメソッド名と引数部分を書き出す。引数がない場合、一つある場合、型が異なる場合を比較し、どの宣言が別のシグネチャとして区別されるかを確認する。また、仮引数名だけを変更した二つの宣言や、戻り値型だけを変更した二つの宣言を作成してコンパイルし、同じものとして扱われることを確かめる。後の呼び出し先の判断に必要な基礎を身に付ける。
|
|
キーワード
|
① メソッド ② 仮引数 ③ 戻り値 ④ シグネチャ ⑤ スコープ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Studentクラスに、点数を表示するdisplayScoreメソッドと、合格かどうかを返すisPassedメソッドを定義する。宣言の中から戻り値型、メソッド名、仮引数リスト、処理本体を抜き出し、それぞれの役割を記述する。引数を持たない形と一つの引数を持つ形を使い、戻り値型だけを変更した同名メソッドが成立しないこともコンパイルして確認する。
◆次回授業の予習 次回は、定義したメソッドをインスタンスから呼び出す方法とvoidを扱う。Student student1を生成し、student1、ドット、displayScore、丸括弧をどの順序で書けばよいかを予想する。また、画面表示だけを行うメソッドには呼び出し元へ返す値が必要かを考え、値を返す処理との違いを二つ書く。授業では予想した呼び出し方を実際のコードと比べる。
|
|
6
|
メソッドの利用
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第6回では、コマ主題「メソッドの利用」を扱う。宣言済みのメソッドを、オブジェクトの参照、ドット、メソッド名の順に記述して呼び出す。呼び出し元からメソッド本体へ制御が移り、処理後に戻る流れを追跡する。voidは値を返さない宣言であり、出力を行うことと戻り値を返すことは分けて考える。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、オブジェクトに操作を依頼する基本的なメッセージの流れを理解することから重要である。
|
|
|
コマ主題細目
|
① メソッドの呼び出し方 ② voidキーワード
|
|
細目レベル
|
① インスタンスが持つメソッドは、インスタンスを代入した変数名、ドット、メソッド名、丸括弧をつなげて呼び出す。student1.displayScore()と書けば、student1を対象としてdisplayScoreの処理が実行される。メソッドの定義は処理内容を用意する部分であり、呼び出しはその処理を実際に開始させる部分である。授業では、nameフィールドとgreetメソッドを持つStudentクラスを作成し、student1とstudent2から同じgreetメソッドを順に呼び出す。各インスタンスへ異なる氏名を設定し、呼び出しに使う変数名によって表示内容が変わることを確認する。メソッド名を誤った場合、丸括弧を付け忘れた場合、まだ作成していない変数名を使った場合もコンパイルして、記述を修正する。定義と呼び出しを対応させ、処理が終わるとmainメソッドの次の文へ戻る流れを出力から確認する。
|
② 処理結果の値を呼び出し元へ返さないメソッドは、戻り値型としてvoidを記述する。voidは値の種類ではなく、返す値がないことを示す。画面へメッセージを表示する処理や、フィールドの値を変更する処理は、呼び出し元へ値を返さなくても目的を果たせるため、voidメソッドとして定義できる。授業では、メッセージを表示するshowMessageメソッドと、scoreフィールドへ値を設定するsetScoreメソッドをvoidで作成して実行する。呼び出す前後にprintlnを置き、メソッド内の処理が終わった後にmainメソッドの続きが実行されることを確認する。また、voidメソッドの呼び出し結果をint型やString型の変数へ代入しようとするとコンパイルできないことを確かめる。値を返す処理との違いを、実際の呼び出し方から理解する。
|
|
キーワード
|
① メソッド呼び出し ② インスタンスメソッド ③ void ④ 処理本体 ⑤ 出力
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Greeterクラスに、あいさつを表示するgreet()を定義する。mainメソッドでgreeter1を生成し、greeter1.greet()を二回呼び出す。呼び出しの前後に別の文字列を表示し、呼び出し元からメソッドの処理へ進み、終了後に呼び出し元の続きへ戻る順序を確認する。voidは呼び出し元へ値を返さない場合に使うことも、表示結果と宣言を対応させて説明する。
◆次回授業の予習 次回は、メソッドに一つの値を渡す方法を学ぶ。greet()を、相手の氏名を受け取ってあいさつを表示する処理に変える。String nameをメソッドの丸括弧内に書く場所と、greet("Sato")で実際の値を渡す場所を書き出す。仮引数と実引数のどちらがメソッドの宣言側にあるかを確認し、引数なしの呼び出しから変わる部分を予想する。
|
|
7
|
引数を持つメソッドの定義
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第7回では、コマ主題「引数を持つメソッドの定義」を扱う。呼び出し側から一つの値を受け取るメソッドを作成する。実引数の値が仮引数へ渡る過程と、仮引数がメソッド内でのみ使えることを、値を変えた複数の呼び出しで確認する。引数の型が宣言と一致しない例も比較し、呼び出しが成立する条件を整理する。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、呼び出し側からメソッドへ値を渡し、処理を再利用可能にするための基礎となることから重要である。
|
|
|
コマ主題細目
|
① 単一の引数をもつメソッド
|
|
細目レベル
|
① 引数を持つメソッドでは、定義側の丸括弧内に型と仮引数名を記述し、呼び出し側の丸括弧内に実際に渡す値を書く。定義側で受け取る変数を仮引数、呼び出し側から渡す値を実引数という。printScore(int score)ならscoreが仮引数であり、printScore(80)なら80が実引数に当たる。授業では、int型の点数を一つ受け取って評価を表示するprintGradeメソッドを作成する。mainメソッドから59、60、79、80を順に渡し、仮引数scoreを使った条件分岐の結果を確認する。続いて、String型のnameを一つ受け取って挨拶するgreetメソッドも作成する。引数を省略した呼び出し、二つ渡した呼び出し、必要な型と異なる値を渡した呼び出しをコンパイルし、宣言と呼び出しで型と個数を一致させる必要を理解する。
|
|
キーワード
|
① 引数 ② 仮引数 ③ 実引数 ④ 型 ⑤ スコープ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 氏名を一つ受け取るgreet(String name)を作成し、SatoとSuzukiを順に渡して、表示される文字列が変わることを確かめる。宣言に書くString nameが仮引数、呼び出しに書く"Sato"が実引数であることを、実際のコードから確認する。次にint型の点数を一つ受け取って表示するshowScore(int score)を追加し、仮引数の型と渡す値の型を一致させる。
◆次回授業の予習 次回は、メソッドの処理結果をreturnで呼び出し元へ返す。まず、引数を持たずに80を返すgetScore()を考える。戻り値型は何型にするか、returnの後ろに何を書くか、呼び出し結果を保存する変数は何型にするかを整理する。その後で、点数を一つ受け取って合否文字列を返すメソッドに必要な引数と戻り値型を予想する。
|
|
8
|
戻り値を持つメソッドの定義
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第8回では、コマ主題「戻り値を持つメソッドの定義」を扱う。return文で値を呼び出し元へ返すメソッドを作り、返された値を代入や別の計算に利用する。宣言した戻り値型とreturn式の型を対応させ、すべての処理経路が値を返す必要がある場合を確認する。引数と戻り値の双方を持つ計算メソッドを通し、入力と出力の役割を分ける。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、メソッドの処理結果を呼び出し元で再利用し、処理を組み合わせるために必要であることから重要である。
|
|
|
コマ主題細目
|
① returnキーワード ② 戻り値と引数を持つメソッド
|
|
細目レベル
|
① returnは、メソッドで求めた値を呼び出し元へ返すためのキーワードである。値を返すメソッドでは、宣言した戻り値型に合う値をreturnの後ろへ記述する。returnが実行されると、指定した値が呼び出し元へ渡され、そのメソッドの処理はそこで終了する。この細目では引数を持たないメソッドだけを扱い、戻り値の基本的な動きを確認する。授業では、引数を持たず整数の80を返すgetScoreメソッドと、文字列のPassedを返すgetResultメソッドを作成する。それぞれの呼び出し結果をscoreとresultという変数へ代入し、printlnで表示する。戻り値型がintなのに文字列を返す例や、値を返さずに処理が終わる例もコンパイルし、宣言とreturnの値を一致させる必要を確認する。引数から計算する処理には進まず、呼び出したメソッドから一つの値を受け取れることを理解する。
|
② 引数と戻り値の両方を持つメソッドでは、呼び出し側から一つの値を受け取り、その値を使った処理結果をreturnで返す。引数はメソッドへ渡す入力、戻り値はメソッドから受け取る出力として考えられる。この細目では単一の引数だけを使用し、複数の値を受け取る書き方は次回に分ける。授業では、一つの点数scoreを受け取り、合格か不合格かをString型で返すgetResult(int score)を作成する。戻り値をresultという変数へ保存する場合と、printlnの中で直接呼び出す場合を実行して比べる。続いて、税込価格を返すcalculateTaxIncluded(int price)を作り、受け取ったpriceから結果を求める。仮引数の型、returnで返す値の型、呼び出し結果を受け取る変数の型を一つずつ確認し、入力から出力までの関係を理解する。
|
|
キーワード
|
① 戻り値 ② return ③ 戻り値型 ④ 到達不能 ⑤ 呼び出し式
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 引数なしで整数を返すgetScore()と、点数を一つ受け取って評価文字列を返すgetResult(int score)を作り直す。getScore()では戻り値が呼び出し元の変数へ入ることを確認し、getResultでは59、60、79、80を渡して結果を表示する。二つのメソッドを比較し、引数なしの場合と単一の引数を持つ場合で、宣言と呼び出しのどこが変わるかを説明する。
◆次回授業の予習 第9回では、一つのメソッドへ複数の値を渡す方法を学ぶ。商品名、単価、個数を使って合計金額を求める場面を考え、String name、int price、int quantityを丸括弧内に並べた宣言を作る。三つの実引数が左からどの仮引数へ渡るかを表にし、個数不足、型の不一致、順序の取り違えのうち、コンパイルで見つかるものを予想する。
|
|
9
|
複数の引数を持つメソッドの定義
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第9回では、コマ主題「複数の引数を持つメソッドの定義」を扱う。複数の値を一度の呼び出しで渡すため、仮引数を宣言順に並べる方法を扱う。確認する点は、実引数の個数、型、順序が仮引数と対応しているかである。同じ型の引数を並べた例で値の順序を入れ替え、コンパイルでは発見できない意味上の誤りも検討する。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、複数の入力を正しい順序と型で受け渡し、メソッドの利用範囲を広げることから重要である。
|
|
|
コマ主題細目
|
① 複数の引数の設定
|
|
細目レベル
|
① 複数の引数を受け取るメソッドでは、定義側の丸括弧内に型と仮引数名の組をカンマで区切って記述する。呼び出し側でも同じ個数の実引数を同じ順序で指定する。各実引数は左から順番に対応する仮引数へ渡されるため、同じ型の値が並ぶ場合でも、それぞれの役割が分かる名前を選ぶ必要がある。授業では、商品名name、単価price、個数quantityを受け取って合計金額を表示するメソッドを作成する。呼び出し時に三つの値を渡し、各仮引数がどの値を受け取るかを出力で確認する。引数を一つ省いた場合、余分に渡した場合、型の異なる値を渡した場合はコンパイル結果を確かめて修正する。さらに、二つのint型を使う減算メソッドで実引数の順序を入れ替え、文法上は正しくても結果が変わることを確認し、識別子と順序の重要性を理解する。
|
|
キーワード
|
① 複数引数 ② 引数順序 ③ 型適合 ④ 論理エラー ⑤ シグネチャ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 商品名、単価、個数を受け取るshowOrder(String name, int price, int quantity)を作成する。引数を正しい順序で渡し、商品情報と合計金額を表示する。次に、引数が一つ足りない呼び出しと、商品名と単価の順序を反対にした呼び出しをコンパイルする。宣言側の仮引数と呼び出し側の実引数は、個数、型、順序をそれぞれ対応させる必要があることを確認する。
◆次回授業の予習 次回は、似た目的のメソッドに同じ名前を付けるオーバーロードを学ぶ。整数を表示する処理と文字列を表示する処理に、displayNumberとdisplayTextという別名を付けた場合を考える。利用者がどちらの名前を使うか覚える必要がある点に注目する。両方をdisplayという同じ名前にした場合、Javaが整数と文字列のどちらを受け取る処理か判断できる理由を考える。
|
|
10
|
メソッドオーバーロードの基本
|
科目の中での位置付け
|
環境プログラミングⅡは、前期の環境プログラミングⅠで学修した変数、演算子、条件分岐、繰り返し、配列およびクラスの基礎を土台として、オブジェクト指向によるプログラム設計を段階的に深める科目である。全90回を通して、クラスの設計、フィールドとメソッド、コンストラクタ、継承、ポリモーフィズム、抽象クラス、インターフェース、コレクション、例外処理、ファイル処理へ進み、最終的には複数の機能を組み合わせたプログラムを自力で読解・作成できることを目標とする。また、構文の暗記だけに頼らず、コンパイル時と実行時の違いや参照とオブジェクトの関係を捉え、Java BronzeおよびJava Silverの知識とも結び付けて、処理結果を根拠とともに説明する力を養う。
第10回では、コマ主題「メソッドオーバーロードの基本」を扱う。オーバーロードとは、目的が共通するメソッドに同じ名前を付け、受け取る値の違いに応じて使い分けられる仕組みである。この仕組みが必要な理由と使用する場面を先に理解し、その後で、int型とString型のように仮引数の型が明確に異なるメソッドを宣言する。数値型どうしの変換や候補の優先順位には踏み込まず、異なる型の引数によって同名メソッドを区別できることを確認する。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、関連する操作を利用者が覚えやすい名前にまとめるために重要である。
|
|
|
コマ主題細目
|
① オーバーロードとは ② 引数の型によるオーバーロード
|
|
細目レベル
|
① 一つのクラスには、同じ名前のメソッドを複数用意できる場合がある。この仕組みをオーバーロードという。たとえば表示する値が整数でも文字列でも、利用者がdisplayという同じ名前で処理を依頼できれば、目的の近い操作を覚えやすい。処理の役割が同じで、受け取る値の種類や数だけが異なる場合に利用する。オーバーロードを利用すると、値の種類ごとにdisplayNumber、displayTextのような別名を考えなくても、関連する処理を一つの名前にまとめられる。ただし、名前が同じなら何でも宣言できるわけではなく、コンパイラが呼び出し先を区別できる必要がある。この細目では定義の細かな組合せや実行結果の判定へ進まず、同名のメソッドを複数用意する目的、利用する場面、呼び出す側にとっての分かりやすさを中心に理解する。
|
② 同じ名前のメソッドでも、仮引数の型が異なれば別のメソッドとして定義できる。たとえばdisplay(int value)とdisplay(String text)は、受け取る値の型がintとStringで異なるため、一つのクラスに両方を宣言できる。呼び出すときは、渡した値の型に対応するメソッドが選ばれる。授業では、整数を表示するdisplay(int value)と文字列を表示するdisplay(String text)を作成する。display(100)とdisplay("Java")を順に実行し、整数を渡したときはint型の仮引数を持つメソッド、文字列を渡したときはString型の仮引数を持つメソッドが動くことを確認する。ここでは数値型どうしの変換や候補の優先順位を中心にせず、型の異なる引数によって同名メソッドを区別できるという基本を確実に身に付ける。
|
|
キーワード
|
① オーバーロード ② シグネチャ ③ 型変換 ④ 候補選択 ⑤ 曖昧な呼び出し
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 整数を表示するdisplay(int value)と文字列を表示するdisplay(String text)を一つのクラスに定義し、二つの呼び出しを実行する。メソッド名が同じでも、仮引数の型が異なるため区別できることを宣言から確認する。戻り値型だけを変えたdisplayを追加した場合はコンパイル結果を記録し、オーバーロードを利用する目的と成立条件を分けて説明する。
◆次回授業の予習 次回は、引数の個数と順序によるオーバーロードを扱う。print()、print(int value)、print(int value, String label)という三つの宣言を考え、引数の個数がどのように違うかを整理する。さらに、show(int value, String label)とshow(String label, int value)を並べ、型の順序が異なることを確認する。実行はせず、区別できる理由をシグネチャから予想しておく。
|
|
11
|
メソッドのオーバーロードとシグネチャ
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第11回では、コマ主題「メソッドのオーバーロードとシグネチャ」を扱う。オーバーロードの判定条件を、引数の個数と並び順の観点へ広げる。宣言一覧と呼び出し式を照合し、シグネチャが異なる組合せと、仮引数名や戻り値型だけを変えた成立しない組合せを分類する。まずメソッドに限定し、呼び出し候補が一つに定まるかを説明する。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、シグネチャに基づく呼び出し候補の選択を正確に判断する力を定着させることから重要である。
|
|
|
コマ主題細目
|
① 引数の個数によるオーバーロード ② 引数の順序によるオーバーロード
|
|
細目レベル
|
① オーバーロードでは、引数の個数を変えることで同名メソッドを区別できる。引数を持たないprint()、一つの値を受け取るprint(int)、二つの値を受け取るprint(int, int)を並べると、呼び出し式の実引数の個数から候補を絞り込める。戻り値型や仮引数名は呼び分けの基準にならないため、宣言のどの部分がシグネチャを構成するかを再確認する。授業では、メソッドの宣言一覧と複数の呼び出し式を対応させ、引数の個数が一致しない候補を先に除外する。その後、残った候補について型が一致するかを調べる順序を身に付ける。引数が不足する例や多すぎる例では、メソッド本体が実行される前にコンパイルエラーとなることも確認する。似た処理を一つの名前にまとめながら、必要な入力の数を呼び出し側へ明確に示せる点が、引数の個数によるオーバーロードの利点である。
|
② 引数の順序によってメソッドを区別するには、並んでいる型の組合せが異なる必要がある。method(int, String)とmethod(String, int)は別のシグネチャになるが、method(int x, int y)とmethod(int y, int x)は仮引数名を入れ替えただけなので同時に宣言できない。呼び出しでは実引数が左から順番に仮引数へ対応することも確認する。授業では、商品番号と商品名のように役割の異なる値を受け取る例を読み、宣言時の型の並びと呼び出し時の値の並びを一対一で結び付ける。同じ型の引数が続く場合はコンパイルできても意味上の取り違えが起こり得るため、分かりやすいメソッド名や引数の順序を選ぶ必要がある。シグネチャの規則だけでなく、利用者が誤って呼び出しにくい宣言になっているかという設計上の観点も身に付ける。
|
|
キーワード
|
① オーバーロード ② シグネチャ ③ 引数リスト ④ 仮引数 ⑤ メソッド解決
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Printerクラスに、引数なし、一つのint型引数、二つのint型引数を持つprintメソッドを定義する。続いてshow(int number, String label)とshow(String label, int number)を作り、異なる値で呼び出して結果を確認する。仮引数名だけを入れ替えた宣言は追加できないことも確かめ、個数と型の順序がシグネチャを作ることをまとめる。
◆次回授業の予習 第12回ではthisを使って、現在処理しているインスタンスを示す。StudentクラスにnameフィールドとsetName(String name)を用意すると仮定し、フィールドと仮引数が同じnameになった場合、name = nameの左右が何を指すかを予想する。student1とstudent2がそれぞれsetNameを呼び出す場面も考え、どの学生のフィールドを変更したいのかを文章で整理する。
|
|
12
|
thisキーワード
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第12回では、コマ主題「thisキーワード」を扱う。インスタンスメソッドの中で、現在処理中のオブジェクトをthisがどのように指すかを確認する。フィールドと仮引数が同名のコードを用い、thisを付けた場合と省略した場合の参照先を追う。呼び出し先のインスタンスが異なればthisの参照先も変わることを、二つのオブジェクトで確かめる。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、各インスタンスのフィールドとローカル変数の参照先を明確にするために重要である。
|
|
|
コマ主題細目
|
① thisキーワードとは ② thisキーワードの省略と変数名の衝突
|
|
細目レベル
|
① thisは、現在そのインスタンスメソッドを実行しているオブジェクト自身を表す参照である。同じクラスから複数のインスタンスを生成しても、メソッドを呼び出した対象ごとにthisが指す先は異なる。this.nameのように記述すると、現在のオブジェクトが持つnameフィールドであることを明示できる。授業では、二つのStudentインスタンスへ異なる名前を設定し、それぞれから同じ表示メソッドを呼び出す。メソッドのコードは一つでも、thisが呼び出し対象を指すことで別々の状態を読み取れることを確認する。また、インスタンスメソッドから同じインスタンスの別メソッドを呼ぶ場合にもthisを利用できる。thisを特別な名前の変数として暗記するのではなく、どのオブジェクトのフィールドやメソッドを扱っているかを明確にする参照として理解する。
|
② インスタンスメソッドの中では、フィールドや同じインスタンスのメソッドを参照する際のthisを通常は省略できる。しかし、仮引数やローカル変数がフィールドと同じ名前を持つ場合、名前だけを書くとより内側の変数が優先される。このときthis.nameと書けばフィールド、nameと書けば仮引数というように参照先を区別できる。授業ではsetName(String name)を例に、name = nameでは両辺が仮引数を指し、フィールドが更新されないことを確認する。左辺をthis.nameへ変更すると、受け取った値を現在のオブジェクトのフィールドへ保存できる。thisを付けても付けなくても同じ結果になる箇所と、名前の衝突によって省略できない箇所をコード上で見分ける。代入の左右が何を指すかを言葉で説明し、意図しない自己代入を防げるようにする。
|
|
キーワード
|
① this ② インスタンス参照 ③ フィールド ④ ローカル変数 ⑤ 名前の衝突
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 StudentクラスにnameフィールドとsetName(String name)を作り、this.name = nameを使ってstudent1とstudent2へ別々の氏名を設定する。thisを省いたname = nameでも実行し、フィールドが更新されないことを出力で確認する。左右のnameがフィールドと仮引数のどちらを表すかを一行ずつ説明し、thisが必要な場合と省略できる場合を区別する。
◆次回授業の予習 次回は、クラス、フィールド、メソッド、インスタンス生成、オーバーロード、thisを範囲とするJava Bronze問題演習を行う。各項目から間違えやすい規則を一つ選び、合計六項目の確認表を作る。授業で扱ったコードから、コンパイルできるかを問う例と実行結果を問う例を一つずつ選び、答えだけでなく判断に使う宣言へ印を付けておく。
|
|
13
|
Java Bronze問題演習-クラスの基本-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第13回では、コマ主題「Java Bronze問題演習-クラスの基本-」を扱う。ここまでのクラス、フィールド、メソッド、引数、戻り値、オーバーロード、thisをJava Bronze形式の短いコード問題で確認する。出題範囲は第12回までに扱った内容に限定する。宣言の成否、呼び出し先、処理後のフィールド値を順に追い、誤答の原因を既習の規則に限って説明する。環境プログラミングⅡ全体では、この回は「クラス作成の基本」のトピックに位置づき、クラスの基本に関する理解を問題形式で統合し、後続単元への理解不足を残さないことから重要である。
|
|
|
コマ主題細目
|
① Java Bronze問題演習-クラスの基本-
|
|
細目レベル
|
① 授業の前半では、クラス、フィールド、メソッド、インスタンス生成、this、オーバーロードについて要点を復習する。宣言のどこがクラス名、型、変数名、メソッド名、引数リストに当たるかを確認し、コンパイルできる宣言とできない宣言を短い例で整理する。とくに、戻り値型だけではオーバーロードできないことや、同名の変数がある場合のthisの役割を再確認する。後半では、Java Bronze資格で想定される形式の模擬問題を解き、各選択肢を解説する。問題文とコードを読んだら、まずコンパイルの可否を判断し、実行できる場合だけ出力を追うという順序を徹底する。解説では正解の理由だけでなく、誤った選択肢がどの宣言や規則に反しているかを具体的に示す。誤答はクラス構成、インスタンス生成、フィールド利用、メソッド呼び出し、オーバーロードのどこで判断を誤ったかに分類し、既習範囲の弱点を明確にする。
|
|
キーワード
|
① クラス ② フィールド ③ メソッド ④ インスタンス ⑤ 参照
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 授業で間違えたJava Bronze形式の問題を、クラス構造、フィールド、メソッド呼び出し、オーバーロード、thisに分類する。各分類から一問を選び、誤った選択肢が成立しない理由を一文で書く。出力問題はコードを実行して答えを確認し、コンパイルできない問題は該当する宣言を修正してから、どの規則を誤解していたかを記録する。
◆次回授業の予習 第14回では、インスタンスを作るときに初期値を設定する仕組みを学ぶ。これまでのStudentクラスでは、生成後にnameやscoreへ別々に値を代入していた。その手順で代入を一つ忘れると何が困るかを考える。学生名と点数を生成時にまとめて渡せると仮定し、new Student("Sato", 80)という書き方から、どの値を受け取る必要があるかを予想する。
|
|
14
|
コンストラクタの基本
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第14回では、コマ主題「コンストラクタの基本」を扱う。クラス名と同じ名前を使い戻り値型を書かない宣言、生成時にフィールドへ初期値を設定する流れ、宣言が一つもない場合のデフォルトコンストラクタを区別する。生成直後のフィールド値を出力し、初期化の結果を実行結果から確かめる。環境プログラミングⅡ全体では、この回は「コンストラクタ」のトピックに位置づき、オブジェクトを利用可能な初期状態で生成する設計の基礎となることから重要である。
|
|
|
コマ主題細目
|
① コンストラクタの使い方 ② デフォルトコンストラクタ
|
|
細目レベル
|
① コンストラクタは、newによってインスタンスが生成されるときに実行され、そのオブジェクトを利用可能な初期状態へ整える特別な処理である。クラス名と同じ名前で宣言し、戻り値型を書かない点を通常のメソッドと区別する。仮引数を通して受け取った値をフィールドへ設定すれば、生成直後から必要な情報を持つインスタンスを作れる。授業では、名前と点数を受け取るStudentコンストラクタを宣言し、new Student("A", 80)という生成式の値が各フィールドへ渡る順序を確認する。コンストラクタ名の誤り、戻り値型を付けた記述、引数の型や個数が合わない生成式も比較し、どの段階でコンパイルできなくなるかを整理する。生成後に個別の代入を繰り返す方法と比べ、必要な初期値をまとめて要求できることがコンストラクタの重要な役割である。
|
② クラスにコンストラクタを一つも宣言しない場合、コンパイラは引数を持たないデフォルトコンストラクタを自動的に補う。そのためnew ClassName()で生成できるが、引数付きコンストラクタを一つでも明示すると自動生成は行われない。引数なしと引数付きの両方で生成したい場合は、両方を自分で宣言する必要がある。授業では、コンストラクタを持たないクラス、引数付きだけを持つクラス、引数なしと引数付きを持つクラスを比較する。各クラスについてどのnew式が成立するかを宣言から判断し、コンパイラが補う場合と開発者が記述する場合を区別する。また、数値が0になるなどのフィールドの既定値と、デフォルトコンストラクタが補われる条件は別の規則であることを整理する。自動生成を当てにせず、必要な生成方法をクラスの利用者へ明示する考え方につなげる。
|
|
キーワード
|
① コンストラクタ ② インスタンス生成 ③ 初期化 ④ デフォルトコンストラクタ ⑤ new演算子
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 StudentクラスにStudent(String name, int score)を定義し、生成時に二つのフィールドを設定する。名前をクラス名と異なるものにした例、戻り値型を書いた例、引数の個数が合わないnew式もコンパイルし、通常のメソッドとの違いを確認する。宣言を一つも書かない場合と引数付き宣言を追加した場合で、new Student()が成立するかも比較する。
◆次回授業の予習 次回は、複数のコンストラクタを一つのクラスに定義する。学生名だけが分かっている場合と、学生名と点数の両方が分かっている場合を想定し、Student(String name)とStudent(String name, int score)の二つの形を考える。それぞれの生成方法でscoreにどの値を入れるかを決め、引数の個数によって呼び分けられる理由をメソッドのオーバーロードと結び付ける。
|
|
15
|
複数のコンストラクタの定義
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第15回では、コマ主題「複数のコンストラクタの定義」を扱う。異なる初期化方法を用意するために、引数リストの異なるコンストラクタを複数宣言する。引数なし、引数一つ、引数複数の生成式を比較し、どの宣言が選ばれるかをメソッドのオーバーロードと同じシグネチャの考え方で判定する。それぞれの生成式で得られるオブジェクトの初期状態を表にし、引数と設定値の対応を検証する。環境プログラミングⅡ全体では、この回は「コンストラクタ」のトピックに位置づき、利用目的に応じた複数の初期化経路を、一つのクラスに安全に用意するために重要である。
|
|
|
コマ主題細目
|
① コンストラクタのオーバーロード
|
|
細目レベル
|
① コンストラクタもメソッドと同様に、引数の個数、型、順序が異なれば複数宣言できる。これをコンストラクタのオーバーロードといい、利用目的に応じた複数の生成方法を一つのクラスへ用意できる。引数なしで標準値を設定する方法、名前だけを受け取る方法、名前と点数を受け取る方法などを例に、生成式と呼び出される宣言を対応させる。授業では、各コンストラクタがどのフィールドをどの値で初期化するかを一覧にし、どの生成方法を選んでもオブジェクトが有効な状態になるかを確認する。メソッドのオーバーロードとの共通点はシグネチャによって区別することであり、相違点はコンストラクタには戻り値型がなくnewとともに呼ばれることである。重複する初期化コードが増えやすい点にも気付き、次回扱うthis()による処理の集約が必要になる理由を理解する。
|
|
キーワード
|
① コンストラクタ ② オーバーロード ③ シグネチャ ④ 引数リスト ⑤ 初期化
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Studentクラスに、引数なし、氏名だけ、氏名と点数の三種類のコンストラクタを定義する。三通りのnew式を実行し、生成後のnameとscoreを一覧にする。各コンストラクタへ同じ初期値設定を書いた箇所を探し、一つの値を変更する場合に何か所の修正が必要になるかを数える。重複する初期化が不一致を生む可能性を具体的に説明する。
◆次回授業の予習 第16回では、this()を使って同じクラスの別のコンストラクタを呼び出す。第15回で作った三種類の宣言のうち、引数なしの処理をthis("未設定", 0)へ置き換える案を作る。this.nameのようなフィールド参照とthis(...)の書き方を並べ、丸括弧の有無と役割の違いを確認する。どのコンストラクタへ処理を集めたいかも決めておく。
|
|
16
|
コンストラクタを呼び出すコンストラクタ
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第16回では、コマ主題「コンストラクタを呼び出すコンストラクタ」を扱う。複数のコンストラクタに重複する初期化処理があるとき、this()で同一クラスの別のコンストラクタを呼び出す。thisによるフィールド参照とthis()によるコンストラクタ呼び出しを明確に分け、this()を先頭に記述する必要と循環呼び出しが認められない理由を確認する。環境プログラミングⅡ全体では、この回は「コンストラクタ」のトピックに位置づき、重複する初期化処理を集約し、生成経路の違いによる値の不整合を防ぐことから重要である。
|
|
|
コマ主題細目
|
① コンストラクタとthisキーワード
|
|
細目レベル
|
① 複数のコンストラクタに同じ初期化処理を書くと、変更時の修正漏れによって生成方法ごとに状態が異なるおそれがある。this()は、現在のクラスに定義された別のコンストラクタを呼び出すための構文である。たとえば引数なしコンストラクタからthis("未設定", 0)を呼べば、実際のフィールド設定を引数付きコンストラクタへ集約できる。this()はコンストラクタの本体の先頭文に記述しなければならず、通常のthis.fieldやインスタンス自身を表すthisとは役割が異なる。授業では、三つのコンストラクタが順に別のコンストラクタへ処理を渡し、最後の一つがフィールドを初期化する流れを追う。呼び出しが循環すると初期化を完了できないため認められないことも確認する。どのnew式から開始しても同じ初期化規則へ到達する構成を読み取り、this()が重複を減らして値の一貫性を保つ仕組みであることを理解する。
|
|
キーワード
|
① this() ② コンストラクタチェーン ③ 初期化 ④ 先頭文 ⑤ インスタンス生成
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 引数なしのStudent()からthis("未設定", 0)を呼び、Student(String name, int score)でフィールドを設定する。各コンストラクタに開始と終了を表す出力を追加し、実行順を確認する。this()を先頭以外へ移した例と、二つのコンストラクタが互いを呼ぶ例もコンパイルし、認められない理由を初期化が完了しないことと結び付ける。
◆次回授業の予習 次回のJava Bronze問題演習に向け、コンストラクタ名、戻り値型の有無、デフォルトコンストラクタが補われる条件、オーバーロード、this()の位置を一枚に整理する。それぞれについて正しい宣言と誤りを一つ含む宣言を用意し、コンパイル前に結果を答える。生成後の値を問う問題では、最初に呼ばれる宣言と最終的に値を設定する宣言を区別しておく。
|
|
17
|
Java Bronze問題演習-コンストラクタ-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第17回では、コマ主題「Java Bronze問題演習-コンストラクタ-」を扱う。コンストラクタの宣言、デフォルトコンストラクタ、オーバーロード、this()の範囲をJava Bronze問題で統合する。生成式ごとに実行可能な宣言を選び、フィールドがどの順番で初期化されるかを追跡する。出題範囲は第14回から第16回の生成と初期化に限定する。環境プログラミングⅡ全体では、この回は「コンストラクタ」のトピックに位置づき、コンストラクタの宣言と実行順を総合的に判断し、クラス設計の初期化部分を定着させることから重要である。
|
|
|
コマ主題細目
|
① Java Bronze問題演習-コンストラクタ-
|
|
細目レベル
|
① 授業の前半では、コンストラクタの宣言方法、デフォルトコンストラクタが補われる条件、オーバーロード、this()による別コンストラクタの呼び出しを復習する。通常のメソッドとの違い、生成式の引数と宣言の対応、this()を先頭に置く規則を短いコードで整理する。複数の生成式を見比べ、どのコンストラクタが選ばれるかを引数から判断する。後半では、コンストラクタを中心とするJava Bronze形式の模擬問題を解き、選択肢ごとに解説する。コンストラクタ名や戻り値型の有無、引数の個数と型、明示的なコンストラクタの存在を確認してから、コンパイル可否と生成後のフィールド値を判断する。誤答した問題は、デフォルトコンストラクタ、オーバーロード、this()の記述位置のいずれで迷ったかを分類する。正解番号を覚えるのではなく、該当する宣言を根拠として説明できる状態を目指す。
|
|
キーワード
|
① コンストラクタ ② デフォルトコンストラクタ ③ オーバーロード ④ this() ⑤ 初期化
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 コンストラクタに関する模擬問題を解き直し、誤答を「名前と戻り値型」「自動的に補われる条件」「引数による呼び分け」「this()の位置」に分ける。各分類の代表問題について、コンパイルできるかを先に判断し、実行できる問題だけ生成後のフィールド値を確認する。間違えたコードは一か所ずつ修正し、修正前後の結果を記録する。
◆次回授業の予習 第18回では、クラスの情報を外部からどこまで利用できるようにするかを考える。Studentのscoreフィールドへ、mainメソッドから150や-20を直接代入できる現在のコードを実行し、学生の点数として不自然な状態になることを確認する。フィールドを自由に変更させない場合、どの操作だけを外部へ許可すればよいかを日本語で二つ考えておく。
|
|
18
|
アクセス制御
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第18回では、コマ主題「アクセス制御」を扱う。クラスが持つフィールドを外側から自由に変更できると、正しくない値が保存される可能性がある。そこで、必要な操作だけを外側に公開し、直接触れさせたくない情報を隠す情報隠蔽とカプセル化の考え方を学ぶ。次に、public、protected、修飾子なし、privateという4つのアクセス指定があることと、制限の厳しさの順序を確認する。この回では具体的な制御範囲には進まず、publicなメソッドとprivateなフィールドの組合せを基本とする。環境プログラミングⅡ全体では、この回は「さまざまなキーワード」のトピックに位置づき、クラスに値を安全に管理させるために重要である。
|
|
|
コマ主題細目
|
① 情報隠蔽とカプセル化 ② アクセス修飾子
|
|
細目レベル
|
① オブジェクトはデータを持つだけでなく、そのデータを正しい状態に保つ責任も持つ。情報隠蔽とは、クラス内部のデータや実装を外部から無制限に操作させず、利用者に必要な部分だけを見せる考え方である。カプセル化とは、関連するデータと操作をクラスへまとめ、決められた操作を通して状態を扱わせる設計思想である。授業では、点数フィールドへ利用側から負数や上限を超える値を直接代入できる設計と、クラスが用意した操作を通して更新する設計を比較する。外側のクラスは許可された操作だけを使うため、フィールドを自由に書き換える場合よりも不正な値を防ぎやすいことを具体例から理解する。この細目ではアクセス修飾子ごとの範囲を暗記せず、何を外部へ公開し、何を内部へ隠すべきかという設計上の目的を中心に扱う。
|
② Javaには、クラスやメンバをどこから利用できるかを調整するため、public、protected、修飾子なし、privateという四つのアクセス指定がある。ここでは詳細な到達範囲には踏み込まず、制限が緩い順にpublic、protected、修飾子なし、privateとなり、privateが最も限定的であることを確認する。情報をすべて公開するか、すべて隠すかの二択ではなく、利用者に必要な操作と内部だけで使う情報を分けるために段階が用意されている。初学者向けの基本的なカプセル化では、外部から利用してよいメソッドをpublicにし、直接変更させたくないフィールドをprivateにする組合せを中心に考える。四つの指定が許可する具体的な範囲は後の授業で段階的に扱い、ここでは名称と制限の順序を整理する。
|
|
キーワード
|
① 情報隠蔽 ② カプセル化 ③ public ④ private ⑤ アクセス修飾子
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Studentのscoreフィールドを直接変更できる版と、クラスが用意した処理だけから変更する版を作成する。後者では0から100までの値だけを保存し、範囲外の値は変更しないようにする。二つを実行してフィールドの状態を比べ、情報隠蔽が必要な理由を説明する。四つのアクセス指定は制限が緩い順に並べ、今回は具体的な到達範囲と分けて覚える。
◆次回授業の予習 次回は、privateにしたフィールドを安全に読み書きするアクセサメソッドを扱う。Studentのnameを外から読みたい場面と、scoreを外から変更したい場面を一つずつ考える。読み取りでは値を返すメソッド、書き込みでは新しい値を一つ受け取るメソッドが必要になるため、戻り値型と仮引数を予想する。点数を書き込む前に確認したい条件も挙げる。
|
|
19
|
ゲッターとセッター
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第19回では、コマ主題「ゲッターとセッター」を扱う。privateにしたフィールドはクラスの外側から直接利用できないが、氏名の読み取りや点数の更新など、必要な操作までできなくなると不便である。そこで、クラスが許可した方法でフィールドを扱うための窓口となるアクセサメソッドを学ぶ。値を読み取るゲッターと、条件を確認して値を書き込むセッターを作成し、フィールドを直接公開せずに利用する方法を確認する。環境プログラミングⅡ全体では、この回は「さまざまなキーワード」のトピックに位置づき、クラス自身がフィールドの値を安全に管理するために重要である。
|
|
|
コマ主題細目
|
① ゲッターによる値の読み取り ② セッターによる値の書き込み
|
|
細目レベル
|
① フィールドをprivateにすると、クラスの外側から値を直接読み取ったり書き換えたりできなくなる。しかし、氏名や点数など、外側の処理でも必要になる情報まで一切利用できないと不便である。そこで、クラスが許可した方法でフィールドを読み書きするための専用メソッドを用意する。このようなメソッドをアクセサメソッドという。アクセサメソッドを使うと、利用者はフィールドへ直接触れず、クラスが決めた窓口から値を扱える。値を読み取る役割のアクセサメソッドがゲッターである。授業では、Studentクラスのprivateなnameフィールドに対してgetName()を作成し、student1.getName()で氏名を取得して表示する。フィールドそのものを公開する方法と比べ、どの情報を外側へ渡すかをクラス側で決められることを確認し、カプセル化とのつながりを理解する。
|
② セッターは、外部から受け取った値をprivateフィールドへ書き込むためのアクセサメソッドである。単なる代入の代替ではなく、値を保存する前に条件を確認し、オブジェクトが不正な状態になることを防ぐ役割を持つ。たとえば点数を設定するsetScore(int score)では、0以上100以下の値だけを受け入れる規則をクラス側へ集約できる。授業では、有効な値と範囲外の値を渡したときにフィールドがどうなるかを比較し、更新を拒否する方法や既定値へ置き換える方法を検討する。ゲッターが読み取りの窓口、セッターが書き込みの窓口であることを区別し、必要に応じて読み取り専用や書き込み制限付きの設計にできることも確認する。利用側の都合だけで状態を変更させず、クラス自身が値の妥当性を守ることがカプセル化の重要な効果である。
|
|
キーワード
|
① ゲッター ② セッター ③ private ④ 値検証 ⑤ カプセル化
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 privateなnameとscoreを持つStudentクラスに、getName()とsetScore(int score)を作成する。setScoreには0以上100以下という条件を加え、正しい値と範囲外の値を渡して結果を確認する。外側のmainメソッドがフィールドを直接扱う版と比べ、読み取りと書き込みの窓口をクラスが決められることを説明する。読み取り専用にしたいフィールドも一つ選ぶ。
◆次回授業の予習 第20回では、すべてのインスタンスで共有するフィールドを学ぶ。student1とstudent2が同じ学校に所属している場合、各インスタンスにschoolNameを持たせる方法の問題点を考える。一方の学校名だけを書き換えて不一致が起きるコードを作り、学校名を一か所だけに保存できれば何が改善するかを書く。学生ごとのnameと共通のschoolNameを区別しておく。
|
|
20
|
クラスフィールド
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第20回では、コマ主題「クラスフィールド」を扱う。インスタンスごとのフィールドと、クラス全体で一つの値を共有するstaticフィールドを比較する。インスタンスの生成数を記録するカウンターを作り、どの参照から確認しても同じ値になることを調べる。staticを付ける対象は、各オブジェクトが個別に持つべき情報かどうかで選ぶ。環境プログラミングⅡ全体では、この回は「さまざまなキーワード」のトピックに位置づき、個々のオブジェクトに属する値とクラス全体で共有する値を適切に分けることから重要である。
|
|
|
コマ主題細目
|
① static修飾子とクラスメンバ ② クラスフィールド
|
|
細目レベル
|
① これまで扱ったフィールドやメソッドは、student1やstudent2のような各インスタンスに属していた。このようなメンバをインスタンスメンバという。一方、学校名や作成した学生の人数のように、すべての学生で共通する情報を各インスタンスへ別々に持たせると、同じ値を何度も保存したり、変更時にすべてを書き換えたりする必要が生じる。クラス全体で一つだけ共有したい情報や処理は、staticを付けたstaticメンバとして定義する。授業では、学生ごとのnameをインスタンスフィールド、全学生に共通するschoolNameをstaticフィールドとして比べる。student1とstudent2を生成してもschoolNameは一つだけ共有されることを実行結果から確認する。staticという書き方を先に覚えるのではなく、個別に持つ情報と全体で共有する情報を分ける必要から理解する。
|
② クラスフィールドはstaticを付けて宣言し、クラス全体で一つの値を共有するフィールドである。インスタンスフィールドでは、newで生成したインスタンスごとに別の値を持つ。これに対して、クラスフィールドの値は、生成したインスタンスの数にかかわらず一つである。授業では、学生ごとの氏名と、全学生に共通する学校名を使って両者の違いを確認する。二つのインスタンスから同じクラスフィールドを参照し、学校名を一度変更すると、どちらからも変更後の値が読み取られることを確かめる。また、インスタンスを生成するたびにカウンタの値を一つ増やし、生成数を共有する例を作成する。クラス名から参照する書き方を使い、個人ごとの情報をstaticにしてはいけない理由も説明する。
|
|
キーワード
|
① static ② クラスフィールド ③ インスタンスフィールド ④ 共有状態 ⑤ クラスメンバ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 StudentクラスにインスタンスフィールドnameとstaticフィールドschoolNameを定義し、student1とstudent2から値を表示する。一方のnameだけを変更した場合と、Student.schoolNameを変更した場合で、二つのインスタンスから見える結果を比べる。さらに、生成時に増えるstudentCountを追加し、インスタンスごとの値とクラス全体で一つの値を用途から分類する。
◆次回授業の予習 次回はstaticを付けたクラスメソッドを扱う。二つの整数だけを使って大きい方を返す処理と、Studentインスタンスのnameを表示する処理を比べる。前者は特定の学生を必要とせず、後者は対象となる学生が必要になる。この違いから、クラス名で呼び出す処理とインスタンスから呼び出す処理のどちらに向いているかを予想し、理由を書く。
|
|
21
|
クラスメソッド
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第21回では、コマ主題「クラスメソッド」を扱う。staticメソッドの宣言と呼び出しを扱い、オブジェクトを生成しなくてもクラス名から実行できる処理を作成する。staticな処理には対象インスタンスがthisとして渡されないため、インスタンスフィールドを直接利用できない。値が必要な場合は、参照を引数として受け取る方法と比較する。環境プログラミングⅡ全体では、この回は「さまざまなキーワード」のトピックに位置づき、インスタンスに依存しない処理と依存する処理の責務を区別することから重要である。
|
|
|
コマ主題細目
|
① クラスメソッド ② フィールド利用時の制約
|
|
細目レベル
|
① クラスメソッドはstaticを付けて宣言し、特定のインスタンスを生成しなくてもクラス名から呼び出せるメソッドである。渡された値だけで結果を求める計算処理や、クラス全体で共有する情報を扱う処理など、個々のオブジェクトの状態に依存しない操作に適している。インスタンスメソッドとの所属の違いを最初に整理する。授業では、二つの数値を受け取って大きい値を返すmaxメソッドをstaticで宣言し、ClassName.max(...)の形で呼び出す。呼び出しにインスタンス生成が必要な処理と不要な処理を比較し、どちらを選ぶべきかを役割から判断する。便利だからすべてstaticにするのではなく、オブジェクトごとの状態を使う操作はインスタンスメソッド、共有情報や入力値だけで完結する操作はクラスメソッドという基準を理解する。
|
② クラスメソッドは、特定のインスタンスを選ばなくても呼び出すことができる。そのため、クラスメソッドを実行した時点では、どのインスタンスのフィールドを使うのかが決まっていない。したがって、クラスメソッドの中からインスタンスフィールドを変数名なしで直接利用することはできない。これに対して、staticフィールドはクラス全体で一つの値を共有するため、クラスメソッドから直接利用できる。授業では、staticなshowSchoolName()からschoolNameを表示するコードと、学生ごとのstudentNameを直接表示しようとするコードを比較する。後者がコンパイルできない理由を、staticの有無だけでなく、対象となる学生が決まっていないことから説明する。必要な値を仮引数として受け取る方法も確認する。
|
|
キーワード
|
① クラスメソッド ② インスタンスメソッド ③ static ④ インスタンスフィールド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 二つの整数を受け取って大きい方を返すstaticなmaxメソッドと、staticフィールドschoolNameを表示するshowSchoolNameメソッドを作成する。Student.max(...)とStudent.showSchoolName()の形で呼び出し、インスタンス生成が不要なことを確認する。showSchoolNameからインスタンスフィールドnameを直接使う例もコンパイルし、対象が決まらないことからエラー理由を説明する。
◆次回授業の予習 第22回では、フィールドの型に別のクラスを指定するhas-a関係を扱う。商品を表すProductには、商品名と価格を持たせる。注文を表すOrderには、Product型のproductとint型のquantityを持たせる。第20回のstaticなクラスフィールドと、今回扱うProduct型のインスタンスフィールドの違いを一文で説明する。一つの注文が一つの商品を持つ場合に、OrderがProductの価格をどのように利用するかを予想する。
|
|
22
|
has-a関係
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第22回では、コマ主題「has-a関係」を扱う。第20回で学んだクラスフィールドは、staticを付けてクラス全体で共有するフィールドであった。この回では、その内容と混同しないように、フィールドの型に別のクラスを指定する方法を学ぶ。Product型のproductを持つOrderクラスを作成し、注文が商品を一つ持つhas-a関係を表す。OrderはProductの商品名と価格を利用し、注文金額を計算する。一つのOrderと一つのProductを組み合わせ、商品情報を注文の処理で利用する流れを確認する。環境プログラミングⅡ全体では、この回は「さまざまなキーワード」のトピックに位置づき、役割の異なる二つのクラスを組み合わせる基本を理解するために重要である。
|
|
|
コマ主題細目
|
① クラスをフィールドにもつクラス
|
|
細目レベル
|
① これまでフィールドの型には、intやdoubleなどの基本データ型、String型、配列などを主に使用してきた。フィールドの型には、自分で作成したクラスも指定できる。一つのインスタンスが、別のクラスのインスタンスをフィールドとして持つ関係をhas-a関係という。第20回で学んだクラスフィールドは、staticを付けてクラス全体で共有するフィールドである。この回で扱うクラス型のフィールドは、staticかどうかではなく、フィールドの型が自作クラスである点に注目する。授業では、注文を表すOrderクラスと、商品を表すProductクラスを使用する。Productは商品名と価格を持ち、OrderはProduct型のproductとint型のquantityをフィールドとして持つ。Orderはproductの価格とquantityを使い、注文金額を計算する。商品名だけをString型でOrderに保存する場合と比べ、Product型で保存すれば、商品名と価格を一つの商品の情報として利用できる。一つのOrderに一つのProductを持たせる短いプログラムを作成し、二つのクラスが役割を分担する意義を確認する。
|
|
キーワード
|
① has-a関係 ② クラス型 ③ インスタンスフィールド ④ 参照 ⑤ オブジェクト
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 商品名と価格を持つProductクラスと、Product型のproductとint型のquantityを持つOrderクラスを作成する。一つのProductインスタンスを一つのOrderインスタンスへ渡し、商品名、単価、個数、注文金額を表示する。OrderはProductのゲッターから商品名と価格を取得する。Productだけが商品情報を管理し、Orderが注文金額を計算するという二つの役割を、コードと実行結果から確認する。
◆次回授業の予習 第23回では、学生名と点数を一人分の成績結果としてまとめるレコードクラスを学ぶ。String型のstudentNameとint型のscoreを別々の変数にする場合と、StudentResultという一つの型にまとめる場合を比べる。一人分の値をメソッドへ渡す場合、どちらの方が学生名と点数の対応を保ちやすいかを考える。StudentResultのインスタンスを一つ作成するときに必要な値も書き出す。
|
|
23
|
レコードクラス
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第23回では、コマ主題「レコードクラス」を扱う。学生名と点数のように、一緒に扱う必要がある値を別々の変数で管理すると、値どうしの対応が分かりにくくなる。そこで、関連する値を一つのデータとしてまとめるレコードクラスを学ぶ。まずrecord StudentResult(String studentName, int score)を宣言し、インスタンスの生成とアクセサによる値の読み取りを確認する。次に、氏名と三回分の試験得点を持つレコードクラスへ発展させ、三つの得点から平均点を求めるaverage()を独自メソッドとして追加して実行する。環境プログラミングⅡ全体では、この回は「さまざまなキーワード」のトピックに位置づき、複数の値を意味の明確な一つの型として扱い、必要な処理を型へまとめるために重要である。
|
|
|
コマ主題細目
|
① レコードクラスとは ② レコードクラスの記法 ③ レコードクラスの活用
|
|
細目レベル
|
① 学生の成績を扱う場面では、学生名と点数は一人分の成績として互いに関係している。この二つの値を別々の変数で管理すると、どの学生名とどの点数が対応するのかが分かりにくくなる。レコードクラスは、このように関連する複数の値を、一つのデータとしてまとめるためのクラスである。StudentResultレコードは、学生名と点数を一人分の成績結果として保持する。StudentResultのインスタンスは、生成された後に学生名や点数を別の値へ変更できない。この特徴により、StudentResultは、後から書き換える必要がない成績結果を受け渡す場面で利用しやすい。通常のクラスで同じ内容を表す場合は、フィールド、値を設定するコンストラクタ、値を読み取るメソッドを個別に宣言する必要がある。レコードクラスでは、必要な値の型と名前を丸括弧内に書くと、値の保持と読み取りに必要な基本部分が用意される。授業では、StudentResultを通常のクラスで作成した場合と比べ、レコードクラスが適する用途を確認する。
|
② レコードクラスは、recordキーワード、型名、丸括弧内の構成要素を使って宣言する。record StudentResult(String studentName, int score)と書くと、studentNameとscoreを受け取るための基本的な処理と、それぞれの値を読み取るstudentName()とscore()が自動的に用意される。授業では、new StudentResult("Sato", 80)で結果を作成し、result.studentName()とresult.score()を呼び出して表示する。通常のゲッターでよく用いるgetStudentName()という名前ではない点も確認する。別の学生の結果も作成し、インスタンスごとに値が決まることを実行結果から確かめる。構成要素の型と順序が生成時の値に対応していることを読み取り、短い宣言からどの値を持つクラスなのかを説明できるようにする。
|
③ この細目では、細目①と②で扱った内容をもとに、実際にレコードクラスを定義し、その挙動を確認する。一人の学生の氏名と三回分の試験得点をまとめて保持するrecord StudentResult(String name, int score1, int score2, int score3)を宣言する。mainメソッドでnew StudentResult("Sato", 70, 80, 90)を実行し、生成したインスタンスをStudentResult型の変数resultへ代入する。name()、score1()、score2()、score3()を順に呼び出し、宣言した四つの構成要素を正しく読み取れることを確認する。さらに、三つの試験得点の平均点を求める独自メソッドaverage()をレコードクラスへ追加する。result.average()の実行前に平均点を予想し、氏名、各得点、平均点をprintlnで表示して結果を確かめる。別の氏名と三つの得点でもインスタンスを生成し、同じ宣言とメソッドを利用できることを確認する。この演習を通して、レコードクラスが複数の関連する値をまとめて保持できることと、必要な処理を独自メソッドとして追加できることを理解する。
|
|
キーワード
|
① record ② レコードクラス ③ レコードコンポーネント ④ アクセサ ⑤ インスタンス生成
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 record StudentResult(String studentName, int score)を宣言し、一人分の成績結果を生成する。studentName()とscore()で値を読み取り、学生名と点数を表示する。次に、StudentResult型の値を一つ受け取るprintResultメソッドを作成し、一つのレコードをメソッドへ渡す。通常のクラスで同じ内容を宣言した場合と比べ、レコードクラスで自動的に用意される部分を確認する。createResultメソッドの戻り値としてStudentResultを受け取る処理も実行する。
◆次回授業の予習 次回は、第18回から第23回を範囲とするJava Bronze問題演習である。アクセス制御、ゲッターとセッター、static、has-a関係、レコードクラスから、判断が不安な項目を二つ選ぶ。各項目について授業で作成したコードを一つ実行し直し、宣言のどこを確認すれば正誤を判断できるかを短く記す。とくにstaticフィールドの共有結果は複数インスタンスで確認する。
|
|
24
|
Java Bronze問題演習-アクセス修飾子とstatic-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第24回では、コマ主題「Java Bronze問題演習-アクセス修飾子とstatic-」を扱う。第18回から第23回で学んだアクセス制御、ゲッターとセッター、staticメンバ、has-a関係、レコードクラスを問題演習で再構成する。クラスの外側から利用できる宣言を判定し、staticの有無による共有状態の変化を追う。出題範囲は第18回から第23回の宣言とオブジェクトの組合せに限定する。環境プログラミングⅡ全体では、この回は「さまざまなキーワード」のトピックに位置づき、クラスの公開範囲、共有状態、オブジェクトの組合せを問題上で正確に判断する力を固めることから重要である。
|
|
|
コマ主題細目
|
① Java Bronze問題演習-アクセス修飾子とstatic-
|
|
細目レベル
|
① 授業の前半では、情報隠蔽とカプセル化、ゲッターとセッター、クラスフィールド、クラスメソッド、has-a関係、レコードクラスの要点を復習する。とくに、インスタンスごとに保持する値とクラス全体で共有する値の違い、外部へ公開する操作と内部に隠す状態の分け方を、短い宣言から読み取る。後半では、アクセス修飾子とstaticを中心としたJava Bronze形式の模擬問題を解き、すべての選択肢を解説する。クラス名から呼べるメンバ、インスタンスが必要なメンバ、直接読み書きできる宣言を順に確認し、コンパイル可否と実行結果を判断する。has-a関係やレコードを含む設問では、どの型の値をフィールドとして保持しているかも確認する。誤答は公開範囲、メンバの所属、オブジェクトの組合せのどこで判断を誤ったかに分けて復習する。
|
|
キーワード
|
① アクセス修飾子 ② static ③ クラスメンバ ④ 情報隠蔽 ⑤ アクセス範囲
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 問題演習で誤った設問を、アクセス制御、アクセサメソッド、static、has-a関係、レコードクラスに分ける。staticの設問は同じコードを実行し、複数インスタンスから見える値を確認する。アクセス制御の設問は、外部から直接利用できない行を特定する。各誤答について、正解の番号ではなく、判断に使った宣言と誤った理由を一組にして残す。
◆次回授業の予習 第25回から継承を学ぶ。第22回のhas-a関係は、OrderがProductを持つように、役割の異なるクラスを組み合わせる関係であった。継承では、StudentとCollegeStudentのように、後者が前者の一種といえる関係を考える。StudentとCollegeStudentに共通するフィールドとメソッドを書き出し、同じ宣言を両方に書くとどのような手間が生じるかを考える。
|
|
25
|
クラスの継承
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第25回では、コマ主題「クラスの継承」を扱う。第25回から継承の学習を開始する。既存クラスを親、その性質を引き継ぐクラスを子としてextendsで宣言し、子が親の一種と言えるis-a関係を確認する。共通するフィールドとメソッドを親側に配置し、子側に差分を追加する簡単な型階層を作る。コンストラクタの連携は第28回以降に切り分ける。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、共通性を親クラスへ集約し、型同士のis-a関係を使った設計の出発点となることから重要である。
|
|
|
コマ主題細目
|
① オブジェクト指向における継承 ② extendsキーワード
|
|
細目レベル
|
① 継承は、既存のクラスが表す特徴や役割を受け継ぎ、より具体的な種類のクラスを設計する考え方である。たとえばAnimalに共通する名前や動作をまとめ、DogやCatをその一種として表すと、共通部分の重複を減らしながら種類ごとの差を追加できる。この関係は、子クラスは親クラスの一種であるというis-a関係として捉える。この細目では構文の細部よりも、どのような場合に継承を選ぶべきかという設計思想を中心に扱う。単にコードを再利用できるからという理由だけでなく、親型として共通に扱う意味があるか、親の性質を子が自然に満たすかを考える。has-a関係との違いも身近な例で比較し、部品として持つ関係と種類として受け継ぐ関係を区別する。適切な継承関係を選ぶことが、複数の種類を共通の親クラスに基づいて扱うための土台となる。
|
② Javaでクラスの継承を宣言するには、子クラス名の後ろにextendsと親クラス名を記述する。class Dog extends Animalと書くと、DogはAnimalを直接の親クラスとして持ち、利用可能なフィールドやメソッドを受け継ぐ。Javaのクラスは同時に一つのクラスだけを直接継承する単一継承である。授業では、親クラスに共通のnameフィールドとshowNameメソッドを定義し、子クラスから受け継いだメソッドを利用する。親クラスのソースをそのまま複製する方法と比較し、修正箇所を集約できる利点を確認する。また、継承したメンバと子クラスで新しく追加したメンバを区別し、子クラスのインスタンスが親の部分と子独自の部分を合わせて持つことを図で整理する。継承の設計思想をextendsという宣言へ結び付ける。
|
|
キーワード
|
① 継承 ② スーパークラス ③ サブクラス ④ extends ⑤ is-a
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Personを親クラス、StudentとTeacherを子クラスとする例を作成する。三つの型に共通するnameとshowName()をPersonへ置き、子クラスにはstudentIdやsubjectを追加する。extendsを記述して実行し、子クラスから共通メソッドを利用できることを確認する。OrderがProductを持つhas-a関係とも比べ、種類を表す関係と、別の対象を持つ関係を文章で説明する。
◆次回授業の予習 次回は、親クラスから子クラスへ引き継がれるメンバと、引き継がれないものを区別する。第25回のPerson、Student、Teacherを見直し、子クラスで新しく書いていないのに利用できたフィールドとメソッドへ印を付ける。さらに、インスタンスを作るときの特別な処理が通常のメソッドと同じように引き継がれるかを予想し、確かめたいnew式を二つ用意する。
|
|
26
|
継承の対象
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第26回では、コマ主題「継承の対象」を扱う。親クラスの宣言が子クラスでどのように利用できるかを、メンバの種類ごとに整理する。フィールドとメソッドは継承後のオブジェクトで利用できる一方、コンストラクタは子のメンバとして引き継がれないことを確かめる。privateメンバは親の内部状態として存在しても、子のコードから直接参照できない。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、親から子へ何が引き継がれるかを正確に判断し、意図しないメンバ利用を防ぐことから重要である。
|
|
|
コマ主題細目
|
① 継承されるもの ② 継承されないもの
|
|
細目レベル
|
① 子クラスは、親クラスに定義されたフィールドやメソッドを、アクセス可能な範囲で利用できる。継承によって親クラスの宣言が子クラスのソースへ複製されるわけではなく、子クラスのインスタンスが親クラスとしての部分も備えると考える。親で定義した共通の状態や操作を、複数の子クラスから同じ意味で利用できる。授業では、親クラスのpublicメソッドを子クラスのインスタンスから呼び出し、子で宣言していない処理を利用できることを確認する。親にメソッドを追加または修正したとき、各子クラスがその変更を共有することから、共通処理を集約する利点を理解する。一方で、親の設計変更がすべての子へ影響するため、何を共通部分として置くかを慎重に決める必要もある。継承されるメンバを、親子の役割と結び付けて整理する。
|
② 親クラスのコンストラクタは子クラスへ継承されず、子クラスには子クラス自身のコンストラクタを宣言する。コンストラクタはそのクラスのインスタンスを初期化する特別な処理であり、通常のメソッドのように子から同じ名前で利用するものではない。また、privateなメンバは親クラス内部に属し、子クラスから直接操作できない。授業では、親に引数付きコンストラクタがあっても、同じ引数を持つ子のコンストラクタが自動的に用意されないことを確認する。親のprivateフィールドは子のインスタンスにも親部分の状態として存在するが、子から直接参照せず、親が公開したメソッドを通して扱う。存在しないことと直接利用できないことを区別し、継承の対象を単純な丸暗記にしない。次回のprotectedと、その後のコンストラクタ実行順へつながる基礎を作る。
|
|
キーワード
|
① メンバ継承 ② コンストラクタ ③ privateメンバ ④ staticメンバ ⑤ アクセス範囲
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 親クラスPersonにフィールド、通常メソッド、複数のコンストラクタを定義し、子クラスStudentから何を利用できるかを確認する。親のメソッドは子のインスタンスから呼び出し、同じ引数を持つ子のコンストラクタが自動的には用意されないことをコンパイル結果で確かめる。privateフィールドは親の公開メソッドから読み取り、存在と直接利用の違いを説明する。
◆次回授業の予習 第27回では、継承した子クラスから親クラスのメンバをどこまで利用できるかを扱う。Personのnameをpublic、private、protectedにした三つの宣言を用意し、Studentのメソッドから参照できるかを予想する。今回は継承関係でのprotectedを中心にするため、子クラスから利用させたい情報と、親クラスだけで管理したい情報を一つずつ選んでおく。
|
|
27
|
継承とアクセス制御
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第27回では、コマ主題「継承とアクセス制御」を扱う。継承関係にアクセス制御を重ね、子クラスから親のメンバへ到達できる条件を比較する。publicとprivateの違いを再確認した後、protectedの利用範囲を、同じパッケージの場合と別パッケージのサブクラスの場合に分ける。コードごとにアクセス元と対象を図示し、修飾子名だけで判断しない。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、継承階層の内外で必要なメンバだけを公開する設計判断に必要であることから重要である。
|
|
|
コマ主題細目
|
① publicとprivateの違い ② 継承とprotected修飾子
|
|
細目レベル
|
① 継承関係でも、publicなメンバは子クラスから利用できる一方、privateなメンバは宣言した親クラスの内部だけから利用する。privateフィールドを子クラスが直接変更できないことは、継承後も親クラスが自分の状態を管理するために重要である。子は親がpublicとして公開したメソッドを通して必要な操作を行う。授業では、親クラスのprivateフィールドとpublicなゲッターを子クラスから扱い、直接参照する記述と公開メソッドを経由する記述の違いを確認する。継承すると親の内部実装まですべて自由になるわけではないことを理解し、カプセル化が親子関係でも維持されることを整理する。アクセス制御を妨げと捉えず、親クラスが保証する状態や規則を子クラスにも守らせる仕組みとして考える。
|
② protectedは、継承した子クラスから親クラスのメンバを利用できるようにするアクセス修飾子である。この細目では、親が子にだけ利用させたい状態や補助処理を提供する場面を中心に扱い、publicで広く公開する場合やprivateで親の内部だけに隠す場合との違いを考える。授業では、親クラスのprotectedフィールドまたはメソッドを子クラスの処理から参照し、継承関係にある型へ機能を提供する目的を確認する。ただし、protectedには同一パッケージからのアクセスも関係するため、完全な制御範囲にはパッケージの知識が必要になる。この段階ではその事実を補足するにとどめ、パッケージを含む詳しいアクセス規則は第46回以降のパッケージのテーマで扱う。まずは継承のための公開範囲という側面を確実に理解する。
|
|
キーワード
|
① public ② private ③ protected ④ パッケージアクセス ⑤ 継承
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 親クラスPersonのpublicメソッド、privateフィールド、protectedメソッドを子クラスStudentから利用する。privateフィールドは直接参照せず、親が用意したpublicメソッドを通して値を取得する。protectedメソッドは子クラスの処理から呼び出し、継承のために利用範囲を広げる意味を確認する。パッケージに関係する詳細は今回の結果と分けて記録する。
◆次回授業の予習 次回は、子クラスを生成したときに親と子のコンストラクタが動く順序を学ぶ。PersonとStudentの各コンストラクタへ、Parent start、Child startのように区別できる出力を置くコードを準備する。new Student()と書いた場合、どちらが先に表示されるかを予想し、親クラス部分のフィールドを子より先に準備する必要がある理由を考える。
|
|
28
|
子クラスにおけるコンストラクタの実行順
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第28回では、コマ主題「子クラスにおけるコンストラクタの実行順」を扱う。子クラスのインスタンスを生成すると、子固有の初期化より前に親部分のコンストラクタが実行される。親と子のコンストラクタへ出力文を置いて実行順を確認し、先頭のsuper()が直接の親の初期化を呼び出すことを学ぶ。親に引数なしコンストラクタがない場合は、適切な実引数をsuper()へ明示する。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、子クラスの生成時に親部分も正しく初期化される仕組みを理解することから重要である。
|
|
|
コマ主題細目
|
① 親から実行されるコンストラクタ ② 親のコンストラクタを呼ぶsuper()
|
|
細目レベル
|
① 子クラスのインスタンスを生成すると、子クラス独自の部分だけでなく、受け継いだ親クラスの部分も初期化する必要がある。そのためコンストラクタは親クラスから子クラスの順に実行される。new Child()と記述しても、最初に親のコンストラクタが動き、親部分の初期化が完了してから子のコンストラクタ本体が続く。授業では、親と子の各コンストラクタに識別できる出力を置き、子を生成したときの表示順を予想して確認する。さらに三段階の継承では最上位の親から順に実行されることを図にする。子のコンストラクタの先頭には、明示しなければ親の引数なしコンストラクタを呼ぶsuper()が補われる。親に利用可能な引数なしコンストラクタがない場合に子の宣言が成立しない理由も、親部分を先に初期化する必要から説明する。
|
② super()は、子クラスのコンストラクタから直接の親クラスのコンストラクタを呼び出す構文である。親の引数なしコンストラクタを呼ぶ場合、記述を省略するとsuper()が補われる。親に引数付きコンストラクタしかない場合は、子のコンストラクタの先頭でsuper(値)のように明示し、親部分の初期化に必要な値を渡す。授業では、nameを親、gradeを子が管理する例を使い、子の生成式から受け取った値がsuper(name)を通して親のコンストラクタへ渡る流れを追う。super()はコンストラクタ本体の先頭文でなければならず、同じコンストラクタでthis()と同時には書けない。親コンストラクタの選択と実行順を分けて確認し、子クラスが親の初期化規則を無視せず、必要な情報を正しく引き渡す仕組みとして理解する。
|
|
キーワード
|
① 親コンストラクタ ② 子コンストラクタ ③ super() ④ 初期化順序 ⑤ 暗黙的呼び出し
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 PersonとStudentのコンストラクタに異なる出力を記述し、new Student()を実行する。親、子の順に表示されることを確認した後、Personに引数付きコンストラクタだけを残し、Studentからsuper(name)を明示して氏名を渡す。super()を省略できる場合と明示が必要な場合を比べ、親クラス部分を先に初期化する理由を継承図と実行結果から説明する。
◆次回授業の予習 第29回のコンストラクタチェーンでは、第16回のthis()による同一クラス内の連鎖と、今回のsuper()による親クラスへの連鎖を結び付ける。第16回で作ったStudentの複数コンストラクタを見直し、どのthis()がどの宣言を呼んだかを確認する。その上で、CollegeStudentを追加した場合に、最終的にPersonのどのコンストラクタへ値を渡すかを予想する。
|
|
29
|
コンストラクタチェーン
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第29回では、コマ主題「コンストラクタチェーン」を扱う。第16回では、this()を使って同じクラスの別のコンストラクタを呼び出す連鎖を学んだ。今回は、子クラスのコンストラクタからsuper()で親クラスのコンストラクタを呼び出す連鎖を中心に確認する。二つの形を区別した上で、this()から始まる呼び出しが最終的にsuper()へつながるコードも実行し、親クラスから子クラスへ初期化が進む順序を確かめる。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、同一クラス内と親子クラス間の初期化を一つの流れとして正しく理解するために重要である。
|
|
|
コマ主題細目
|
① this()とsuper()の確認 ② this()とsuper()の組み合わせ
|
|
細目レベル
|
① コンストラクタチェーンとは、あるコンストラクタから別のコンストラクタが呼び出され、初期化処理が連続して実行される仕組みである。継承関係がなくても、同じクラス内でthis()を使えばコンストラクタチェーンは成立する。この同一クラス内の連鎖は、第16回ですでに学習している。第29回では、もう一つの形として、子クラスのコンストラクタからsuper()を使って親クラスのコンストラクタを呼び出す連鎖を中心に扱う。授業では、Studentの子クラスであるCollegeStudentを生成し、子のコンストラクタから親へ氏名を渡すコードを作成する。this()は同じクラスの別のコンストラクタ、super()は直接の親クラスのコンストラクタを呼ぶことを区別し、二種類の連鎖があることを理解する。
|
② 親クラスと子クラスを含むコンストラクタチェーンでは、子クラスの生成から処理が始まり、super()によって親クラスのコンストラクタへ移る。親クラスの初期化が終わった後で、子クラスのコンストラクタ本体が実行される。同じクラス内のthis()による連鎖と、親クラスへ進むsuper()による連鎖を一続きにすることもできる。授業では、CollegeStudentの引数なしコンストラクタがthis(name, studentId)を呼び、その呼び出されたコンストラクタがsuper(name)を呼ぶコードを作成する。各コンストラクタに異なる文字列を表示させ、呼び出し先へ進む順序と、本体の処理が完了する順序を確認する。一つのコンストラクタの先頭にはthis()かsuper()のどちらか一方だけを書く規則も確かめ、同一クラス内と親子クラス間の連鎖を混同しないようにする。
|
|
キーワード
|
① this() ② super() ③ コンストラクタチェーン ④ 先頭文 ⑤ 初期化
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 CollegeStudentの引数なしコンストラクタからthis("未設定", 0)を呼び、引数付きコンストラクタからsuper(name)でPersonへ値を渡す。各本体に番号を表示して、呼び出しが進む順序と処理が完了する順序を確認する。同一クラス内だけの連鎖と親子クラス間の連鎖を別の色で記録し、コンストラクタチェーンが継承時だけの仕組みではないことを説明する。
◆次回授業の予習 次回はメソッドのオーバーライドを扱う。PersonにshowInfo()、Studentにも同じ名前と引数のshowInfo()を用意し、学生では学籍番号も表示したい場面を考える。親の処理をそのまま使う場合と、子に合う処理へ書き換える場合の違いを文章にする。また、クラスに属するstaticメソッドも同じ方法で置き換えられるかを予想しておく。
|
|
30
|
メソッドのオーバーライド
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第30回では、コマ主題「メソッドのオーバーライド」を扱う。親クラスから継承したインスタンスメソッドを、同じシグネチャで子クラスに再定義する基本を確認する。親と子が同じ操作名を共有しながら、子の特徴に合った処理を持てることを具体例で理解する。staticメソッドの同名宣言はオーバーライドではなく名前の隠蔽になるため、所属の違いから区別する。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、親が定めた操作を子の特性に合わせて再定義し、共通の呼び出しを可能にすることから重要である。
|
|
|
コマ主題細目
|
① オーバーライドとは ② staticメソッドとオーバーライド
|
|
細目レベル
|
① オーバーライドは、親クラスから継承したインスタンスメソッドと同じシグネチャのメソッドを子クラスで宣言し、子クラスに適した処理へ置き換える仕組みである。Animalのsound()をDogとCatがそれぞれ具体的に定義する例のように、共通の操作名を保ちながら種類ごとの振る舞いを表せる。授業では、親と子のメソッド名、引数の個数・型・順序が一致していることを確認し、継承したメソッドをそのまま使う場合と子で再定義する場合を比較する。引数を変えた同名メソッドはオーバーロードであり、オーバーライドではないことも整理する。親クラスが示した操作を子クラスが同じ呼び出し方のまま具体化する点に注目し、継承関係にあるクラスが共通の操作名を持つ意味を理解する。
|
② staticメソッドは、インスタンスではなくクラスに属する。そのため、親クラスと子クラスに同じシグネチャのstaticメソッドを宣言しても、インスタンスメソッドのようなオーバーライドにはならない。子クラスのstaticメソッドが親クラスの同名メソッドを見えにくくするため、この関係を名前の隠蔽という。親クラスのメソッドがインスタンスメソッドなら、子クラスでも同じシグネチャのインスタンスメソッドとして宣言する必要がある。子クラス側だけにstaticを付けるとコンパイルエラーになる。反対に、親クラスがstaticメソッドなのに、子クラス側だけstaticを外すこともできない。授業では、親子でstaticの有無が一致する例と一致しない例を作成してコンパイルし、インスタンスメソッドのオーバーライドとstaticメソッドの隠蔽を区別する。
|
|
キーワード
|
① オーバーライド ② 動的束縛 ③ シグネチャ ④ 共変戻り値 ⑤ staticメソッド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 PersonとStudentに同じシグネチャのshowInfo()を宣言し、Studentインスタンスから子側の処理が実行されることを確認する。次に、親子のstaticなshowType()をクラス名から呼び、オーバーライドではなく隠蔽になることを確かめる。親だけがインスタンスメソッド、子だけがstaticメソッドになる宣言もコンパイルし、staticの有無を一致させる必要を説明する。
◆次回授業の予習 第31回は、継承後の変更を禁止するfinalを扱う。親クラスに、すべての子で同じ処理にしたいメソッドと、子ごとに変更したいメソッドを一つずつ考える。前者を子クラスで書き換えられないようにする指定を調べる。また、これ以上子クラスを作らせたくない完成済みのクラスを一つ想定し、メソッドだけを制限する場合との違いを予想する。
|
|
31
|
finalキーワードと継承
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第31回では、コマ主題「finalキーワードと継承」を扱う。finalをメソッドとクラスに付けた場合を比べる。finalメソッドは子クラスでのオーバーライドを禁止し、finalクラスはそのクラス自体を親とする継承を禁止する。正常な階層と制限に違反する階層をコンパイルし、変更を許さない対象がどこまで広がるかを整理する。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、変更を許さない決まりをメソッドまたはクラス単位で明示することから重要である。
|
|
|
コマ主題細目
|
① finalメソッド ② finalクラス
|
|
細目レベル
|
① finalを付けて宣言したインスタンスメソッドは、子クラスでオーバーライドできない。親クラスが定めた処理をすべての子クラスで同じまま保ち、変更されては困る振る舞いを変更できないものとして固定するために用いる。メソッドそのものを呼べなくする指定ではなく、継承したメソッドを利用できる一方で再定義だけを禁止する指定である。授業では、親クラスのfinalメソッドを子クラスのインスタンスから呼ぶ例と、同じシグネチャで再宣言してコンパイルエラーになる例を比較する。通常のオーバーライド可能なメソッドも同じ親に用意し、どちらの振る舞いを固定し、どちらを子に任せるかを設計意図から考える。final変数が再代入を禁止することとは対象が異なり、メソッドに付くfinalは継承後の再定義を制限する、と主語と効果を対応させて理解する。
|
② finalを付けて宣言したクラスは、別のクラスの親クラスにできない。つまり、そのクラスをextendsして新しい子クラスを作ることを禁止する。インスタンスを生成できないという意味ではなく、通常どおりnewして利用できる。設計を完成形として扱いたい場合や、継承によって重要な規則を変更されたくない場合に用いる。授業では、finalクラスのインスタンス生成とメソッド呼び出しが成立する例を確認した後、そのクラスをextendsしようとした宣言が成立しないことを比較する。finalメソッドは特定の処理だけを再定義禁止にし、finalクラスは型全体の継承を禁止するという範囲の違いを整理する。また、変数、メソッド、クラスの各位置に付くfinalが何を変更不可にするかを一覧にし、同じキーワードでも対象によって効果が変わることを理解する。
|
|
キーワード
|
① finalメソッド ② finalクラス ③ オーバーライド禁止 ④ 継承制限 ⑤ コンパイルエラー
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 親クラスにfinalなshowId()と通常のshowInfo()を宣言する。子クラスで両方を同じシグネチャにしてコンパイルし、showId()だけが再定義できないことを確認する。続いてfinalクラスを作り、インスタンス生成はできるがextendsはできないことを確かめる。final変数、finalメソッド、finalクラスについて、何が禁止されるのかを対象ごとに一文で整理する。
◆次回授業の予習 次回は、すべてのクラスに共通する親であるObjectクラスを扱う。extendsを書いていないStudentでもtoString()やgetClass()を呼び出せるか、短いコードを用意して予想する。Student、String、配列の三つに共通する親があると、種類の異なるオブジェクトを一つの型で扱える理由も考える。メソッド名の詳しい動作は授業で確認するため、まず共通点を探す。
|
|
32
|
Objectクラス
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第32回では、コマ主題「Objectクラス」を扱う。すべてのクラスが明示的または暗黙的にObjectを共通の基底とすることを、型階層の頂点から確認する。toStringによる文字列表現、equalsによる等価性の判定、hashCodeとの整合性を自作クラスで検証する。==は参照先が同一かを比較するため、equalsの結果と一致しない例を用いて違いを明確にする。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、すべてのオブジェクトに共通する操作と、同一性・等価性の判断を理解することから重要である。
|
|
|
コマ主題細目
|
① Objectクラスとは ② Objectクラスの持つメソッド
|
|
細目レベル
|
① Objectクラスは、Javaにおけるすべてのクラスの継承階層の最上位に位置するクラスである。自分で作成したクラスにextendsを書かなかった場合でも、そのクラスは暗黙にObjectを直接または間接的な親として持つ。この共通の親があることで、種類の異なるオブジェクトをObject型として参照できる。この細目では個々のメソッドの使い方には踏み込まず、Javaのすべてのオブジェクトが共通の出発点を持つことの意義を理解する。Student、String、配列など異なる型の関係を簡単な階層図で確認し、Object型の変数が広い種類の参照を保持できる理由を整理する。一方、Object型として見たときには各クラス固有の操作を直接利用できないことも確認する。共通性を最上位へまとめることで、種類の異なるオブジェクトにも共通する基本的な扱い方を用意できる。
|
② Objectクラスには、オブジェクトを文字列として表すtoString()、同じ内容とみなせるかを判定するequals(Object)、実行時のクラス情報を得るgetClass()、ハッシュ値を返すhashCode()など、すべてのオブジェクトに共通する基本メソッドが定義されている。それぞれの名前だけでなく、何のための操作かを整理する。授業では、既存クラスのインスタンスに対してこれらのメソッドを呼び、返される値の種類と用途を確認する。toString()は表示や記録、equals()は内容の比較、getClass()は実際の型の確認、hashCode()はハッシュを利用する仕組みで用いられる。独自クラスでのオーバーライド方法には進まず、extendsを明示していないクラスでもObject由来のメソッドを呼べる事実から、共通の親クラスを持つ意味を具体化する。
|
|
キーワード
|
① Object ② toString ③ equals ④ hashCode ⑤ 参照同一性
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Student、String、int配列をそれぞれObject型の変数へ代入し、コンパイルできることを確認する。既存クラスのインスタンスでtoString()、equals()、getClass()、hashCode()を呼び、返される値の型と基本的な用途を一覧にする。独自クラスで処理を書き換えることは行わず、extendsを省略したクラスでもObjectから共通メソッドを受け継ぐことを確かめる。
◆次回授業の予習 第33回では、親クラス型の変数へ子クラスのインスタンスを代入する。Animal、Dog、Catの関係を簡単な継承図にし、DogはAnimalの一種といえる理由を書く。Animal animal = new Dog()の左辺と右辺を見て、変数の型と生成されるインスタンスの型をそれぞれ答える。代入後もDogのインスタンスそのものが別の種類に変わるのかを予想する。
|
|
33
|
ポリモーフィズム
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第33回では、コマ主題「ポリモーフィズム」を扱う。ポリモーフィズムの読解では、参照変数の宣言型と実際に生成されたオブジェクトの型を分ける。子クラスのインスタンスを親型変数へ代入するアップキャストは暗黙に行えるが、変数から利用できるメンバは宣言型で決まる。この回では親型で共通操作を呼び出す準備までを扱い、子型へ戻す操作は第36回に分ける。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、共通の親型で複数種類の実体を扱うための型の見方を形成することから重要である。
|
|
|
コマ主題細目
|
① 変数の型とオブジェクト ② インスタンスのアップキャスト
|
|
細目レベル
|
① ポリモーフィズムは、共通の親型の変数を使って、種類の異なる子クラスのインスタンスを同じ形式で扱う考え方である。変数には宣言時に書かれた型があり、その変数が参照しているオブジェクトにはnewで生成された実際の型がある。両者は一致する場合もあれば、親型変数が子型インスタンスを指す場合もある。授業ではAnimal animal = new Dog();という代入を、左辺の変数の型と右辺で生成されるインスタンスの型に分けて読む。DogはAnimalの一種なので親型の変数へ格納できるが、変数から直接利用できるメンバはAnimal型として宣言されている範囲に限られる。複数の子型を一つの親型でまとめられることが、同じ処理で多様なオブジェクトを扱う基礎になる。この段階ではまず二つの型を見分けることを重視する。
|
② 子クラスのインスタンスを親クラス型の変数へ代入する型変換をアップキャストという。子クラスは親クラスの一種であるため、Dog型からAnimal型への変換は明示的なキャスト演算子を書かなくても成立する。この暗黙変換によって、異なる子クラスのインスタンスを共通の親型として受け取ったり、配列へまとめたりできる。授業では、子型変数を親型変数へ代入する場合、子型の生成式を直接親型変数へ代入する場合、継承関係のない型を代入しようとする場合を比較する。アップキャスト後もインスタンス本体が別の型へ変化したわけではなく、親型という共通の見方で参照していることを図で確認する。ここでは継承関係に基づく暗黙変換が成立する方向と、変数から利用できるメンバが宣言型に基づいて決まる点を結び付ける。
|
|
キーワード
|
① ポリモーフィズム ② 宣言型 ③ 実体型 ④ アップキャスト ⑤ 動的束縛
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Animal型の変数へDogとCatのインスタンスをそれぞれ代入する。変数の宣言型とnewで生成した型を二列に分け、代入できる組合せを確認する。Dog固有のメソッドをAnimal型変数から呼ぼうとした場合もコンパイルし、親型として見えるメンバの範囲を確かめる。アップキャストはインスタンス本体を変更せず、共通の親型として扱う変換だと説明する。
◆次回授業の予習 次回は、親型変数から同じメソッドを呼んだときに、DogとCatで異なる処理が実行される仕組みを扱う。Animal、Dog、Catのすべてにsound()を宣言したコードを準備し、シグネチャが一致しているかを確認する。Animal型変数がDogを参照する場合、親と子のどちらのsound()が動くかを予想する。親の処理も利用したい場合の書き方も調べておく。
|
|
34
|
オーバーライドとメソッドの呼び出し
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第34回では、コマ主題「オーバーライドとメソッドの呼び出し」を扱う。親型の変数から同じメソッドを呼び出しても、参照先の実体型によって実行されるオーバーライド処理が変わる。コンパイル時に宣言型から利用可否を判定する段階と、実行時に実体型から処理を選ぶ段階を分ける。superを使って親側のメンバを明示的に参照する場合も対比する。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、宣言型による利用可否と実体型による処理選択を分けて読む中核となることから重要である。
|
|
|
コマ主題細目
|
① オーバーライドの確認 ② ポリモーフィズムと実行されるメソッド ③ superによる親のメンバへのアクセス
|
|
細目レベル
|
① ポリモーフィズムによるメソッド選択を理解する前提として、親クラスと子クラスが同じ名前・同じ引数リストのインスタンスメソッドをそれぞれ持つ状態を確認する。親のメソッドを子が同じシグネチャで再定義することがオーバーライドであり、親型に共通の操作名を保ちながら子ごとの処理を用意できる。授業では、Animalのsound()と、それを受け継ぐDogのsound()を並べ、どの宣言が親、どの宣言が子の再定義かを特定する。引数の型や個数が変わると別メソッドのオーバーロードになるため、呼び出しの挙動を考える前にシグネチャが一致しているかを確かめる。親クラスと子クラスの宣言を並べ、継承関係にある複数のクラスが同じシグネチャのメソッドを持つという構造を確実に読み取る。
|
② 親型の変数が、オーバーライドされたメソッドを持つ子クラスのインスタンスを参照している場合、呼び出される処理は変数の宣言型ではなく、実際のインスタンスの型に基づいて決まる。Animal型変数がDogインスタンスを指してsound()を呼ぶと、Dogで再定義されたsound()が実行される。この仕組みにより、呼び出し側は個々の子クラス名を調べなくても、共通のメソッドを呼ぶだけで種類に応じた処理を実行できる。授業ではDogとCatをAnimal型の配列へ格納し、同じ繰り返しと同じsound()呼び出しで異なる結果が得られることを確認する。新しい子クラスを追加しても利用側の分岐を増やさずに済むことから、変更や拡張に強い設計へつながる利点を理解する。
|
③ 子クラスでメソッドをオーバーライドすると、通常の呼び出しでは子クラス側の処理が選ばれる。子の処理の中から親クラスに定義された元の処理を明示的に利用したい場合は、super.method()の形で呼び出す。superは直接の親クラス部分を示し、親の処理を完全に捨てずに子独自の処理を追加する場面で役立つ。授業では、親のshowInfo()が共通情報を表示し、子のshowInfo()がsuper.showInfo()を呼んだ後に固有情報を加える例を扱う。子で同じ処理を複製する方法と比較し、共通処理を親へ集約できる利点を確認する。また、super.fieldの形で親側の同名フィールドを明示できることにも触れ、コンストラクタを呼ぶsuper()との表記と役割の違いを整理する。親の機能を土台として子の振る舞いを拡張する考え方を身に付ける。
|
|
キーワード
|
① オーバーライド ② 動的束縛 ③ 宣言型 ④ 実体型 ⑤ メソッドディスパッチ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Animalのsound()をDogとCatでオーバーライドし、二つのインスタンスをAnimal型変数へ順に代入して呼び出す。同じsound()という記述でも実体に応じて出力が変わることを確認する。Dog側ではsuper.sound()も呼び、親の共通処理に子固有の処理を加える。利用側にDogかCatかを判定するif文を書かなくてよい利点を、実行したコードから説明する。
◆次回授業の予習 第35回では、インスタンスメソッド、フィールド、staticメソッドで選択規則が異なることを扱う。ParentとChildに同じ名前のvalueフィールド、show()、staticなshowType()を用意する。Parent型変数がChildインスタンスを参照する場合、それぞれ親と子のどちらが選ばれるかを三項目に分けて予想し、理由に使う型を記しておく。
|
|
35
|
ポリモーフィズムと隠蔽
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第35回では、コマ主題「ポリモーフィズムと隠蔽」を扱う。ポリモーフィズムの動的なメソッド選択と、フィールドやstaticメソッドの隠蔽を同じコードで比較する。親と子に同名メンバを用意し、親型変数と子型変数から参照した結果を一覧にする。インスタンスメソッドは実体型に応じて選ばれ、隠蔽されたフィールドやstaticメソッドは宣言型が判断の手がかりになることを確かめる。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、動的に選択されるメソッドと宣言型で決まる隠蔽を混同しないために重要である。
|
|
|
コマ主題細目
|
① ポリモーフィズムとメソッド ② 変数の隠蔽 ③ staticメソッドの隠蔽
|
|
細目レベル
|
① 親型の変数へ子クラスのインスタンスを格納し、オーバーライドされたインスタンスメソッドを呼び出すと、変数の宣言型ではなくインスタンス本体の型に基づく処理が実行される。Animal型変数がDogを参照すればDogのメソッド、Catを参照すればCatのメソッドが選ばれる。これがメソッドにおけるポリモーフィズムの基本である。授業では、変数の型、newで生成した型、呼び出したメソッドの三点を表にし、同じAnimal型変数でも代入するインスタンスによって出力が変わることを確認する。呼び出せるメソッドの有無は変数の型で確認し、実際にどのオーバーライド処理が動くかはインスタンス本体の型で決まるという二段階を区別する。この性質と、次に扱うフィールドやstaticメソッドの隠蔽との差を明確にする。
|
② 親クラスと子クラスに同じ名前のフィールドが宣言されている場合、子のフィールドが親のフィールドをオーバーライドするのではなく、名前を隠す状態になる。フィールドの参照先はインスタンス本体の型ではなく、その参照に用いた変数の宣言型に基づいて決まる。この点がインスタンスメソッドの選択と異なる。授業では、Parent型変数とChild型変数が同じChildインスタンスを参照する例を用い、同じ名前のvalueフィールドを読み取った結果を比較する。親型変数からは親側、子型変数からは子側のフィールドが選ばれることを確認し、メソッドのポリモーフィズムと同じ規則だと思い込まないようにする。同名フィールドを多用すると読み手を混乱させるため、仕組みの理解とともに、設計では分かりやすい名前と責務を選ぶ必要も考える。
|
③ 親クラスと子クラスに同じシグネチャのstaticメソッドがある場合、子側の宣言は親側のメソッドをオーバーライドせず、名前を隠す。staticメソッドはクラスに属するため、どちらが呼ばれるかはインスタンス本体の型ではなく、クラス名または変数の宣言型に基づいて決まる。授業では、Parent.show()とChild.show()を宣言し、クラス名から呼ぶ場合と、親型・子型の変数を通して呼ぶ場合を比較する。変数が同じChildインスタンスを指していても、親型変数なら親のstaticメソッドが選ばれることを確認する。オーバーライドされたインスタンスメソッド、隠蔽されたフィールド、隠蔽されたstaticメソッドを三つ並べ、実体型で決まるものと宣言型で決まるものを区別して説明できるようにする。
|
|
キーワード
|
① 動的束縛 ② フィールド隠蔽 ③ 宣言型 ④ 実体型 ⑤ メンバアクセス
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 ParentとChildに同名のインスタンスメソッド、フィールド、staticメソッドを用意し、Parent型変数とChild型変数から利用する。結果を「実体型で決まったもの」と「変数の宣言型で決まったもの」に分ける。インスタンスメソッドは実体型に応じて選ばれ、隠蔽されたフィールドとstaticメソッドは宣言型に基づくことを、各出力と対応させて説明する。
◆次回授業の予習 次回は、親型変数が参照しているインスタンスを子型として扱い直すダウンキャストを学ぶ。Animal型変数へDogを代入し、Dogだけが持つfetch()をAnimal型のまま呼び出せるかを確認するコードを準備する。Dog型へ戻せば呼べると予想した場合、どこに型名を書くかを考える。実体がCatの場合にも同じ変換が成功するかを継承関係から予想する。
|
|
36
|
ダウンキャスト
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第36回では、コマ主題「ダウンキャスト」を扱う。親型変数から子型固有のメンバを利用するため、ダウンキャストを導入する。明示的なキャスト式がコンパイルを通っても、実体型に互換性がなければClassCastExceptionが実行時に発生する。継承図と生成式を照合し、宣言型だけでなく参照先の実体を追って、変換が実行時にも成立するかを判断する。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、親型参照から子固有の機能を安全に利用するための型確認を身に付けることから重要である。
|
|
|
コマ主題細目
|
① ダウンキャストの必要性 ② 実行時例外ClassCastException
|
|
細目レベル
|
① アップキャストした親型変数からは、変数の宣言型に存在するメンバだけを利用できる。その変数が実際には子クラスのインスタンスを参照していても、子クラスだけが持つ固有のメソッドは親型のままでは呼び出せない。そこで、参照を元の子クラス型として扱い直すために、明示的なダウンキャストが必要になる。授業では、Dog固有のfetch()を持つ例で、Animal型変数から直接fetch()を呼べないことを確認し、Dog dog = (Dog) animalと変換した後に呼び出す。キャストによってインスタンスそのものが作り替えられるのではなく、同じ参照を子型として扱えるようにすることを図で整理する。共通の親型で扱う利点を保ちながら、必要な場面だけ子固有の機能へ戻るための操作として、ダウンキャストの目的を理解する。
|
② クラス型のキャストが成立するには、変換元と変換先が継承関係にあり、実際に参照しているインスタンスが変換先の型またはその子型である必要がある。まったく関係のないクラス同士の変換はコンパイル時に拒否される。一方、親型から子型への記述が文法上認められても、実体がその子型でなければ安全とは限らない。授業では、Animal型変数がDogを参照する場合とCatを参照する場合に(Dog)で変換する例を比較する。どちらもコードの形はコンパイルできるが、Dogの実体なら実行でき、Catの実体ならClassCastExceptionが発生する。コンパイラが確認できる型の関係と、実行時に判明するインスタンス本体の型を分けて考える。キャストの成立条件を継承図と生成式の両方から確認し、コンパイル成功が実行成功を保証しない点を理解する。
|
|
キーワード
|
① ダウンキャスト ② instanceof ③ ClassCastException ④ 宣言型 ⑤ 実体型
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Animal型変数がDogを参照する場合にDog型へダウンキャストし、fetch()を呼び出す。次に同じAnimal型変数がCatを参照する状態でDog型へ変換し、コンパイルはできても実行時にClassCastExceptionになることを確認する。継承図、変数の宣言型、newで作った実体型を照合し、コンパイル成功と実行成功の条件を別々に説明する。
◆次回授業の予習 次回のJava Bronze問題演習では、第25回から第36回の継承と型変換を扱う。親子のコンストラクタ、オーバーライド、隠蔽、アップキャスト、ダウンキャストから一問ずつ選び、答えを隠して解き直す。メソッドの問題では実体型、フィールドとstaticメソッドでは宣言型を確認する欄を作り、キャスト問題ではnewで生成された型へ必ず印を付ける。
|
|
37
|
Java Bronze問題演習-継承とポリモーフィズム-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第37回では、コマ主題「Java Bronze問題演習-継承とポリモーフィズム-」を扱う。Java Bronze問題演習は、第25回から第36回の継承、コンストラクタの実行順、オーバーライド、Object、ポリモーフィズム、キャストを対象とする。親型変数と実体型を書き分け、コンパイル可否、コンストラクタの出力順、実行されるメソッドを段階別に判定する。出題範囲は第25回から第36回で学んだ型階層と参照の判断に限定する。環境プログラミングⅡ全体では、この回は「継承とポリモーフィズム」のトピックに位置づき、継承階層と参照型の判断を問題形式で統合し、後続の抽象化への基礎を固めることから重要である。
|
|
|
コマ主題細目
|
① Java Bronze問題演習-継承とポリモーフィズム-
|
|
細目レベル
|
① 授業の前半では、extendsによる継承、親子のコンストラクタ実行順、オーバーライド、アップキャスト、メソッドとフィールドの選択規則、ダウンキャストを復習する。親型の変数と実際のインスタンスの型を別々に記録し、宣言型で決まる事項と実体型で決まる事項を整理する。後半では、継承とポリモーフィズムに関するJava Bronze形式の模擬問題を解き、選択肢ごとの根拠を解説する。最初にクラス間の親子関係を確認し、次に代入が成立するか、変数から対象のメンバを呼べるか、実行時にどの処理が選ばれるかを順番に判定する。コンストラクタではsuper()の呼び出し先と実行順も確認する。誤答した設問は、継承関係の見落とし、宣言型と実体型の混同、キャスト条件の誤認に分け、該当するコードを使って再説明する。
|
|
キーワード
|
① 継承 ② オーバーライド ③ ポリモーフィズム ④ アップキャスト ⑤ ダウンキャスト
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 模擬問題の誤答を、コンストラクタの実行順、オーバーライド、隠蔽、アップキャスト、ダウンキャストに分ける。各分野から一問を再実行し、最初の予想と実際の出力が異なった行を特定する。ClassCastExceptionの問題は、コンパイルが通る理由と実行時に失敗する理由を別々に記述する。正解した問題でも根拠を説明できなかったものは復習対象に加える。
◆次回授業の予習 第38回では、親クラスでは具体的な処理を一つに決められないメソッドを扱う。図形を表すShapeにarea()が必要でも、CircleとRectangleでは計算方法が異なる。この場合、親クラスにはどこまで共通内容を置き、どの処理を子クラスへ任せるとよいかを考える。処理本体をまだ書けないメソッドを宣言する方法を調べ、通常メソッドとの形の違いを予想する。
|
|
38
|
抽象クラス
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第38回では、コマ主題「抽象クラス」を扱う。共通の処理を持ちながら、子クラスに実装を要求する未完成の型として抽象クラスを導入する。abstractメソッドの宣言と、それを持つクラスのabstract宣言を対応させる。抽象クラスは直接newできず、必要なメソッドを実装した具象サブクラスを通じて利用する。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、共通実装と子クラスに求める操作を分け、抽象度の高い型を設計する入り口となることから重要である。
|
|
|
コマ主題細目
|
① abstractキーワードと抽象メソッド ② 抽象メソッドをもつクラス
|
|
細目レベル
|
① 複数の子クラスに共通する操作名は決められるが、具体的な処理は子ごとに異なり、親クラスでは一つに定められない場合がある。たとえば図形には面積を求める操作が必要でも、計算式は円と長方形で異なる。このような場面で、処理本体を持たず子クラスへ実装を要求する抽象メソッドを用いる。抽象メソッドはabstractを付け、波括弧による本体を書かずに宣言する。授業ではShapeにarea()という共通の操作だけを定め、CircleとRectangleがそれぞれ計算処理を実装する構成を読む。親側が必要な操作を明示することで、実装漏れをコンパイラが検出でき、利用側も共通の名前を前提にできる。通常メソッドとの違いを宣言形式と役割の両面から整理し、抽象化が未完成なコードではなく、子クラスに求める操作を定める設計であることを理解する。
|
② 抽象メソッドを一つでも持つクラスは、クラス宣言にもabstractを付けて抽象クラスにしなければならない。抽象クラスは未実装の操作を含む可能性があるため、直接newしてインスタンスを生成できない。具体的な子クラスが必要な抽象メソッドをすべて実装して初めて、その子クラスを生成できる。授業では、抽象クラスを直接生成しようとする宣言、抽象メソッドを実装していない通常の子クラス、すべて実装した具体的な子クラスを比較する。実装を残した子クラスもabstractとして宣言すれば、さらに下位のクラスへ責任を引き継げることを確認する。どのクラスが生成可能で、どのクラスが設計上の共通型としてだけ働くかを継承図から判断し、抽象メソッドの有無とクラス宣言の関係を確実に理解する。
|
|
キーワード
|
① 抽象クラス ② 抽象メソッド ③ abstract ④ インスタンス化制限 ⑤ 継承
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 abstractなShapeクラスに、本体を持たないarea()を宣言する。CircleとRectangleでarea()を実装し、両方のインスタンスから結果を表示する。Shapeを直接newする例と、area()を実装しない通常の子クラスもコンパイルし、成立しない理由を確認する。親が操作名を決め、子が具体的な計算方法を用意するという役割分担を説明する。
◆次回授業の予習 次回は、抽象クラスが抽象メソッドだけでなく、通常メソッドとフィールドも持てることを学ぶ。Shapeにすべての図形で共通するnameフィールドとshowName()を置き、面積計算だけを子へ任せる構成を考える。CircleとRectangleへ同じ表示処理を重複して書く場合と親へ一度だけ書く場合を比べ、どの情報と処理を共通化したいかを整理する。
|
|
39
|
抽象クラスのメンバの扱い方
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第39回では、コマ主題「抽象クラスのメンバの扱い方」を扱う。抽象クラスが抽象メソッドだけでなく、本体のある通常メソッドとフィールドも持てることを確認する。複数の子クラスで共通する状態と処理は親側へ置き、子ごとに異なる操作は抽象メソッドとして求める。どの宣言を共通化し、どの実装を子に任せるかをクラス図に示す。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、型階層に共通する状態と処理を集約し、子ごとの差分を明確にすることから重要である。
|
|
|
コマ主題細目
|
① 抽象メソッドと通常メソッド ② 抽象クラスにおけるフィールド
|
|
細目レベル
|
① 第38回では抽象メソッドが子クラスへ実装を要求する仕組みを学んだ。第39回では、抽象クラスが抽象メソッドだけで構成されるわけではなく、処理本体を持つ通常メソッドも同時に持てることを扱う。子ごとに異なる部分を抽象メソッド、すべての子で共通する処理を通常メソッドとして親へ置く。授業では、Shapeのarea()を抽象メソッドとし、名称を表示するshowName()を通常メソッドとして定義する。子クラスはarea()だけを具体化し、showName()は継承してそのまま利用できる。すべてを子へ任せる設計と比べ、共通処理の重複を減らしながら差分だけを明確にできる点を確認する。抽象クラスを、未実装部分と実装済み部分を組み合わせて型階層の共通土台を提供するクラスとして理解する。
|
② 抽象クラスは直接newできないが、通常のクラスと同じようにフィールドを宣言し、子クラスのインスタンスに共通する状態を保持できる。たとえばShapeが色を表すcolorフィールドを持てば、CircleやRectangleは同じ定義を受け継ぎ、それぞれのインスタンスが自分の色を保存する。授業では、抽象クラスにprivateフィールドと、その値を扱う通常メソッドを用意し、具体的な子クラスから継承して利用する。抽象クラス型のインスタンスを直接作れなくても、子クラスのインスタンス内部には親クラスとしてのフィールドが存在することを図で確認する。子ごとに同じフィールドを重複して宣言する場合と比較し、共通状態とその管理処理を親へ集約できる点を理解する。抽象メソッドとの役割の違いも整理する。
|
|
キーワード
|
① 抽象メソッド ② 具象メソッド ③ インスタンスフィールド ④ 継承 ⑤ オーバーライド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Shapeにprivateなnameフィールド、値を設定する処理、通常メソッドshowName()、抽象メソッドarea()を定義する。CircleとRectangleはarea()だけを実装し、showName()は親から受け継いで実行する。子クラスごとに同じフィールドと表示処理を書く版とも比べ、共通状態と共通処理を抽象クラスへ集める利点を継承図とコードから説明する。
◆次回授業の予習 第40回では、抽象クラスのコンストラクタと、抽象クラス型の変数によるポリモーフィズムを扱う。Shapeを直接newできないのにコンストラクタが必要な理由を、Circle生成時の親部分の初期化から予想する。また、Shape型の配列へCircleとRectangleを入れ、同じarea()を呼ぶとどの処理が動くかを第34回の内容と結び付けて考える。
|
|
40
|
抽象クラスのさまざまな扱い方
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第40回では、コマ主題「抽象クラスのさまざまな扱い方」を扱う。抽象クラスにもコンストラクタがあり、具象サブクラスの生成時に親部分の初期化として実行される。生成式から親と子の実行順を追い、抽象クラス型の変数で異なる具象オブジェクトを参照する。共通メソッドの呼び出しに対し、実体ごとのオーバーライド処理が選ばれることを確かめる。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、直接生成できない抽象型を、初期化とポリモーフィズムの両面から利用できるようにすることから重要である。
|
|
|
コマ主題細目
|
① 抽象クラスのコンストラクタ ② 抽象クラスとポリモーフィズム
|
|
細目レベル
|
① 抽象クラスは直接インスタンス化できないが、子クラスのインスタンスに含まれる親クラス部分を初期化するため、コンストラクタを持つことができる。子クラスをnewすると、通常の継承と同様に親である抽象クラスのコンストラクタが先に実行され、その後で子クラスのコンストラクタが実行される。授業では、抽象クラスShapeのコンストラクタが共通のnameフィールドを初期化し、Circleのコンストラクタがsuper(name)で値を渡してから半径を初期化する例を扱う。抽象クラスのコンストラクタを直接newで呼ぶのではなく、具体的な子クラスの生成過程から呼び出すことを確認する。共通状態の初期化を各子クラスへ重複させず、親の規則として一か所にまとめられることが、抽象クラスにコンストラクタを置く意義である。
|
② 抽象クラスは直接newできない一方、変数の型として利用できる。抽象クラス型の変数には、その抽象クラスを具体化した複数種類の子クラスのインスタンスを格納できる。共通の抽象メソッドを呼ぶと、ポリモーフィズムによってインスタンス本体の型に対応する実装が選ばれる。授業では、CircleとRectangleをShape型の配列へ格納し、同じarea()呼び出しでそれぞれ異なる面積計算が行われることを確認する。利用側は個々の具体型を条件分岐で判定せず、Shapeが保証する共通操作だけを使える。新しい図形を追加しても呼び出し側の基本構造を変えずに済むことから、抽象クラスとポリモーフィズムの組合せが、共通性を保ちながら種類を拡張する設計に役立つと理解する。
|
|
キーワード
|
① 抽象クラス ② コンストラクタ ③ super() ④ ポリモーフィズム ⑤ 具象クラス
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Shapeのコンストラクタでnameを受け取り、CircleとRectangleからsuper(name)で値を渡す。各コンストラクタへ出力を加え、具体クラスを生成したときにShape側が先に実行されることを確認する。次に二つのインスタンスをShape型配列へ入れてarea()を呼び、実体型に応じた計算結果が得られることを確かめる。初期化とポリモーフィズムを別々に説明する。
◆次回授業の予習 次回はインターフェースを導入する。印刷できるPrintableという役割を、文書Documentと画像Imageの両方に持たせたい場面を考える。二つのクラスに共通するフィールドがない場合でも、print()という操作だけを約束として示す利点を書く。抽象クラスが共通状態や通常メソッドを持てることと比べ、処理の約束だけを表す型に何が必要かを予想する。
|
|
41
|
インターフェース
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第41回では、コマ主題「インターフェース」を扱う。インターフェースは、実装クラスに求める操作を宣言する型である。abstractメソッドとfinalフィールドの宣言上の特徴を整理し、実装するクラスに求める操作と変更できない共有値を区別する。共通の状態を持つ抽象クラスと、求める操作を中心とするインターフェースを比較する。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、状態の共有よりも求める操作を中心に、異なるクラスを共通型で扱う基礎となることから重要である。
|
|
|
コマ主題細目
|
① インターフェースの役割 ② インターフェースのメンバ
|
|
細目レベル
|
① インターフェースは、クラスが外部へ提供すべき操作を、処理内容ではなくメソッドの形として定める仕組みである。異なる成り立ちのクラスでも、同じインターフェースを利用すれば、共通の役割を持つ型として扱える。たとえば印刷できることを表すPrintableは、文書や画像に共通してprint()という操作を要求できる。授業では、インターフェースが何ができる型かを示し、具体的な処理はそれを利用するクラス側が用意するという分担を確認する。抽象クラスが共通状態や共通処理も持てるのに対し、ここでは操作の約束を中心に型を定める点に注目する。宣言例からインターフェース名と抽象メソッドを読み取り、その型を利用する側が具体的なクラスの違いを意識せず同じ操作を要求できる利点を理解する。
|
② この回で扱うインターフェースの主なメンバは、実装するクラスへ処理を要求するabstractメソッドと、変更できない共有値を表すfinalフィールドの二つである。abstractメソッドは暗黙にpublic abstract、フィールドは暗黙にpublic static finalとして扱われる。そのため、省略された修飾子を補ってインターフェースのコードを読めるようにする。授業では、abstractメソッドの宣言と、宣言時に値を設定する定数フィールドを含むインターフェースを読む。フィールドはインスタンスごとの状態ではなく、再代入できない共通の値であることを確認する。また、abstractメソッドは実装するクラスに具体的な処理の定義を求めるものだと理解する。二種類のメンバについて、宣言時に省略できる修飾子と利用側から見た意味を整理する。
|
|
キーワード
|
① インターフェース ② 抽象メソッド ③ finalフィールド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Printableインターフェースにabstractメソッドprint()とfinalフィールドMAX_COUNTを宣言する。省略されているpublic abstractとpublic static finalを補った形も書き、二つの宣言が同じ意味になることを確認する。MAX_COUNTへ別の値を代入するコードはコンパイル結果を記録する。インターフェースが具体的な処理ではなく、提供すべき操作を定める仕組みであることを説明する。
◆次回授業の予習 第42回は、インターフェースの約束に対応する処理をクラスへ用意する「実装」を扱う。Printableのprint()について、Documentなら文書名、Imageなら画像名を表示する処理を考える。必要な操作だけが示された状態と、処理本体が用意された状態の違いを文章にする。クラス名の後ろにPrintableとの関係を表すため、implementsをどの位置へ書くかも調べておく。
|
|
42
|
インターフェースの実装
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第42回では、コマ主題「インターフェースの実装」を扱う。インターフェースは、クラスが提供すべき操作を約束として示すが、それだけでは実際の処理は行えない。実装とは、その約束に対応する具体的な処理本体をクラスに用意し、利用できる状態にすることである。実装の目的を確認してから、implementsを使ってクラスとインターフェースを結び付ける書き方へ進む。一つのクラスが複数のインターフェースを実装する方法も扱う。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、異なるクラスへ共通の操作を確実に持たせるために重要である。
|
|
|
コマ主題細目
|
① implementsキーワードと実装 ② 複数のインターフェースの実装
|
|
細目レベル
|
① 実装とは、インターフェースに宣言された抽象メソッドについて、実際に動作する処理本体をクラス側で用意することである。クラス名の後ろにimplementsとインターフェース名を書き、そのクラスがインターフェースに定められた操作を提供することを宣言する。必要なメソッドを用意しない通常クラスは完成した実装とはならず、コンパイルできない。授業では、PrintableをimplementsするDocumentクラスにpublicなprint()を定義し、インターフェース型の変数から呼び出せることを確認する。メソッド名、引数、公開範囲がインターフェースの宣言と一致しているかを一つずつ確認し、単に同じ名前の処理を書けばよいわけではないことを理解する。インターフェースを実装するクラスが、要求された操作を具体的なコードとして満たし、利用側から共通の型として扱えるようになるまでの流れに集中する。
|
② 一つのクラスは、implementsの後ろに複数のインターフェース名を並べ、それぞれが定める役割を同時に実装できる。たとえばDocumentがPrintableとSavableの両方を実装すれば、印刷できる型としても保存できる型としても扱える。クラスが複数の独立した能力を持つことを、型として明確に表せる。授業では、二つのインターフェースが別々の抽象メソッドを要求する例を使い、実装クラスが両方の処理を用意することを確認する。同じシグネチャの抽象メソッドが含まれる場合は、一つのpublicな実装で双方が求める操作を満たせる。利用側では必要な役割に応じてPrintable型またはSavable型として参照できることも整理する。複数のインターフェースが定める操作を一つのクラスが実現し、目的ごとに異なる共通型として利用できる利点を理解する。
|
|
キーワード
|
① implements ② 実装クラス ③ メソッド実装 ④ 複数実装 ⑤ インターフェース型
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Document implements Printableを宣言し、publicなprint()へ具体的な表示処理を書く。print()を省いた場合と公開範囲を狭くした場合もコンパイルし、インターフェースが求める操作を満たす条件を確認する。続いてPrintableとSavableの二つを実装し、print()とsave()を呼び出す。一つのクラスが異なる二つの役割を持てることを、利用側の変数型と対応させる。
◆次回授業の予習 次回はインターフェース同士の継承を扱う。PrintableとSavableの二つのインターフェースが求める操作をまとめたManageableを作る場面を考える。クラスがimplementsで処理を用意する場合と、Manageableがextendsで既存のインターフェースに定められた操作を受け継ぐ場合について、左側と右側に置かれる型を整理する。Manageableを実装するクラスに必要となるメソッド名も一覧にしておく。
|
|
43
|
インターフェースの継承
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第43回では、コマ主題「インターフェースの継承」を扱う。インターフェース同士をextendsでつなぎ、既存のインターフェースが定める操作をまとめた新しいインターフェースを作る。クラスのextendsは直接の親クラスを一つだけ指定するが、インターフェースは複数の親インターフェースを継承できる。子インターフェースを実装する具象クラスが、継承元を含む必要なメソッドを満たすかを点検する。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、既存のインターフェースを階層化し、複数の要求をまとめた再利用可能な型を設計することから重要である。
|
|
|
コマ主題細目
|
① 実装と継承の関係 ② extendsキーワードを用いた継承
|
|
細目レベル
|
① クラスがインターフェースから求められる操作を具体的な処理として用意することを実装といい、implementsを用いる。一方、あるインターフェースが別のインターフェースに定められた操作を受け継ぎ、より多くの操作をまとめた新しいインターフェースを作ることをインターフェースの継承という。実装と継承では、宣言する対象と目的が異なる。授業では、Printableをクラスが実装する関係と、Printableを親としてColorPrintableを定義する関係を図で比較する。クラスは処理本体を提供するが、子インターフェースは親の抽象メソッドを必要な操作として引き継ぎ、新しい抽象メソッドを追加できる。その子インターフェースを実装する具体クラスが、受け継いだ分も含めて必要な処理を用意する。implementsとextendsを、左辺に置かれる型と右辺に置かれる型から正しく選べるようにする。
|
② インターフェース同士の継承にはextendsを使用する。クラスの継承と異なり、一つの子インターフェースが複数の親インターフェースを継承できるため、複数のインターフェースが定める操作を一つの新しい型へまとめられる。子インターフェースは親の抽象メソッドを受け継ぎ、必要に応じて新しい抽象メソッドを追加する。授業では、PrintableとSavableをextendsするManageableインターフェースを宣言し、そのインターフェースを実装するクラスがどのメソッドを用意すべきかを一覧にする。extendsという同じ語を使っても、クラスでは直接の親が一つ、インターフェースでは複数を指定できる違いを確認する。インターフェースの継承は処理を複製するためではなく、関連する役割を組み合わせ、利用側に必要な操作の集合を分かりやすい型として提示するために使う。
|
|
キーワード
|
① インターフェース継承 ② extends ③ 多重継承 ④ 実装クラス ⑤ 型互換性
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 PrintableとSavableを親インターフェースとし、interface Manageable extends Printable, Savableを宣言する。Manageableを実装するDocumentに必要なメソッドをすべて用意して実行する。save()を一つ省いた場合のコンパイル結果も確認する。クラスのextendsでは親が一つ、インターフェース同士では複数の親を指定できる違いを、宣言と関係図で説明する。
◆次回授業の予習 第44回は、継承できるクラスを設計者が限定するシールクラスを扱う。学校システムの利用者をStudentとTeacherだけにしたい場面を考え、第三のGuestが自由に親クラスを継承できると何が困るかを書く。許可する子クラス名を親側に並べるpermitsの位置を調べ、継承を完全に禁止するfinalとの違いを予想する。
|
|
44
|
シールクラス
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第44回では、コマ主題「シールクラス」を扱う。sealedクラスは、直接継承できるサブクラスを限定するクラスである。permitsに許可する型を列挙し、各サブクラスがfinal、sealed、non-sealedのいずれかでその先の継承方針を示すことを確認する。許可された型と許可されていない型の宣言を並べ、コンパイル結果から閉じた階層の範囲を読み取る。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、継承を許す型を明示し、想定外の型が階層に入ることを防ぐ設計につながることから重要である。
|
|
|
コマ主題細目
|
① シールクラスによる継承の制約 ② シールクラスのサブクラスの扱い
|
|
細目レベル
|
① 学校の利用者をStudentとTeacherの二種類だけとして扱うシステムを考える。通常の親クラスSchoolMemberは、別の開発者が自由に継承できるため、設計者が予定していない種類が追加される可能性がある。扱える種類を決めておきたい場合、どのクラスが直接の子クラスになれるかを親クラス側で制限する必要がある。シールクラスは、継承を許可するクラスをあらかじめ指定できるクラスである。sealedを付けたSchoolMemberのpermitsへStudentとTeacherを記述すると、それ以外のクラスはSchoolMemberを直接継承できない。授業では、許可された二つのクラスと、許可されていないGuestクラスを宣言してコンパイル結果を比べる。シールクラスが、システムで扱う種類を予定した範囲に保ち、想定外のクラス追加を防ぐために役立つことを具体例から理解する。
|
② シールクラスから直接継承を許可された子クラスは、その先の継承方針をfinal、sealed、non-sealedのいずれかで明示する。finalはその子から先の継承を禁止し、sealedはさらに許可する型を限定し、non-sealedは通常の継承が可能な状態へ戻す。親が制限した階層の方針を、子が曖昧にしないための規則である。授業では、一つのsealedな親から三種類の子を派生させ、それぞれの先に新しいクラスを追加できるかを継承図で確認する。permitsにない型が直接の子になろうとする例や、許可された子が継承方針を宣言しない例が成立しない理由も整理する。各キーワードを独立に暗記するのではなく、どこで階層を閉じ、どこで限定し、どこで再び開くかという設計者の判断を図と宣言から読み取る。
|
|
キーワード
|
① sealed ② permits ③ final ④ non-sealed ⑤ 閉じた継承階層
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 sealedなSchoolMemberのpermitsにStudentとTeacherを指定し、二つの子クラスを宣言する。許可されていないGuestが直接extendsする例をコンパイルし、拒否されることを確認する。許可された子へfinal、sealed、non-sealedをそれぞれ付け、その先へ子クラスを追加できるかを継承図で整理する。どこで階層を閉じるかを用途から説明する。
◆次回授業の予習 次回は、第25回から第44回の継承とクラス設計を対象とするJava Bronze問題演習である。抽象クラス、インターフェース、シールクラスについて、直接newできる型、実装が必要なメソッド、継承を許可された型を確認する表を作る。通常の継承、implements、インターフェースのextendsを含む宣言を一つずつ選び、キーワードの前後に置かれる型を確認する。
|
|
45
|
Java Bronze問題演習-継承とクラスの設計-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第45回では、コマ主題「Java Bronze問題演習-継承とクラスの設計-」を扱う。第25回以降の継承とポリモーフィズムに、抽象クラス、インターフェース、sealedクラスを加えた問題演習である。宣言型と実体型、オーバーライドと隠蔽、継承を制限する宣言を分類し、各選択肢のコンパイル可否と実行結果を別々に判定する。出題範囲は第45回までに扱ったクラス設計と型階層に限定する。環境プログラミングⅡ全体では、この回は「継承とクラスの設計」のトピックに位置づき、抽象クラス、インターフェース、継承制限を含む型設計を問題上で総合的に判断することから重要である。
|
|
|
コマ主題細目
|
① Java Bronze問題演習-継承とクラスの設計-
|
|
細目レベル
|
① 授業の前半では、抽象メソッドと抽象クラス、インターフェースのメンバと実装、インターフェース同士の継承、シールクラスによる継承制限を復習する。どの型を直接生成できるか、具体クラスがどの抽象メソッドを用意すべきか、どの型が継承を許可されているかを宣言から確認する。後半では、継承とクラス設計を範囲とするJava Bronze形式の模擬問題を解き、正答と誤答の両方を解説する。抽象クラスとインターフェースの役割を区別し、implementsとextendsの対象、抽象メソッドを実装する責任、sealed階層の許可関係を順に調べる。複数のクラス宣言が示された問題では、最上位から関係を図にしてからコンパイル可否を判断する。誤答した内容は、生成、実装、型階層の制約という三つの観点で復習し、期末試験へ向けた弱点を明確にする。
|
|
キーワード
|
① 抽象クラス ② インターフェース ③ シールクラス ④ 継承 ⑤ ポリモーフィズム
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Java Bronze形式の問題を、通常の継承、抽象クラス、インターフェース、シールクラスに分類して解き直す。抽象型の問題は生成可能か、インターフェースの問題は必要な実装がそろっているか、シールクラスの問題はpermitsの許可対象かを確認する。選択肢ごとに最初に確認した宣言を記録し、偶然選べた問題を残さないようにする。
◆次回授業の予習 第46回からパッケージを扱う。これまで一つの場所に置いていたPerson、Student、Teacherなどのクラスを、役割ごとのグループに分けるとしたら、どのような名前にするかを考える。同じStudentというクラス名が別のグループにも存在する場合、どのStudentを使うか区別する必要がある理由を書く。package文をソースファイルのどこに置くかも確認しておく。
|
|
46
|
パッケージの宣言
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第46回では、コマ主題「パッケージの宣言」を扱う。ここではパッケージの基本的な役割と、クラスをパッケージに所属させるためのpackage文について学ぶ。パッケージを利用することで、関連するクラスを分類・整理したり、同じ名前のクラスを区別したりできることを理解する。また、package文の記述方法や記述位置、階層的なパッケージ名、命名方法、package文を省略した場合の無名パッケージについて学びます。
|
|
|
コマ主題細目
|
① パッケージの役割 ② package文
|
|
細目レベル
|
① パッケージとは、関連するクラスやインターフェースなどをひとまとまりにして、分類・管理するための仕組みである。プログラムの規模が大きくなりクラスの数が増えた場合でも、役割や機能ごとにパッケージを分けることで、プログラム全体の構成を整理しやすくする。また、クラスはパッケージ名とクラス名を組み合わせることで識別されるため、異なるパッケージであれば同じ名前のクラスを定義することもできる。さらに、パッケージはアクセス制御とも関係しており、同じパッケージに所属するクラスからはアクセスできる一方、異なるパッケージからはアクセスできないようにするなど、クラスやメンバの利用範囲を決める単位としても機能することを学びます。
|
② package文は、ソースファイルに記述されたクラスやインターフェースなどが、どのパッケージに所属するのかを宣言するための文です。package パッケージ名;という基本的な記述方法と、package文は原則としてソースファイルの先頭に記述するというルールについて学びます。また、school.studentのようにドット(.)で区切って階層的な名前を付けられることや、パッケージ名には一般的に小文字を使用し、組織ではドメイン名を逆順にした名前が用いられることについても確認します。さらに、package文を記述しなかったクラスは「無名パッケージ」に所属することを理解し、これまでpackage文を使用せずに作成してきたクラスとの関係についても学びます。
|
|
キーワード
|
① パッケージ ② packageキーワード ③ 階層的なパッケージ ④ 無名パッケージ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 パッケージの役割を復習し、必要なパッケージの作成ができることを目標に復習する。まず、school.studentパッケージに所属するStudentクラスの作成をする。その際にはnameというString型のフィールド変数とその変数に値を代入するコンストラクタと、代入された値を表示するメソッドを作成する。次にパッケージを分ける理由を考えるために「Student」「Teacher」「Course」「Score」「Schedule」クラスを作成するならどのようなパッケージの仕組みにするか考える。
◆次回授業の予習 第47回ではパッケージの利用について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
47
|
パッケージの利用
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第47回では、コマ主題「パッケージの利用」を扱う。Javaで用意されているクラスが、役割や機能に応じてさまざまなパッケージに分類されていることを理解し、異なるパッケージに所属するクラスを利用する方法について学修する。java.utilやjava.langなどの代表的なパッケージと、そこに所属するクラスを確認したうえで、完全修飾クラス名とimport文を利用したクラスの指定方法を確認する。また、import文の記述方法や記述位置、ワイルドカードによる指定、import文を省略できる場合について理解する。さらに、同名のクラスが存在する場合の扱いを通して、パッケージ名によってクラスを区別する仕組みについて理解を深める。
|
|
|
コマ主題細目
|
① Java標準APIのパッケージ ② import文
|
|
細目レベル
|
① Javaには、プログラムの開発に利用できるさまざまなクラスが標準APIとして用意されており、それらも役割や機能に応じてパッケージに分類されている。これまで利用してきた文字入力のためのScannerクラスや乱数を生成するためのRandomクラスなどが所属するjava.utilパッケージや、文字列を扱うためのStringクラス、基本的な処理を行うためのSystemクラス、数字に関するMathクラスなどが所属するjava.langパッケージを取り上げ、それぞれの特徴を学修する。
|
② 異なるパッケージに所属するクラスを利用する方法について学びます。java.util.Scannerのようなパッケージ名を含めた完全修飾クラス名による指定方法を確認したうえで、クラス名を簡潔に記述するためのimport文の役割、基本的な書き方、記述位置について確認する。また、複数のimport文において属するすべてのクラスを意味するワイルドカードを利用した指定方法を確認する。そして、同じパッケージやjava.langではimport文が不要であることを理解する。さらに、同名のクラスが存在する場合のimportの制約や、完全修飾クラス名を利用してクラスを区別する方法についても学修する。
|
|
キーワード
|
① java.utilパッケージ ② java.langパッケージ ③ 完全修飾クラス名 ④ ワイルドカード
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 パッケージのimportの仕方とimportの必要性の有無について理解できるように復習する。特定のプログラムにおいて何をimportする必要があるのかを考える。そしてその異なる記述方法を考える課題とする。また、java.lang.Mathクラスはimportが必要であるかどうかを見て理解できるように復習する。
◆次回授業の予習 第48回ではパッケージとアクセス修飾子について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
48
|
パッケージとアクセス修飾子
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第48回では、コマ主題「パッケージとアクセス修飾子」を扱う。パッケージとアクセス修飾子の関係について学び、クラスやそのメンバをどの範囲から利用できるのかを理解する。アクセス修飾子を記述しない場合のデフォルトアクセスについて、同じパッケージと異なるパッケージからのアクセスの違いを確認する。また、これまでに学習したpublic、protected、privateについても、パッケージとの関係に注目してアクセス可能な範囲を整理する。さらに、クラス自体とフィールドやメソッドなどのメンバでは指定できるアクセス修飾子が異なることを確認し、適切なアクセス範囲を設定することの必要性について理解を深める。
|
|
|
コマ主題細目
|
① デフォルトの修飾子 ② アクセス修飾子まとめ
|
|
細目レベル
|
① アクセス修飾子を記述しなかった場合に適用されるデフォルトアクセス(package-private)について学修する。デフォルトアクセスでは、同じパッケージに所属するクラスからはアクセスできるが、異なるパッケージからはアクセスできないことを、実際のプログラムを通して確認する。また、import文によってクラスを利用できるようにしても、そのクラスのメンバに自由にアクセスできるわけではないことを理解する。さらに、フィールドやメソッド、コンストラクタだけでなく、クラス自体にもデフォルトアクセスを適用できることを学び、クラスとメンバそれぞれのアクセス制御について理解する。
|
② これまでに学習したpublic、protected、privateにデフォルトアクセスを加え、4種類のアクセス範囲をパッケージとの関係から整理する。publicは異なるパッケージからもアクセスでき、privateは宣言されたクラスの内部からのみアクセスできることを確認する。また、protectedは同じパッケージから利用できるほか、異なるパッケージではサブクラスから継承されたメンバとしてアクセスできることを学修する。それぞれのアクセス可能範囲を比較するとともに、必要以上にメンバを公開せず、利用目的に応じて適切なアクセス修飾子を選択することの重要性について理解する。
|
|
キーワード
|
① デフォルトアクセス ② アクセス修飾子 ③ import文とアクセス権限
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 デフォルトアクセスのみならず、アクセス修飾子全体について理解できるように復習する。特にプログラムを読んで特定のフィールド変数、メソッド、コンストラクタなどにアクセスができるのかを確認する。また、アクセス制御によりコンパイルエラーが起きる箇所を確認してそれを修正できるようにする。
◆次回授業の予習 第49回ではプリミティブ型と参照型について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
49
|
プリミティブ型と参照型
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第49回では、コマ主題「プリミティブ型と参照型」を扱う。Javaにおけるプリミティブ型と参照型の違いについて、データの保存方法とプログラム上の挙動を関連付けながら学修する。プリミティブ型では変数に値そのものが保存されるのに対し、参照型ではデータが保存されている場所を示す情報を通してデータを扱うことを理解する。特に、配列を別の変数へ代入した場合を例として、複数の変数が同じデータを参照することで、一方から行った値の変更が他方にも反映される仕組みを確認する。さらに、「==」演算子による比較について、プリミティブ型では値を、参照型では参照先を比較することを理解する。また、equals()メソッドの役割と「==」との違いを確認し、String型における適切な文字列の比較方法を身につける。
|
|
|
コマ主題細目
|
① 参照型とデータ管理 ② 等しいことの比較
|
|
細目レベル
|
① プリミティブ型と参照型について、変数への代入や値の変更によって生じる挙動の違いを、データの管理方法と関連付けて学修する。まず、プリミティブ型の変数を別の変数へ代入した後に値を変更する例と、配列などの参照型を別の変数へ代入した後に要素を変更する例を比較し、両者の挙動が異なることを確認する。そのうえで、プリミティブ型では変数が値を保持するのに対し、参照型ではデータが保存されている場所を示す情報を保持し、その情報を通してデータを利用する仕組みを学ぶ。特に、参照型の変数を別の変数へ代入すると参照先が共有されるため、一方の変数からデータを変更すると、同じデータを参照する他方にも変更が反映されることを理解する。
|
② プリミティブ型と参照型では「等しい」という判断の仕方が異なることを、「==」演算子とequals()メソッドの働きを通して学修する。まず、「==」演算子を使用した場合、プリミティブ型では変数に代入されている値そのものが等しいかどうかを比較するのに対し、参照型では同じデータを参照しているか、すなわち参照先が同一であるかを比較することを理解する。そのため、同じ内容を持つ配列であっても、それぞれ別に生成された配列では「==」による比較結果がfalseとなることを確認する。さらに、Objectクラスに定義されているequals()メソッドとオーバーライドとの関係を確認し、String型ではequals()メソッドによって文字列の内容が等しいかを比較できることを学ぶ。
|
|
キーワード
|
① プリミティブ型 ② 参照型 ③ equals()メソッド ④ ==演算子
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 参照型の挙動について理解できるように復習する。以下のようなプログラムにおいてその実行結果が理解できるように確認をする。
public class Review { public static void main(String[] args) { int[] a = {10, 20, 30}; int[] b = a; int[] c = {10, 20, 30};
a[1] = 50;
System.out.println(a[1]); System.out.println(b[1]); System.out.println(c[1]);
System.out.println(a == b); System.out.println(a == c); } }
より発展的に以下のようなプログラムでの実行結果についても理解できるとよい。
String str1 = new String("Java"); String str2 = new String("Java");
System.out.println(str1 == str2); System.out.println(str1.equals(str2));
◆次回授業の予習 第50回ではnullとガベージコレクタについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
50
|
nullとガベージコレクタ
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第50回では、コマ主題「nullとガベージコレクタ」を扱う。Javaにおけるnullの意味と、参照の状態がプログラムの実行やメモリ管理に与える影響について学修する。まず、nullは参照型の変数において参照先が存在しないことを示すキーワードであることを理解し、プリミティブ型には代入できないことを確認する。また、nullが代入された変数からメソッドやフィールド、配列の要素へアクセスするとNullPointerExceptionが発生することを、具体的なプログラムを通して理解する。さらに、参照型の変数への再代入によって、生成されたインスタンスを参照する変数がなくなる場合があることを確認する。そのような利用できなくなったインスタンスがガベージコレクタの対象となり、JVMによって適切なタイミングでメモリが解放されるというJavaのメモリ管理の仕組みを学ぶ。
|
|
|
コマ主題細目
|
① nullと実行時例外 ② ガベージコレクタ
|
|
細目レベル
|
① 参照型におけるnullの意味と、nullを扱うことで発生するNullPointerExceptionについて学修する。String型の配列やフィールド変数の初期値を例としてnullを確認したうえで、nullが文字列ではなく「参照先が存在しないこと」を示すキーワードであることを、スタック領域とヒープ領域の関係から理解する。また、nullは参照型の変数には代入できる一方、プリミティブ型の変数には代入できず、代入しようとするとコンパイルエラーとなることを確認する。さらに、nullが代入された変数からメソッドを呼び出す場合、フィールドへアクセスする場合、配列の要素へアクセスする場合にはNullPointerExceptionが発生することを、実際のプログラムと実行結果を通して理解する。
|
② 参照型の変数とインスタンスの関係をもとに、参照されなくなったオブジェクトとガベージコレクタの仕組みについて学修する。まず、newキーワードによって生成されたインスタンスを変数が参照している状態を確認し、別の参照情報を変数へ再代入することで、それまで参照していたインスタンスへの参照元がなくなる場合があることを理解する。参照元を失ったインスタンスは、メモリ上には存在していてもプログラムからアクセスできず、そのまま残るとメモリを圧迫する要因となる。そこでJavaでは、JVM上で動作するガベージコレクタが、このような利用されなくなったインスタンスを対象としてメモリ領域を解放することを学ぶ。また、対象となった直後に必ずメモリが解放されるわけではないことも理解する。
|
|
キーワード
|
① null ② NullPointerException ③ ガベージコレクタ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 nullやガベージコレクタの挙動について理解できるように復習する。以下のようなプログラムにおいてその実行結果が理解できるように確認をする。
class Student { String name; }
public class Review { public static void main(String[] args) { Student s1 = new Student(); Student s2 = new Student(); Student s3 = s1;
s1.name = "田中"; s2.name = "鈴木";
s1 = s2; s2 = null;
System.out.println(s1.name); System.out.println(s3.name); System.out.println(s2.name); } }
◆次回授業の予習 第51回ではラッパークラスの基本について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
51
|
ラッパークラスの基本
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第51回では、コマ主題「ラッパークラスの基本」を扱う。Javaにおけるラッパークラスの役割と、プリミティブ型との相互変換や型変換の基本的な仕組みについて学修する。まず、プリミティブ型の値をオブジェクトとして扱えるようにするため、それぞれのプリミティブ型に対応したラッパークラスが用意されていることを理解し、valueOf()メソッドを利用した基本的な扱い方を確認する。次に、プリミティブ型からラッパークラスへ変換するボクシングと、その逆となるアンボクシングについて学び、それらが自動的に行われるオートボクシングとオートアンボクシングの仕組みを理解する。さらに、ラッパークラス間で型を変換する際には、アンボクシング、必要に応じたキャスト、ボクシングという手続きを行うことや、ラッパークラスを用いた算術演算では暗黙的なアンボクシングが行われることを理解する。
|
|
|
コマ主題細目
|
① ラッパークラスとは ② autoboxing/unboxing ③ ラッパークラスの型変換
|
|
細目レベル
|
① プリミティブ型とラッパークラスの関係を確認し、ラッパークラスが必要とされる理由と基本的な利用方法について学修する。Javaではプリミティブ型の値をオブジェクトとして扱えるようにするため、byteにはByte、intにはInteger、charにはCharacterなど、8種類のプリミティブ型それぞれに対応したラッパークラスが用意されていることを理解する。また、ラッパークラスを利用することで、プリミティブ型では利用できなかったメソッドを活用できることを確認する。さらに、プリミティブ型の値をラッパークラスのオブジェクトとして扱うボクシングについて学び、valueOf()メソッドを利用した値の代入方法を身につけるとともに、newキーワードによるラッパークラスの生成が非推奨であることについても確認する。
|
② プリミティブ型とラッパークラスの間で値を相互に変換する仕組みについて学修する。プリミティブ型の値をラッパークラスのオブジェクトとして扱えるようにする処理をボクシング、ラッパークラスのオブジェクトからプリミティブ型の値を取り出す処理をアンボクシングと呼ぶことを理解する。ボクシングではvalueOf()メソッド、アンボクシングではintValue()などの「xxxValue()メソッド」を利用して明示的に変換できることを確認する。さらに、これらのメソッドを明示的に記述しなくても、プリミティブ型からラッパークラスへの代入ではオートボクシング、その逆の代入ではオートアンボクシングが自動的に行われることを、実際のプログラムを通して理解する。
|
③ プリミティブ型で学修した拡大変換や縮小変換を振り返りながら、ラッパークラスにおける型変換の方法について学修する。ラッパークラス同士ではプリミティブ型のように直接的な型変換を行うことができないため、一度アンボクシングしてプリミティブ型の値を取り出し、必要に応じてキャストによる型変換を行った後、再びボクシングして目的のラッパークラスへ変換するという手続きを理解する。また、縮小変換では小数部分が失われるなど、データが変化する可能性があることも確認する。さらに、ラッパークラスの変数に対して算術演算を行うと、自動的にアンボクシングされてプリミティブ型の値として計算が行われることを理解し、型変換と自動変換の関係を整理する。
|
|
キーワード
|
① ラッパークラス ② autoboxing ③ unboxing ④ 型変換
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 ラッパークラスの挙動について理解できるように復習する。特にプログラム上のどこでboxing/unboxingが起きているのかを理解できることが重要である。例えば以下のようなプログラムでそれが説明できることが理想である。
public class Review { public static void main(String[] args) { int a = 10;
Integer b = Integer.valueOf(a); int c = b.intValue();
Integer d = 20; int e = d;
Double f = Double.valueOf(c); int result = d + e;
System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(f); System.out.println(result); } }
◆次回授業の予習 第52回ではコレクションフレームワークの基本について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
52
|
コレクションフレームワークの基本
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第52回では、コマ主題「コレクションフレームワークの基本」を扱う。Javaにおいて複数のデータを効率的かつ柔軟に扱うためのコレクションフレームワークについて、その基本的な考え方と利用方法を学修する。まず、複数のデータの集合であるコレクションと、それをJavaで扱うための仕組みであるコレクションフレームワークの意味を理解し、従来利用してきた配列との違いを確認する。また、代表的なコレクションであるList、Set、Mapについて、データの順序、重複の可否、キーと値の組み合わせといった特徴を整理する。そのうえで、Listを扱うArrayListクラスについて、宣言とインスタンス生成、要素の追加や初期化、挿入・削除・変更などの基本操作を実際のプログラムを通して学ぶ。さらに、size()による要素数の取得やget()による特定要素へのアクセス方法を身につける。
|
|
|
コマ主題細目
|
① コレクションフレームワークとは ② ArrayListの基本的な操作
|
|
細目レベル
|
① 複数のデータをまとめて扱うコレクションと、それをJavaで利用するためのコレクションフレームワークについて学修する。これまで利用してきた配列と比較しながら、配列では生成時に要素数を決める必要があるのに対し、コレクションではデータの追加に応じて要素数を柔軟に増やせることを理解する。また、代表的なコレクションとしてList、Set、Mapの特徴を確認する。Listは要素番号を持ち、順番にデータを保存すること、Setは要素番号を持たず、重複する値を許さないこと、Mapはキーと値を組み合わせてデータを保存し、キーの重複を許さないことを学ぶ。これらの特徴を比較することで、扱うデータや目的に応じて適切なコレクションを選択するための基礎的な考え方を身につける。
|
② ListをJavaで扱うためのクラスであるArrayListについて、基本的なプログラムの記述方法と要素の操作方法を学修する。まず、ArrayListを利用するためのimport文、型の指定、宣言とインスタンス生成の方法を確認し、型として参照型を指定する必要があるため、整数などを扱う場合にはラッパークラスを利用することを理解する。次に、add()メソッドによる要素の追加や挿入、Arrays.asList()を利用した初期化、remove()による削除、set()による変更を実際のプログラムを通して学ぶ。さらに、size()メソッドによって現在の要素数を取得する方法や、get()メソッドによってインデックスを指定して特定の要素を取得する方法を確認し、ArrayListに格納されたデータを目的に応じて操作するための基本的な技能を身につける。
|
|
キーワード
|
① コレクション ② コレクションフレームワーク ③ ArrayList ④ さまざまなメソッド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 コレクションフレームワークの使い分けとArrayListの基本的な操作について理解できるように復習する。まず、「学生のテスト得点を受験した番号順に保存する」「イベントの参加者の管理番号を重複しないように保存する」「学籍番号を対応させて保存する」といったものを管理するときにリスト、セット、マップのどれが適しているかを考え、その理由を述べられるようにする。また、ArrayListの基本的な操作ができるように① "bread"、"milk"、"egg"を保存したリストを作成する、② 末尾に"apple"を追加する、③ "milk"と"egg"の間に"cheese"を挿入する、④ "bread"を削除する、⑤ "apple"を"orange"へ変更する、⑥ リストの要素数を表示する、⑦ インデックス1の要素を表示する、⑧ 最後にリスト全体を表示する、という流れが可能なプログラムを作成する。
◆次回授業の予習 第53回ではArrayListの実践的な処理について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
53
|
ArrayListの実践的処理
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第53回では、コマ主題「ArrayListの実践的処理」を扱う。ArrayListの基本操作を発展させ、格納された複数のデータに対して繰り返し処理や並べ替えを行う方法と、整数を格納したリストの扱い方について学修する。まず、ArrayListがインデックスを持つことを利用し、size()メソッドとget()メソッドを組み合わせたfor文による要素の取得方法を確認するとともに、拡張for文を利用してすべての要素を順番に処理する方法を学ぶ。さらに、Collectionsクラスのsort()メソッドを利用した昇順・降順のソート方法を身につける。次に、ArrayListには参照型を格納する必要があることを踏まえ、整数を扱う場合にはIntegerクラスを利用することを確認する。その際に行われるオートボクシングとオートアンボクシングについて復習し、繰り返し処理と組み合わせて数値データを処理する方法を理解する。
|
|
|
コマ主題細目
|
① リストのソート ② 整数を格納したリスト
|
|
細目レベル
|
① ArrayListに格納された複数の要素を順番に取り出して処理する方法と、要素を並べ替える方法について学修する。まず、ArrayListがインデックスを持つことを利用し、size()メソッドで要素数を取得しながらfor文を繰り返し、get()メソッドで各要素へアクセスする方法を確認する。次に、すべての要素を順番に処理する場合には拡張for文を利用できることを学び、通常のfor文とは異なりインデックスを直接利用できないという特徴も理解する。さらに、配列では複数のfor文を組み合わせてソートしていたことと比較し、ArrayListではCollectionsクラスのsort()メソッドによって簡潔に昇順へ並べ替えられることを学ぶ。また、Collections.reverseOrder()を指定することで降順にも並べ替えられることを理解する。
|
② ArrayListで整数を扱う方法について、プリミティブ型とラッパークラスの関係を振り返りながら学修する。ArrayListには参照型を格納するため、int型の整数を扱う場合には対応するラッパークラスであるInteger型を指定し、ArrayList<Integer>としてリストを生成することを理解する。また、int型の値をInteger型としてリストへ追加する際にはオートボクシングが行われ、Integer型の要素をint型の変数として取り出す際にはオートアンボクシングが行われることを確認する。さらに、for文を利用して複数の整数を効率的にリストへ追加する方法や、拡張for文を用いて格納された整数を順番に取り出して処理する方法を学び、これまで個別に学修してきたラッパークラス、繰り返し処理、ArrayListの知識を関連付けて活用できるようにする。
|
|
キーワード
|
① リストのソート ② 拡張forループ ③ Collectionsクラス ④ sort()メソッド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 整数を格納したリストにおける様々な処理ができるように復習する。以下の要件を満たすプログラムを作成する。① Integer型の値を格納するscoreListというArrayListを作成する。② 72, 85, 64, 91, 78, 56, 88を順番に格納する。③ for文を使い、「1人目:72点」の形式ですべての得点を表示する。④ 得点を昇順に並べ替えてリスト全体を表示する。⑤ 得点を降順に並べ替えてリスト全体を表示する。⑥ 拡張for文を使って、80点以上の得点だけを表示する。
◆次回授業の予習 第54回ではオブジェクト型とジェネリクスについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
54
|
オブジェクト型とジェネリクス
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第54回では、コマ主題「オブジェクト型とジェネリクス」を扱う。JavaにおけるObject型の特徴と、コレクションフレームワークで利用されるジェネリクスの仕組みについて学修する。まず、すべてのクラスがObjectクラスを暗黙的に継承していることを確認し、ポリモーフィズムによってStringやIntegerなど異なるクラスのオブジェクトをObject型の変数として扱えることを理解する。一方、Object型として扱うと、元のクラスに固有のメソッドや演算をそのまま利用できず、必要に応じてダウンキャストしなければならないことを学ぶ。さらに、この特徴をArrayListと関連付け、型を指定しないコレクションでは異なる種類のデータを格納できる反面、取り出す際のキャストや実行時エラーなどの問題が生じることを確認する。そのうえで、ジェネリクスによって格納する型を指定する意味と、安全にコレクションを利用する必要性を理解する。
|
|
|
コマ主題細目
|
① オブジェクト型の扱い方 ② コレクションとジェネリクス
|
|
細目レベル
|
① JavaにおけるObjectクラスの位置づけと、Object型を利用したポリモーフィズムについて学修する。JavaではすべてのクラスがObjectクラスを暗黙的に継承しており、StringやIntegerなどもObjectクラスの子孫となることを確認する。そのため、親クラス型の変数に子クラスのインスタンスを代入できるポリモーフィズムの仕組みにより、さまざまな参照型の値をObject型の変数として扱えることを理解する。一方、Object型として扱った場合には、元のクラスが持つ固有のメソッドや演算をそのまま利用できないことを確認する。さらに、Object型として保持された値を元の型として利用するためには、ダウンキャストによる明示的な型変換が必要となることを学び、Object型の利便性と制約の両面を理解する。
|
② コレクションフレームワークにおけるジェネリクスの仕組みと、その必要性について学修する。型を指定しないArrayListでは、要素がObject型として扱われるため、文字列や数値など異なる型の値を同じリストへ格納できることを確認する。一方、この方法ではリストに格納されるデータの目的や種類が分かりにくくなるほか、取り出した値を利用する際にダウンキャストが必要となり、誤った型へのキャストによってClassCastExceptionなどの実行時エラーが発生する可能性があることを理解する。そのうえで、ArrayList<String>のように<>を用いて扱う型を指定するジェネリクスを学び、異なる型の値を格納しようとした段階でコンパイルエラーとして検出できることから、型の安全性や可読性を高められることを理解する。
|
|
キーワード
|
① Object型 ② キャスト ③ ClassCastException ④ ジェネリクス
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Object型を持つ、ジェネリクスが指定されていないコレクションの扱いとその難しさについて理解できるように復習する。例えば以下のようなプログラムにおいて①"Java"、"Python"、100という異なる種類の値を同じリストへ格納できるのはなぜかを考える。②data1.length()と記述するとどうなるか。また、その理由を説明する。 ③data1に格納された文字列の長さを調べるためには、どのような処理が必要か考える。④data3を誤ってString型へキャストした場合、どのような問題が発生するか考える。⑤このリストを文字列だけを保存するリストに変更し、ジェネリクスを使って書き直す。という課題を行う。
import java.util.ArrayList;
public class Review { public static void main(String[] args) { ArrayList list = new ArrayList();
list.add("Java"); list.add("Python"); list.add(100);
Object data1 = list.get(0); Object data2 = list.get(1); Object data3 = list.get(2); } }
◆次回授業の予習 第55回ではリストの検索とエラー処理について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
55
|
リストの検索とエラー処理
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第55回では、コマ主題「リストの検索とエラー処理」を扱う。ArrayListに格納された複数のデータから必要な要素を検索する方法と、リストを操作する際に発生する代表的な実行時エラーについて学修する。まず、for文、if文、equals()メソッドを組み合わせて特定の要素を検索する処理を作成し、フラグを利用して検索結果を適切に判定する方法を理解する。さらに、contains()、indexOf()、lastIndexOf()など、検索を簡潔に実現するために用意されたメソッドの特徴と使い分けを学ぶ。次に、リストのインデックス範囲外へアクセスした際に発生するIndexOutOfBoundsExceptionや、繰り返し処理中にリストの構造を変更した際に発生するConcurrentModificationExceptionについて確認する。さらに、Iteratorを利用して要素を順番に取得しながら、安全に削除する方法を身につける。
|
|
|
コマ主題細目
|
① リストの検索 ② リストを扱うときの実行時エラー
|
|
細目レベル
|
① ArrayListに格納された複数の要素から、目的とするデータを検索するための基本的な考え方と方法について学修する。まず、for文によってリストの要素を順番に取得し、equals()メソッドを利用して検索対象と比較することで、特定の値が存在するかを判定する方法を確認する。また、boolean型のフラグを利用することで、検索結果に応じて「見つかった」「見つからなかった」を適切に判定する方法を学ぶ。そのうえで、検索用のメソッドとして、要素が含まれているかを真偽値で返すcontains()、最初に一致した要素のインデックスを返すindexOf()、最後に一致した要素のインデックスを返すlastIndexOf()の特徴を理解する。さらに、要素が存在しない場合にはindexOf()とlastIndexOf()が-1を返すことを利用した条件分岐についても学ぶ。
|
② ArrayListを操作する際に発生する代表的な実行時エラーについて、その発生原因と安全な操作方法を学修する。まず、存在しないインデックスを指定して要素へアクセス・追加しようとするとIndexOutOfBoundsExceptionが発生することを確認し、リストのsize()と指定可能なインデックスの関係を理解する。次に、拡張for文による繰り返し処理の途中でremove()などを用いてリストの構造を変更すると、ConcurrentModificationExceptionが発生することを学ぶ。そのうえで、繰り返しながら要素を安全に削除する方法としてIteratorの仕組みを理解し、iterator()による取得、hasNext()による次の要素の確認、next()による要素の取得、remove()による削除という一連の操作方法を身につける。
|
|
キーワード
|
① リストの検索 ② indexOf()メソッド ③ IndexOutOfBoundsException ④ Iterator
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 ArrayListの検索やそのリストの操作に使うメソッドやIteratorの扱い方について理解できるように復習する。まず、"apple"、"banana"、"orange"、"apple"、"melon"、"grape"を要素に持つリストを作成し、① "orange"がリストに含まれているかを調べ、結果を表示する。② "apple"が最初に保存されているインデックスを表示する。③ "apple"が最後に保存されているインデックスを表示する。④ "peach"を検索し、存在しない場合には「見つかりませんでした」と表示するようなプログラムを作成する。また、[10, 15, 20, 25, 30, 35, 40]の値を持つリストを作成し、20以上30以下の値をすべて削除、削除後のリストを表示するプログラムを作成する。
◆次回授業の予習 第56回ではリストにおけるインスタンスの扱いについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
56
|
リストにおけるインスタンスの扱い方
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第56回では、コマ主題「リストにおけるインスタンスの扱い方」を扱う。ArrayListを利用して、自作したクラスのインスタンスを複数まとめて管理する方法について学修する。これまでリストにはStringやIntegerなどの値を格納してきたが、自作クラスをジェネリクスの型として指定することで、複数のフィールドを持つインスタンスも1つの要素として保存できることを理解する。具体的には、材料名と分量をフィールドとして持つIngredientクラスを例に、セッタやコンストラクタを利用して異なる値を持つインスタンスを生成し、それらをArrayListへ追加する方法を学ぶ。さらに、インスタンスを格納したリストをそのまま出力すると、Objectクラスから継承したtoString()メソッドが呼び出されることを確認し、toString()をオーバーライドすることで、各インスタンスが保持する情報を目的に応じた形式で表示できることを理解する。
|
|
|
コマ主題細目
|
① インスタンスを管理する ② インスタンス変数の出力
|
|
細目レベル
|
① 自作したクラスのインスタンスをArrayListの要素として格納し、複数の関連する情報をまとめて管理する方法について学修する。まず、材料名と分量のような関連する情報を別々のリストで管理するのではなく、複数のフィールドを持つクラスとしてまとめる利点を理解する。そのうえで、privateなフィールドを持つIngredientクラスを作成し、セッタを利用してフィールドへ値を代入したインスタンスを生成する。さらに、ArrayList<Ingredient>のように自作クラスをジェネリクスの型として指定することで、Ingredientクラスの複数のインスタンスをリストへ格納できることを学ぶ。また、コンストラクタを利用してインスタンス生成と同時にフィールドを初期化する方法を確認し、セッタを利用する場合との記述方法の違いについても理解する。
|
② 自作クラスのインスタンスを格納したArrayListについて、その内容を適切な形式で出力する方法を学修する。StringやIntegerを格納したリストとは異なり、自作クラスのインスタンスをそのままSystem.out.println()で出力すると、初期状態では「クラス名@ハッシュコード」の形式で表示されることを確認する。この表示は、すべてのクラスが暗黙的に継承するObjectクラスのtoString()メソッドが呼び出されることによるものであることを理解する。そのうえで、自作クラス内でtoString()メソッドをオーバーライドし、フィールドに保存された値を組み合わせて戻り値とすることで、「材料名:分量」のように目的に応じた形式でインスタンスを表示できることを学び、リストに格納された複数のインスタンスを分かりやすく扱う方法を身につける。
|
|
キーワード
|
① リストの検索 ② indexOf()メソッド ③ IndexOutOfBoundsException ④ Iterator
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 インスタンスをArrayListでどのように管理するかについて理解できるように復習する。商品名と価格を保存するためのフィールド変数をもつProductクラスを作成する。この値はコンストラクタを用いて初期化できるようにしておく。そして「ノート:150円」「ペン:120円」「消しゴム:100円」の3つの商品をインスタンスとして生成し、このインスタンスをArrayListに格納後、最後にリスト全体を「商品名:価格(単位:円)」で出力できるようにする。
◆次回授業の予習 第57回ではデータ構造とコレクションについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
57
|
データ構造とコレクション
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第57回では、コマ主題「データ構造とコレクション」を扱う。複数のデータを効率的に管理するための代表的なデータ構造と、それらを利用したJavaのコレクションについて学修する。まず、キュー、スタック、ハッシュテーブル、木構造について、それぞれのデータの格納・取得方法や特徴を確認し、FIFOやLIFO、ハッシュ関数によるデータ管理、親子関係による階層構造などの基本的な考え方を理解する。また、利用目的によって適切なデータ構造が異なることを、具体的な利用場面と関連付けて学ぶ。さらに、JavaのコレクションとしてList、Queue、Set、Mapの特徴を整理し、それぞれがどのようなデータ構造と関連しているのかを確認する。特に、SetやMapにはハッシュテーブルを利用するものと木構造を利用するものがあることを理解し、保存するデータの性質や目的に応じて適切なコレクションを選択するための基礎を身につける。
|
|
|
コマ主題細目
|
① さまざまなデータ構造 ② さまざまなコレクション
|
|
細目レベル
|
① データを効率的に保存・取得するための代表的なデータ構造として、キュー、スタック、ハッシュテーブル、木構造について学修する。キューでは最初に格納したデータを最初に取り出すFIFO、スタックでは最後に格納したデータを最初に取り出すLIFOという処理順序を理解する。ハッシュテーブルでは、ハッシュ関数によってデータからハッシュ値を求め、その値を利用してデータを管理・検索する仕組みと、異なるデータが同じハッシュ値になる衝突について確認する。また、木構造ではノード間の親子関係、根や葉などの基本的な概念を理解し、階層的なデータ管理に適していることを学ぶ。さらに二分探索木を例として、一定の規則に従ってデータを配置することで検索やソートされた状態での管理が可能になることを理解する。
|
② Javaのコレクションフレームワークについて、これまで扱ってきたListに加えてQueue、Set、Mapの特徴と、それぞれのデータ構造との関係を学修する。Listは要素を順番に保存し、インデックスによって管理する可変長のコレクションであることを再確認する。Queueはデータの処理順序を考慮した操作に適していること、Setは重複しないユニークな値を管理するコレクションであること、Mapは重複しないキーと値を組み合わせて管理するコレクションであることを理解する。また、Setにはハッシュテーブルを利用するHashSetと木構造を利用するTreeSet、MapにはHashMapとTreeMapなどが存在することを確認し、同じ種類のコレクションでも内部のデータ構造によって検索速度や並び順などの特徴が異なることを学び、用途に応じて使い分けるための基礎を身につける。
|
|
キーワード
|
① スタック ② キュー ③ ハッシュテーブル ④ 木構造
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 状況に応じてどのようなデータ構造で保存しておくかについて理解できるように復習する。例えば以下のような場合、どのようなデータ構造、またはコレクションが適しているかを考える。① 病院の受付順に患者を呼び出したい。② Webブラウザで、最後に閲覧したページから順番に「戻る」処理を行いたい。③ 学生の学籍番号を保存し、同じ学籍番号を重複して登録できないようにしたい。④ 学籍番号と学生名を対応付けて管理したい。⑤ 会社の部署とその下位部署を階層的に管理したい。⑥ 大量の商品IDから特定の商品が存在するかを素早く調べたい。
◆次回授業の予習 第58回ではSetの処理について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
58
|
Setの処理
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第58回では、コマ主題「Setの処理」を扱う。Javaのコレクションフレームワークにおいて、重複しない要素の集合を扱うSetについて、HashSetとTreeSetを利用した基本的なプログラミング方法を学修する。まず、SetではListとは異なりインデックスを持たず、同じ値を複数追加しても重複した要素が保存されないことを、実際のプログラムを通して確認する。そのうえで、ハッシュテーブルを利用するHashSetについて、宣言とインスタンス生成、add()による追加、remove()による削除、contains()による検索、size()による要素数の取得、拡張for文による要素の取得などの基本操作を学ぶ。さらに、木構造を利用するTreeSetでも同様の操作が可能であることを確認し、要素が一定の順序で保持される特徴をHashSetと比較することで、目的に応じて両者を使い分けるための基礎を身につける。
|
|
|
コマ主題細目
|
① HashSet ② TreeSet
|
|
細目レベル
|
① ハッシュテーブルを利用して要素を管理するHashSetについて、基本的な宣言方法と要素の操作方法を学修する。まず、Set<型> 変数名 = new HashSet<>();によってSetを生成し、add()メソッドを用いて要素を追加する方法を確認する。その際、同じ値を複数回追加しても重複して保存されないことや、Listとは異なりインデックスを持たないため、追加した順序による要素の管理を前提としないことを理解する。さらに、remove()による要素の削除、contains()による特定要素の検索、size()による要素数の取得、拡張for文を利用した各要素の取得方法を学ぶ。これらの操作を通して、重複を排除したデータの管理や、順序を必要としないデータの集合を扱う場合にHashSetが適していることを理解する。
|
② 木構造を利用して要素を管理するTreeSetについて、基本的な操作方法とHashSetとの違いを学修する。Set<型> 変数名 = new TreeSet<>();によってTreeSetを生成し、add()、remove()、contains()、size()など、SetとしてHashSetと共通する基本操作を利用できることを確認する。また、TreeSetもSetであるため重複した値を保存しない一方、格納された要素が一定の順序で保持されることを実際の出力結果から理解する。特に、同じデータをHashSetとTreeSetの双方へ追加して結果を比較することで、HashSetでは要素の順序を前提としないのに対し、TreeSetでは並び順を利用したデータ管理が可能であることを確認する。これらの特徴から、重複の排除だけでなく、並び順も必要となる場合にTreeSetを選択するという使い分けを理解する。
|
|
キーワード
|
① セット ② HashSet ③ TreeSet
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Setの基本的な挙動と、HashSet・TreeSet間の違いについて理解できるように復習する。例えばHashSetとTreeSetのセットを2つ用意し、それぞれに105, 101, 108, 103, 101, 105, 102の値を保存する。そして①HashSetとTreeSetの内容をそれぞれ表示する。②それぞれの要素数をsize()で表示する。③学籍番号103が登録されているかcontains()で確認する。④学籍番号108をremove()で削除する。⑤拡張for文を使ってTreeSetの全要素を1つずつ表示する。⑥HashSetとTreeSetの実行結果を比較し、共通点と相違点を文章で説明する。
◆次回授業の予習 第59回ではMapの処理について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
59
|
Mapの処理
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第59回では、コマ主題「Mapの処理」を扱う。Javaのコレクションフレームワークにおいて、キーと値を組み合わせてデータを管理するMapについて、HashMapとTreeMapを利用した基本的なプログラミング方法を学修する。まず、MapではListやSetとは異なり、キーと値を1つの組として保存し、キーを指定して対応する値を取得できることを理解する。また、キーは重複できない一方、値は重複して保存できるという特徴を確認する。そのうえで、HashMapについて要素の追加・取得・変更・削除・検索などの基本操作を学び、キーを利用したデータ管理方法を身につける。さらに、TreeMapでも基本的な操作方法が共通していることを確認するとともに、キーが一定の順序で保持される特徴をHashMapと比較し、データの管理目的に応じて両者を使い分けるための基礎を身につける。
|
|
|
コマ主題細目
|
① HashMap ② TreeMap
|
|
細目レベル
|
① ハッシュテーブルを利用してキーと値の組み合わせを管理するHashMapについて、基本的な宣言方法と要素の操作方法を学修する。まず、Map<キーの型, 値の型> 変数名 = new HashMap<>();という形式でMapを生成し、put()メソッドを利用してキーと値のペアを追加する方法を確認する。また、同じキーを再度指定すると新しい値に置き換わることから、Mapではキーの重複が許されないことを理解する。さらに、get()によるキーに対応した値の取得、remove()による要素の削除、containsKey()やcontainsValue()によるキーや値の検索、size()による要素数の取得などの基本操作を学ぶ。これらの操作を通して、学籍番号と氏名など、一意のキーとそれに対応する情報を組み合わせて管理する場面でHashMapを利用できるようにする。
|
② 木構造を利用してキーと値の組み合わせを管理するTreeMapについて、基本的な操作方法とHashMapとの違いを学修する。Map<キーの型, 値の型> 変数名 = new TreeMap<>();として生成し、put()、get()、remove()、containsKey()、containsValue()、size()など、MapとしてHashMapと共通する基本操作を利用できることを確認する。また、TreeMapでもキーは重複できず、同じキーを指定すると対応する値が置き換わるというMap共通の特徴を理解する。そのうえで、HashMapではキーの並び順を前提としないのに対し、TreeMapではキーが一定の順序で保持されることを、同じデータを双方へ格納して比較することで確認する。これにより、キーと値の対応だけでなく、キーの並び順も利用したい場合にTreeMapを選択するという使い分けを理解する。
|
|
キーワード
|
① セット ② HashSet ③ TreeSet
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Mapの基本的な挙動と、HashMap・TreeMap間の違いについて理解できるように復習する。例えばHashMapとTreeMapのセットを2つ用意し、それぞれに105 → 田中、101 → 佐藤、108 → 鈴木、103 → 山田、106 → 高橋の値をペアで保存する。そして①学籍番号103の学生名を取得して表示する。 ②学籍番号108の学生を削除する。③学籍番号105が登録されているか確認する。 ④"佐藤"という学生名が登録されているか確認する。⑤学籍番号101の学生名を"伊藤"へ変更する。 ⑥現在登録されている学生数を表示する。⑦keySet()と拡張for文を利用し、すべての「学籍番号:学生名」を表示する。
◆次回授業の予習 第60回ではジェネリクスと型パラメータについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
60
|
ジェネリクスと型パラメータ
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第60回では、コマ主題「ジェネリクスと型パラメータ」を扱う。これまでArrayListやSet、Mapなどのコレクションで利用してきたジェネリクスについて、クラスを定義する側の視点からその仕組みを学修する。まず、ArrayList<String>などで指定していた型が、クラス側では型パラメータとして受け取られていることを確認し、型パラメータを利用することで、扱うデータ型をクラスの利用時に決定できることを理解する。次に、class Box<T>のようなジェネリッククラスを自ら定義し、型パラメータをフィールド、メソッドの引数、戻り値の型として利用する方法を学ぶ。さらに、Box<String>やBox<Integer>のように同じクラスから異なる型を扱えることや、指定した型以外の値を利用しようとするとコンパイルエラーになることを確認し、ジェネリクスによる再利用性と型安全性を理解する。
|
|
|
コマ主題細目
|
① 型パラメータの基本 ② ジェネリッククラス
|
|
細目レベル
|
① ジェネリクスを利用したクラスを定義するために必要となる型パラメータについて、その意味と基本的な記述方法を学修する。これまで利用してきたArrayList<String>やArrayList<Integer>を振り返り、<>に指定する型をクラス側で受け取るための仕組みとして型パラメータが存在することを理解する。具体的には、class Box<T>のようにクラス名の後ろへ型パラメータを宣言し、Tを具体的なデータ型が後から決定される場所として利用する方法を学ぶ。また、Tは変数ではなく型を表すためのパラメータであることを確認し、Typeを表すTのほか、Elementを表すE、Keyを表すK、Valueを表すVなど、役割に応じた慣例的な型パラメータ名が用いられることについても理解する。
|
② 型パラメータを持つジェネリッククラスについて、その定義方法と利用方法を実際のプログラムを通して学修する。class Box<T>のように型パラメータを宣言したクラスでは、Tをフィールドの型、メソッドの引数の型、戻り値の型などとして利用できることを確認する。そのうえで、Box<String>やBox<Integer>のようにインスタンスを利用する際に具体的な型を指定することで、1つのクラス定義から異なる型のデータを扱えることを理解する。また、String型を指定したオブジェクトへInteger型の値を代入するなど、指定された型と異なる値を扱おうとするとコンパイルエラーになることを確認する。これらを通して、型ごとに同じようなクラスを作成する必要がなくなる再利用性と、型の誤りを防止できる型安全性というジェネリクスの利点を理解する。
|
|
キーワード
|
① 型パラメータ ② コレクション ③ ジェネリクス
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 型パラメータを利用したクラスの扱い方について理解できるように復習する。まず型パラメータTを持つHolderクラスを作成する。Holderクラスには、T型の値を保存するprivateなフィールドdata、dataへ値を代入するsetData()メソッド、dataの値を返すgetData()メソッドを定義する。次にmainメソッドからHolderクラスをString型とInteger型の2種類でインスタンス化、dataに値を代入し、それぞれのdataに保存されている値を出力するプログラムを作成する。
◆次回授業の予習 第61回では型パラメータの活用について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
61
|
型パラメータの活用
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第61回では、コマ主題「型パラメータの活用」を扱う。型パラメータを利用したジェネリックプログラミングについて、複数の型パラメータとジェネリックメソッドを通して、より柔軟に型を扱う方法を学修する。まず、1つのクラスに複数の型パラメータを宣言できることを確認し、Pair<K, V>のように異なる役割を持つ2つの型を組み合わせて扱うジェネリッククラスを作成する。そのうえで、Mapでキーと値の型をそれぞれ指定していたことと関連付け、複数の型パラメータを利用する意味を理解する。さらに、クラス全体ではなく特定のメソッドだけに型パラメータを宣言するジェネリックメソッドについて学び、呼び出し時に渡される値に応じて異なる型を扱えることを確認する。これらを通して、型パラメータを利用して処理を共通化し、再利用性の高いプログラムを作成する方法を身につける。
|
|
|
コマ主題細目
|
① 複数の型パラメータ ② ジェネリックメソッド
|
|
細目レベル
|
① ジェネリッククラスでは複数の型パラメータを宣言し、異なる型を組み合わせて扱えることを学修する。まず、これまで利用したMapではMap<Integer, String>のようにキーと値について異なる2つの型を指定していたことを振り返り、ジェネリッククラスを定義する側でもclass Pair<K, V>のように複数の型パラメータを宣言できることを理解する。次に、K型とV型のフィールドや、それぞれを引数・戻り値として利用するコンストラクタやメソッドを定義し、Pair<Integer, String>やPair<String, Integer>など、同じクラスを異なる型の組み合わせで利用する方法を学ぶ。また、T、K、Vなどの型パラメータ名には慣例的な意味があり、役割に応じて分かりやすく指定することでクラスの構造を理解しやすくなることも確認する。
|
② クラス全体に型パラメータを宣言するジェネリッククラスに対し、メソッド単位で型パラメータを宣言するジェネリックメソッドについて学修する。public static <T> void print(T value)のように、戻り値の型の前で型パラメータを宣言する基本的な記述方法を理解し、Tを引数や戻り値の型として利用できることを確認する。また、同じメソッドにString、Integer、Doubleなど異なる型の値を渡して処理できることを実際のプログラムから確認する。さらに、ジェネリッククラスではクラスの利用時に型を指定するのに対し、ジェネリックメソッドではメソッドの呼び出しごとに扱う型を決定できるという違いを整理する。これにより、データ型だけが異なり処理内容が共通する場合に、同じ処理を型ごとに繰り返し定義せず共通化できることを理解する。
|
|
キーワード
|
① 型パラメータ ② 複数の型パラメータ ③ ジェネリックメソッド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 複数の型パラメータを利用したクラスの扱い方について理解できるように復習する。まず2つの型パラメータKとVを持つPairクラスを作成する。Holderクラスには、K型の値を保存するprivateなフィールドkeyとV型の値を保存するprivateなフィールドvalue、keyとvalueへ2つの引数を受け取って代入するコンストラクタ、keyとvalueの値を返すgetKey()メソッドとgetValue()メソッドを定義する。次にmainメソッドからPairクラスに「”ノート”, 150」を代入するインスタンスproduct1と、「101, “田中”」を代入するインスタンスstudent1を生成する。その後、それぞれのkeyやvalueの値にアクセスしてそれを出力するジェネリックメソッドを作成し、実際に処理するプログラムを作成する。
◆次回授業の予習 第62回ではJavaBronze演習-コレクションフレームワーク-について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
62
|
JavaBronze問題演習-コレクション-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第62回では、コマ主題「Java問題演習-コレクション-」を扱う。タイトルではコレクションとしているが、第46回以降に学修した「パッケージ」「プリミティブ型と参照型」「コレクション」を対象として、Javaの資格試験を意識した問題演習を行う。はじめに各分野の重要事項を簡単に振り返り、package文やimport文の役割、値と参照の扱いの違い、コレクションの種類や特徴、基本的な操作方法などを整理する。その後、実際のJava資格試験に近い形式の問題に取り組み、プログラムの実行結果やコンパイルエラーの有無、適切なコードの選択などを判断する。解答後には、正解だけでなく各選択肢がなぜ正しい、あるいは誤っているのかを確認し、問題演習を通して知識の定着とコードを正確に読み解く力の向上を目指す。
|
|
|
コマ主題細目
|
① JavaBronze問題演習-コレクション-
|
|
細目レベル
|
① 第46回以降に学修した「パッケージ」「プリミティブ型と参照型」「コレクション」を対象として、Javaの資格試験を意識した問題演習を行う。はじめに各分野の重要事項を簡単に振り返り、package文やimport文の役割、値と参照の扱いの違い、コレクションの種類や特徴、基本的な操作方法などを整理する。その後、実際のJava資格試験に近い形式の問題に取り組み、プログラムの実行結果やコンパイルエラーの有無、適切なコードの選択などを判断する。解答後には、正解だけでなく各選択肢がなぜ正しい、あるいは誤っているのかを確認し、問題演習を通して知識の定着とコードを正確に読み解く力の向上を目指す。
|
|
キーワード
|
① パッケージ ② プリミティブ型 ③ 参照型 ④ コレクション
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 「パッケージ」「プリミティブ型と参照型」「コレクション」について理解できるように復習する。偶然選べて正解したのではなく、なぜそうなるのかについてしっかりと説明ができるようになるまで問題を解き、復習する。
◆次回授業の予習 第63回では例外処理の基本について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
63
|
例外処理の基本
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第63回では、コマ主題「例外処理の基本」を扱う。Javaプログラムでは、文法上は正しくコンパイルできても、実行中の状況によって処理を継続できない問題が発生することがある。このような問題を例外といい、適切に対処するために例外処理を利用する。この回では、例外が発生した場合に通常の処理が中断され、処理されない例外によってプログラムが終了することを確認する。そのうえで、例外が発生する可能性のある処理をtryブロックに記述し、発生した例外をcatchブロックで捕捉して処理する基本的な方法を学ぶ。さらに、例外の発生にかかわらず実行されるfinallyブロックを扱い、try・catch・finallyの役割と基本的な実行順序を理解する。
|
|
|
コマ主題細目
|
① 例外とその処理結果 ② try-catch ③ finally
|
|
細目レベル
|
① Javaでは、コンパイルに成功したプログラムであっても、実行中の状況によって正常に処理を継続できなくなる場合がある。例えば、整数を0で除算した場合にはArithmeticException、nullが代入された参照変数からメソッドを呼び出した場合にはNullPointerExceptionが発生する。このように、プログラムの実行中に発生する異常な事態を例外として扱う。例外が発生すると、その地点で通常の処理は中断され、適切な例外処理が行われなければ、そのメソッドから処理が抜けて呼び出し元へ伝わっていく。最終的にどこでも処理されなければ、例外に関する情報が表示され、プログラムは異常終了する。
|
② 例外が発生する可能性のある処理を安全に実行するためには、try-catch文を使用する。tryブロックには例外が発生する可能性のある処理を記述し、例外が発生すると、その例外に対応するcatchブロックへ処理が移る。catchブロックには例外が発生した場合に行う処理を記述するため、適切に例外を捕捉できれば、例外によってプログラム全体が直ちに終了することを防ぐことができる。また、tryブロックで例外が発生すると、それより後に記述されたtryブロック内の処理は実行されない。一方、例外が発生しなかった場合にはcatchブロックは実行されない。基本構文とともに、この処理の分岐と実行順序を理解する。
|
③ finallyブロックは、tryブロックで例外が発生したかどうかにかかわらず、原則として最後に実行される処理を記述するために使用する。例外が発生しなければtryの処理後に、例外が発生してcatchで処理された場合にはcatchの処理後にfinallyが実行される。そのため、後始末など、例外の有無に左右されず実行したい処理を記述する場合に利用できる。この回では、try-catch-finallyの基本構文を確認するとともに、例外が発生する場合と発生しない場合で処理がどのような順序で進むのかを比較する。なお、リソースのclose()などの具体的な利用については、第69回のtry-with-resourcesにつながる内容として後に詳しく扱う。
|
|
キーワード
|
① 例外処理 ② try-catch ③ finally
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 例外処理の流れにおいて、どの処理が実行されるのかについて理解できるように復習する。例えば下のようなプログラムを確認し、その結果どの処理が実行されるのかを確認する。
public class Main { public static void main(String[] args) {
System.out.println("処理A");
try { System.out.println("処理B"); int num = 10 / 0; System.out.println("処理C"); } catch (ArithmeticException e) { System.out.println("処理D"); } finally { System.out.println("処理E"); }
System.out.println("処理F"); } }
◆次回授業の予習 第64回ではthrowキーワードについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
64
|
throwキーワード
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第64回では、コマ主題「throwキーワード」を扱う。Javaでは、0による除算などによって自動的に例外が発生するだけでなく、プログラムの処理の中で異常な状態を判定し、throwキーワードを使って意図的に例外を発生させることができる。この回では、throwに例外オブジェクトを指定して例外を発生させる基本的な記述方法を学び、例外が発生するとその地点で通常の処理が中断されることを確認する。また、ArithmeticExceptionやNullPointerException、ArrayIndexOutOfBoundsException、NumberFormatException、IllegalArgumentExceptionなど、代表的な実行時例外について、その発生原因と特徴を整理する。これらを通して、例外が異常な状態を表現するオブジェクトであることを理解する。
|
|
|
コマ主題細目
|
① throwキーワードによる例外の発生 ② さまざまな例外
|
|
細目レベル
|
① throwキーワードを使用すると、プログラムの中から意図的に例外を発生させることができる。throwの後には発生させる例外オブジェクトを指定し、throw new IllegalArgumentException();のように記述する。例えば、年齢として負の値が渡された場合など、文法的には正しくてもプログラム上許可したくない状態を条件分岐によって判定し、例外を発生させることができる。throwが実行されると、その地点で通常の処理は中断されるため、throwより後にある同じ処理の文は実行されない。また、例外クラスも通常のクラスと同様にnewによってインスタンスを生成でき、例外がオブジェクトとして扱われていることも確認する。
|
② Javaには、プログラムの実行中に生じるさまざまな問題を表す例外クラスがあらかじめ用意されている。整数を0で除算した場合のArithmeticException、nullを参照した場合のNullPointerException、配列の範囲外を参照した場合のArrayIndexOutOfBoundsException、文字列を不適切な数値へ変換した場合のNumberFormatExceptionなどが代表例である。また、メソッドに不適切な引数が渡されたことを表すIllegalArgumentExceptionは、throwによって意図的に発生させる例としても利用できる。それぞれの例外について、例外クラスの名前だけを暗記するのではなく、「どのような処理や状態によって発生するのか」をコードと対応させて理解する。
|
|
キーワード
|
① 例外処理 ② throwキーワード ③ さまざまな例外
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 例外処理においてどのような状況において例外を発生させるべきか、どのような例外を利用するべきかについて理解できるように復習する。例えば年齢を判断するプログラムや特定の情報を入力するプログラムにおいてどのような例外処理を行うべきかについて考える。
◆次回授業の予習 第65回では例外クラスの継承について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
65
|
例外処理の継承
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第65回では、コマ主題「例外処理の継承」を扱う。Javaで発生する例外やエラーはそれぞれクラスとして定義されており、Throwableクラスを基点とした継承関係によって体系的に整理されている。この回では、ThrowableのサブクラスであるErrorとException、さらにExceptionを継承するRuntimeExceptionと具体的な例外クラスの関係を確認する。また、例外は継承関係によってチェック例外と非チェック例外に分類でき、それぞれでコンパイラから要求される例外処理が異なることを学ぶ。これまで扱ってきた個々の例外を継承関係の中に位置付けることで、例外クラスの体系と、try-catchやthrowsが必要となる条件を理解する。
|
|
|
コマ主題細目
|
① 例外クラスの継承関係 ② チェック例外と非チェック例外
|
|
細目レベル
|
① Javaでは、例外として扱われるオブジェクトはThrowableクラスを継承しており、その直下には主にErrorとExceptionが存在する。ErrorはJVMの動作や実行環境などに関係する重大な問題を表し、通常はプログラムで積極的に処理することを想定しない。一方、Exceptionはプログラムで対処することが想定される例外を表し、そのサブクラスにはRuntimeExceptionがある。さらに、これまで扱ったArithmeticException、NullPointerException、IllegalArgumentExceptionなども、この継承関係の中に位置付けられる。例外も通常のクラスと同じように継承関係を持つことを確認し、後に学ぶcatchとポリモーフィズムの基礎とする。
|
② Javaの例外は、例外処理がコンパイラによって確認されるかどうかによって、チェック例外と非チェック例外に分類される。Exceptionのサブクラスのうち、RuntimeExceptionを継承していない例外はチェック例外であり、発生する可能性がある場合にはtry-catchで処理するか、throwsによって呼び出し元へ伝える必要がある。一方、RuntimeExceptionおよびそのサブクラスは非チェック例外であり、例外処理を記述しなくてもコンパイルできる。これまで扱ってきたArithmeticExceptionなどが例外処理なしでもコンパイルできた理由を、継承関係と結び付けて理解し、両者の違いを整理する。
|
|
キーワード
|
① 継承関係 ② チェック例外 ③ 非チェック例外
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
|
|
復習・予習課題
|
◆今回授業の復習 例外処理の継承関係をもとにどの例外が親子関係であるかについて理解できるように復習する。例えばArithmeticException、IOException、NullPointerException、NumberFormatException、Exception、RuntimeException、IllegalArgumentExceptionなどがどのような継承関係になっているかを確認する。また、Exception e = new ArithmeticException();という記述は可能かなどについても確認する。
◆次回授業の予習 第66回では複数のcatchとその順番について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
66
|
複数のcatchとその順番
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第66回では、コマ主題「複数のcatchとその順番」を扱う。1つのtryブロックでは、処理の内容によって複数の種類の例外が発生する可能性があり、それぞれに異なる処理を行いたい場合には複数のcatchブロックを記述できる。この回では、発生した例外の型に対応するcatchが選択され、1つのcatchが実行されると、それ以外のcatchは実行されないことを学ぶ。また、例外クラスには継承関係があるため、親クラス型のcatchではそのサブクラスの例外も捕捉できる。この仕組みを既習のポリモーフィズムと関連付け、複数のcatchを記述する場合には、より具体的な子クラスを先に、より広い親クラスを後に記述する必要があることを理解する。
|
|
|
コマ主題細目
|
① 複数のcatchの記述 ② 記述の順番とポリモーフィズム
|
|
細目レベル
|
① 1つのtryブロック内で複数の種類の例外が発生する可能性がある場合、それぞれの例外に対応するcatchブロックを複数記述することができる。例えば、数値への変換に失敗した場合と配列の範囲外を参照した場合とで異なる処理を行うように、例外の種類に応じて処理を分けることができる。例外が発生すると、記述されたcatchが上から順に調べられ、発生した例外を捕捉できる最初のcatchが実行される。そのcatchの処理が終了すると、後続のcatchがさらに実行されることはなく、try-catchの後の処理へ進む。複数のcatchは条件分岐のように、発生した例外に応じて処理を選択する仕組みであることを理解する。
|
② 例外クラスにも継承関係があるため、catchで例外を捕捉する際にもポリモーフィズムの考え方が利用される。例えば、ArithmeticExceptionはRuntimeExceptionを経由してExceptionを継承しているため、catch (Exception e)でもArithmeticExceptionを捕捉できる。これは、Exception e = new ArithmeticException();という代入が可能であることと同じ考え方である。そのため、親クラスのcatchを先に記述すると、子クラスの例外もそこで捕捉され、後ろの子クラスのcatchには到達できない。このような記述はコンパイルエラーとなるため、継承関係にある例外では、子クラスから親クラスの順にcatchを記述する必要がある。
|
|
キーワード
|
① 継承関係 ② チェック例外 ③ 非チェック例外 ④ 複数のcatchブロック
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 複数のcatchブロックが存在する場合、どこが実行されるのか、またどの例外をcatchできるのかについて理解できるように復習する。例えば以下のようなプログラムがあったときにargs[0]によってどこが実行されるかについて確認する。
public class Main { public static void main(String[] args) { String[] data = {"10", "abc", "30"};
try { int index = Integer.parseInt(args[0]); int num = Integer.parseInt(data[index]); System.out.println(num);
} catch (NumberFormatException e) { System.out.println("数値に変換できません");
} catch (ArrayIndexOutOfBoundsException e) { System.out.println("範囲外です");
} catch (RuntimeException e) { System.out.println("その他の実行時例外です"); }
System.out.println("終了"); } }
◆次回授業の予習 第67回ではマルチキャッチについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
67
|
マルチキャッチ
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第67回では、コマ主題「マルチキャッチ」を扱う。複数の種類の例外に対して同じ処理を行う場合、それぞれにcatchブロックを記述すると同じ処理を繰り返して記述することになる。Javaでは、複数の例外型を|で区切って1つのcatchに指定するマルチキャッチを利用することで、共通する例外処理を簡潔に記述できる。この回では、通常の複数のcatchと比較しながら、マルチキャッチの基本的な記述方法と利用場面を学ぶ。さらに、例外クラスの継承関係を確認し、親子関係にある例外型を同じマルチキャッチに指定できない理由を理解する。また、マルチキャッチで宣言された例外変数の扱いなど、記述上の注意点についても学ぶ。
|
|
|
コマ主題細目
|
① マルチキャッチの記述 ② 例外の継承とマルチキャッチ
|
|
細目レベル
|
① 1つのtryブロックで複数の種類の例外が発生する可能性があり、それぞれに同じ処理を行う場合には、マルチキャッチを利用して複数の例外を1つのcatchブロックで捕捉できる。マルチキャッチでは、catch (NumberFormatException | ArrayIndexOutOfBoundsException e)のように、対象となる複数の例外型を|で区切り、最後に共通の例外変数を1つ宣言する。これにより、例外ごとに同じcatchブロックを繰り返して記述する必要がなくなり、コードを簡潔にできる。この回では、前回学んだ複数のcatchと比較しながら、処理を分ける場合と共通化する場合の使い分けについて理解する。
|
② マルチキャッチでは複数の例外型を指定できるが、どのような例外でも自由に組み合わせられるわけではない。指定した例外クラス同士に継承による親子関係がある場合、同じマルチキャッチに記述するとコンパイルエラーとなる。例えば、NumberFormatExceptionはIllegalArgumentExceptionのサブクラスであるため、この2つを同時に指定することはできない。これは、親クラスであるIllegalArgumentExceptionだけで子クラスのNumberFormatExceptionも捕捉できるためである。また、マルチキャッチで宣言した例外変数には別の例外オブジェクトを再代入できないことも確認し、通常のcatchとの違いを理解する。
|
|
キーワード
|
① マルチキャッチ ② 例外の継承
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 既存のcatchブロックの記述方法を確認した上でマルチキャッチであればどのように記述できるかについて理解できるように復習する。例えば以下のようなプログラムをマルチキャッチに直して、そのうえ引数によってどのような結果になるかを考える。
public class Main { public static void main(String[] args) {
try { int index = Integer.parseInt(args[0]); int[] nums = {10, 20, 30}; System.out.println(nums[index]);
} catch (NumberFormatException e) { System.out.println("正しく入力してください");
} catch (ArrayIndexOutOfBoundsException e) { System.out.println("正しく入力してください"); } } }
◆次回授業の予習 第68回ではthrowsキーワードについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
68
|
throwsキーワード
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第68回では、コマ主題「throwsキーワード」を扱う。これまでの例外処理では、例外が発生する可能性のある処理をtryブロックに記述し、発生した例外をその場でcatchして処理する方法を扱ってきた。しかし、例外が発生したメソッドでは、その後にどのような対応を行うべきか判断できない場合もある。このような場合には、例外をその場で処理せず、呼び出し元のメソッドに処理を任せることができる。この回では、メソッド間で例外が伝わる仕組みを確認したうえで、throwsキーワードを使用して、発生する可能性のある例外をメソッド宣言に記述する方法を学ぶ。また、チェック例外ではtry-catchによる処理またはthrowsによる宣言が必要であることを理解する。
|
|
|
コマ主題細目
|
① 対応が異なる例外処理 ② throwsキーワード
|
|
細目レベル
|
① 例外が発生した場合、その例外を発生したメソッド自身が必ず処理しなければならないわけではない。メソッドの役割によっては、例外が発生したことは判断できても、その後に再度処理を行うのか、メッセージを表示するのか、処理を終了するのかまでは決められない場合がある。このようなときには、例外への具体的な対応を、そのメソッドを呼び出した側に任せることができる。この回では、例外が発生した場所でtry-catchを使って処理する方法と、例外を呼び出し元へ伝えて処理を任せる方法を比較し、プログラムの役割に応じて例外を処理する場所が異なることを理解する。
|
② メソッド内で発生する可能性のある例外をその場で処理せず、呼び出し元に処理を任せる場合には、メソッド宣言にthrowsキーワードを記述する。throwsの後には呼び出し元へ伝える可能性のある例外型を指定し、複数ある場合にはカンマで区切って記述する。特にチェック例外が発生する可能性のある処理では、その例外をtry-catchで処理するか、throwsによって宣言する必要がある。また、throwsを記述しただけで例外が発生するわけではなく、例外が発生した場合の処理を呼び出し元に任せることを示す宣言であることを理解し、例外を発生させるthrowとの役割の違いも整理する。
|
|
キーワード
|
① throwsキーワード ② さまざまな例外処理
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 throwsキーワードの利用において、そのメソッドが例外を発生させ、どのメソッドが処理をするのかについて理解できるように復習する。例えば以下のようなプログラムの穴埋めを行う。
public class Main {
static void checkAge(int age) throws Exception {
if (age < 0) { // ① ここで例外を発生させる }
System.out.println("年齢:" + age); }
public static void main(String[] args) {
// ② checkAge(-5)を呼び出し、 // 発生した例外をここで処理する
} }
◆次回授業の予習 第69回ではtry-with-resourcesについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
69
|
try-with-resources
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第69回では、コマ主題「try-with-resources」を扱う。プログラムで利用するオブジェクトの中には、使用後にclose()メソッドを呼び出してリソースを終了させる必要があるものが存在する。この回では、既習のScannerを題材として、まずclose()の役割を確認し、処理の途中で例外が発生した場合でも終了処理を行うためにfinallyを利用する方法を学ぶ。そのうえで、try-with-resourcesを利用すると、finallyにclose()を記述しなくてもリソースを自動的に終了できることを理解する。また、try-with-resourcesの基本構文、利用できるオブジェクトの条件、複数のリソースを扱う場合の記述方法と終了される順序についても確認する。
|
|
|
コマ主題細目
|
① finallyとclose() ② try-with-resourcesの使い方
|
|
細目レベル
|
① Scannerなどのリソースを利用した場合、使用後にはclose()メソッドを呼び出してリソースを終了させることができる。しかし、処理の途中で例外が発生すると、それ以降の処理は実行されないため、通常の処理の最後にclose()を記述しただけでは実行されない可能性がある。そこで、例外の発生にかかわらず原則として実行されるfinallyブロックにclose()を記述することで、リソースの終了処理を確実に行うことができる。この回では、既習のScannerを例に、第63回で学んだfinallyの役割を振り返り、例外処理において適切にリソースを終了させることの必要性を理解する。
|
② リソースの終了処理はfinallyを利用して行うことができるが、try-with-resourcesを利用すると、close()を明示的に記述せずに自動的にリソースを終了できる。try-with-resourcesでは、tryに続く丸括弧内で使用するリソースを宣言し、tryブロックの処理が終了すると自動的にclose()が呼び出される。これは正常に処理が終了した場合だけでなく、途中で例外が発生した場合にも行われる。また、利用できるのはAutoCloseableを実装したクラスであり、複数のリソースを扱う場合にはセミコロンで区切って宣言する。複数の場合は、宣言した順序とは逆の順序で終了されることも理解する。
|
|
キーワード
|
① finally ② close()メソッド ③ try-with-resources ④ AutoCloseableクラス
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 try-with-resourcesを用いたclose()の扱い方と、その順番について理解できるように復習する。Scannerクラスを用いたプログラムで実行時に例外がスローされてもclose()が実行されるようにtry-finallyを用いた記述やtry-with-resourcesを用いた記述ができるようにする。また、複数のリソースを活用している場合のclose()の順番などについても理解する。
◆次回授業の予習 第70回では例外とオーバーライドについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
70
|
例外とオーバーライド
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第70回では、コマ主題「例外とオーバーライド」を扱う。継承したメソッドをオーバーライドする場合、戻り値の型やアクセス修飾子などと同様に、throwsで宣言する例外にも守るべきルールがある。この回では、親クラスのメソッドとオーバーライドした子クラスのメソッドを比較しながら、非チェック例外とチェック例外でthrowsの扱いが異なることを学ぶ。非チェック例外では、親メソッドの宣言にかかわらずthrowsで例外を宣言できる。一方、チェック例外では、親メソッドが宣言した例外と同じ型またはそのサブクラスは宣言できるが、より上位の例外や無関係なチェック例外を新たに宣言することはできない。例外クラスの継承関係と関連付けて、これらの制約を理解する。
|
|
|
コマ主題細目
|
① 非チェック例外とオーバーライド ② チェック例外とオーバーライド
|
|
細目レベル
|
① RuntimeExceptionおよびそのサブクラスである非チェック例外は、オーバーライドするメソッドのthrows宣言について、親メソッドが宣言している例外による制約を受けない。例えば、親メソッドにthrowsが記述されていない場合でも、子クラス側でthrows IllegalArgumentExceptionのように非チェック例外を宣言できる。また、親メソッドとは異なる非チェック例外や、より上位のRuntimeExceptionを宣言することも可能である。これは、非チェック例外がもともとthrowsによる宣言を必須としないためである。親と子のメソッド宣言を比較しながら、非チェック例外ではthrowsの有無がオーバーライドの成立を妨げないことを理解する。
|
② チェック例外をthrowsで宣言するメソッドをオーバーライドする場合、子クラスのメソッドが宣言できるチェック例外には制約がある。子クラスでは、親メソッドが宣言したものと同じチェック例外、またはそのサブクラスを宣言できるほか、throws自体を記述しないこともできる。一方、親メソッドが宣言した例外より上位のチェック例外や、親メソッドの宣言と継承関係のないチェック例外を新たに宣言することはできない。また、親メソッドがチェック例外を宣言していない場合、子メソッドだけで新たなチェック例外を宣言することもできない。例外クラスの継承関係を確認しながら、宣言可能な範囲を判断できるようにする。
|
|
キーワード
|
① 非チェック例外 ② チェック例外 ③ オーバーライド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 オーバーライドしたメソッドがコンパイル可能か否かとその理由について理解できるように復習する。以下のようなクラスを親とした子のクラスで、例えば@Override void method() throws IOException { }という記述が可能であるかどうか、そしてその理由について答えるという練習を行う。 import java.io.IOException;
class Parent { void method() throws IOException { } }
◆次回授業の予習 第71回では独自例外について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
71
|
独自例外
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第71回では、コマ主題「独自例外」を扱う。Javaには多くの例外クラスがあらかじめ用意されているが、プログラム固有の異常な状態を既存の例外だけでは適切に表現できない場合がある。このような場合には、ExceptionやRuntimeExceptionを継承して独自の例外クラスを定義できる。この回では、独自例外を作成する目的を理解したうえで、例外クラスの定義、コンストラクタによるメッセージの受け渡し、throwによる例外の発生、throwsによる宣言、try-catchによる処理までを一連の流れとして学ぶ。また、継承するクラスによってチェック例外または非チェック例外となることを確認し、これまで学んだ例外処理の知識を総合的に整理する。
|
|
|
コマ主題細目
|
① 独自例外とは ② 独自例外の作成
|
|
細目レベル
|
① Java標準の例外クラスを利用することでさまざまな異常を表現できるが、プログラム独自のルールに反する状態については、その内容を表す専用の例外を用意した方が分かりやすい場合がある。例えば、年齢が規定の範囲外であることをIllegalArgumentExceptionで表すこともできるが、AgeExceptionのような独自例外を定義すれば、どのような問題が発生したのかを例外の型そのものによって明確に表現できる。独自例外も特別な仕組みではなく、既存の例外クラスを継承して作成する通常のクラスであることを確認し、プログラム固有の異常を適切な名前の例外として表現する目的を理解する。
|
② 独自例外は、既存の例外クラスを継承したクラスとして定義する。例えば、Exceptionを継承してAgeExceptionを作成するとチェック例外となり、例外を発生させるメソッドではtry-catchによる処理またはthrowsによる宣言が必要になる。独自例外では、コンストラクタで受け取ったメッセージをsuper()によって親クラスのコンストラクタへ渡すことで、getMessage()から内容を取得できるようにする。作成した例外は、既存の例外と同じようにthrowで発生させ、throwsで宣言し、catchで捕捉できる。また、RuntimeExceptionを継承すれば非チェック例外になることも確認する。
|
|
キーワード
|
① 独自例外 ② 例外クラスの継承
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 独自例外の作成に関する総合課題について理解できるように復習する。例えば学生の点数を受け取るcheckScore()メソッドを作成する。点数として指定できるのは0~100であり、この範囲外の値が指定された場合には、独自例外ScoreExceptionを発生させるようなクラスを作成する。このとき、checkScores()メソッドはthrowsでScoreExceptionを指定する。
◆次回授業の予習 第72回ではJavaBronze問題演習-例外処理-について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
72
|
JavaBronze問題演習-例外処理-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第72回では、コマ主題「JavaBronze-例外処理-」を扱う。本授業では、これまでに学修した「例外処理」を対象として、Javaの資格試験を意識した問題演習を行う。はじめに、例外の種類や例外クラスの関係、try-catch文の基本構造、複数のcatchブロック、finally、throws、try-with-resources、独自例外など、問題を解くうえで重要となる事項を簡単に振り返る。その後、実際のJava資格試験に近い形式の問題に取り組み、例外が発生する箇所や処理の流れ、実行結果、コンパイルエラーの有無などを判断する。解答後には、例外の継承関係や各構文の規則と関連付けながら各選択肢を確認し、問題演習を通して例外処理の知識を整理するとともに、プログラムの動作を正確に読み解く力の定着を目指す。
|
|
|
コマ主題細目
|
① JavaBronze問題演習-例外処理-
|
|
細目レベル
|
① 第63回以降に学修した「例外処理」を対象として、Javaの資格試験を意識した問題演習を行う。はじめに、例外の種類や例外クラスの関係、try-catch文の基本構造、複数のcatchブロック、finally、throws、try-with-resources、独自例外など、問題を解くうえで重要となる事項を簡単に振り返る。その後、実際のJava資格試験に近い形式の問題に取り組み、例外が発生する箇所や処理の流れ、実行結果、コンパイルエラーの有無などを判断する。解答後には、例外の継承関係や各構文の規則と関連付けながら各選択肢を確認し、問題演習を通して例外処理の知識を整理するとともに、プログラムの動作を正確に読み解く力の定着を目指す。
|
|
キーワード
|
① try-catch ② throws ③ try-with-resources
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において該当コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 例外の種類や例外クラスの関係、try-catch文の基本構造、複数のcatchブロック、finally、throws、try-with-resources、独自例外について理解できるように復習を行う。偶然選べた問題がなくなるように、すべての問題の選択理由が明確にできるようになるまで問題を解き、復習する。
◆次回授業の予習 第73回ではファイル読み取りの基本について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
73
|
ファイル読み取りの基本
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第73回では、コマ主題「ファイル読み取りの基本」を扱う。プログラムで扱うデータをファイルから読み取る「ファイル処理」の基本を学修する。まず、変数などに保持されたデータとファイルに保存されたデータの違いを確認し、プログラム外部に保存されたデータを利用する必要性を理解する。その上で、文字ストリームを扱うFileReaderクラスを使用し、read()メソッドによってテキストファイルから1文字ずつデータを読み取る方法を学ぶ。また、read()の戻り値がint型である理由や、ファイル終端を表す-1について確認し、繰り返し処理によってファイル全体を読み取る方法を身につける。最後に、既習のtry-with-resourcesをファイル処理に適用し、読み取りに使用したリソースを安全かつ確実に解放する方法を理解する。
|
|
|
コマ主題細目
|
① ファイル処理とは ② FileReaderによる文字単位の読み取り ③ try-with-resourcesと読み取り
|
|
細目レベル
|
① これまでプログラム内で扱ってきた変数や配列などのデータと、ファイルとして外部に保存されたデータの違いを確認し、ファイル処理を行う目的を理解する。プログラムの実行中に利用するデータは、基本的にプログラムの終了とともに利用できなくなる一方、ファイルに保存されたデータはプログラム終了後も保持され、別の実行時にも利用できることを確認する。また、ファイルからデータを取り込む「入力」と、ファイルへデータを保存する「出力」というファイル処理の基本的な考え方を学ぶ。本項では特にテキストファイルを対象とし、JavaではReader系クラスを利用して文字データを読み取ることを確認し、後のFileReaderによる読み取りにつなげる。
|
② テキストファイルから文字データを読み取るためのFileReaderクラスについて学修する。FileReaderのインスタンスを生成してファイルとの読み取り経路を用意し、read()メソッドを利用すると1文字ずつデータを取得できることを確認する。また、read()の戻り値がchar型ではなくint型であり、読み取った文字を数値として取得すること、必要に応じてchar型へキャストして文字として扱うことを理解する。さらに、読み取るデータがなくなるとread()が-1を返すことを学び、これをファイル終端の判定に利用する。while文と組み合わせ、ファイルの先頭から終端まで文字を順番に読み取って表示する一連の処理を実装できるようにする。
|
③ ファイルの読み取りでは、処理終了後に使用したリソースを適切に解放する必要があることを確認し、既習のtry-with-resourcesをFileReaderに適用する方法を学修する。通常のtry文とclose()を用いた場合との違いを振り返り、try-with-resourcesではtry文の丸括弧内でFileReaderを生成することで、処理の正常終了時だけでなく例外発生時にも自動的にclose()が呼び出されることを確認する。また、ファイルが存在しない場合や読み取り中に問題が発生した場合にはIOExceptionなどの例外が関係することを既習事項と結び付ける。ファイル処理と例外処理、リソース管理を一体として考え、安全なファイル読み込み処理を記述できるようにする。
|
|
キーワード
|
① ファイル読み取り ② FileReaderクラス ③ try-with-resources
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 ファイルの読み込み方とその内容の出力などについて理解できるように復習する。例えば特定のテキストファイルにおいて、ファイルの内容をそのまま画面に表示し、読み取った文字数を数えて表示する。そして特定の文字がいくつ含まれているかを確認し表示する。なお、この流れはtry-with-resourcesを用いて実行する。
◆次回授業の予習 第74回ではより高度なファイル読み込みについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
74
|
より高度なファイル読み込み
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第74回では、コマ主題「より高度なファイル読み込み」を扱う。FileReaderによる文字単位の読み込みを発展させ、BufferedReaderを利用してテキストファイルを効率的かつ扱いやすく読み込む方法を学修する。まず、FileReaderでは基本的に1文字ずつデータを取得するため、複数行からなる文章や1行をひとまとまりのデータとして扱いたい場合には処理が複雑になることを確認する。そこで、Readerを受け取って読み込み機能を拡張するBufferedReaderの特徴を理解し、readLine()メソッドによって1行をString型として取得する方法を学ぶ。また、ファイル終端ではnullが返されることを利用し、while文によってファイル全体を読み込む処理を実装する。さらに、try-with-resourcesと組み合わせ、安全にリソースを管理する方法を身につける。
|
|
|
コマ主題細目
|
① BufferedReaderとは ② ファイルを行単位での読み込み ③ BufferedReaderと読み込み
|
|
細目レベル
|
① FileReaderによる文字単位の読み込みを振り返り、より効率的で扱いやすい読み込みを実現するBufferedReaderクラスについて学修する。BufferedReaderは、FileReaderなどのReaderをコンストラクタで受け取り、内部のバッファに一定量の文字を一時的に読み込んで利用することで、読み込み処理を効率化するクラスであることを理解する。また、BufferedReaderがFileReaderそのものに代わるものではなく、FileReaderを包むことで機能を追加していることを確認する。特に、FileReaderのread()による文字単位の読み込みに加えて、BufferedReaderではreadLine()による行単位の読み込みが可能になることを確認し、複数のReaderを組み合わせて利用するJavaの入出力処理の基本的な考え方を身につける。
|
② BufferedReaderが提供するreadLine()メソッドを利用し、テキストファイルからデータを1行ずつ読み込む方法を学修する。readLine()は読み取った1行をString型として返し、次に読み込む行が存在しないファイル終端に到達するとnullを返すことを確認する。この特徴を利用し、while ((line = br.readLine()) != null)のように、1行の取得、変数への代入、ファイル終端の判定を組み合わせて、すべての行を順番に処理する方法を理解する。また、FileReaderのread()が終端で-1を返すことと比較し、メソッドによる戻り値や終端判定の違いを整理する。行数のカウントや特定文字列を含む行の抽出などを通して、取得した1行をデータとして利用する方法も身につける。
|
③ FileReaderとBufferedReaderを組み合わせ、try-with-resourcesを利用した実践的なテキストファイルの読み込み処理を学修する。new BufferedReader(new FileReader("sample.txt"))という記述を確認し、FileReaderがファイルから文字を読み取る役割を、BufferedReaderがその読み取りを効率化するとともに行単位で扱う機能を提供する役割を担っていることを整理する。また、BufferedReaderをtry-with-resourcesで管理することで、処理終了時や例外発生時にも自動的にリソースを解放できることを既習の例外処理と関連付けて確認する。最終的に、ファイルを開く、1行ずつ読み取る、終端を判定する、取得したデータを処理する、リソースを解放するという一連の流れを自力で記述できるようにする。
|
|
キーワード
|
① BufferedReaderクラス ② readLine()メソッド ③ try-with-resources
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 ファイルの読み込みにおける1行単位の扱い方について理解できるように復習する。例えば文字列が記述されているファイルを用意して、1行ずつ読み込みを行う。そしてファイルの中身をすべて表示し、全部で何行あるかを表示する。また、特定の言葉を含む行のみを出力し、それが何行あるか確認する。これらの処理におけるBufferedReaderはtry-with-resourcesを用いて管理する。
◆次回授業の予習 第75回ではテキストファイルへの出力について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
75
|
テキストファイルへの出力
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第75回では、コマ主題「テキストファイルへの出力」を扱う。プログラムで処理した文字データをテキストファイルへ保存する方法を学修する。これまで扱ったFileReaderやBufferedReaderによる「入力」と対比しながら、文字ストリームによる「出力」の基本的な仕組みを理解する。まず、FileWriterクラスとwrite()メソッドを利用して文字列をファイルへ書き込み、ファイルの新規作成や上書き、追記の違いを確認する。次に、BufferedWriterを組み合わせることで、バッファを利用した効率的な書き込みやnewLine()による改行が可能になることを学ぶ。さらに、ファイルへの出力でもリソースの解放が必要であることを確認し、try-with-resourcesを利用して安全に書き込み処理を終了する方法を身につける。
|
|
|
コマ主題細目
|
① FileWriterによる出力 ② BufferedWriterによる出力 ③ try-with-resourcesと出力
|
|
細目レベル
|
① テキストファイルへ文字データを書き込むためのFileWriterクラスについて学修する。FileReaderがファイルから文字を読み取るクラスであるのに対し、FileWriterはプログラムからファイルへ文字を書き出すクラスであることを確認し、文字ストリームにおける入力と出力の関係を理解する。write()メソッドを利用して文字や文字列を書き込む基本的な方法を学ぶとともに、指定したファイルが存在しない場合には新しく作成されることを確認する。また、通常のFileWriterでは既存の内容が上書きされることと、コンストラクタの第2引数にtrueを指定すると既存の内容を残したまま末尾へ追記できることを比較し、目的に応じた保存方法を選択できるようにする。
|
② FileWriterによる書き込みを発展させ、BufferedWriterを利用した効率的なテキストファイルへの出力方法を学修する。BufferedWriterはFileWriterなどのWriterを受け取り、出力する文字データを内部のバッファへ一時的に蓄えてからまとめて書き出すクラスであることを理解する。また、第2回で扱ったBufferedReaderとの対応関係を確認し、Reader系とWriter系のクラス構成を整理する。write()による文字列の出力に加え、newLine()メソッドを利用することで、環境に応じた改行を簡潔に出力できることを学ぶ。さらに、バッファに残されたデータを書き出すflush()の役割にも触れ、バッファリングされたデータが実際のファイルへ出力される仕組みを理解する。
|
③ ファイルへの出力処理におけるリソース管理について確認し、FileWriterやBufferedWriterをtry-with-resourcesと組み合わせて利用する方法を学修する。Writerを使用した後にはclose()によってリソースを解放する必要があり、特にBufferedWriterでは終了処理によってバッファに残っているデータが出力されることを確認する。その上で、try-with-resourcesを利用すれば、正常終了時だけでなく書き込み途中で例外が発生した場合にも自動的にclose()が実行され、安全に処理を終了できることを既習の例外処理と関連付けて理解する。また、外側のBufferedWriterを閉じることで内部のFileWriterも閉じられることを確認し、複数のリソースを組み合わせた場合の管理方法を身につける。
|
|
キーワード
|
① FileWriterクラス ② BufferedWriterクラス ③ try-with-resources
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 プログラム中の配列をファイルに出力する手法について理解できるように復習する。例えば文字列が保存されている配列を用意して、study.txtというファイルを作成し、各要素を1行ずつファイルへ書き込んでいく。改行にはnewLine()メソッドを利用し、BufferedWriterはtry-with-resourcesで管理する。また、プログラムを再度実行した場合は、既存の内容を消さずに末尾へ追加するようなプログラムを作成する。
◆次回授業の予習 第76回ではPrintWriterクラスによる出力について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
76
|
PrintWriterクラスによる出力
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第76回では、コマ主題「PrintWriterクラスによる出力」を扱う。テキストファイルへの出力をより簡潔かつ柔軟に行うため、PrintWriterクラスの特徴と基本的な使用方法を学修する。前回扱ったFileWriterやBufferedWriterとの関係を確認し、PrintWriterを利用することで、コンソールへの出力で使用してきたprint()、println()、printf()と同様の方法でファイルへデータを出力できることを理解する。print()とprintln()による改行の有無を確認するとともに、printf()では書式指定子を利用して、文字列や整数、小数などを指定した形式で出力できることを学ぶ。また、複数のデータをカンマで区切って出力することでCSV形式のファイルを作成し、次回扱うCSVファイルの読み込みへとつなげる。
|
|
|
コマ主題細目
|
① PrintWriterクラスの特徴 ② print()・println()メソッド ③ printf()メソッドによる書式付き出力
|
|
細目レベル
|
① 文字データを扱いやすい形式で出力するためのPrintWriterクラスについて学修する。PrintWriterは、文字列や数値などを文字表現として出力するためのクラスであり、FileWriterやBufferedWriterと組み合わせることでテキストファイルへの出力に利用できることを理解する。前回扱ったBufferedWriterでは、write()とnewLine()を組み合わせて文字列と改行を出力したのに対し、PrintWriterではprintln()などを利用して、より簡潔に同様の処理を記述できることを比較する。また、System.outもPrintStreamを利用した出力であり、これまでコンソール出力で使用してきたprint()やprintln()と似た操作でファイルへ出力できることを確認し、用途に応じて出力用クラスを使い分ける考え方を身につける。
|
② PrintWriterクラスが提供するprint()とprintln()メソッドを利用し、文字列や数値などのデータをテキストファイルへ出力する方法を学修する。print()ではデータを出力した後に改行されないのに対し、println()ではデータの出力後に改行されることを確認し、出力結果を比較しながら両者を使い分ける。また、文字列だけでなく、整数や小数、真偽値などの値も直接指定して出力できることを学ぶ。前回のBufferedWriterで必要だったwrite()とnewLine()の組み合わせと比較することで、PrintWriterを利用する利点を理解する。さらに、繰り返し処理や配列と組み合わせ、複数のデータを任意の形式で連続してファイルへ書き出す方法を身につける。
|
③ PrintWriterクラスのprintf()メソッドを利用し、書式を指定してデータをファイルへ出力する方法を学修する。%s、%d、%fなどの基本的な書式指定子を確認し、文字列、整数、小数など複数の値を指定した形式に整えて出力できることを理解する。また、%.2fによる小数点以下の桁数指定や、%nによる改行などを扱い、データと表示形式を分離して記述する利点を確認する。さらに、氏名や点数など複数の値をカンマで区切って"%s,%d%n"のように出力することで、CSV形式のデータを作成できることを学ぶ。配列などに保持された複数のデータを繰り返し出力し、構造化されたテキストファイルを作成できるようにする。
|
|
キーワード
|
① FileWriterクラス ② BufferedWriterクラス ③ try-with-resources
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 プログラム中の複数の配列をファイルに出力する手法について理解できるように復習する。例えば名前の文字列とそれに対応するint型の数値が保存されている配列を用意して、それぞれを各列としたscore.csvへ出力するためのプログラムを作成する。このとき、1行目には名前、点数とし、2行目以降はprintfを用いる。改行にはprintf()メソッドを用い、PrintWriterはtry-with-resourcesで管理することとする。
◆次回授業の予習 第77回ではCSVファイルの扱い方について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
77
|
CSVファイルの扱い方
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第77回では、コマ主題「CSVファイルの扱い方」を扱う。複数のデータを一定の形式で保存するCSVファイルの特徴を理解し、Javaを用いてCSVデータを読み取る基本的な方法を学修する。まず、CSVでは1行が1件のデータを表し、各項目がカンマなどの区切り文字によって分けられていることを確認する。次に、Stringクラスのsplit()メソッドを利用し、1つの文字列を区切り文字によって分割してString型の配列として取得する方法を学ぶ。さらに、BufferedReaderによってCSVファイルを1行ずつ読み込み、各行をsplit()で分割して必要な項目を取り出す一連の処理を実装する。最後に、数値として利用する項目をparseInt()などで適切な型へ変換し、CSVに保存されたデータをプログラム上で利用できるようにする。
|
|
|
コマ主題細目
|
① CSV形式のデータ構造 ② split()メソッドによるデータの分割 ③ CSVファイルの読み込みとデータの変換
|
|
細目レベル
|
① 複数のデータをテキスト形式で保存するCSV(Comma-Separated Values)の基本的なデータ構造について学修する。CSVでは、一般に1行を1件のレコードとして扱い、その中に含まれる氏名、点数、年齢などの複数の項目をカンマで区切って記述することを理解する。例えば「田中,80,20」という1行には、氏名、点数、年齢という3つの項目が含まれていることを確認する。また、1行目に各項目の意味を表すヘッダーを記述する形式についても扱い、行と列によってデータが構成されていることを理解する。CSVは表計算ソフトなどでも利用できる一方、その実体は一定の規則に従って記述されたテキストデータであることを確認し、Javaで読み書きできる理由を理解する。
|
② CSVの1行に含まれる複数の項目を個別のデータとして扱うため、Stringクラスのsplit()メソッドについて学修する。split()に区切り文字を指定すると、1つの文字列を複数の文字列に分割し、その結果をString型の配列として取得できることを理解する。例えば「田中,80,20」に対してsplit(",")を実行すると、「田中」「80」「20」がそれぞれ配列の要素として格納されることを確認する。また、data[0]、data[1]のように添字を利用して必要な項目を取り出す方法を学ぶ。CSVの「列」と配列の「添字」の対応関係を意識しながら、1行の文字列を複数の意味のあるデータへ分解する一連の処理を身につける。
|
③ BufferedReaderを利用してCSVファイルを1行ずつ読み込み、各行に含まれるデータをJavaプログラムで利用できる形へ変換する方法を学修する。readLine()で取得した1行をsplit()によって分割し、String型の配列から氏名や点数など必要な項目を取り出す一連の処理を確認する。また、CSVから取得した「80」などの値はString型であるため、そのままでは数値として計算できないことを理解し、Integer.parseInt()などを利用して適切なデータ型へ変換する方法を学ぶ。さらに、ヘッダー行をデータとして処理しないための読み飛ばしにも触れ、「1行読み込む→分割する→項目を取り出す→必要な型へ変換する」というCSV処理の基本手順を身につける。
|
|
キーワード
|
① CSVファイル ② データ構造 ③ split()メソッド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 複数列のデータが保存されているCSVファイルの扱い方について理解できるように復習する。例えば商品名、価格、在庫数に関して5つのデータが保存されているCSVファイルを用意し、品名ごとに価格と在庫を出力するプログラムを作成する。出力の際には単位を添えて出力できるようにする。このとき、BufferedReaderはtry-with-resourcesで管理し、ヘッダーは読み飛ばす。さらに在庫と価格数はint型で管理できるようにする。
◆次回授業の予習 第78回ではCSVファイルデータの検索と集計について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
78
|
CSVファイルデータの検索と集計
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第78回では、コマ主題「CSVファイルデータの検索と集計」を扱う。CSVファイルから読み込んだデータを利用し、目的に応じた検索や集計を行う方法を学修する。まず、BufferedReaderで1行ずつ読み込み、split()で分割して必要な型へ変換したデータに対して、if文を用いて条件に一致するレコードを抽出する方法を確認する。次に、繰り返し処理の中で値を累積したり件数を数えたりすることで、合計値や平均値、最大値・最小値などを求める方法を学ぶ。これまで個別に学修してきた条件分岐、繰り返し、文字列操作、型変換をファイル処理と組み合わせ、一連のデータ処理として実装する。最後に総合演習を通して、CSVファイルから必要な情報を取り出し、目的に応じて処理する力を身につける。
|
|
|
コマ主題細目
|
① 条件によるデータの検索 ② データの集計 ③ CSVファイルデータを用いた演習
|
|
細目レベル
|
① CSVファイルから読み込んだ複数のレコードの中から、指定された条件に一致するデータを検索する方法を学修する。BufferedReaderによって1行ずつ取得したデータをsplit()で分割し、必要に応じて数値型へ変換した上で、if文を利用して条件を判定する一連の処理を確認する。例えば、成績データから80点以上の学生を抽出したり、商品データから指定した価格以下の商品を表示したりすることで、数値を条件とした検索を実装する。また、equals()などを利用して特定の名前や商品名を検索する方法についても扱う。ファイル全体を順番に読みながら各レコードを判定することで、条件に合致したデータだけを取り出す基本的な検索処理を身につける。
|
② CSVファイルに保存された複数の数値データを対象として、合計、平均、件数、最大値、最小値などを求める集計処理について学修する。ファイルを1行ずつ読み込みながら、数値へ変換したデータを合計用の変数へ累積するとともに、処理したレコード数をカウントし、読み込み終了後に平均値を算出する方法を確認する。また、現在までの最大値や最小値を変数に保持し、新しく読み込んだ値と比較しながら更新する方法を学ぶ。さらに、条件分岐とカウント処理を組み合わせ、一定の条件を満たすレコード数を集計する方法も扱う。CSVの読み込みと既習のアルゴリズムを組み合わせ、複数のデータから意味のある情報を導き出す方法を身につける。
|
③ CSVファイルの読み込み、データの分割と型変換、条件検索、集計処理を組み合わせた総合的な演習に取り組む。複数の項目を持つCSVファイルを対象として、指定された条件に一致するレコードの表示、データ件数のカウント、合計値や平均値、最大値・最小値の算出などを一つのプログラムとして実装する。処理に必要な変数を読み込み処理の前に準備し、各行を読み込むたびに検索や集計を行い、ファイル全体の読み込みが終了した後に結果を表示するという処理の流れを整理する。また、どの処理を繰り返しの内側と外側に記述すべきかを考えながら実装し、CSVデータを目的に応じて活用する力を身につける。
|
|
キーワード
|
① データの検索 ② データの集計 ③ split()メソッド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 複数列のデータが保存されているCSVファイルの検索と集計方法について理解できるように復習する。例えば商品名、価格、在庫数に関して多くのデータが保存されているCSVファイルを用意し、いくつかの条件に沿った商品の集計やさまざまな値の集計値を求め、それを出力するプログラムを作成する。
◆次回授業の予習 第79回ではCSVデータとオブジェクトについて学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
79
|
CSVデータとオブジェクト
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第79回では、コマ主題「CSVデータとオブジェクト」を扱う。CSVファイルから読み込んだデータをオブジェクトへ変換し、ArrayListを利用して複数のデータをまとめて管理する方法を学修する。これまではsplit()で分割した各項目をString型の配列として扱っていたが、CSVの1行を1つのオブジェクトとして表現することで、各データの意味を明確にして管理できることを理解する。CSVから取得した値をコンストラクタへ渡してオブジェクトを生成し、生成した複数のオブジェクトをArrayListへ順番に追加する一連の処理を学ぶ。さらに、拡張for文とgetterメソッドを利用して保存されたデータを取り出し、検索や集計を行うことで、ファイルから取得したデータをオブジェクトとして継続的に利用する方法を身につける。
|
|
|
コマ主題細目
|
① オブジェクトによる1行の管理 ② 複数オブジェクトによるデータ管理 ③ オブジェクト管理による検索・集計
|
|
細目レベル
|
① CSVファイルの1行に含まれる複数の項目を、1つのオブジェクトとして管理する方法を学修する。例えば商品データの「ノート,150,20」という1行について、商品名、価格、在庫数をそれぞれフィールドに持つProductクラスを用意し、split()で分割した値をコンストラクタへ渡してProductオブジェクトを生成する流れを理解する。その際、価格や在庫数などの数値項目はInteger.parseInt()によって適切な型へ変換する。また、配列のdata[0]やdata[1]として扱う場合と、getName()やgetPrice()によって取得する場合を比較し、オブジェクト化によって各データの意味が明確になり、プログラムを理解・管理しやすくなることを確認する。
|
② CSVファイルから生成した複数のオブジェクトを、ArrayListを利用してまとめて管理する方法を学修する。BufferedReaderによってCSVファイルを1行ずつ読み込み、split()による分割と型変換を行った後、各行からProductなどのオブジェクトを生成し、add()メソッドによってArrayList<Product>へ順番に追加する処理を理解する。これにより、ファイルを読み終えた後も、取得したすべてのデータをプログラム内で繰り返し利用できることを確認する。また、拡張for文を用いてArrayList内のオブジェクトを順番に取得し、getterメソッドによって各フィールドの値を参照する方法を復習する。「CSVの1行=1オブジェクト、CSV全体=オブジェクトの集合」という対応関係を身につける。
|
③ ArrayListに格納したオブジェクトを利用し、CSVから取得したデータに対する検索や集計を行う方法を学修する。拡張for文によってArrayList<Product>などの要素を順番に取り出し、getterメソッドで取得した値に対して条件判定を行うことで、指定した価格以下の商品や特定の商品名などを検索する。また、価格の合計や平均、最大値・最小値、条件を満たす商品の件数などを求め、第78回で行った検索・集計処理をオブジェクトを利用した形へ書き換える。ファイルを読み込みながら処理する方法との違いを比較し、ArrayListに保存することで同じデータに対して複数の検索や集計を繰り返し実行できる利点を理解する。
|
|
キーワード
|
① オブジェクト ② ArrayList ③ CSVファイル
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 複数列のデータが保存されているCSVファイルの検索と集計方法についてオブジェクト指向を用いて理解できるように復習する。例えば商品名、価格、在庫数に関して多くのデータが保存されているCSVファイルを用意し、いくつかの条件に沿った商品の集計やさまざまな値の集計値を求め、それを出力するプログラムを作成する。その際にはデータの管理をオブジェクトに基づいて行うようにする。
◆次回授業の予習 第80回では総合演習①-クラス作成の基本-について学修する。コマシラバスの内容を確認し、わからないところを先に目を通しておく。必要に応じて下線を引くなどをする。
|
|
80
|
総合演習①-クラス作成の基本-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第80回では、コマ主題「総合演習①-クラス作成の基本-」を扱う。総合演習では、第1回から第79回までの知識を単元ごとに再構成する。最初は提示仕様からクラス名、フィールド、メソッド、入出力を抽出し、小さなクラスを完成させる。この回は多数の応用機能を詰め込まず、インスタンスごとの状態とメソッドの呼び出しが仕様どおりかをテストする。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、仕様からクラスの状態と操作を抽出し、最小構成から実装を組み立てる基礎を再確認することから重要である。
|
|
|
コマ主題細目
|
① クラス作成の基本演習
|
|
細目レベル
|
① 仕様文からクラスを作成するには、まず対象が持つ情報と、対象に行わせる操作を分けて読み取る。第80回では、学生や商品などの身近な題材から、クラス名、フィールド、メソッドを決定し、インスタンスを生成して利用するまでの基本を総合的に確認する。処理を最初から一つの長いmainメソッドへ書かず、各クラスの責務を明確にする。与えられた要件に対して、必要なフィールドの型と名前、メソッドが受け取る引数と返す値を設計し、必要な宣言を箇条書きで整理してからコードへ移す。複数のインスタンスに別々の値を設定し、片方の状態変更がもう片方へ影響しないことも確かめる。完成後は、仕様の各文がどのフィールドまたはメソッドで実現されているかを対応させ、不要な責務が一つのクラスへ集中していないかを点検する。
|
|
キーワード
|
① クラス ② フィールド ③ メソッド ④ インスタンス ⑤ 参照
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 提示された学生管理の仕様から、Studentクラスが持つフィールドとメソッドを決め、mainメソッドから複数のインスタンスを生成して動作を確認する。氏名、点数、合否表示が仕様どおりかを異なる値で実行する。完成後は、mainメソッドへ残す処理とStudentへ移す処理を見直し、一つのクラスへ役割が集中していないかを修正理由とともに記録する。
◆次回授業の予習 次の総合演習ではコンストラクタを中心に扱う。今回作成したStudentについて、生成後に一つずつフィールドを設定する手順を確認し、値の設定忘れが起きる例を一つ作る。引数なし、氏名だけ、氏名と点数の三種類で生成できるようにする場合、それぞれの初期値を決める。重複する設定をthis()へまとめるため、どの宣言を中心にするかも考えておく。
|
|
81
|
総合演習②-コンストラクタ-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第81回では、コマ主題「総合演習②-コンストラクタ-」を扱う。総合演習の二回目は、複数の生成方法と初期化条件を持つクラスを作る。引数なしと引数付きのコンストラクタ、this()による初期化の共通化、不正な初期値を作らない検査を組み合わせる。各new式がどの宣言を通り、最終的にどの値を持つかを生成経路ごとに記録する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、生成経路が異なってもオブジェクトの初期状態を一貫させる設計力を確認することから重要である。
|
|
|
コマ主題細目
|
① コンストラクタ演習
|
|
細目レベル
|
① 第81回では、複数の生成方法を持つクラスについて、どの方法を選んでも有効な初期状態になるようコンストラクタを設計する。引数なし、主要な値だけを受け取る形式、すべての値を受け取る形式を用意し、各new式から対応するコンストラクタが選ばれることを確認する。フィールドの設定漏れや不統一を防ぐことを重視する。重複する初期化はthis()で一つのコンストラクタへ集約し、継承関係を含む課題ではsuper()による親部分の初期化も組み合わせる。new式から始まる呼び出し経路と、実際に本体が実行される順序を分けて記録する。完成後は標準値、入力値、親へ渡す値がそれぞれどこで決まるかを確認し、特定の生成経路だけ不正な状態になる箇所がないかを検査する。コンストラクタチェーンを初期化規則の一元化に結び付ける。
|
|
キーワード
|
① コンストラクタ ② 初期化 ③ オーバーロード ④ this() ⑤ デフォルトコンストラクタ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 StudentまたはProductクラスに三種類のコンストラクタを用意し、this()で初期化処理を一つへ集約する。継承を含む版では子クラスからsuper()で親へ値を渡し、各コンストラクタの実行順を出力で確認する。引数なし、主要項目だけ、全項目を指定する生成方法をすべて実行し、どの方法でも必要なフィールドが設定されていることをテストする。
◆次回授業の予習 次回はthis、static、final、abstractなどのキーワードを使い分ける。各キーワードについて、変数、メソッド、クラスのどこに書いたかをこれまでのコードから一例ずつ探す。studentCountを共有したい場合、学籍番号を変更させたくない場合、子クラスへ処理を求めたい場合を挙げ、それぞれどのキーワードが目的に合うかを予想し、理由を一行で書く。
|
|
82
|
総合演習③-さまざまなキーワード-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第82回では、コマ主題「総合演習③-さまざまなキーワード-」を扱う。アクセス修飾子、ゲッターとセッター、staticメンバ、has-a関係、レコードクラスを一つの小規模プログラムで使い分ける。値を個々のオブジェクトに持たせるか共有するか、フィールドを直接公開するかメソッド経由にするかを設計理由とともに示す。キーワードの羅列ではなく、宣言ごとの役割を実行結果で検証する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、アクセス制御、static、has-a関係、レコードを目的に応じて選択する設計力を統合することから重要である。
|
|
|
コマ主題細目
|
① さまざまなキーワード演習
|
|
細目レベル
|
① 第82回では、this、static、final、abstractなど、クラス設計に関わる既習のキーワードを、宣言される位置と役割に応じて使い分ける。名称だけを一覧として暗記するのではなく、インスタンス自身を示すもの、クラス全体に所属させるもの、変更や再定義を制限するもの、具体化を子へ求めるものという目的から分類する。複数の短いクラス宣言を読み、各キーワードを外した場合や別の位置へ付けた場合に、意味またはコンパイル結果がどう変わるかを説明する。その後、共有カウンタ、変更しない定数、子クラスへ実装を求める操作を含む小さな設計課題へ適切なキーワードを補う。完成したコードでは、各指定が守っている設計上の条件を一文ずつ記し、似た表記でも対象が変数、メソッド、クラスのどれかによって効果が異なる点を確認する。
|
|
キーワード
|
① アクセス修飾子 ② static ③ カプセル化 ④ レコードクラス ⑤ has-a関係
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 学生管理プログラムへ、現在のインスタンスを示すthis、人数を共有するstatic、変更しない値を示すfinalを追加する。別の小さな継承例ではabstractメソッドを使い、具体クラスで処理を用意する。各キーワードを一つずつ外してコンパイルまたは実行し、何を表す指定だったかを確認する。似た語を一覧で覚えず、必要となる場面と効果を対応させる。
◆次回授業の予習 次回はポリモーフィズムの総合演習を行う。第33回から第36回で扱ったアップキャスト、オーバーライドされたインスタンスメソッドの呼び出し、フィールドとstaticメソッドの隠蔽、ダウンキャストを復習する。Animal、Dog、Catに共通するsound()を用意し、Animal型の変数にDogまたはCatのインスタンスを代入した場合、どのメソッドが実行されるかを予想する。変数の型と、newで生成したインスタンスの型を区別して説明できるようにしておく。
|
|
83
|
総合演習④-ポリモーフィズム-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第83回では、コマ主題「総合演習④-ポリモーフィズム-」を扱う。共通の親型またはインターフェース型の変数で複数種類のオブジェクトを扱う演習とする。宣言型から呼び出し可能なメソッドを確認し、実体型に応じたオーバーライド処理の結果を予想する。子型固有の処理が必要な箇所だけはinstanceofとキャストを使い、共通処理と型別処理の境界を説明する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、共通型による呼び出しと実体ごとの処理を組み合わせ、拡張しやすい構造を実装することから重要である。
|
|
|
コマ主題細目
|
① ポリモーフィズム演習
|
|
細目レベル
|
① 第83回では、共通の親型またはインターフェース型を利用して、複数種類のインスタンスを同じ処理の流れで扱うプログラムを作成する。変数の宣言型が利用可能な操作を決め、オーバーライドされたインスタンスメソッドは実際のインスタンスの型に応じて選ばれるという二つの規則を組み合わせる。異なる通知方法を表す複数のクラスを共通型の配列へ格納し、繰り返しの中で同じsend()を呼び出す課題に取り組む。種類ごとの条件分岐を並べる設計と比較し、新しい種類を追加したときに利用側の修正を減らせる利点を確認する。さらに、フィールドやstaticメソッドの隠蔽は宣言型に基づくことを別の小問で対比し、すべてのメンバが同じ規則で選ばれるわけではないことを整理する。
|
|
キーワード
|
① ポリモーフィズム ② アップキャスト ③ ダウンキャスト ④ 動的束縛 ⑤ instanceof
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Animal型の配列へDog、Cat、Birdを格納し、繰り返しの中からsound()を呼び出す。新しいBirdを追加しても、呼び出し側へ型ごとのif文を増やさず動作することを確認する。次に同名フィールドとstaticメソッドを含む例を実行し、オーバーライドされたメソッドだけが実体型で選ばれることを比較する。三種類の結果を取り違えた箇所を修正する。
◆次回授業の予習 次回は継承とクラス設計をまとめて扱う。図形、学校関係者、支払い方法のいずれか一つを選び、共通の状態、共通の処理、種類ごとに異なる処理、複数の型へ共通して持たせたい役割を分類する。通常の親クラス、抽象クラス、インターフェースのどれへ置くかを仮決定し、has-a関係にした方が自然な要素が混ざっていないかも確認する。
|
|
84
|
総合演習⑤-継承とクラスの設計-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第84回では、コマ主題「総合演習⑤-継承とクラスの設計-」を扱う。複数の具象クラスに共通する状態と操作を抽出し、親クラス、抽象クラス、インターフェースのどこに配置するかを決める。共通実装が必要か、状態を持つか、複数のインターフェースを組み合わせるかという条件から構成を選ぶ。コンストラクタの実行順とオーバーライド結果をテストし、階層が仕様に合うかを検証する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、共通実装、抽象化、インターフェースの組合せを仕様に応じて選び、型階層全体を設計することから重要である。
|
|
|
コマ主題細目
|
① 継承とクラスの設計演習
|
|
細目レベル
|
① 第84回では、共通部分を持つ複数の型について、通常の親クラス、抽象クラス、インターフェースのどれを用いるかを要件から判断する。共通の状態や完成済みの処理を共有するのか、子ごとに異なる処理を要求するのか、独立した役割を複数のクラスへ与えるのかを整理してから型の構成を決める。図形や決済方法を題材に、親へ置くフィールドと通常メソッド、子へ実装を求める抽象メソッド、複数の型に共通して持たせる操作の定めを分類する。設計した階層をコードにし、共通型の変数からポリモーフィズムを利用して処理を呼び出す。完成後は、継承関係がis-aとして自然か、has-a関係を選ぶべき箇所が混ざっていないか、想定する種類を制限する必要があるかを見直し、選択理由を説明する。
|
|
キーワード
|
① 継承 ② 抽象クラス ③ インターフェース ④ シールクラス ⑤ オーバーライド
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 選んだ題材について型の関係を設計し、共通フィールドと通常メソッドを親へ、種類ごとに異なる処理を抽象メソッドへ配置する。必要なら複数のクラスが共通して持つ役割をインターフェースにする。具体クラスを生成して共通型から処理を呼び、追加した種類でも利用側の処理が動くことを確認する。各関係がis-aかhas-aかを説明する。
◆次回授業の予習 次回はコレクションフレームワークの総合演習である。学生の一覧を管理する場合、追加順を保つ、同じ学籍番号の重複を避ける、学籍番号から素早く探すという三つの要件を考える。List、Set、Mapのどれが各要件に合うかを選び、理由を一文ずつ書く。格納するStudentの型をどこへ指定するか、追加と検索に使う基本メソッドも確認する。
|
|
85
|
総合演習⑥-コレクションフレームワーク-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第85回では、コマ主題「総合演習⑥-コレクションフレームワーク-」を扱う。第49回から第61回で学んだ参照型、ラッパークラス、ArrayList、Set、Map、ジェネリクスを用いて複数データを管理する。データの順序が必要か、重複を許すか、キーから検索するかを条件にコレクションを選択する。型パラメータによる制約と追加、検索、削除後の結果を、自作オブジェクトを格納した例で確かめる。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、順序、重複、キー検索の要件から適切なコレクションを選び、複数データを型安全に管理することから重要である。
|
|
|
コマ主題細目
|
① コレクションフレームワーク演習
|
|
細目レベル
|
① 第85回では、複数のオブジェクトを管理する要件に対して、List、Set、Mapなどの既習のコレクションから適切なものを選ぶ。追加順を保つ必要、重複を許さない条件、キーから値を探す用途を整理し、要件に合わないコレクションを選んだ場合にどの操作が不自然になるかも考える。商品や学生を表すオブジェクトを格納し、追加、検索、更新、削除、繰り返し処理を組み合わせた課題に取り組む。型引数によって格納できる要素を限定し、取り出した値を不要なキャストなしで利用できることを確認する。処理後の件数、順序、検索結果をテストし、同じデータを配列だけで管理する場合と比較する。操作の多さではなく、データの性質と利用方法からコレクションを選択できることを到達点とする。
|
|
キーワード
|
① List ② Set ③ Map ④ ジェネリクス ⑤ イテレータ
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 StudentインスタンスをListへ追加し、氏名表示、点数による検索、平均計算を行う。重複を避ける要件ではSet、学籍番号から探す要件ではMapを使った版も作成する。同じデータを三種類で扱い、追加後の件数と検索結果を確認する。操作の書きやすさだけでなく、順序、重複、キーというデータの性質から選択理由をまとめる。
◆次回授業の予習 次回は例外処理の総合演習である。文字列を整数へ変換する処理、リストから番号を指定して取り出す処理、ファイルを開く処理について、失敗する入力や状況を一つずつ考える。どこをtryで囲み、どの失敗をcatchしたいかを整理する。正常時にも異常時にも必要な後始末がある場合、finallyまたはtry-with-resourcesのどちらを使ったかも見直す。
|
|
86
|
総合演習⑦-例外処理-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第86回では、コマ主題「総合演習⑦-例外処理-」を扱う。第62回から第71回の例外処理を、入力値の検査とリソースを使う処理に組み込む。try-catch-finally、複数のcatch、throwとthrows、try-with-resources、独自例外を、回復する場合と呼び出し元へ伝える場合に分けて使う。正常系と例外系の処理経路をテストし、後始末が必ず行われることも確認する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、失敗時の回復、例外の伝播、リソースの後始末を組み合わせ、異常時も状態を保てるプログラムを作ることから重要である。
|
|
|
コマ主題細目
|
① 例外処理演習
|
|
細目レベル
|
① 第86回では、入力、数値変換、ファイル操作などで起こり得る失敗を想定し、正常時の処理と異常時の処理を分けて設計する。try、catch、finally、throwsなどの既習事項を、構文単位ではなく、どこで例外を処理し、呼び出し元へ何を伝え、必ず行う後始末をどこへ置くかという目的から組み合わせる。複数種類の例外が起こり得る読み込み処理を題材に、具体的な例外に対応するcatchの順序、例外発生後に実行される箇所、呼び出し元へ伝播する条件を確認する。正常入力、不正な形式、対象が見つからない場合をそれぞれ試し、利用者へ示すメッセージと内部で残す情報を分ける。後始末が成功時と失敗時の両方で行われることも検査し、エラーを隠すのではなく、プログラムを予測可能な状態に保つ例外処理を目指す。
|
|
キーワード
|
① try ② catch ③ finally ④ throw ⑤ throws
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 数値変換とファイル読み取りを含むプログラムを作成し、正常な入力、数字でない入力、ファイルが存在しない場合を試す。例外ごとに利用者へ分かるメッセージを表示し、処理を続ける場合と呼び出し元へ伝える場合を区別する。try-with-resourcesを使って、読み取りの成功・失敗にかかわらずファイルが閉じられることも確認する。
◆次回授業の予習 第87回のJava Bronze模擬問題1は、環境プログラミングⅡの前半に当たる第1回から第37回までを対象とする。基本文法、クラスとメソッド、コンストラクタ、static、継承とポリモーフィズムから、判断に不安がある分野を三つ選ぶ。各分野について短い確認問題を一問ずつ解き、正解と不正解の根拠を確認する。第38回以降の抽象クラス、インターフェース、コレクション、例外処理、ファイル処理は、この模擬問題の範囲に含めない。
|
|
87
|
総合演習⑧-Bronze模擬問題1-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第87回では、コマ主題「総合演習⑧-Bronze模擬問題1-」を扱う。一回目の模擬問題は、環境プログラミングⅡの前半に当たる第1回から第37回までを出題範囲とする。基本文法、クラスとメソッド、コンストラクタ、アクセス制御、static、has-a関係、レコードクラス、継承とポリモーフィズムに関する問題を解く。採点後は各選択肢を解説し、前半範囲のどの分野で判断を誤ったかを確認する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、第1回から第37回までの定着度と復習が必要な項目を明確にするために重要である。
|
|
|
コマ主題細目
|
① Bronze模擬問題1
|
|
細目レベル
|
① Java Bronze模擬問題1は、環境プログラミングⅡの前半に当たる第1回から第37回までを出題範囲とする。問題は、Javaの基本文法、クラスとメソッド、コンストラクタ、アクセス制御とstatic、has-a関係、レコードクラス、継承とポリモーフィズムを中心に構成する。第38回以降の抽象クラス、インターフェース、シールクラスは、この模擬問題の範囲に含めない。授業では、指定された時間内に模擬問題を解き、解答後にすべての選択肢を解説する。コード問題では、最初にコンパイルできるかを判断し、コンパイルできる問題について実行結果を考える。採点後は、誤答をクラスの基本、コンストラクタ、クラスメンバ、継承、ポリモーフィズム、型変換の分野に分ける。学生は、正解の理由と他の選択肢が誤りである理由を確認し、第1回から第37回までの中で復習が必要な分野を特定する。
|
|
キーワード
|
① クラス ② コンストラクタ ③ アクセス制御 ④ 継承 ⑤ ポリモーフィズム
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Java Bronze模擬問題1の誤答を、基本文法、クラスとメソッド、コンストラクタ、クラスメンバ、継承、ポリモーフィズム、型変換に分ける。誤答した分野から二問を選び、解答を見ずにもう一度解く。コンパイルできない問題は誤っている宣言を特定し、実行結果を問う問題は値や呼び出し先が変わる文を確認する。正解でも根拠を説明できなかった問題は、要復習として記録する。
◆次回授業の予習 第88回のJava Bronze模擬問題2は、後半の第38回から第79回までを対象とする。抽象クラス、インターフェース、シールクラス、package文とimport文、基本データ型と参照型、ラッパークラス、List・Set・Map、例外処理、ファイル処理の基本を一項目ずつ確認する。第87回の誤答は第1回から第37回までの復習資料として保存し、第88回の出題範囲と混同しないようにする。
|
|
88
|
総合演習⑨-Bronze模擬問題2-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第88回では、コマ主題「総合演習⑨-Bronze模擬問題2-」を扱う。二回目の模擬問題は、環境プログラミングⅡの後半に当たる第38回から第79回までを出題範囲とする。抽象クラス、インターフェース、シールクラス、パッケージ、基本データ型と参照型、ラッパークラス、コレクションとジェネリクス、例外処理、ファイル処理に関する問題を解く。採点後は正答と誤答の根拠を確認し、第38回以降に学んだ内容を正しく使い分けられたかを振り返る。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、第38回から第79回までの理解を分野ごとに確認するために重要である。
|
|
|
コマ主題細目
|
① Bronze模擬問題2
|
|
細目レベル
|
① Java Bronze模擬問題2は、環境プログラミングⅡの後半に当たる第38回から第79回までを出題範囲とする。問題は、抽象クラス、インターフェース、シールクラス、パッケージとアクセス範囲、基本データ型と参照型、ラッパークラス、コレクションとジェネリクス、例外処理、ファイル処理を中心に構成する。学生は、第87回の前半範囲と重複させず、第38回以降に学んだ内容の定着を確認する。授業では、後半範囲の模擬問題を指定時間内に解く。抽象クラスとインターフェースの問題では、インスタンス生成の可否や実装が必要なメソッドを確認する。List、Set、Mapの問題では、順序、重複、キーの有無から適切な種類を判断する。例外処理とファイル処理の問題では、処理の流れと実行されるcatchを読み取る。解答後はすべての選択肢を解説し、誤答を分野ごとに分けて、第38回から第79回までの中で復習が必要な内容を明確にする。
|
|
キーワード
|
① 抽象クラス ② インターフェース ③ コレクション ④ 例外処理 ⑤ ファイル処理
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 Java Bronze模擬問題2の誤答を、抽象クラス、インターフェース、シールクラス、パッケージ、基本データ型と参照型、ラッパークラス、コレクション、ジェネリクス、例外処理、ファイル処理に分ける。正答率が最も低い分野から二問を解き直す。抽象型の問題は生成の可否と必要な実装を確認し、APIの問題は引数と戻り値を確認する。第38回から第79回までの中で覚え直す必要がある規則を五つ以内に絞る。
◆次回授業の予習 第89回のJava Bronze模擬問題3は、第1回から第79回までの全学習範囲を対象とする。第87回と第88回の誤答記録から、前半と後半の要復習分野を一つずつ選ぶ。各分野の基本問題を一問ずつ解いた後で、模擬試験の解答順を決める。すぐに判断できない問題は何分で保留するか、見直しを試験終了の何分前から始めるかも決め、実戦練習の準備を行う。
|
|
89
|
総合演習⑩-Bronze模擬問題3-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第89回では、コマ主題「総合演習⑩-Bronze模擬問題3-」を扱う。三回目の模擬問題は、第1回から第79回までの全学習範囲を対象とする。前半範囲と後半範囲の問題を一つの模擬試験に混ぜ、本番を意識した制限時間で解答する。判断に時間がかかる問題は一度保留し、確実に解ける問題を先に進める。採点後は、知識不足、読み違い、時間不足を分けて記録する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、広い出題範囲から必要な知識を選び、時間内に解答する実戦力を身に付けるために重要である。
|
|
|
コマ主題細目
|
① Bronze模擬問題3
|
|
細目レベル
|
① Java Bronze模擬問題3は、第1回から第79回までの全学習範囲を対象とする。第87回と第88回では前半範囲と後半範囲を分けて確認したが、この回では両方の問題を一つの模擬試験に混ぜる。学生は、問題を見たときにどの分野の知識が必要かを自分で判断し、Java Bronze試験と期末試験を想定した順番で解答する。授業では、本番を意識した制限時間を設け、途中で解答を確認せずに最後まで取り組む。学生は、短時間で判断できる問題を先に解き、判断に時間が必要な問題には後で戻るための印を付ける。採点後は、前半範囲と後半範囲の得点に加え、未回答の数と見直し時間を記録する。各誤答については、知識が不足していたのか、問題文を読み違えたのか、時間が足りなかったのかを分け、二回目の全範囲模擬試験へ向けた改善点を決める。
|
|
キーワード
|
① コンパイルエラー ② 実行結果 ③ 時間配分 ④ 誤答分析 ⑤ 見直し
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 第1回から第79回までを対象としたJava Bronze模擬問題3の結果を見直す。誤答を前半範囲と後半範囲に分け、さらに知識不足、問題文の読み違い、時間不足に分ける。各種類から一問を選び、制限時間を設けずに解き直す。正解した問題についても、根拠を説明できなかった問題は要復習とする。復習後は、正しい判断手順を短い文章にまとめる。
◆次回授業の予習 第90回も、第1回から第79回までの全学習範囲を対象とする。第89回の結果から、復習する分野を前半と後半から一つずつ選ぶ。各分野の基本規則を一つ確認し、その規則を使う問題を一問解く。模擬試験の制限時間、最初に解く問題の種類、一問を保留するまでの時間、見直しを始める時刻を具体的に決める。第89回と同じ条件で実力を比較できるように準備する。
|
|
90
|
総合演習⑪-Bronze模擬問題4-
|
科目の中での位置付け
|
環境プログラミングⅡは、環境プログラミングⅠで身に付けた変数、条件分岐、繰り返し、配列、クラスの基礎を出発点として、オブジェクト指向による設計とJavaプログラムの読解力を段階的に発展させる科目である。全90回では、クラスとメンバ、コンストラクタ、アクセス制御、継承とポリモーフィズム、抽象化、インターフェース、コレクション、例外処理へ学修範囲を広げ、最後に総合演習とJava Bronze模擬問題で定着を確認する。
第90回では、コマ主題「総合演習⑪-Bronze模擬問題4-」を扱う。四回目の模擬問題も、第1回から第79回までの全学習範囲を対象とする。第89回で見つかった知識不足、読み違い、時間配分の問題が改善したかを確かめるため、前回と同じ条件で模擬試験を行う。採点後は、総合得点、分野別得点、未回答数、見直しに使用できた時間を第89回の結果と比較する。環境プログラミングⅡ全体では、この回は「総合演習」のトピックに位置づき、全範囲の定着度と試験時の解答手順を最終確認するために重要である。
|
|
|
コマ主題細目
|
① Bronze模擬問題4
|
|
細目レベル
|
① Java Bronze模擬問題4は、第89回と同じく、第1回から第79回までの全学習範囲を対象とする。この回は、前回の模擬試験で見つかった知識不足、読み違い、時間配分の問題が改善したかを確認する。学生は、前半と後半のどちらかに偏らず、クラス設計からファイル処理までの問題を本番と同じ手順で解答する。授業では、制限時間、解答順、問題を保留する判断、見直し開始時刻を事前に決め、その計画に従って模擬試験を行う。採点後は、第89回と第90回の全範囲模擬試験について、総合得点、分野別得点、未回答数、見直しに使えた時間を比較する。全問の解説では、正解の根拠と不正解の選択肢が成立しない理由を確認する。学生は、期末試験までに復習する分野と具体的な学習方法を決め、自分用の最終確認表を作成する。
|
|
キーワード
|
① 総合得点 ② 分野別得点 ③ 未回答 ④ 解答手順 ⑤ 復習計画
|
|
コマの展開方法
|
社会人講師
AL
ICT
PowerPoint・Keynote
教科書
コマ用オリジナル配布資料
コマ用プリント配布資料
その他
該当なし
|
|
小テスト
|
「小テスト」については、毎回の授業時間内に、LMS上において当該コマの小テスト(難易度表示付き)を実施する。
|
|
復習・予習課題
|
◆今回授業の復習 第1回から第79回までを対象としたJava Bronze模擬問題4を見直す。問題を前半範囲と後半範囲に分け、それぞれの正答率を計算する。第89回の全範囲模擬試験と比べ、総合得点、未回答数、見直しに使用できた時間が改善したかを確認する。誤答と根拠を説明できなかった正答を復習対象にし、必要な授業回の内容を確認する。最後に、同じ誤りを防ぐための確認項目を十項目以内にまとめる。
◆今後の学修に向けた予習 環境プログラミングⅡの授業終了後も学習を続けられるように、Java Bronze受験までの復習計画を作成する。前半範囲と後半範囲から、復習する分野を一つずつ選ぶ。各分野について、見直す授業回、解く問題数、復習日を決める。短いコード問題は、実際にコンパイルして結果を確認する。選択問題は、正解の理由だけでなく、他の選択肢が成立しない理由も説明する。期末試験とJava Bronze試験の両方に活用できる学習計画にする。
|