Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

기본 OOP 원칙으로 Ruby 코드를 획기적으로 개선하는 방법

가장 중요한 두 가지 객체 지향 원칙은 응집력과 결합입니다.

결속력 클래스 내부의 모든 메소드 간의 관계에 관한 것입니다. 동일한 인스턴스 변수 및 매개변수 세트를 사용하고 있습니까, 모두 동일한 목표를 위해 함께 작동 ? 아니면 모든 방법이 서로 분리되어 느껴지나요?

커플링 클래스가 다른 클래스에 얼마나 종속되어 있는지, 시스템의 나머지 부분에 얼마나 "연결"되어 있는지, 이 클래스가 개별적으로 사용되는 능력입니다.

기본 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 없이는 전화가 작동하지 않습니다. 고객에게 청구할 금액을 모르면 수업이 작동하지 않을 것입니다.

요약

두 가지 매우 중요한 OOP 원칙인 응집력과 결합에 대해 배웠습니다. 이 두 가지 개념은 클래스의 메소드가 얼마나 잘 함께 작동하고 클래스가 시스템의 나머지 부분과 얼마나 독립적인지 알아내는 데 도움이 됩니다.

지금 바로 이것을 프로젝트 중 하나에 적용하고 열어서 일부 수업을 볼 수 있습니다. . 방금 배운 내용을 사용하여 어떻게 개선할 수 있습니까?

읽어 주셔서 감사합니다! 공유를 잊지 마세요. &아직 뉴스레터를 구독하지 않으셨다면 구독하세요 🙂