Prokumaの雑記

限りなく日記帳に近いブログ

講義「オブジェクト指向プログラミング」特集/1. オブジェクト指向とは/Javaについて

お久しぶりです。Prokumaです。九州工業大学飯塚キャンパスの講義「オブジェクト指向プログラミング」の内容を自分なりにまとめる特集、講義「オブジェクト指向プログラミング」特集記事を書こうと思います。

この授業はJavaを使ってオブジェクト指向プログラミングについて理解し、オブジェクト指向でプログラムの作成ができるようにをすることを目標としています。Java以外にもオブジェクト指向プログラミング言語はたくさんありますが、この特集ではJavaについて書こうと思います。

I. オブジェクト指向とは?

アラン・ケイオブジェクト指向のコンセプトを

  • すべてはオブジェクトである。
  • オブジェクトはメッセージの受け答えによってコミュニケーションする。
  • オブジェクトは自身のメモリーを持つ。
  • どのオブジェクトもクラスのインスタンスであり、クラスもまたオブジェクトである。
  • クラスはその全インスタンスの為の共有動作を持つ。インスタンスはプログラムにおけるオブジェクトの形態である。
  • プログラム実行時は、制御は最初のオブジェクトに渡され、残りはそのメッセージとして扱われる。

- Wikipedia日本語版「オブジェクト指向」より -

と定義していますが、すべてを「オブジェクト(Object)」つまり「モノ」として扱うのがオブジェクト指向の中心となる考え方です。「モノ」を定義し、その「モノ」の動作や構成要素を定義し、「モノ」のように扱えるようにする、これがオブジェクト指向です。

「モノ」の定義の仕方、「モノ」の動作や構成要素の定義の仕方については、後続の記事で説明することにします。

2. Java

Javaプログラミング言語の一つで、オブジェクト指向プログラミング言語として知られています。オブジェクト指向の概念を取り入れた言語であり、オブジェクト指向プログラミングをすることにあたって必要な文法的要素を持っています。

2.1 文法的特徴

オブジェクト指向プログラミングをすることにあたって必要な文法の具体的な説明は後続の記事でしますが、条件分岐、繰り返し、変数の型等においてはCに似ています。

if (s1) {
   // if s1 is true
} else if (s2) {
  // if s1 is false but s2 is true
} else {
  // etc...
}

for(i = 0; i < n; i++){
  // loop n times
}

Cと似通っている部分の説明はこの特集では省略します。

2.2 Java Virtual Machine(JVM)

JavaはCのようにコンパイラがコードを読み込み、バイナリを出力するような構造になっていますが、Cと違うのは、CPUですぐ処理ができるようなバイトコードを出力するわけではないということです。Javaコンパイラは、Java Virtual Machine(JVM)で処理できるバイナリファイルを出力します。つまり、Javaのバイナリファイルを実行するためには、JVMというものが必要となります。このJavaバイナリコードは、x86ARMアーキテクチャー等のCPU上で直接処理することはできません。

JVMJavaバイナリファイルを実行する際には、javaコマンドを用います。もちろんJVMがインストールされていないと実行できないので、各自インストールしてください。(JavaコンパイラもいるのでJDK(Java Development Kit)をインストールしましょう)

3. Java版「Hello World!」

3.1 プログラム作成

Javaで「Hello World!」を出力するプログラムを作成して見ましょう。

// HelloWorld.java
public class HelloWorld {
  public static void main(String[] args){
    System.out.println("Hello World!");
  }
}

public class HelloWorld {の部分はクラスを定義しています。クラスに関しては後続の記事で説明するので、今回は形式として覚えましょう。public class HelloWorldのHelloWorldの部分は、ファイルの名前から.javaを除いた部分と等しくなければなりません。注意しましょう。

public static vod main(String[] args){の部分はC言語でのmain関数と同様の役割を果たします。最初に実行された時の動作を定義します。

System.out.printlnC言語のprintf関数と似たような存在です。printfと違うところは、改行文字\nを入れなくても改行されるところです。

3.2 コンパイル

コンパイルJavaコンパイラであるjavacを用います。もちろんインストールされていないと使用できませんので、事前にJDKをインストールしましょう。

javac HelloWorld.java

を実行するとHelloWorld.classという名前のファイルが生成されます。実行は

java HelloWorld

コマンドラインで叩くことでできます。ちゃんと「Hello World!」と出力されるはずです。

4. 統合開発環境(IDE)

Javaを使用してプログラムを作成する時、多くの人は統合開発環境を用います。統合開発環境は開発のためのほとんどのものが揃っている環境を意味します。ここでは、いくつかの統合開発環境の名前を挙げてみます。

4.1 Eclipse

自分と同じ大学同じ学部同じ学科の人なら授業で馴染みのある統合開発環境だと思います。

4.2 IntelliJ IDEA

Jetbrains社が開発した統合開発環境です。有料版と無料版が存在しますが、無料版でも必要な機能は揃っているので無料版でいいと思います。

4.3 Netbeans

Oracleを中心としたコミュニティーにより開発された統合開発環境です。現在はApache財団によって開発されています。

個人的にはIntelliJ IDEAがオススメですが、人によって自分に合うIDEはそれぞれだと思うのでいろいろ使ってみて決定した方がいいと思います。IDEのインストールの仕方や設定方法についてはここでは説明しません。

次回は、クラスとメソッドについて書く予定です。今回はここまでです。