나는 보통 객체 인스턴스가 Liskov Substitution Principle을 준수하는지 확인하려고 노력하지만, 나는 항상 LSP가 생성자에게도 적용되어야한다고 생각하는지 궁금해했다.생성자가 Liskov 대체 원칙을 준수해야합니까?
나는 이것에 대한 인터넷 검색을 시도했지만 어떤 강한 의견을 찾을 수 없었습니다.
코딩의 대부분은 Ruby에 있지만, 때로는 내 하위 클래스 생성자가 상위 클래스와 약간 다릅니다. 이들은 동일한 기본 인수 세트를 사용하며, 종종 추가 args를 사용합니다. 때로는 다른 클래스 메소드에서도 이와 같은 일이 발생합니다.
내 머리 뒤에서는 항상 LSP 위반 인 것처럼 느껴졌지 만 다른 사람이이 방법을 사용하고 있는지를 알고 싶었습니다.
"하위 유형을 처리하고 있다는 것을 알고있는 생성자를 사용할 때." 감사. 이것은 좋은 지적입니다. – Chance
생성자, 정적 팩토리 메서드, 생성되는 형식의 인스턴스 인 팩터 리 메서드 (특히 Clone)와 다른 팩토리를 구별하는 것이 중요합니다. 정적 팩토리는 반환 유형에서 파생 된 여러 유형의 객체를 생성하지만 LSP는 생성 된 모든 객체에 적용해야합니다. 그러나 파생 클래스는 기본 클래스와 동일한 정적 메서드를 지원한다는 요구 사항은 없습니다. 클래스가 'Clone'과 같은 팩토리 메소드를 지원하면 LSP를 존중하고 하위 유형에서 유사한 의미를 지원해야합니다. – supercat
다른 유형의 것을 반환하는 팩토리의 경우, 파생 팩토리에서 리턴 된 항목은 기본 팩토리에서 리턴 될 항목의 인스턴스로 사용할 수 있어야합니다. 따라서'CarFactory'가'Car'를 리턴하는'MakeCar()'메소드를 가지고 있고,'Drive()'메소드를 지원한다면, SomeCarFactory.MakeCar(). Drive()를 호출 할 수 있어야합니다. 'SomeCarFactory'는 실제로'FordFactory' ('CarFactory'를 상속받은)이며'Ford' ('Car'를 상속받은)를 반환합니다. – supercat