擬似言語のクラスとは|変数と手続が1つになったもの【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-10-17

科目Bの問題を読んでいて、見たことのない型の名前が出てきて止まった人へ。前回出てきた クラス を、いちばん最初のところから説明します。

期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円2,600円中身を見る ›

なぜ、ひとまとめにするのか

生徒1人ぶんの名前と点数を、ふつうの変数で持つとします。2人になると namae1・ten1・namae2・ten2 と増え、どれとどれが同じ人のものかは、末尾の数字を人間が合わせているだけになります。60点以上なら合格と判定する関数 goukaku は、引数で点数を渡せば書けます。それでも、名前と点数と判定の結び付きは、プログラムのどこにも書かれません。

本当は「名前・点数・合格の判定」の3つで1人ぶんです。

クラス ── データと処理を、ひとまとめにする

そこで出てくるのがクラスです。

クラスとは

関係のあるデータと処理を、ひとまとめにして、1つの型にしたもの。

「生徒1人ぶん」をまとめて Seito という新しい型にします。

データの namae と ten、処理の goukaku が、Seito という1つのクラスの中に入る

持っているものと、してもらえることが、そのまま1つの型の中に入る

中に入っているものには、それぞれ呼び名が付いています。

クラスの中身 正式な呼び名 これまでの言い方
namae、ten メンバ変数 変数(データ)
goukaku メソッド 手続・関数(処理)

新しい概念ではありません。すでに知っている変数と手続が、1つの型の中に入っただけです。

シラバスにはこう書かれている

基本情報技術者試験シラバス Ver9.2 の「⑦ オブジェクト指向プログラミング」は、クラスやメソッドを使用したオブジェクト指向プログラミングの考え方を理解すると定めています。用語例はコンストラクタ、メンバ変数、オーバーライド、オーバーロードの4つです。

擬似言語の記述形式には、クラスに関する書き方の定めがありません。出題では、使う書き方を問題文が説明します。説明された例があるのはコンストラクタ・メンバ変数・メソッドだけです。

クラスは「型」として使う

Seito は型です。だから、変数を宣言するときのコロンの前に置けます。

整数型: x
Seito: a

読み方は何も変わりません。コロンの前が種類、うしろが名前。x には整数が1つ格納され、a には生徒1人ぶんのデータ(インスタンス)の参照が格納されます(このあとくわしく見ます)。

公開問題でよく見る型は5つでした(G2-2)。

整数型 実数型 文字列型 文字型 論理型

これで足りないとき、問題ごとに型が追加されます。クラスはその1つです。だから ── コロンの前にこの5つ以外の名前があったら、それはその問題のために用意された型で、どういうものかは問題文に説明があります。

クラスそのものは使えない ── インスタンスを生成する

ここが、いちばんつまずくところです。

Seito は生徒1人ぶんのデータが何を持つかを決めただけで、まだ誰のデータも入っていません。設計図があるだけの状態です。

たい焼きの型を思い浮かべてください。型があれば、たい焼きは何個でも焼けます。でも型そのものをかじっても意味がありません。食べるのは焼いたほうです。

たい焼きの焼き型が1つ、そこから焼けたたい焼きが3つ。型がクラス、焼いたものがインスタンス

型そのものはかじれない。使うのは焼いたほう

クラスと、そこから生成するもの

クラス何を持ち、何ができるかを決めたもの。設計図。1つだけ

インスタンスクラスから生成したもの。いくつでも生成できる

プログラムで使うのは、いつもインスタンスのほうです。

インスタンスを生成するのが、クラス名と同じ名前に括弧を付けた呼び出しです。

Seito: a ← Seito()

同じ名前が1行に2回出てきます。これは書き間違いではありません。

1行に2つのことが入っている

Seito: a変数を宣言する。Seito 型の変数に a と名前を付けた

← Seito()インスタンスを1つ生成する。インスタンスは別の場所にあり、a にはその参照を格納する

このインスタンスを生成する呼び出しをコンストラクタといいます。

← の右に置けるのは値が返ってくるものだけでした(G3-3)。コンストラクタは生成したインスタンスの参照を返すので、ここに置けます。代入の読み方は、これまでとまったく同じです。

生成した直後に何が入っているかは、表で決まる

