なぜクラスを作成するのですか?
前回の記事に続いて、なぜnilを使用するのか、私たちが当たり前と思っている他のことについてこの質問をするのは良い考えだと思いました。
いいね…
醜いコードの巨大なブロブを1つだけ持つのではなく、なぜクラスを使用するのですか?
基本的なレベルでは、クラスを使用してコードとデータを論理ユニットに編成します。
しかし、それだけではありません。
クラスを使用すると、抽象化を作成できます 。
抽象化とは何ですか?
毎日、1分ごとに抽象化を使用します。
キーボード 私はこれを入力しています:
- ケーブル
- チェリーMXブラックスイッチ
- すべてをまとめるプラスチックケース
- 電気信号をコンピューターに送信する回路基板
キーボードは、これらを正しい方法で組み合わせることから生まれた概念にすぎません。
内部でどのように機能するかを知る必要がないため、これは抽象化です。 それを使用します。構成されているコンポーネントを知る必要はありません!
プラグを差し込んで入力を開始するだけです。
それがまさにクラスでできることです。
抽象化が重要な理由
抽象化は、複雑さの管理に役立ちます 。
スティーブマコネルが言うように:
「単一の最も重要な クラスを作成する理由は、プログラムの複雑さを軽減するためです。 」
抽象化はこれをどのように達成しますか?
詳細strong>を非表示にする 何かがどのように機能し、パブリックインターフェースでそのサービスを公開するかについて。
Rubyクラスでは、インターフェースはそのパブリックメソッドで構成されます。詳細はプライベートメソッドで隠されています。
詳細strong>付き つまり:
- インスタンス変数
- 内部メソッド
- アルゴリズムとデータ構造
それらが非表示になっている場合は、クラスのユーザーに影響を与えることなく、いつでも変更できます。
例 :
GPS
をお持ちの場合 配列を使用してデータを格納するクラスであり、インデックス0でそれを知っている必要があります その配列の緯度とインデックス1が見つかります は経度です。これらは知っておく必要のない詳細です クラスのユーザーとして。
良いクラスの書き方
さて、これは大きなトピックです 。
SOLIDの原則に従うなど、多くのことが優れたクラスの作成につながります。
しかし、最も重要なことは、クラスに何らかの役割が必要です。 、ランダムなメソッドで構成されていません。
たとえば、ビジネスロジック(計算、ルール)をプレゼンテーションロジック(フォーマット)から分離する必要があります。これらは異なる役割であるためです。
このコードを見てください :
require 'rest-client' require 'nokogiri' class ImageCounter def initialize(url) @url = url end def find_images_and_report data = RestClient.get(@url).body html = Nokogiri::HTML.parse(data) images = html.css("img") report = "" report << "=" * 40 << "\n" report << "Found #{images.size} images on #{@url} \n" report << "=" * 40 << "\n" end end reporter = ImageCounter.new("rubyguides.com") report = reporter.find_images_and_report
このクラスが計算とプレゼンテーションの両方にどのように関係しているかがわかります。これは、「クイック&ダーティ」スクリプトを作成している場合は問題ありませんが、より深刻なアプリケーションの場合は、それらを分離する必要があります。
責任を分離するときは、別のプレゼンテーションレイヤーをプラグインするか、ビジネスルールを変更して同じプレゼンテーションを再利用できます。
このコードの再利用 クラスの側面は、それらをさらに書くもう1つの理由です。
より良いクラスを書くのに役立つアイデアは他にもあります。
さらに探索するのに役立つものがいくつかあります:
- 凝集度と結合度
- 教えて、聞かないでください
- デメテルの法則
そもそもなぜクラスを書くのかを知ることから始めるのが良いので、良い仕事 記事全体を読んだら!
概要
なぜクラスを書くのか、抽象化とは何か、そしてなぜそれが重要なのかを学びました。また、優れたクラスを書くための基礎を学びました。私はあなたに何についてもっと読むべきかについてのいくつかの指針を与えました。
コードを大きな泥だんごにしたい場合を除きます。 これらの概念のいくつかを今すぐ適用して、クラスの設計を改善してください🙂
この記事が役に立ったら、Twitterで共有することを忘れないでください!
-
C++のネストされたクラス
ネストされたクラスは、別のクラスで宣言されているクラスです。ネストされたクラスは、それを囲むクラスのメンバー変数でもあり、他のメンバーと同じアクセス権を持っています。ただし、囲んでいるクラスのメンバー関数には、ネストされたクラスのメンバーへの特別なアクセス権はありません。 C++でネストされたクラスを示すプログラムは次のとおりです。 例 #include<iostream> using namespace std; class A { public: class B { private:
-
Javaでラッパークラスが必要なのはなぜですか?
ラッパークラス プリミティブデータ型を含むクラスです ( int、char、short、byteなど) 。つまり、ラッパークラスは、プリミティブデータ型を使用する方法を提供します。 (int、char、short、byteなど)オブジェクトとして 。これらのラッパークラスは、java.utilパッケージに分類されます。 。 ラッパークラスが必要な理由 ラッパークラスはプリミティブデータ型をオブジェクトに変換します 。メソッドに渡される引数を変更する場合は、オブジェクトが必要です(プリミティブ型は値によって渡されるため) 。 java.utilパッケージのクラス オブジェクトのみを処理するため