オブジェクト指向というのは、プログラムで利用される機能をオブジェクト(物)として捉えて、各オブジェクトを組み合わせることによりシステムを完成させる概念です。 Javaに限らず、近年利用されるプログラミング言語の多くがオブジェクト指向を取り入れています。
例えば、「指定した人を走らせるプログラム」の場合、下記の図のように各オブジェクトを物、や部品のように考え、それらを組み合わせてプログラムを構築していくイメージです。
また、オブジェクト指向はクラスという概念について学ぶことが必須です。
本記事では、オブジェクト指向で必要になる代表的なクラスの紹介と、それらを使用した簡単なプログラムを作成してみたいと思います。
今回の記事はjavaの基本的なことを知っている人でオブジェクト指向について復習したい方、また一通り勉強したが忘れてしまった人向けの内容になっています。
クラスとは
クラスとは下記の画像のように、「太郎」や「走る」などのようにデータや処理をオブジェクトとしてもつ(定義する)クラスのことです。
これらのクラスをインスタンス化※させて使用します。
※インスタンス化とは、クラスを実体化させたものです。Serviceクラスの章で説明します。
例)
では次に、代表的なJavaのクラスについて紹介していきます。
Entityクラス
Entityクラスとは、データベースの1行1行を1インスタンスにしたもの。
クラスはただの設計図であり、その設計図から「もの」を作らなければ実際に使うことはできないです。
そのため、設計図の役割を持つクラスから、オブジェクトという実体、「インスタンス」を作る必要があります。
この章では、他のクラスファイルでデータを使えるようにする(インスタンス化する)下準備のためのEntityクラスについて説明します。
<Entityクラスの例>
public class Member { // フィールド(データ) ← メンバ変数と呼ぶ private int id; private String name; private String emailÏ; // デフォルトコンストラクタ ← とりあえず必要なやつ public Member() { } // コンストラクタ ← データの型を定義して宣言するところ public Member(int id, String name, String emailÏ) { this.id = id; this.name = name; this.emailÏ = emailÏ; } // ゲッター、セッター ← とりあえず必要なやつ Eclipse上で自動生成できる public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmailÏ() { return emailÏ; } public void setEmailÏ(String emailÏ) { this.emailÏ = emailÏ; }; }
下記の図のように、データベースから取得したデータをEntityクラスに詰めることで、オブジェクトという実態「インスタンス化」させることができます。
(下記でいうとtarouさんやhanaさんがデータべースから引っ張られてぽんっと生まれるイメージ)
Entityクラスの作成はその下準備と考えてください。
※インスタンスについては「Serviceクラスとは」にて後述します。
これでEntityクラスの完成です。
次にEntityクラスのインスタンスを提供するServiceクラスについて説明していきます。
Serviceクラスとは
Serviceクラスとは、Entityクラスの中のインスタンスを提供するクラスのことです。
先ほどまでは下準備で、Serviceクラスでは実際にEntityクラスのデータをインスタンス化する(実際に使える状態にする)ためのクラスです。
このクラスでは、データベースの中の「tarou」さんや、「hana」さんなどの情報一覧を返すメソッドや、「挨拶をする」などといった機能などを実装していくことができます。
Serviceクラスで処理を実装していくためには、次に説明する「インターフェースというクラス」と「機能を実装するクラス」の2つのクラスを作る必要があります。
インターフェースとは
インターフェースとは機能の概要を示すだけのクラスと考えてください。
具体的にいうと、「挨拶する」や「メンバ一覧を取得する」などの機能を使うために必要になる概要だけを示したクラスのことです。
下記の図のように、Serviceクラスでは機能の概要を示すインターフェースクラスを実装(継承)して機能を使います。
Serviceクラス(インターフェースクラス)の例
「MemberService.java」
package Service; import java.util.ArrayList; import entity.Member; public interface MemberService { // 挨拶をする機能(概要) String greet(int i); // メンバ一覧を取得する機能(概要) ArrayList<Member> getAll(); }
Serviceクラス(インターフェースを実装したクラス)の例
「MemberServiceImpl.java」
package Service; import java.util.ArrayList; import entity.Member; public class MemberServiceImpl implements MemberService { // 挨拶をするメソッド @Override public String greet(int i) { String[] greetings = { "Good morning", "Hello", "Good evening" }; return greetings[i]; } // メンバ一覧を取得するメソッド @Override public ArrayList<Member> getAll() { ArrayList<Member> list = new ArrayList<>(); // Entityクラスで定義したデータ型(id,name,email)でメンバーをインスタンス化する(newする) Member mem1 = new Member(1, "tarou", "tarou@example.com"); Member mem2 = new Member(2, "hana", "hana@example.com"); Member mem3 = new Member(3, "kouki", "kouki@example.com"); // インスタンスをlistに格納する list.add(mem1); list.add(mem2); list.add(mem3); return list; } }
これでServiceクラスの完成です。
あとは、このServiceクラスを実際に実行するクラス「Main」クラスを作成していきます。
Mainクラスとは
Mainクラスとは、javaプログラムを起動するためのクラス(起動時に最初に通るクラス)のことです。
package demo; import java.util.ArrayList; import Service.MemberServiceImpl; import entity.Member; public class Main { // Mainクラス public static void main(String[] args) { // MemberServiceImplクラスをインスタンス化する(newする) MemberServiceImpl service = new MemberServiceImpl(); // greet()メソッドの配列[2]のメッセージを出力する System.out.println(service.greet(2)); // メンバ一覧をgetAll()メソッドを使ってリストにつめる ArrayList<Member> list = service.getAll(); // listをmemに入れてfor文で回してメンバのid,name,emailをメンバの個数分表示させる for (Member mem : list) { System.out.println(mem.getId() + "," + mem.getName() + "," + mem.getEmailÏ()); } } }
これでMainクラスの完成です。
プロジェクトファイルを右クリックしてjavaアプリケーションを起動して出力すると、結果は下記の通りになりました。
Good evening
1,tarou,tarou@example.com
2,hana,hana@example.com
3,kouki,kouki@example.com
まとめ
今回ご紹介したプログラムの構造は下記の図の通りになります。
本プログラムに使用したクラスファイルは下記の4種類です。
◆Mainクラス
「Member.java」
◆Serviceクラス
「MemberService.java」
「MemberServieImpl.java」
◆Entityクラス
「Member.java」
起動から処理実行までの流れは下記の通りです。
①Mainクラスでプログラムを起動する。
②Serviceクラスで機能の概要を示すクラスを実装(継承)する。
③Entityクラスへメンバのデータを見にいく。
④Serviceクラスへ必要なメンバデータを持ってくる。
⑤MainクラスでServiceクラスにあるメソッドを実行する。
コメント