今までなんとなくでしか使ってこなかったオブジェクトについてきちんと理解をしておこうと思ったのでまとめてみることにしました。
今までのオブジェクトのイメージとして
・同じ分類のデータの塊(配列など)
・同じ役割の処理の集合体
と捉えていました。しかし今回でそれではダメだなと感じたのでここで改めて強制をしておこうと思いましたので頑張ってまとめてみます。
#オブジェクトについて
Javaのオブジェクトの雛形はクラスです。
そしてオブジェクトというのは、直訳すると「物」「対象」といった意味になります。プログラミングにおいては同じ分類や役割を持ったデータや処理の集合体を言います。
オブジェクトには操作と属性という概念があります。
何かというと、
・ 属性…Javaプログラムでは「変数」に該当。
・ 操作…Javaプログラムでは「メソッド」に該当。
#オブジェクト指向の使用例
オブジェクト指向の使い方の例としては、同じ場所に複数の役割の処理を書く時に分類する時につかいます。
例えば作業をしていて、同じ場所にそれぞれ違うファイルをろくにフォルダ分けせずにとっちらかった状態にしてしまうとめっちゃめんどくさいですよね。
「あれ、このファイルどこにおいたっけな。このフォルダだっけ?あれ????」
となってしまうことありますよね。プログラムもそれと同じで分類分けをしないとややこしくなってしまいます。そんな時にクラスで分けてそのクラスで生成される物ごとに分ける必要があるわけです。
つまり、役割ごとにオブジェクトを部品として分けてそれを組み合わせて使っていくことが、オブジェクト指向プログラミングです。
オブジェクトの使い方
オブジェクトを使う際に構文をここで紹介します。
クラスからのオブジェクトの生成のやり方
クラス名 変数名 = new クラス名(引数);
とすることでオブジェクトを作成します。
クラスからのオブジェクトの呼び出しの例として、1056円の本が売れた時に超売れっ子作家の手元に入る収入を計算してみました(きれいに書くならこんなことはしないですが、あくまで例として出しています)。
public class Main {
public static void main(String args[]){
Book book = new Book("この本", 1056);
Royalty royalty = new Royalty(30);
System.out.println(book.title + "の印税は" +
royalty.percent + "%で価格が" +
book.price + "円なので、作家に入る収入は1冊辺り" +
royalty.share(book.price) + "円です。");
}
}
class Book {
public final String title;
public final int price;
Book(String title, int price) {
this.title = title;
this.price = price;
}
}
class Royalty {
public final int percent;
Royalty(int percent) {
this.percent = percent;
}
int share(int price) {
return price / percent;
}
}
SamplePrice result = new SamplePrice();
でSamplePriceのクラスを呼び出して実行するためのオブジェクトを生成して、
//メンバ変数を定義する。
int price = 1056;
int royalty = 30;
このコードで生成したSamplePriceのオブジェクトのメンバ変数を呼び出します。
そして、呼び出したメンバ変数をSystem.out.println();の中で呼び出して計算をさせます
出力結果は
この本の印税は30%で価格が1056円なので、作家に入る収入は35円です。
となります。蛇足ですが普通の作家さんの印税が15%らしく超売れっ子作家さんで30%とかなので本一本で食って行けている人ってやばいんですね・・。
今度そんな人を見かけたらお賽銭を上げることにします。
話を戻しますが、こうすることでオブジェクトを実際に呼び出すことができました。これを覚えておくと、
「あそこのクラスで生成された値を使いたいけど呼び出し方がわからない(知らない)から、もう今作業しているクラスで作っちゃおう」
とかやって先輩に突っ込まれる事がなくなります(筆者の知り合いが経験してた)
まじでツッコミを受けないようにしましょう。
次にクラスの中の関数からオブジェクトを生成して実際に使うやり方をやっていきたいと思います。
##別クラス内のメソッドからオブジェクトを生成するやり方
class main {
public static void main(String args[]){
SamplePrice value = new SamplePrice();
int [] result = value.SampleObject();
int price = result[0];
int royalty = result[1];
System.out.println("この本の印税は" + royalty + "%で価格が" + price + "円なので、作家に入る収入は1冊辺り" + price/royalty + "円です。");
}
}
class SamplePrice {
public static int[] SampleObject(){
int[] sampleNumbers = {1056, 30};
return sampleNumbers;
}
}
今回は先程の別バージョンとして、SamplePriceのオブジェクトを生成してその中のSampleObjectの値を呼び出しました。
まず最初に、SamplePrice value = new SamplePrice();
で先ほど上でやったようにSamplePriceのオブジェクトを作成して、それを変数valueに格納します。
そして変数resultにvalue(SamplePriceオブジェクト)の中身のSampleObjectを指定します。
そして、配列の要素を指定してそれぞれの値に対して変数名をつけて宣言をしてSystem.out.println();
で計算した結果を出力します。
以上になります。
このようにしてオブジェクトに対してアクセスをしてほしい値を取得しました。
皆さんの役に立てば幸いです。
それと、もし指摘やコメント灯ありましたら教えていただけると嬉しいです。
何分初心者なので。。。
よろしくおねがいします。