【10問】オブジェクト指向の基礎(基本情報技術者試験, FE)
「オブジェクト指向」の用語問題を「プログラミング経験がないから難しい」のは当然です。
このNoteでは、用語問題として解くことを薦めます。
実は、Java言語などを半年勉強した程度ではオブジェクト指向は理解できません。何故なら、私のIT専門学校の学生がそうだから。
半年~1年かけてJavaのプログラムを組んで、グループ開発や設計書に基づいた演習をしなければ、理解に至らないのです。
このNoteでは、私がオブジェクト指向を教えるときの解説を軽くしつつ、基本情報技術者で正解するために「用語問題にまで成り下げ」ます。
今後の科目B・応用情報技術者などを解く時にも使う「基礎知識」なので、是非一読してみてくださいね。
クラス(設計図)からインスタンス(実体)を作る
まずは基本。
クラス:データ(属性)とメソッド(手続き)を定義した設計図
インスタンス:クラスを実体化したモノ(オブジェクト)
ここでは、関数・クラスのご利益を少し学んでみましょう。
一度書いたコードをコピペで使うことはあります。しかし改造した時に全部改良しないといけないので面倒。よって関数に一ヶ所にまとめておくと良いのです。
次はクラスのご利益。
クラスは、変数や関数をまとめた設計図。関数と違うのは、設計図を引き継いでアレンジ・流用がやりやすい点。
最後はオブジェクト指向のご利益。
オブジェクト指向では、クラスを定義して、使う時に必要な数だけ実体にして(インスタンス化)して使います。
応用情報技術者平成25年秋期 午前問47
正解はイ。
ア:設問文は「クラス変数」のこと。「インスタンス変数」はクラスから実体化したオブジェクト個別で使える変数です。正直覚えなくても良いかなと、消去法で対応できますし。
イ:設問文の通り。ライブラリは集めたもの、プログラムライブラリなどもありますね。
ウ:データは「クラス変数」に格納されます。メソッドは「手続き」(機能)、つまり動作です。
エ:逆です。スーパクラス(親)からサブクラス(子)が継承します。
出典は、応用情報技術者平成25年秋期 午前問47。
基本情報技術者平成22年秋期 午前問47
正解はイ。
ア:逆です。インスタンスの仕様を定義したのがクラス(設計図)です
イ:題意の通り、クラスを基にインスタンス(実体)を作ります
ウ:逆です。1つのクラスから、複数のインスタンスを作ることはあります。ただし、複数のクラスから引き継いで1つのクラスを作ることはあります(継承と云います)。
エ:ウの通り。
なお、インスタンス=オブジェクトと思ってOKです。言う場面がちょっと違うのですが、ややこしいですからね。
出典は、基本情報技術者平成22年秋期 午前問47。
基本情報技術者平成19年秋期 午前問44
正解はエ。
ア:抽象化されたクラスは、色んな下位クラスで流用できるように設計します。よってオブジェクトへの操作を決める縛りはありません。
イ:「カプセル化」とは、オブジェクト(実体)にデータとメソッド(手続き、機能のこと)を内包すること。外から「隠蔽」するため、オブジェクトの独立性は高まり、同士の関係は希薄になります。
ウ:上位クラスを流用(「継承」と云う)して下位クラスを作り、下位クラスを変更する時は、下位クラスのコードを変更すれば良いです。アレンジですから。
エ:正しい。上位クラスを継承し、多少アレンジして下位クラスを作ります。アレンジ(変更)箇所は下位クラスだけに局所化されます。
出典は、基本情報技術者平成19年秋期 午前問44。
クラスの種類 | 基底(上位)と派生(下位)
クラス(設計図)には階層構造ができます。
例えば、ゲームで三角形ブロック・四角形ブロックを作るとき。
上位クラス「図形」:変数に「辺の数」「色」「ブロックの名前」など
を作っておいて、三角形と四角形のクラスを作るときに「継承」(つまり流用)すると便利。
下位クラス「三角形」:「図形」を継承。メソッドに「転がる動作」を追加
下位クラス「四角形」:「図形」を継承。メソッドに「滑る動作」を追加
これで下位クラスは、変数「辺の数」「色」「ブロックの名」を持ちつつ、追加された機能を持てます。
三角形クラスをインスタンス化する時には、変数「辺の数」に「3」を代入、「色」に「緑」、「ブロックの名前」に「三角形1」などと代入して実体化します。
基本情報技術者平成20年秋期 午前問41
正解は、ウ。「概念」に注目します。「種類」と考えても良いですね。
一方で、ア・イ・エは「部品」です。
なお「汎化」「特化」(is-a関係)も知っておきましょう。概念の視点で考えます。
汎化:共通の概念をまとめて基底クラスを作ること(上向き)
特化:基底クラスから各種クラスを作ること(下向き)
汎化は、三角形や四角形から図形クラスを作ること。特化は、逆。
次は「集約」「分解」(part-of関係)です。構成要素の視点で考えます。
集約:パーツを集めて作ること(上向き)
分解:クラスを構成している各クラスを作ること(下向き)
ア・イ・エは「part-of関係」でした。
出典は、基本情報技術者平成20年秋期 午前問41。
基本情報技術者平成27年春期 午前問48
正答は、エ。トラックは「is-a関係」。
エンジン・タイヤは「part-of関係」。
選択肢を見ると、1つだけなのはトラックなので、で選んでもOKです。
出典は、基本情報技術者平成27年春期 午前問48。
オブジェクト指向の性質
次に性質。
カプセル化:オブジェクト内にデータとメソッドを隠蔽して、外部から直接アクセスさせない特性
手続き(メソッド):オブジェクトが提供する機能
ここまではITパスポートレベル。
基本情報技術者平成24年秋期 午前問47
正答は、エ。「外部から隠蔽」に反応してください。
イの「継承(インヘリタンス)」は必ず覚えてください。良く出題される、オブジェクト指向「いろはのい」。
ア:抽象化のこと。
イ:継承(インヘリタンス)。「受け継がせる」より。
ウ:汎化のこと。
出典は、基本情報技術者平成24年秋期 午前問47。
基本情報技術者平成22年秋期 午前問46
正答は、ア。「属性と振る舞いを一つにまとめた」より。
出典は、基本情報技術者平成22年秋期 午前問46。
オブジェクト指向の専門用語
用語は、プログラミングの勉強を1年してもなかなか目にしないレベルですが、試験には出ます。
継承(インヘリタンス):他のクラス(上位クラス)で定義されたデータとメソッドを受け継ぐ。プログラムの流用ができます
ポリモーフォズム:同じメッセージでも各オブジェクトによって動作が違う性質。多様性や多相性とも云う
オーバーライド:継承で受け継いだ上位クラスのメソッドを再定義する
オーバーロード:クラス内に、同じ名前のメソッドを複数定義する(引数を違えて、呼び出されたときの引数でどれを呼ぶか判断される)
オブジェクト指向の用語は、プログラミングを1年以上しても分からないぐらい難しめです。
基本情報技術者平成29年秋期 午前問7
正答はイ。
ア:「外部から隠蔽」よりカプセル化のこと
イ:「再定義」よりオーバーライドのこと
ウ:「同じメソッド名で複数メソッド」の文意より、オーバーロードのこと
エ:「抽象したクラスを作る」より汎化のこと
出典は、基本情報技術者平成29年秋期 午前問7。
基本情報技術者平成30年春期 午前問46
正答はウ。
「あるクラスの属性や機能」は上位クラス、サブクラスは下位クラスのこと。「利用できる」より「継承」と特定します。
キーワードを書いておきます。
ア:オーバーライド:下位クラスで「再定義」
イ:カプセル化:データとメソッドを外部から「隠蔽」
エ:多相性(ポリモーフィズム):「振る舞いが違う」
大方以上のような主旨が書いてあれば特定できます。特定できない時は、消去法を絡めて正答率を上げましょう。
出典は、基本情報技術者平成30年春期 午前問46。
基本情報技術者平成30年秋期 午前問49
正答は、イ。
初めて見ました。覚えなくて良いです。
ウが「継承」だけが分かればOK。
ア:伝搬(プロパゲーション)
イ:委譲
ウ:継承(インヘリタンス)←これだけは覚えておく!
エ:合成(コンポジション)
どうしても理解したい場合は、過去問道場さんを(基本情報技術者平成30年秋期 午前問49)。もし再度出題されたら対応しようと考えます。
まとめ | 難しいからこそ用語問題と割り切る
オブジェクト指向は難しいですね。
用語もたくさんありますし、プログラムもある程度組んだ経験がないと実感も湧きません。少なくともJavaを半年以上学習して、グループ開発をしないことには。
オブジェクト指向は用語問題と割り切って、まずはキーワードで解くのがお薦めです。
ひとまずは2~4個からスタートしてくださいね。
継承(インヘリタンス):他のクラス(上位クラス)で定義されたデータとメソッドを受け継ぐ。プログラムの流用ができます
ポリモーフォズム:同じメッセージでも各オブジェクトによって動作が違う性質。多様性や多相性とも云う
オーバーライド:継承で受け継いだ上位クラスのメソッドを再定義する
オーバーロード:クラス内に、同じ名前のメソッドを複数定義する(引数を違えて、呼び出されたときの引数でどれを呼ぶか判断される)
\力試しは修了試験で!4回分の解説です/
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