【オブジェクト指向】基本情報技術者試験

【オブジェクト指向】基本情報技術者試験

関連するデータとそのデータに対する手続き(メソッド)を一体化し、一つのもののように捉える考え方です。開発者はそのオブジェクトの中身を知らなくてもオブジェクトに対するメッセージさえ知っていれば機能します。 C ++や Java が代表的なオブジェクト指向型言語となっています。

オブジェクト指向の特徴とは(平成19年秋午前問44)

ア:オブジェクト指向モデルでは抽象化の対象となるオブジェクトに対する操作をあらかじめ指定しなければならない。

イ:カプセル化によってオブジェクト間の相互依存性を高めることができる。

ウ:クラスの変更を伴う場合にはそのクラスの上位にある全てのクラスの変更が必要となる。

エ:継承という概念によってモデルの拡張家変更の際に変更部分を局所化できる。

解法

オブジェクト指向の最大とも言えるメリットが継承(インヘリタンス)という考え方です。オブジェクト指向では各オブジェクトが暮らすという属性を持っていて、関連しているオブジェクト同士でこのクラスを自動的に受け継ぐことが可能です。敬称はこのクラスを変更するだけで関連するすべてのオブジェクトに反映できるという拡張や変更に対する効率の良さを持っていますこの効率の良さ、すなわち最小限の修正でシステム全体にその修正を反映することができることを問題で「変更部分を局所化できる」と表現しています。
なおこの問題でカプセル化というキーワードが出てきますしかしカプセル化の目的は中身を外から分からないようにすること言い換えると利用者は中身を知らなくてもいいようにして、情報の保護と扱いを簡易にしているのです。

(イ)ではオブジェクト間の相互依存性を高めると言っていますので、全く逆です。 また( ア)は「 オブジェクトに対する操作をあらかじめ指定しなければならない」と言っていますが、これもカプセル化と隠蔽の目的とは逆ですね。うも同様に継承(インヘリタンス)の目的とは逆です。

答えはエです。

過去出題問題(平成19年春午前問42)

オブジェクト指向におけるカプセル化を説明したものはどれか。

ア:同じ性質を持つ複数のオブジェクトを抽象化して整理すること。

イ:基底クラスの性質を派生クラスに受け継がせること。

ウ: クラス相田 に共通する性質を抽出し、基底クラスを作ること

エ:データとそれを操作する手続きをひとつにしてオブジェクトの内部に隠蔽すること

解法

ダイレクトにカプセル化というキーワードが出ました。カプセル化とは文字通りカプセルの中に閉じ込めることです。そして「閉じ込める」とは隠してしまうこと。隠蔽してしまうことに他なりません。オブジェクトとは物という意味で、これまではプログラムという手続きがあり、この手続きに従ってデータを処理するという考え方でした。オブジェクト指向はオブジェクト自身が一つの細胞のように、何かの刺激を受けると自らそれに反応します。

オブジェクトはデータと、データに対する手続き(メソッド)で構成されており、その内容は外部からは分からないようになっています。分からないようにしていることを隠蔽と呼びデータとメソッドを一つにしていることをカプセル化と言います。

答えはエです。

過去出題問題(平成18年春午前問40)

オブジェクト指向における開かれた(ホワイトボックス型)再利用とは、基底クラスに対して、 サブクラスを作ることによって、基底クラスのデータや機能を再利用することである。この方式のオブジェクト指向の再利用技術に関する記述のうち適切なものはどれか。

ア:基底クラスで定義したデータが保護されるので安全性の高いプログラムが開発できる。 

イ:基底クラスで定義したデータや機能に対する妻をサブクラスに記述すれば良く開発効率が良い

ウ:基底クラスの変更はサブクラスに影響しない。

エ:基底クラスを複数のアプリケーション開発に利用することはできるが、そのサブクラスを再利用することはできない。

解法

問題文を何だか無理矢理難しくしているような気がしています。クラスには元になる基底クラスと基底クラスを継承させる下位のクラスがあります。 海のクラスの子とサブクラスといい、基底クラスから継承した情報を変更すると下位のクラスはその変更を受け継ぐことができます。さらに基底クラスに対する差異を下位のクラスに明らかに記述すれば、その際はその下位のクラスに反映されるので基底のクラスを変更する必要がありません。

ある下位のクラスだけ、 基底クラスと少し違った属性を与えたいときは効果的です。

継承という利点を生かしつつ、独自の変更もできるということを表しています。

答えはイです。

オブジェクト指向って何?

システムを設計する時に、 まずシステムが実現する機能を考えます。その機能を細かく具体的に分けて、それを記述したものをプログラムとしてコーティングして行きます。今は昨日施工そしてプログラムはプログラムの命令という手続き指向とも言えます。

極端な表現をすると手続き指向はオブジェクト指向と対極にあり、 非常にとっつきにくい考え方です。

一時期ブームにもなったこのオブジェクト指向での開発に挑戦したことは何回かありますが、オブジェクト指向はシステムの変更作業を画期的に軽減するこれからの開発手法だとブームになりました。結果は失敗です。

以前の開発施工に戻しそれ以来誰をオブジェクト指向を口にしなくなりました。手続き指向というのは、 一つのプログラムの命令に従って順番にデータを処理していく作業です。しかしオブジェクト指向とはオブジェクトを中心に捉える、乱暴に言ってしまえば右脳型出向ではないでしょうか。

なんだかわからないが隠蔽されているものがある。

それに対して問いかけたり刺激を与えると何らかの反応する。

何かイメージ的な感じがしませんか?

業務でオブジェクト指向開発などはほぼ使用されませんが試験では出題されることが多い傾向があります。

オブジェクト指向の問題では、「クラス」と親クラスを下位クラスが引き継ぐ、「継承」、「隠蔽」を実現する「カプセル化」をセットで覚え、それぞれの利点を押さえておけばいいと思います。