【Aモデル録 フェーズ1 C#基礎】

05-05-4 【番外編1】:パンダ爆弾 上巻

いつもとは違う注意事項

これは、「参照について」の沼に落ちた私と、懸命な救助をするAI先生が疲れ果て、
遊び心で作られたものです。

※笑って読んでください

上巻:本編

この物語は、参照型の便利さと危険性を理解するためのフィクションです。
プログラムでは、この話の登場人物を、どんどん増やすことができます。

※コウとカイは、
プログラムの考え方を説明するために登場する
架空のキャラクターです。
実在の人物・団体とは一切関係ありません。

ストーリー

とある学校の教室。
クラスの中には、コウ、カイ、Hyve という、仲のいい3人の生徒がいます。

コウ:「校長先生、僕「パンダ」を覚えたよ。」

校長:「それはいいね! じゃあ、学校の公式メルマガ使っていいよ。
        担任のMain先生、号令お願いしますね。」

Main先生:「わかりましたぁ。 では、みんな集合! コウくん!」

コウ:「はーい! じゃあ、つぶやいてっと。 カイーー!」

カイ:「はーい! おお!パンダか。 僕もつぶやくー。 Hyveーー!」

Hyve:「はーい! ほぉー。パンダねぇ。 僕もつぶやくー♪」

みんなパンダを知ることができました。

ステップでコードにしてみる。

とある学校の教室。

まず、生徒たちを集める部屋(=クラス)を作ります。

class Student
{

}

「部屋の名前がStudent?」だとか、「学級がクラスで、クラスが・・・え?」とか、細かいことは気にしない!(笑)
とりあえず、部屋の名前があればいいんです。

クラスの中には、コウ、カイ、Hyve という、仲のいい3人の生徒がいます。

生徒たち(=メソッド)は名前を呼ばれると、任せてもらった役目を責任を持って実行します。
生徒同士の約束は、お互いに参照した情報を秘密にしない(=公開する)こと。

class Student
{
    
    public void Koh()
    {
    }
    
    public void Kai()
    {
    }
    
    public void Hyve()
    {
    }
}

コウ:「校長先生、僕「パンダ」を覚えたよ。」

コウが「パンダ」という文字列を覚えます。

public void Koh()
{
  string panda = "パンダ";
}

校長先生は、プログラマー。 あなたです。 細かいことは気にしません!

校長:「じゃあ、学校の公式メルマガ使っていいよ。」

公式メルマガにしたいので、ここに書きます。

class Student
{
  string pandainfo;
  
  ・・・
  (以下略)

校長:「担任のMain先生、号令お願いしますね。」

Main()は、プログラムを実行するための号令役です。
なので、担任の先生として、職員室に出現してもらいましょう。
Studentクラスの外に書きます。

class Teacher
{
  static void Main()
  {
  }
}

Main先生:「では、みんな集合!」

Main先生がStudentクラスへ呼びかけられるようにします。

class Teacher
{
  static void Main()
  {
    var student = new Student();  // ← まず Student を new する!
  }
}

解説の進行の都合上、まだコウは呼びません(笑)

コウ:「はーい! じゃあ、つぶやいてっと。 カイーー!」

コウの仕事です。

  1. 覚えたこと、
  2. それを元にWebページを作成して、そのURLを記載したメルマガを準備し、
  3. 某有名つぶやきサイト(=コンソール)に自分の仕事をつぶやき、
  4. 最後にカイを呼びます。
public void Koh()
{
  string panda = "パンダ";
  pandainfo = panda;
  Console.WriteLine($"Kohです。僕は「{panda}」の参照URLを教えます。");
  Kai();
}

カイ:「はーい! おお!パンダか。 僕もつぶやくー。 Hyveーー!」

カイの仕事です。

  1. コウが配布したメルマガのURLにアクセスして、得た内容を参照してつぶやき、
  2. Hyveを呼びます。
public void Kai()
{
  Console.WriteLine($"Kaiです。僕は「{pandainfo}」を調べます。");
  Hyve();
}

Hyve:「はーい! ほぉー。パンダねぇ。 僕もつぶやくー♪」

Hyveの仕事です。

カイが配布したメルマガのURLにアクセスして、得た内容を参照してつぶやきます。

public void Hyve()
{
  Console.WriteLine($"Hyveです。僕は「{pandainfo}」を母に伝えます。");
}

つぶやき可能にするために。

みなさんにつぶやいてもらえるようになるには、コードの先頭に「using System;」という記述が必要です。

using System;

class Student
{

・・・
(以下略)

さて。Main先生に コウを呼んでもらいましょう。

class Teacher
{
  static void Main()
  {
    var student = new Student();
    student.Koh();               // ← インスタンスから呼ぶ!
  }
}

「インスタンスって何よ?」・・・ここではスルーしてください。

さあ、これでコードが完成です!

using System;

class Student
{
  string pandainfo;

  public void Koh()
  {
    string panda = "パンダ";
    pandainfo = panda;
    Console.WriteLine($"Kohです。僕は「{panda}」の参照URLを教えます。");
    Kai();
  }

  public void Kai()
  {
    Console.WriteLine($"Kaiです。僕は「{pandainfo}」を調べます。");
    Hyve();
  }

  public void Hyve()
  {
    Console.WriteLine($"Hyveです。僕は「{pandainfo}」を母に伝えます。");
  }
}

class Teacher
{
  static void Main()
  {
    var student = new Student();
    student.Koh();
  }
}


構成と読み方|タイトル一覧

Top - はじめに|この忘備録と「Aモデル」について