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

基本情報技術者試験

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

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

これまで、データと処理は別々だった

ここまでで、2つの道具を覚えました。

すでに持っている道具

変数値を入れておく箱(G2-1)

手続・関数まとまった処理(G3-1)

この2つは、まったく別のものとして書いてきました。変数はプログラムの上のほうに並び、手続は ○ から始まる別のかたまりとして置かれる。お互いに何の関係もありません。

たいていの場合、それで足ります。ところが、足りなくなる場面があります。

「生徒」を扱ってみると、無理が出る

クラスの名簿を作って、合格者が何人いるかを数えたいとします。1人ぶんに必要なのは、名前と点数です。

文字列型: namae ← "田中"
整数型: ten ← 80

さらに、合格かどうかを判定する処理も要ります。60点以上なら合格とします。

○論理型: goukaku()
  if (ten ≧ 60)
    return true
  endif
  return false

ここまでは書けます。問題は、これが「田中さんのもの」だと、どこにも書かれていないことです。

鈴木さんも扱うとなると、こうなります。

文字列型: namae1 ← "田中"
整数型: ten1 ← 80
文字列型: namae2 ← "鈴木"
整数型: ten2 ← 65
2人でこれ。40人なら80個

名前と点数の対応は、末尾の数字を人間が合わせているだけです。namae1 と ten1 が同じ人のものだという約束は、プログラムのどこにも書かれていません。

goukaku も同じです。この ten がどの生徒の点数なのかは、どこにも書かれていません。2人目を足したとたん、この処理は使えなくなります。

namae1・ten1・namae2・ten2 の4枚の札がばらばらに浮き、goukaku からten1 と ten2 の両方へ点線が伸びて疑問符が付いている

どの生徒の点数なのか、どこにも書かれていない

本当は「名前・点数・合格の判定」の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つだけでした。

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

これで足りないとき、問題ごとにクラスが追加され、型として使えるようになります。だから ── コロンの前にこの5つ以外の名前があったら、それはその問題のためのクラスです。

クラスそのものは使えない ── 実物を作る

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

Seito は「生徒1人ぶんの形」を決めただけで、まだ誰のデータも入っていません。形が決まっているだけのものです。

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

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

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

クラスと、そこから作るもの

クラス形を決めたもの。設計図。1つだけ

インスタンスそこから作った実物。いくつでも作れる

プログラムで使うのは、いつも実物のほうです。

実物を作るのが、クラス名と同じ名前に括弧を付けた呼び出しです。

Seito: a ← Seito()

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

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

Seito: a箱を用意する。Seito が入る箱に a と名前を付けた

← Seito()実物を1つ作って返す。それを箱に入れた

この実物を作る呼び出しを、正式にはコンストラクタといいます。

← の右に置けるのは値が返ってくるものだけでした(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.ten ← 80
b.ten ← 65
設計図 Seito は namae と ten を持つ。そこから作った実物 a は名前が田中で点数80、b は鈴木で65

設計図は1つ、実物はいくつでも。a に書き込んでも b は変わらない

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

試験ではこう出る

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

① 説明の表(問題文に載る)

持っているものnamae(名前)、ten(点数)

してもらえることgoukaku() … 点数が 60 以上なら true を返す

② プログラム

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

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

用語の整理

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

つまずきポイントまとめ

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

次に読む

G12-3 コンストラクタと表の読み方 ─ 実際の出題で確かめる
G12-1 演算子「.」 ─ メンバ変数とメソッドの読み方
G1 擬似言語とは ─ 記号の読み方と書き方を1枚で
目次 基本情報技術者試験 科目B 攻略ガイド

この記事で引用した資料

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

練習問題は当サイトのオリジナルです。

Copied title and URL