최근에는 OOP를 둘러보기 시작했습니다. 이제는 추상 클래스와 인터페이스의 차이점에 대해 더 많이 읽을수록 혼란스러워집니다. 지금까지 어느 것도 인스턴스화 할 수 없습니다. 인터페이스는 골격을 결정하는 구조적 청사진입니다. 코드를 부분적으로 구현할 수있어 초록이 다릅니다.
나는 나의 특정한 상황을 통해 이것들에 대해 더 배우고 싶습니다. 약간의 배경 정보를 더 원한다면 첫 번째 질문에 대한 링크가 있습니다. 새 수업에 적합한 디자인 모델은 무엇입니까?
내가 만든 두 가지 클래스는 다음과 같습니다.
class Ad {
$title;
$description
$price;
function get_data($website){ }
function validate_price(){ }
}
class calendar_event {
$title;
$description
$start_date;
function get_data($website){ //guts }
function validate_dates(){ //guts }
}
보시다시피이 클래스는 거의 동일합니다. 아니 여기에 표시하지만, 다른 기능이있다 like get_zip()
, save_to_database()
내 수업에 걸쳐 일반적이다. 또한 클래스와 관련된 모든 일반적인 방법과 속성 (예 : 마일리지, 무게)을 갖는 다른 클래스의 자동차 및 애완 동물을 추가했습니다.
이제 DRY 원칙 을 위반했으며 여러 파일에서 동일한 코드를 관리하고 변경하고 있습니다. 나는 보트, 말 또는 다른 것과 같은 더 많은 수업을 계획하고 있습니다.
인터페이스 또는 추상 클래스를 사용하는 곳입니까? 내가 추상 클래스에 대해 이해 한 것으로부터, 나는 슈퍼 클래스를 추상 클래스에 내장 된 모든 공통 요소를 가진 템플릿으로 사용하고, 이후 클래스에서 특별히 필요한 항목 만 추가 할 것이다. 예를 들면 다음과 같습니다.
abstract class content {
$title;
$description
function get_data($website){ }
function common_function2() { }
function common_function3() { }
}
class calendar_event extends content {
$start_date;
function validate_dates(){ }
}
또는 인터페이스를 사용하고 이것들이 매우 유사하기 때문에 각 서브 클래스가 무결성을 위해 사용해야하는 구조를 만들고 각 클래스를 책임지는 최종 개발자에게 맡겨야합니다. 공통 기능의 세부 사항. 제 생각에는 특정 클래스의 요구에 따라 일부 '공통적 인'기능을 조정해야 할 수도 있습니다.
위의 모든 사항에도 불구하고, 추상 클래스와 인터페이스의 이유와 이유를 완전히 이해하고 있다고 생각되면 반드시 올바른 방향으로 생각하지 말고 올바른 방향으로 나아가십시오.
감사!