基本的なOOP原則を使用してRubyコードを劇的に改善する方法
最も重要なオブジェクト指向の原則の2つは、凝集度と結合度です。
結束 クラス内のすべてのメソッド間の関係についてです。それらは同じインスタンス変数とパラメータのセットを使用しており、すべてが同じ目標に向かって協力しています ?それとも、すべての方法が互いに分離していると感じますか?
カップリング クラスが他のクラスにどの程度依存しているか、システムの他の部分にどの程度「結びついている」か、そしてこのクラスを単独で使用できるかどうかです。
これらの概念は両方とも、特定のレンズのセットを通してコードベースのすべてのクラスを確認するのに役立ちます。これらのレンズは、クラスのデザインがどれほどしっかりしていて、どこに変更を加えることができるかを知るのに役立ちます。
最良の結果を得るには、高い凝集度を目指します。 &低結合 。
結束の例
低凝集度はピザに珍しいトッピングをするようなものですが、高凝集度はすべてが本来あるべき場所にあるように感じます。
あなたはそれを感じることができますが、測定するのは難しいです、あなたはあなたのクラスがどれほどまとまりがあるかをあなたに伝える数字をただ得ることはできません。したがって、理解しやすいようにするため 本当に明白なコード例をお見せしたいと思います。
どうぞ:
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つに適用し、開いていくつかのクラスを見ることができます。 。学んだことを使って、どうすればそれらを改善できますか?
読んでくれてありがとう! 共有することを忘れないでください まだお済みでない場合は、ニュースレターを購読してください🙂
-
iPad と iPhone で QR コードをスキャンする方法
2018 年の初めに、技術大手の Apple が展開した驚くべき機能は iOS 12 です。iPad と電話で QR コードをスキャンすることは、Apple のユーザー エクスペリエンスを次のレベルに引き上げるために追加された機能の 1 つです。この機能は、生活を楽にするだけでなく、チケット、クーポン、製品の成分などに関する情報を取得するのにも役立ちます。さらに、スマートフォンの助けを借りて QR コードをスキャンできる固有の QR コード認識が付属しています。無意味にカメラ。 QR コードをスキャンすることで、購入前に商品に関する情報を数秒以内に収集できます。 この投稿では、iPad
-
確認コードを使用して Gmail のパスワードをリセットする方法
Gmail パスワードのリセットをお勧めするいくつかの理由 、セキュリティ攻撃の疑いから、新たに発見されたプライバシーへの欲求まで、さまざまです。特別な理由がなくても、アカウントを安全に保つために、通常は数か月ごとにパスワードを変更することをお勧めします。パスワードを忘れた場合は、Gmail のパスワードを変更する理由の 1 つとしてパスワードを取得する必要がある場合があります。パスワードを回復する手順は、パスワードを変更する手順とは多少異なります。 Gmail のパスワードをリセットする手順については、以下をご覧ください。調べてみましょう。 Gmail アカウントを安全に保つためのヒント