応用情報技術者 2016年 秋期 午前2 問47
問題文
オブジェクト指向言語のクラスに関する記述のうち、適切なものはどれか。
選択肢
ア:インスタンス変数には共有データが保存されているので、クラス全体で使用できる。
イ:オブジェクトに共通する性質を定義したものがクラスであり、クラスを集めたものがクラスライブラリである。(正解)
ウ:オブジェクトはクラスによって定義され、クラスにはメソッドと呼ばれる共有データが保存されている。
エ:スーパクラスはサブクラスから独立して定義し、サブクラスの性質を継承する。
🔒 解説は解答すると表示されます
クラスとクラスライブラリ【午前2解説】
正解の理由
選択肢のうち、イは「クラスとはオブジェクトに共通する性質(属性・振る舞い)を定義するものであり、複数のクラスをまとめたものがクラスライブラリである」という点を正しく表しています。クラスはオブジェクトの設計図であり、インスタンス(オブジェクト)はそのクラスから生成されます。また、クラスライブラリは再利用可能なクラス群やAPIの集合を指し、言語やプラットフォームが提供する基本機能を集めたものです。したがって選択肢イが適切です。
解法ステップ
- 「クラス」の定義を思い出す:設計図としての役割(属性と振る舞いの定義)。
- 各選択肢がその定義に合致するかを検証する。
- 「クラスライブラリ」の意味(クラス群の集合)を確認する。
- 継承や変数(インスタンス変数/クラス変数)の用語が正しく使われているかをチェックする。
- 誤用があれば除外して正答を確定する。
選択肢別の誤答解説
- ア: 「インスタンス変数には共有データが保存されているので、クラス全体で使用できる。」
- 誤り。インスタンス変数(非静的フィールド)は各インスタンスごとに固有のデータを保持する。クラス全体で共有するデータはクラス変数(静的変数、static)である。
- イ: オブジェクトに共通する性質を定義したものがクラスであり、クラスを集めたものがクラスライブラリである。
- 正しい。クラスは属性(フィールド)と振る舞い(メソッド)を定義するもので、クラスライブラリはこれらの集合体(再利用可能なAPI)である。
- ウ: 「クラスにはメソッドと呼ばれる共有データが保存されている。」
- 誤り。メソッドは振る舞い(関数・操作)を定義するものであり、データではない。共有データを指すなら「クラス変数(静的変数)」が該当する。
- エ: 「スーパクラスはサブクラスから独立して定義し、サブクラスの性質を継承する。」
- 誤り。継承の方向を取り違えている。正しくは「サブクラスがスーパクラスの性質(属性・振る舞い)を継承する(スーパクラス→サブクラスへ伝わる)」である。スーパクラスはサブクラスに対して基底となる性質を提供する。
よくある誤解
- インスタンス変数とクラス変数を混同する。
- インスタンス変数は「各インスタンス固有」、クラス(静的)変数は「クラス全体で共有」される。
- 継承の方向の取り違え。
- 「継承される側(親)」がスーパクラスで、「継承する側(子)」がサブクラス。性質は親→子へ伝わる。
- メソッドをデータだと考える。
- メソッドはデータではなく手続き(振る舞い)を表す。データと振る舞いは明確に区別する。
補足コラム
- クラスライブラリの具体例
- Javaの標準ライブラリ(java.lang, java.util など)は、多数のクラスとインターフェースを集めたクラスライブラリです。これにより文字列操作、コレクション操作、入出力などが利用可能になります。
- 言語ごとの違い(簡潔)
- Java/C++/C# では「static」などのキーワードでクラス変数(共有データ)を定義する。Pythonではクラス属性として定義することでクラス全体で共有される。
- コード例(Java)
// クラス定義の例
public class Person {
// クラス変数(共有)
public static int population = 0;
// インスタンス変数(個別)
private String name;
public Person(String name) {
this.name = name;
population++;
}
// メソッド(振る舞い)
public String getName() {
return name;
}
}
- 上の例で population はクラス全体で共有され、name は各インスタンス固有のデータです。
FAQ
Q: クラスライブラリとフレームワークの違いは何ですか?
A: クラスライブラリは再利用可能なクラス群(道具箱)で、呼び出し側が主導して利用する。一方フレームワークは骨組みを提供し、開発者のコードがフレームワークに組み込まれる(制御の逆転が起きる)。
A: クラスライブラリは再利用可能なクラス群(道具箱)で、呼び出し側が主導して利用する。一方フレームワークは骨組みを提供し、開発者のコードがフレームワークに組み込まれる(制御の逆転が起きる)。
Q: 継承で親クラスのプライベートメンバは子クラスから見える?
A: 直接は見えません。プライベートメンバは親クラス内部でのみアクセス可能です。子クラスはpublic/protectedのメンバやアクセサ(getter/setter)を通じて利用します。
A: 直接は見えません。プライベートメンバは親クラス内部でのみアクセス可能です。子クラスはpublic/protectedのメンバやアクセサ(getter/setter)を通じて利用します。
Q: クラスは複数の親クラスを持てる?
A: 言語依存です。C++は多重継承をサポートしますが、Javaはクラスの多重継承をサポートせず(インターフェースは複数実装可)、C#も基本的には単一継承です。
A: 言語依存です。C++は多重継承をサポートしますが、Javaはクラスの多重継承をサポートせず(インターフェースは複数実装可)、C#も基本的には単一継承です。
関連キーワード: クラス, クラスライブラリ, インスタンス変数, クラス変数, メソッド, 継承, スーパクラス, サブクラス, オブジェクト指向, static, 再利用性

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

