備忘録的な何か

はじめに

はてなブログシンタックスハイライト(ソースコードを強調して表示)の方法を知ったので練習がてら,記事を投稿してみることにした.今回は,Cなどの手続きチックな書き方と,Javaなどのオブジェクト指向ソースコードの両方を記述してみる.

Javaの「Hello, world!」 その1

Javaソースコードで「Hello, world!」を表示させるプログラムを作成するとこんな感じになる.

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

けど,これじゃオブジェクト指向っぽい感じがしない.C言語などのprintf文をJavaバージョンにしただけだ.
という訳で,多少オブジェクト指向っぽい感じのソースコードに書き直してみた.

Javaの「Hello, world!」 その2

オブジェクト指向を意識したソースコードを以下に示す.

●Helloクラス (Hello.java)

public class Hello {
    private String str;

    //コンストラクタ
    Hello(String str) {
        this.str = str;
    }

    public void show() {
        System.out.println(this.str);
    }
}

●Mainクラス (Main.java)

public class Hello {
    public static void main(String[] args) {
        Hello hello = new Hello("Hello, world!");
        hello.show();
    }
}

Helloクラスのhelloインスタンスを生成し,インスタンス生成時の文字列(今回の場合だと"Hello, world!")を出力するメソッドshowを実行する…という流れになっている.
途中で出てくるコンストラクタとは,インスタンス生成時に最初に実行されるメソッドのことで,初期化処理がなされる.

//コンストラクタ
Hello(String str) {
    this.str = str;
}

今回の場合,Helloクラスが持つ属性であるString型のstrに,引数"Hello, world!"を代入して初期化処理を行っている.
厳密に言うと,"Hello, world!"という文字列は,コンストラクタの引数strに入っている.
『strにstrを代入するとか,なんか変じゃん』と思われる方もいると思うが,そこはthis演算子を使うことで差別化している.this演算子は,「このクラスの」という意味を持たせることができる.
つまり,左辺はHelloクラスが持つ属性strを指し,右辺は引数のstrであることを示している.(実際thisを使わずに「str = str;」と書くと警告メッセージが出る.エラーではないので実行はできるが,意図しない挙動を示す)

おわりに

Javaを使って手続きチックな書き方とオブジェクト指向な書き方の双方を書いてみた.実行結果は両方とも同じなので,コンストラクタなどの小難しいテクニックを使わなくて言い分,手続きチックな方が楽なのかもしれない.が,概念を抽象化し,オブジェクトを生成し,オブジェクト間で処理をさせるというオブジェクト指向の考え方は大事だと思うし,結構面白いのではないかと個人的に思っているので,これからも引き続きJavaなどのオブジェクト指向言語の勉強を精進していこうと思う.
※手続き型をディスっている訳では断じてないです.これだけは声を大にして言いたい.