この記事で分かる事

プログラミングをするうえで、「オブジェクト指向」という言葉を耳にしたことがあるかと思います。
オブジェクト指向には「カプセル化、継承、ポリモーフィズム」の3つの代表的な要素があり、それぞれ下記の特徴、メリットがあります。

◎カプセル化
データとメソッドを1つのクラスにまとめること。公開する情報を制限できるため独立性の高いプログラム部品として使えるようになる。
◎継承
既存のクラスを土台にして新しくクラスを作る仕組みのこと。元のクラスにフィールド変数やメソッドを追加したクラスを簡単に作成することができる。
◎ポリモーフィズム
サブクラスを使うことによって、スーパークラスの機能を様々に変更できるようにすること。カスタマイズが容易で再利用可能な処理やシステムを構築することができる。

本記事では、下記本を参考に、そもそもオブジェクトとは何かといった疑問から、代表的3要素を扱えるようになるまでを、実際にプログラミングしながら段階的に紹介していきます。


川場隆 著
新わかりやすいJava オブジェクト指向徹底解説 (単行本)
秀和システム
https://www.shuwasystem.co.jp/book/9784798043753.html

目次

  • オブジェクトとは
  • クラスの作成方法
  • まとめ

オブジェクトとは

オブジェクト指向は簡単に説明すると
プログラムをオブジェクト(モノ)として考え、それを組み合わせることでプログラミングをするといった考え方のことです。

では、オブジェクトとは何かというと
プログラムが扱う対象のことであり、データと機能を1つにまとめたもののことを指します。
一番シンプルなオブジェクトはデータの集まりです。

実際に作成していきます。
基になるデータとして下記を使用します。
番号品名価格発売日在庫
A1シャーペン5002020年10月15日
A2ボールペン10002021年4月20日
A3手帳15002021年9月5日

クラスの作成方法

オブジェクトを1つ1つ作成することも可能ですが、複数を作成するときには効率的とは言えません。
そこでクラスにオブジェクトの基データを記載し、インスタンス化することによりオブジェクトのコピーが可能となり効率的に作成することが可能になります。
まずは第一段階として、クラスにオブジェクトの内容をまとめていきます。
※インスタンスの意味、作り方使い方については次回説明します。

まずは今回の完成形を記載します。
フィールド変数、コンストラクタ、ゲッター、セッターの構成です。
各機能については順に説明していきます。

  1. package sample;
  2.  
  3. import java.time.LocalDate;
  4.  
  5. public class ProductTest {
  6. /* フィールド変数
  7.     private String number; //番号
  8.     private String name; //品名
  9.     private int price; //価格
  10.     private LocalDate date; //発売日
  11.     private boolean stock; //在庫
  12. ここまで*/
  13.  
  14. /*コンストラクタ
  15.     public ProductTest(String number, String name, int price, LocalDate date, boolean stock) {
  16.         this.number = number;
  17.         this.name = name;
  18.         this.price = price;
  19.         this.date = date;
  20.         this.stock= stock;
  21.     }
  22. ここまで*/
  23.  
  24. /*ゲッターセッター
  25.     public String getNumber() {
  26.         return number;
  27.     }
  28.  
  29.     public String getName() {
  30.         return name;
  31.     }
  32.  
  33.     public int getPrice() {
  34.         return price;
  35.     }
  36.  
  37.     public LocalDate getDate() {
  38.         return date;
  39.     }
  40.  
  41.     public boolean getStock() {
  42.         return stock;
  43.     }
  44.  
  45.     public void setNumber(String number) {
  46.         this.number = number;
  47.     }
  48.  
  49.     public void setName(String name) {
  50.         this.name = name;
  51.     }
  52.  
  53.     public void setPrice(int price) {
  54.         this.price = price;
  55.     }
  56.  
  57.     public void setDate(LocalDate date) {
  58.         this.date = date;
  59.     }
  60.  
  61.     public void setStock(boolean stock) {
  62.         this.stock = stock;
  63.     }
  64. ここまで*/
  65.  
  66. }

はじめにフィールド変数について説明します。
フィールド変数とはクラス内に書かれる変数のことで、今回利用する変数と各項目に定義する型は下記の通りになります。
 番号:String型(文字列)
 品名:String型(文字列)
 価格:int型(数値)
 発売日:LocalDate型(日付)
 在庫:boolean型(在庫の有無)
上記を実際にプログラムとして記載すると下記になります。

  1. public class ProductTest {
  2.     private String number;//番号
  3.     private String name;//品名
  4.     private int price;//価格
  5.     private LocalDate date;//発売日
  6.     private boolean stock;//在庫
  7. }

続いてコンストラクタについて。
コンストラクタはオブジェクトに初期値をセットする役割があります。
ルールとして下記に気をつける必要があります。
・コンストラクタ名はクラス名と同じにする
・戻り値を記載しない
今回は商品情報をコピーすることが目的のため下記のように記載します。

  1. [アクセス修飾子] クラス名([引数]){
  2.     [コンストラクタで行う処理]
  3. }

完成すると下記の形になります。

  1. public ProductTest(String number, String name, int price, LocalDate date,boolean stock){
  2.     this.number = number;
  3.     this.name = name;
  4.     this.price = price;
  5.     this.date = date;
  6.     this.stock = stock;
  7. }

左辺のthis.〇〇がフィールド変数、右辺の〇〇が引数となっています。
引数をフィールド変数に初期値として代入していることが分かります。
ちなみにここで使われる「this」はそのクラスをコピーしてできるオブジェクトを意味しており、
「このクラスのオブジェクト」と言い換えることができます。
※コンストラクタの使い方は次回説明します。

最後にゲッター、セッターについて。
ゲッターはフィールド変数の値を取り出し、
セッターはフィールド変数の値を変更する役割があります。
ゲッターの書き方は

  1. public データ型 getフィールド名() {
  2.     return フィールド名;
  3. }

セッターの書き方は

  1. public void setフィールド名(データ型 フィールド名) {
  2.     this.フィールド名 = フィールド名;
  3. }

となり、完成すると下記の形になります。

  1. public String getNumber() {
  2.     return number;
  3. }
  4.  
  5. public String getName() {
  6.     return name;
  7. }
  8.  
  9. public int getPrice() {
  10.     return price;
  11. }
  12.  
  13. public LocalDate getDate() {
  14.     return date;
  15. }
  16.  
  17. public boolean getStock() {
  18.     return stock;
  19. }
  20.  
  21. public void setNumber(String number) {
  22.     this.number = number;
  23. }
  24.  
  25. public void setName(String name) {
  26.     this.name = name;
  27. }
  28.  
  29. public void setPrice(int price) {
  30.     this.price = price;
  31. }
  32.  
  33. public void setDate(LocalDate date) {
  34.     this.date = date;
  35. }
  36.  
  37. public void setStock(boolean stock) {
  38.     this.stock = stock;
  39. }

getフィールド名、setフィールド名の先頭は大文字にする必要があります。
※ゲッター、セッターの使い方は次回説明します。

まとめ

今回はクラスの作成までを行いました。
次回はインスタンスの説明、作成
併せてコンストラクタ、ゲッター、セッターの使い方の説明を行います。