입문 OOP 질문 :추상 클래스 및 검증 방법 당신을 위해
상황 : 각 아이가 독특한 방식으로 해당 속성의 유효성을 검사하기 때문에 나는, 공공 세터와 추상적 인 검증과 추상 클래스를 원한다.
코드 :
abstract class Parent {
public function setName($name) {
if (validateName($name)) {
$this->_name = $name;
} else {
// error msg
}
}
abstract public function validateName($name);
}
class Child extends Parent {
public function validateName($name) {
// ensure name gits this child's requirements
}
}
질문 : 이것은 "법적"설계 방식인가? setName
메서드는 모든 자식 클래스에 대해 동일하므로, 부모 클래스의 공용 메서드 여야한다고 생각했지만 유효성 검사기는 자식 클래스가이를 구현하도록 추상화해야합니다.
난 그냥 ... 개념적으로 종이에이를 스케치하고있어
다른 사람들이 문제의 근본 원인을 신속하게 파악할 수 있도록 사람들은 자신의 사례를 어리둥절하게하는 데 익숙합니다. 일반적으로 이것은 훌륭하지만, 최선의 OOP 실행에 대해 묻는 질문에 대해서는 정확한 내용이 무엇인지를 아는 것이 중요합니다. 클래스는 * things *를 나타 내기위한 것입니다. 그러한 것들이 무엇인지 모른 채, 클래스를 디자인 할 것은 없습니다. – erisco
법률에서 법률은 단지 일치하려고합니다. 물리학에서 법은 고아원을 공격하는 전기 톱 살인자 일 수 있습니다. 프로그래밍의 법칙은 물리 법칙과 훨씬 비슷합니다. – erisco
아래에 의견을 보내 주셔서 감사합니다. 좀 더 많은 데이터가'Parent' 클래스는 일반적인 게임 클래스이고, 우리는 승리하는 쪽을 설정하려고합니다. 어린이'GameA'는 2면 밖에 없기 때문에 유효한 쪽은 1, 2 또는 0 (추첨)이됩니다. 'GameB'는 8 명의 선수를 지원하며 무승부, 개인 승자, 2 ~ 3 명의 우승 팀이있을 수 있습니다. 그래서 저는 부모에게 세터를 정의하고 아이들에게 유효성 검사를 지시하게하고 싶습니다. 그건 나에게 논리적 인 것처럼 보였지만, 나는 단지 핑키 발가락을 OOP에 담았습니다. – Drew