犬猫?

オブジェクト指向はプログラムを実在の物と考えて、それらを協調動作させることでアプリケーションを作成してゆく概念です。
まず、犬クラスと猫クラスを考えましょう。クラスとは…

あ、帰らないで下さいね。僕はこんな説明をしようと思っているのではありません。この手の話は耳に(目に?)たこのような人もいるでしょうね。


この手のたとえ話はたくさん出てきます。でもたとえは所詮たとえであるので、実際にはどうなのかという部分を受け手に委ねてしまいます。犬猫ではよくわからない人の為にももっと具体的なことから始めたいです。

何のための考え方?

大雑把に言えば、オブジェクト指向はプログラムの作成や保守をしやすくするための考え方の一つです。

そして、僕がぼんやりと思っているもう少し細かい利点は

  • 差し替え可能性が上がること
  • 忘れて良いことが増えること
  • 理解しやすくなること
  • コミュニケーションが取りやすくなること

です。

こんな意識が共有できたら良いなと考えています。

0歩目

人によっては退屈かもしれませんが、簡単なコードを使います。

package ms2310.oot.section0.chapter0;

public class Driver {

  public static void main(String[] args) {
    if (args[0].equals("1")) {
      System.out.println("本日は晴天なり");
    } else {
      System.out.println("本日は雨天なり");
    }
  }
}

実行時の引数によって出力が変わるものです。引数無しに対応していないのは簡潔にするためで、決して手を抜いているからではありませんよ。

さて、出力する内容は非常に短いため、今はこの書き方で十分でしょう。しかし、出力するための文字列を取ってくる方法が複雑な場合はどのようになるでしょうか。それぞれの内容を関数化すると思います。

package ms2310.oot.section0.chapter1;

public class Driver {

  public static void main(String[] args) {
    if (args[0].equals("1")) {
      outputSunnyDay();
    } else {
      outputRainyDay();
    }
  }

  private static void outputRainyDay() {
    //非常に長い作業を経て以下の行に辿り着く
    String response = "本日は雨天なり";
    System.out.println(response);
  }

  private static void outputSunnyDay() {
    //非常に長い作業を経て以下の行に辿り着く
    String response = "本日は晴天なり";
    System.out.println(response);
  }
}

処理を意味単位にまとめる意識で書いています。大まかに条件を判断する部分と、具体的な処理が分けられたとも考えられます。

まだオブジェクト指向というものとは縁が感じられませんね。0歩目なので感覚の共有をしてもらおうと思い、このエントリがあります。

ごあいさつ

人によって違うと思うのですが、オブジェクト指向というものを学ぶ時になかなか受け入れられない感覚を持ってしまう場合があるようです。

今まで新人さんと仕事をする機会が何度かあって、自分流の「オブジェクト指向ってこんなものじゃない?*1」というのを伝えることがありました。人によっては好評であったので、だったらいろいろな人の目に触れる場所に記しておくのも悪くないと考えてこれをはじめてみます。

やってみて、面白そうなら続けて、面白くなければやめます。義務にすると楽しくなくなってしまいますから。

*1:要するにナンチャッテです