ホームページ  >  記事  >  ウェブフロントエンド  >  車両の例でいくつかの楽しい例えを使用した SOLID 原則

車両の例でいくつかの楽しい例えを使用した SOLID 原則

WBOY
WBOYオリジナル
2024-08-22 18:33:481096ブラウズ

SOLID principles using some fun analogies with Vehicle Example

SOLID は、コンピューター プログラミングにおける 5 つの優れた原則 (ルール) のグループの頭字語です。 SOLID を使用すると、プログラマは理解しやすく、後で変更しやすいコードを作成できます。 SOLID は、オブジェクト指向設計を使用するシステムでよく使用されます。
車両の例を使用して SOLID の原則を説明しましょう。輸送サービス用に、乗用車や電気自動車など、さまざまなタイプの車両を管理するシステムを設計していると想像してください。

S - 単一責任原則 (SRP)

車両の例: 車を持っていると想像してください。運転する責任はありますが、独自のメンテナンス (オイル交換やタイヤの交換など) を処理する責任は負うべきではありません。代わりに、別の整備士がそれを担当します。
説明: このコードでは、Vehicle クラスは、メーカーやモデルの保存など、車両自体に関連することのみを処理する必要があります。メンテナンスを管理する必要がある場合は、そのための別のメンテナンス クラスを作成します。こうすることで、各クラスに 1 つのジョブまたは責任が与えられ、コードの管理が容易になります。

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end
end

class Maintenance
  def initialize(vehicle)
    @vehicle = vehicle
  end

  def perform_maintenance
    puts "Performing maintenance on #{@vehicle.make} #{@vehicle.model}"
  end
end

O - オープン/クローズ原則 (OCP)

車両の例: 基本的な自動車があり、システムに電気自動車を追加したいとします。電気自動車の機能を追加するために既存の自動車クラスを変更する必要はありません。代わりに、電気自動車用の新しいクラスを作成して、既存の機能を拡張できます。
説明: Vehicle クラスは拡張が可能です (ElectricVehicle などの新しいタイプの車両を作成できます) が、変更は閉じられています (新しいタイプを追加するために Vehicle クラス自体を変更する必要はありません)。

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def description
    "#{@make} #{@model}"
  end
end

class ElectricVehicle < Vehicle
  def initialize(make, model, battery_range)
    super(make, model)
    @battery_range = battery_range
  end

  def description
    "#{super} with #{@battery_range} miles battery range"
  end
end

L - リスコフ置換原理 (LSP)

車両の例: 多数の車両があり、普通の車を問題なく電気自動車に置き換えることができると想像してください。どちらも、システムを壊すことなく、基本的な機能である「運転」を実行できる必要があります。
説明: サブクラス (ElectricVehicle など) は、プログラムの動作を変更することなく、その親クラス (Vehicle) を置き換えることができます。これにより、コードがさまざまなタイプの車両を同じ方法で処理できるようになります。

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class ElectricVehicle < Vehicle
  def drive
    puts "Driving the electric #{@make} #{@model} quietly"
  end
end

def test_drive(vehicle)
  vehicle.drive
end

car = Vehicle.new("Toyota", "Corolla")
ev = ElectricVehicle.new("Tesla", "Model 3")

test_drive(car)  # Driving the Toyota Corolla
test_drive(ev)   # Driving the electric Tesla Model 3 quietly

I - インターフェース分離原理 (ISP)

車両の例: さまざまなタイプの車両があると想像してください。充電できる車両 (電気自動車など) と、走行のみ可能な車両 (ガソリン車など) があります。ガソリン車には充電関連の方法を考慮する必要はありません。
説明: クラスは必要なインターフェイス (または動作) のみを実装する必要があります。たとえば、ElectricVehicle は Drivable インターフェイスと Chargeable インターフェイスの両方を実装する可能性がありますが、通常の Vehicle は Drivable のみを実装します。

module Drivable
  def drive
    raise NotImplementedError, "This #{self.class} cannot drive"
  end
end

module Chargeable
  def charge
    raise NotImplementedError, "This #{self.class} cannot be charged"
  end
end

class Vehicle
  include Drivable

  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class ElectricVehicle < Vehicle
  include Chargeable

  def initialize(make, model, battery_range)
    super(make, model)
    @battery_range = battery_range
  end

  def drive
    puts "Driving the electric #{@make} #{@model} quietly"
  end

  def charge
    puts "Charging the #{@make} #{@model}"
  end
end

D - 依存関係逆転原理 (DIP)

車両の例: 車には、ガソリン エンジンや電気エンジンなど、さまざまな種類のエンジンが搭載されていると想像してください。車は特定のエンジン タイプに直接依存するのではなく、より一般的なエンジン インターフェイスに依存して、あらゆるタイプのエンジンを使用できるようにする必要があります。
説明: 高レベル モジュール (Vehicle など) は、低レベル モジュール (GasEngine や ElectricEngine など) に依存すべきではありません。どちらも抽象化 (エンジン インターフェイスなど) に依存する必要があります。これにより、システムがより柔軟になり、変更が容易になります。

class Engine
  def start
    raise NotImplementedError, "This #{self.class} cannot start"
  end
end

class GasEngine < Engine
  def start
    puts "Starting gas engine"
  end
end

class ElectricEngine < Engine
  def start
    puts "Starting electric engine"
  end
end

class Vehicle
  def initialize(engine)
    @engine = engine
  end

  def start
    @engine.start
  end
end

gas_engine = GasEngine.new
electric_engine = ElectricEngine.new

gas_car = Vehicle.new(gas_engine)
electric_car = Vehicle.new(electric_engine)

gas_car.start        # Starting gas engine
electric_car.start   # Starting electric engine

この車両例の SOLID 原則に従うことで、保守、拡張、新しい要件への適応が簡単なシステムを構築できます。

LinkedIn: https://www.linkedin.com/in/anandsoni11/

以上が車両の例でいくつかの楽しい例えを使用した SOLID 原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。