Excel から学ぶオブジェクト指向入門
目次
1. はじめに
プログラミング初心者にとって「オブジェクト指向(OOP)」という言葉は取っつきにくく感じられがちです。しかし、日常的に使っている Excel の考え方と対応付けると、驚くほどスムーズにイメージできます。本資料では、
- 行 → インスタンス
- 列 → プロパティ(属性)
- 数式 → メソッド(振る舞い)
という対応を軸に、Excel から OOP へ橋渡しする方法を解説します。
2. Excel と OOP の対応表
Excel | OOP 用語 | 説明 |
---|---|---|
1 行(レコード) | インスタンス | データの 1 まとまり(具体的な “モノ") |
1 列(フィールド) | プロパティ | インスタンスが持つ値・状態 |
セルの数式 | メソッド | 値を計算・操作する振る舞い |
ポイント
OOP では「クラス = ひな型」を定義し、そこから生成される具体例が インスタンス です。Excel で言えば「シートの見出し行」がクラス、「各データ行」がインスタンスに相当します。
2.1 クラスとは?
クラスはインスタンス(オブジェクト)の共通する**属性(プロパティ)と振る舞い(メソッド)**をまとめた“設計図”です。Excel でたとえると、見出し行(列名)がクラスで定義するプロパティの一覧、セルにあらかじめ組んでおく数式のテンプレートがメソッドに相当します。
Excel | OOP 構成要素 | 例 |
---|---|---|
シート名 | クラス名 | Student シート ≒ Student クラス |
見出し行 | プロパティ一覧 | 名前 / 数学 / 英語 |
決まった数式 | メソッド | =AVERAGE(B2:C2) → GetAverage() |
WorkSheet とクラスの類似点
- 新しい行をコピーして追加 ⇒
new
演算子でインスタンス生成 - 列名を追加 ⇒ クラスにプロパティを追加
- 全行で同じ数式を再計算 ⇒ すべてのインスタンスでメソッドを呼び出し
覚え方のヒント
クラス = ひな型 / インスタンス = 実体 と覚えると、Excel シートをコピーしてデータを増やす感覚に近い。
// クラス定義(設計図)
public class Student
{
public string Name { get; set; }
public int Math { get; set; }
public int English { get; set; }
public double GetAverage() => (Math + English) / 2.0;
}
// インスタンス生成(実体)
var alice = new Student { Name = "Alice", Math = 80, English = 90 };
3. 成績管理シートをクラスへ変換する
3.1 Excel シートの例
| | A | B | C | D |
|---|--------|--------|-------|----------|
| 1 | 名前 | 数学 | 英語 | 平均点 |
| 2 | Alice | 80 | 90 | =AVERAGE(B2:C2) |
| 3 | Bob | 70 | 85 | =AVERAGE(B3:C3) |
3.2 対応する Student クラス(C#)
public class Student
{
// 列 → プロパティ
public string Name { get; set; }
public int Math { get; set; }
public int English { get; set; }
// 数式 → メソッド
public double GetAverage()
{
return (Math + English) / 2.0;
}
}
- 行 2 が
new Student { Name = "Alice", Math = 80, English = 90 }
に対応。 - GetAverage() が Excel の
=AVERAGE(...)
と同じ働きをします。
4. Excel 操作 ↔︎ OOP 操作
目的 | Excel での操作 | OOP での操作 |
---|---|---|
新しいデータを追加 | 新しい行を挿入 | new Student(...) でインスタンス生成 |
値を更新 | セルを編集 | プロパティを書き換え |
集計・再計算 | ワークシート全体を再計算 | メソッドを呼び出す |
5. 実践サンプルコード
// 学生データを作成
var students = new List<Student>
{
new Student { Name = "Alice", Math = 80, English = 90 },
new Student { Name = "Bob", Math = 70, English = 85 }
};
// 一覧表示
foreach (var s in students)
{
Console.WriteLine($"{s.Name}: 平均 = {s.GetAverage():0.0}");
}
実行結果(一例)
Alice: 平均 = 85.0
Bob: 平均 = 77.5
6. 演習問題
- 追加プロパティ: 理科 (Science) 列を追加し、
GetAverage()
が 3 科目平均を返すように改造してみましょう。 - 全体平均の計算: すべての学生の平均点を求める
GetClassAverage(List<Student>)
メソッドを書きましょう。 - 成績判定:
double GetAverage()
の結果に応じて “S/A/B/C/D" を返すGetGrade()
メソッドを追加しましょう。
7. まとめと次のステップ
- Excel の行・列・数式を OOP のインスタンス・プロパティ・メソッドに置き換えると、OOP の基本構造が直感的に理解できます。
- 次は List や Dictionary<TKey,TValue> など、コレクションを取り入れてデータ構造を増やしていきましょう。
- GUI アプリや Unity でも、「画面上のオブジェクト=クラス」 と考えると応用しやすくなります。
Tips: Excel マクロ (VBA) を触ったことがある方は、マクロでシートのセルを操作するコードと C# のプロパティ/メソッドを比較してみると、更に理解が深まります。
訪問数 2 回, 今日の訪問数 2回
ディスカッション
コメント一覧
まだ、コメントがありません