Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

基本的なOOP原則を使用してRubyコードを劇的に改善する方法

最も重要なオブジェクト指向の原則の2つは、凝集度と結合度です。

結束 クラス内のすべてのメソッド間の関係についてです。それらは同じインスタンス変数とパラメータのセットを使用しており、すべてが同じ目標に向かって協力しています ?それとも、すべての方法が互いに分離していると感じますか?

カップリング クラスが他のクラスにどの程度依存しているか、システムの他の部分にどの程度「結びついている」か、そしてこのクラスを単独で使用できるかどうかです。

基本的なOOP原則を使用してRubyコードを劇的に改善する方法

これらの概念は両方とも、特定のレンズのセットを通してコードベースのすべてのクラスを確認するのに役立ちます。これらのレンズは、クラスのデザインがどれほどしっかりしていて、どこに変更を加えることができるかを知るのに役立ちます。

最良の結果を得るには、高い凝集度を目指します。 &低結合

結束の例

低凝集度はピザに珍しいトッピングをするようなものですが、高凝集度はすべてが本来あるべき場所にあるように感じます。

あなたはそれを感じることができますが、測定するのは難しいです、あなたはあなたのクラスがどれほどまとまりがあるかをあなたに伝える数字をただ得ることはできません。したがって、理解しやすいようにするため 本当に明白なコード例をお見せしたいと思います。

どうぞ:

class Library
  def lend_book
  end

  def return_book
  end

  def make_coffee
  end
end

この例では、make_coffee このライブラリにカフェテリアがあったとしても、Libraryには意味がありません。 コーヒーを作るクラス🙂

カフェテリアには、持っている本や本の貸し出し方法などに関する情報は必要ありません。

また、図書館はコーヒーの残り量や作り方を知る必要がありません。

これが、低凝集度の意味です。

もちろん

これは必ずしも明白ではありません。注意を払う必要がある場合もあります。 &メソッド名を超えて見てください。

  • これらのメソッドは実際に何をしていますか?
  • 彼らはどのようなデータを扱っていますか?
  • コラボレーションしているオブジェクトは何ですか?

これらの質問は、クラスのまとまりのレベルについてのアイデアを与えるはずです。

低凝集度をどのように修正しますか?

このクラスに属していないメソッドを別のクラス(多くの場合は新しいクラス)に抽出する必要があります。

結合の例

それでは、カップリングを見てみましょう。

ここに例があります

class ShoppingCart
  attr_accessor :items

  def initialize
    @items = []
  end
end

class Order
  def process_order(cart)
    cart.items.map(&:price).inject(:+)
  end
end

この例では、Order ShoppingCartと高度に結合されています それについてよく知っているので、itemsがあることを知っています 変数であり、それを使って計算を行っています。

ここで、ShoppingCartを変更すると のitemsの実装 、Orderも変更する必要があります 。

良くない!

このように修正できます

class ShoppingCart
  attr_accessor :items

  def initialize
    @items = []
  end

  def calculate_total
    items.map(&:price).inject(:+)
  end
end

class Order
  def process_order(cart)
    cart.calculate_total
  end
end

カップリングを減らしました それらが属する計算の詳細を移動することによって。

これについての比喩が必要な場合は、固定バッテリーが付属しているこれらの携帯電話について考えてみてください。それは高結合です。 。

バッテリーを交換できる場合は、低結合

ある程度の結合が必要であることに注意してください。バッテリーとOrderがないとスマートフォンは機能しません。 クラスは、顧客にいくら請求するかを知らなければ機能しません。

概要

あなたは2つの非常に重要なOOPの原則、凝集度と結合度について学びました。これらの2つの概念は、クラス内のメソッドがどの程度連携して機能するか、およびクラスがシステムの他の部分からどの程度独立しているかを知るのに役立ちます。

これを今すぐプロジェクトの1つに適用し、開いていくつかのクラスを見ることができます。 。学んだことを使って、どうすればそれらを改善できますか?

読んでくれてありがとう! 共有することを忘れないでください まだお済みでない場合は、ニュースレターを購読してください🙂


  1. iPad と iPhone で QR コードをスキャンする方法

    2018 年の初めに、技術大手の Apple が展開した驚くべき機能は iOS 12 です。iPad と電話で QR コードをスキャンすることは、Apple のユーザー エクスペリエンスを次のレベルに引き上げるために追加された機能の 1 つです。この機能は、生活を楽にするだけでなく、チケット、クーポン、製品の成分などに関する情報を取得するのにも役立ちます。さらに、スマートフォンの助けを借りて QR コードをスキャンできる固有の QR コード認識が付属しています。無意味にカメラ。 QR コードをスキャンすることで、購入前に商品に関する情報を数秒以内に収集できます。 この投稿では、iPad

  2. 確認コードを使用して Gmail のパスワードをリセットする方法

    Gmail パスワードのリセットをお勧めするいくつかの理由 、セキュリティ攻撃の疑いから、新たに発見されたプライバシーへの欲求まで、さまざまです。特別な理由がなくても、アカウントを安全に保つために、通常は数か月ごとにパスワードを変更することをお勧めします。パスワードを忘れた場合は、Gmail のパスワードを変更する理由の 1 つとしてパスワードを取得する必要がある場合があります。パスワードを回復する手順は、パスワードを変更する手順とは多少異なります。 Gmail のパスワードをリセットする手順については、以下をご覧ください。調べてみましょう。 Gmail アカウントを安全に保つためのヒント