【Ruby入門】クラスをコーディング(2) オブジェクト指向
  • facebookページ
  • twitterページ
  • 2017.12.18

    【Ruby入門】クラスをコーディング(2) オブジェクト指向

    今回の解説は継承から始まり、オブジェクト指向の基礎まで踏み込みます。

    クラスを継承やインスタンス化するだけでは、オブジェクト指向の旨味を存分に味わえません。

    また他人が作った、あるいはフレームワークに備わっているクラスを使うことは多々ありますので、継承やオブジェクト指向はとても大事です。

    それでは解説を始めましょう。

    継承をソースベースで解説

    継承とは何かというのは、前記事「【Ruby入門】クラスの継承、オーバーライド」で解説しました。

    ここではRubyでどう実装するかというのをやってみましょう。具体例として、今までの解説で出てきたBookクラスを使います。

    Bookクラスは以下のとおりです。在庫に関連するものを追加し、説明に関係ないものを消しました。

    またBookクラスを親クラスとして、言語(つまり本は何語で書かれているのか)まで管理する子クラスBookLangクラスを定義しました。

    インスタンス化までを以下にまとめたので、そのままコピペして実行できます。

    [実行結果]

    引数で渡したものが表示されただけですが、なんとか動きました!!

    Bookクラスを基本として、言語のあつかいだけを追加できました。

    ここで注目して欲しいのは、親クラスに子クラスの要素は一切ないということです。

    子クラスに親クラスでもつインスタンス変数へのアクセサを記述する必要がないことも注目してください。

    親クラスに手を加えることなく子クラスだけで拡張できるというすごさを実感できましたか?

    ただし、解説をしていない箇所がたくさんあります。以降、その解説をします。

    インスタンス化

    今まで解説したとおり、クラスを実体化する行為です。

    基本書式は以下です。

    先ほどのソースでは以下を書きました。

    よくわかりませんね。実行後の関係を図に書くとこうなっています。

    以降参照用変数を経由して、あたかもインスタンスをさわっているかのようにあつかえます。

    もちろん、親クラス単体でもインスタンス化できます。

    オーバーライド

    Bookクラスでは、「図書館における本館の閲覧場所だけの在庫数を計算する」と仮定しました。

    ある日、新たに別館の在庫数も合わせた合計で計算する必要が出てきたとしましょう。

    Bookクラスにあまり手を入れたくないし、さあどうしましょうか。

    そこで継承をうまく使ってやってみましょう。

    本館と別館の総数を計算するBookAmountというクラスを定義します。

    Bookクラスはそのままで結構です。

    [実行結果]

    結果の4に注目です。

    stockというメソッドをサブクラスBookAmoutで上書きしました。

    その結果、stockという変数に4という値が入りました。

    上書き(つまりオーバーライド)されて4になったこと、おわかりいただけたでしょうか?

    ※ここではオーバーライドの解説をメインとしているので、本館と別館をどうやって合計するのか?というロジックは考えていません。

    ポリモフィズム

    ポリモフィズムとは、オブジェクト指向的には問題ある解説かもしれませんが、要は「呼ぶ側は呼ばれる側のことは一切考える必要がなく、同じ呼び方でよい」というものです。

    先ほどの別館もカウントするバージョンに加えて「在庫が閲覧場所と奥の倉庫に分散している」バージョンを作ってみましょう。

    これで基本のBook、別館との総計のBookAmount、閲覧場所と奥の倉庫の総数のBookFrontandBackが出揃いました。

    呼び出しましょう。

    まずは基本クラスです。

    次に、別館との総計バージョンです。

    さらに、閲覧場所と奥の倉庫の総計バージョンです。

    お気づきでしょうか?

    「p book.count」はまったく同じです!

    これがポリモフィズムです。

    仮に呼び出し先がまだできていないとしても、この呼び出し方は同じなので先に作ることができます。

    便利ですよね。

    まとめ

    これでクラスやオブジェクトの基本解説は終わりです。

    お疲れさまでした!

    本来は奥深い概念ですが、あまりに深く解説すると余計に分かりづらくなるので、難解なことなるべくさけて解説しました。

    最低限のプログラミングはこれで大丈夫かと思います。

    もちろん興味を持たれた方は、どんどん深掘りしてみてくださいね!


    他のRuby入門記事はこちら

    【Ruby入門】Rubyとは何か?学習方法や将来性まで考えました!

    【Ruby入門】Ruby on Railsをやってみよう!

    【Ruby入門】環境構築(Mac/Win)

    【Ruby入門】nokogiriでスクレイピング

    【Ruby入門】データベース

    【Ruby入門】gemとライブラリ

    【Ruby入門】エラーと例外処理

    【Ruby入門】モジュール(module)とMix-in

    【Ruby入門】Procクラスとラムダ(lambda)

    【Ruby入門】ブロック

    【Ruby入門】メソッド

    【Ruby入門】クラスをコーディング(2) オブジェクト指向

    【Ruby入門】クラスをコーディング(1) classを作る

    【Ruby入門】クラスの継承、オーバーライド

    【Ruby入門】クラスとオブジェクト

    【Ruby入門】ディレクトリ(フォルダ)の作成、削除

    【Ruby入門】ファイルの移動、コピー、削除

    【Ruby入門】入力と出力

    【Ruby入門】Rubyの正規表現

    【Ruby入門】正規表現で置換する

    【Ruby入門】正規表現とは何か?

    【Ruby入門】文字列の結合などの操作

    【Ruby入門】CSVの基本と操作

    【Ruby入門】JSONの基本と操作

    【Ruby入門】乱数(Random)などの数値計算用クラスや端数処理

    【Ruby入門】日付の基本と操作(Time, Date)

    【Ruby入門】数値の数え上げ「upto」と四捨五入

    【Ruby入門】文字列の標準ライブラリnkfとヒアドキュメント

    【Ruby入門】数値の基本とメソッド (timesメソッド他)

    【Ruby入門】ハッシュ(hash)をeachで取り出す!その他ハッシュの応用に

    【Ruby入門】ハッシュ(hash)とシンボルの基本

    【Ruby入門】文字列の基本と表示メソッド

    【Ruby入門】Rubyの繰り返しを極める!様々な繰り返しのバリエーション

    【Ruby入門】最初はこれだけ!まずは手を動かしたい人のRuby入門

    【Ruby入門】ifとelseについて

    【Ruby入門】配列と操作(基本編)

    【Ruby入門】eachメソッドの使い方と応用例


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテキャンバナー ポテキャリバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE