| English | 意味 |
|---|---|
| computational thinking/ˌkɒmpjuːˈteɪʃənl ˈθɪŋkɪŋ/ | 計算思考 |
| abstraction/əbˈstrækʃn/ | 抽象化 |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | 分解 |
| pattern recognition/ˈpætn ˌrekəɡˈnɪʃn/ | パターン認識 |
| algorithm/ˈælɡərɪθəm/ | アルゴリズム |
| function/ˈfʌŋkʃn/ | 関数 |
| module/ˈmɒdjuːl/ | モジュール |
| sub-problem/sʌb ˈprɒbləm/ | サブ問題 |
| procedure/prəˈsiːdʒə/ | 手続 |
| structure chart/ˈstrʌktʃə tʃɑːt/ | 構造図 |
意図的に歪められた地図
- 1931年、失業中の製図家ハリー・ベックがロンドン地下鉄の地図を描き直した。
- 彼は現実の地理を捨てた: すべての線が直線になり、すべての駅が等間隔になった。
- この地図は「正しくない」ものだったが、即座に使いやすくなった。世界中のメトロ地図はこのデザインを模倣している。
- ベックは乗客が必要とするものだけを残した: 駅とそれらがどのように接続されているか。これはコンピュータが存在する以前からの計算的思考である。
計算思考とは何か
- 問題を分析し、コンピュータが実行できる解決策を設計するための mentale ツールのセットである。
- カリキュラムではそのうち2つを明記している: 抽象化と分解。
- それらを支えるものが2つある: パターン認識とアルゴリズムの設計である。
抽象化
- 抽象化とは、問題の本質的な特徴を維持し、無関係な詳細を無視することで、より単純なモデルを提供することである。
- 地下鉄の地図は駅と路線を残し、地理情報を捨てる。
- 変数名はメモリアドレスを隠蔽し、関数名はコードブロックを背後に隠し、クラスはシステムが必要な属性のみを残す。

抽象化は問題の本質的な特徴のみを残し、無関係な詳細を捨てる
抽象化とは:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
抽象化は問題を本質まで単純化します。分割することは分解です。
駅と路線は維持しつつ地理情報を省略した鉄道図は抽象化の例です。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
重要なもの(駅、接続)を残し、他を排除 — これが抽象化の precisely な役割です。
目的と利点
- 目的: 解決するために必要な詳細のみを含む、問題のより単純なモデルを作成することである。
- 利点: 問題を理解したりプログラムしたりするのが容易になる; プログラムは小さく、書いたりテストしたりする時間が短くなる; 同じモデルを類似した問題に再利用できる。
- 出題者は目的と利点を別々に求める。両方とも覚えること。
抽象化の利点となる記述をすべて選択してください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
抽象化は詳細を削除するため、すべての詳細を保持することはその逆であり、ハードウェアについては何も示しません。実際の3つの利点は、理解、開発のサイズ/速度、再利用です。
worked example: 抽象モデル
- コーヒーショップでは、各 loyalty card(ラビリティカード)会員について、ID、氏名、自宅住所、メールアドレス、携帯電話番号、生年月日、ポイント、最終来店日数据存储。
- 新しいモジュールは、30日以上来店していない顧客にクーポンのメールを送信する。これに必要なデータは何か?
- 必要: ID(顧客を探すため)、メールアドレス(送信先)、氏名(メッセージをパーソナライズするため)、最終来店日(誰に送るかを選択するため)。
- 不要: 自宅住所、携帯電話番号、生年月日、ポイント。それらを除外することは抽象化そのものである。
worked example のクーポンメールモジュールには、以下のどの要素が必要ですか?すべて選択してください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
送るメールアドレス、対象者判定のための最終訪問日、顧客検索用のID。郵便住所や誕生日はメールクーポンに関係ないため、このモジュールの抽象モデルからは除外されます。
分解
- 分解とは、大きな問題をより小さな部分問題に分割し、それぞれを解きやすくすることである。
- 主要な部分を見つける → 各部分をサブタスクに分割する → 各部分がコード直接実装できるほど小さくなるまで続ける → 解き、統合する。
- 各部分問題はプログラムモジュールとなり、プロシージャーまたは関数となる。

プログラムをモジュールとサブモジュールに分解する
分解とは:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
分解は大きなタスクを、それぞれ独立して解決可能な小部分問題に分割します。
分解によって生成された各部分問題はプログラムのモジュールになります:プロシージャまたは____。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
カリキュラムの記述は正確です:分解はプログラムのモジュールという概念につながり、プロシージャまたは関数です。
worked example: シネマ予約プログラム
- 複数のスクリーンを持つシネマは、顧客が座席を予約できるプログラムを必要としている。
- ShowFilms() は映画、スクリーン、開始時間を一覧表示する。
- ChooseSeats() は座席図を表示し、顧客の選択を受け取り、座席が空いているか確認する。
- TakePayment() は料金を計算し、クレジットカード決済を処理し、チケットを印刷する。
- 3つのモジュールがあり、それぞれが独立して設計、コーディング、テストできる大きさである。
映画館予約設計の各要素とその定義にマッチさせください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
各が一つの作業を行う3つのモジュールと、それらがどのように組み合わさるかを示す構造図。
なぜ分解するのか?3点満点の解答
- 各サブ問題は、単独で設計、コーディング、テストするのに十分な大きさである。
- 異なるプログラマが同時に異なるモジュールに作業できる。
- 既存のモジュールやライブラリルーチンは再利用可能であり、バグも一つのモジュール内にあるため見つけやすい。
- 分解図は構造チャート(トピック12)と呼ばれる。
四つの柱
- 分解: 問題を細分化する。パターン認識: 繰り返される要素を見つけて、一つの解決策を複数の部分に適用する。
- 抽象化: 重要でない詳細を排除する。アルゴリズム設計: 手順ごとの解決策を記述する。
- 実際にはこの順で用いられ、一度では終わらず繰り返し行う。
計算的なアプローチで問題を解決する
利用する順序で4つの柱を順に確認 — 問題を分解し、繰り返しや共通点を見つけ、本質だけを抽出して、手順を書きます。
計算思考の各柱とその意味にマッチさせください。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
4つの柱 — 分解、パターン認識、抽象化、そしてアルゴリズム設計。
計算思考の手順を適切な順序に並べ替えてください。
難易度 3/5 · 200 コイン + 今日初回完了時に小ボーナス付与
分解し、繰り返しの箇所を見つけ、本質だけを残して、手順を書きます。
混同しないように
- 抽象化は「詳細を除去する」こと、分解は「問題を分割すること」である。「小さな部分に切り分ける」という表現は抽象化の説明ではない。
- 「説明せよ」への回答には方法を含め、単語一つではなく、何が、何に、そして各部分がどうなるかを具体的に記述する。
- 答えはシナリオに基づいて記述する。在庫システム、映画館、または店舗への言及がない分解答案では減点される。
"分解の説明"に関する質問において、シナリオ(店舗、映画館など)に触れない回答でも満点を得られることがあります。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
マークschemeは汎用的な回答に上限を設けます:直近の在庫管理問題では「在庫管理への言及がない場合、最大2点」としていました。シナリオ固有のモジュールとデータ名を明記してください。
理解できましたか
- 抽象化 = 本質を維持し、無関係な詳細を無視する → より単純なモデル
- 分解 = 大きな問題をサブ問題に分割する → 各部分は手続や関数となる
- 分解の利点: 設計・コーディング・テストを別々に行える、作業を分担できる、モジュールを再利用できる、バグを素早く発見できる
- 常にシナリオ固有のモジュールとデータを用いて記述する