この例の Seito() は、中身が空のインスタンスを生成するものとします。namae にも ten にも、まだ何も入っていません(未定義の値)。入れる場所ができただけで、田中さんになったわけではありません。

コンストラクタがどんなインスタンスを生成するかは、実際の出題では問題文の表に書かれます。

インスタンスの中身に触る ── 演算子「.」

生成したインスタンスの中身を読み書きするのが . です。「〜の中の」と読みます(G12-1)。

Seito: a ← Seito()
a.namae ← "田中"
a.ten ← 80

a.namae は「a の中の namae」。取り出したあとは、ふつうの変数と同じで、読むことも書き換えることもできます。これで a が田中さんになりました。

処理を頼むときも、同じ . で「どのインスタンスの処理か」を先に書きます。

a.goukaku()

「a の中の goukaku を呼ぶ」── a が合格かどうかを判定してもらう、という意味です。a.ten が 80 なら true が返ってきます。

渡すものがあるときは、括弧の中に書きます。手続の呼び出しとまったく同じです。

見分けるのは括弧だけ

a.ten括弧が無い → メンバ変数(データ)

a.goukaku()括弧がある → メソッド(処理)

ここで、冒頭の困りごとが消えていることに気づいてください。a.namae と a.ten は同じ a の中にあります。末尾の数字を人間が合わせる必要はありません。a.goukaku() も、どの生徒を判定するのかが . の左に書いてあります。

インスタンスは、いくつでも生成できて、それぞれ別

Seito() は呼ぶたびに新しいインスタンスを1つ生成します。2回呼べば2つ、40回呼べば40個です。

Seito: a ← Seito()
Seito: b ← Seito()
a.namae ← "田中"
a.ten ← 80
b.namae ← "鈴木"
b.ten ← 65
設計図 Seito は namae と ten を持つ。そこから生成したインスタンス a は名前が田中で点数80、b は鈴木で65

設計図は1つ、インスタンスはいくつでも。別々に生成したので、a に書き込んでも b は変わらない

別々に Seito() を呼んで生成したインスタンスどうしは、まったくの別物です。a.ten に書き込んでも b.ten は 65 のまま。a.goukaku() が見るのも a の点数だけです。たい焼きを1個食べても、別のたい焼きは減らないのと同じです。

試験ではこう出る

試験では、クラスの中身のプログラムは載りません。代わりに、次の2つが渡されます。

① メソッドの説明の表(問題文に載る)

メソッドgoukaku()

戻り値論理型

説明ten が 60 以上なら true を返す。

② プログラム

Seito: a ← Seito()
a.namae ← "田中"
a.ten ← 80
a.goukaku() の戻り値を出力

出力は true です。goukaku が中でどう判定しているかは書かれていませんが、表の説明に「ten が 60 以上なら true を返す」とあるので、a.ten が 80 の時点で決まります。

用語の整理

用語 意味 擬似言語での姿
クラス データと処理をひとまとめにした型。設計図 Seito
インスタンス クラスから生成したもの。いくつでも生成できる a、b
コンストラクタ インスタンスを1つ生成し、その参照を返す呼び出し Seito()
メンバ変数 インスタンスが持っている値 a.ten
メソッド インスタンスに頼める処理 a.goukaku()

つまずきポイントまとめ

まちがえ方 正しい理解
クラスは新しくて難しいものだと思う 変数と手続が1つに入っただけ。どちらも既習
同じ名前が2回出るのを誤植だと思う 前が型、うしろがコンストラクタの呼び出し
クラス名を変数名だと思う コロンの前は型。5つ以外は問題文で説明される型で、クラスはその1つ
生成した直後の中身を思い込む 何が入るかは問題文の表に書かれる。この例の Seito() は空
クラスの中身を想像して読む 表に書かれたとおりに動くと信じる。中は問われない

次に読む

G12-3 説明の表の読み方 ─ 引数と戻り値の2つだけ
G12-1 演算子「.」 ─ メンバ変数とメソッドの読み方
G1 擬似言語の地図(入口)
目次 基本情報技術者試験 科目B 攻略ガイド

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。

本文の例(クラス Seito)は当サイトのオリジナルです。

タイトルとURLをコピーしました