나는 문구가 arround에 던져지는 것을 들었고 나에게 논쟁은 완전히 미친 소리로 들린다. (여기서 내가 밀짚을 치고 있다면 미안하지만 내 의도는 아니다)
일반적인 경우가 무엇인지 알기 전에 추상화를 생성하고 싶지 않습니다. 그렇지 않으면 (1) 속하지 않은 추상화에 포함하거나 (2) 중요한 것을 생략 할 수 있습니다.
(1) 나에게 이것은 프로그래머가 실용적이지 않은 것처럼 들리지만, 최종 프로그램에는 존재하지 않을 것이라고 가정하여, 추상화 수준이 낮게 작업하고 있지만 문제는 아닙니다. 미숙 한 추상화, 미숙 한 구체화입니다.
(2) 중요한 것들을 생략하는 것이 한 가지입니다. 나중에 중요한 것으로 판명 된 사양에서 무언가가 생략 될 수 있습니다. 잘못 추측되면 클라이언트로부터 더 많은 정보를 얻는 것입니다.
우리는 항상 추상적 인 것에서부터 개념에 이르기까지 노력해야합니다. 왜냐하면 이것은 다른 방식이 아닌 가장 실용적인 방법입니다.
그렇게하지 않으면 고객에 대한 오해와 변화가 필요한 것들을 만들 위험이 있지만, 추상화를 구축하면 고객이 자신의 언어로 정의한 추상화만으로도이 위험에 노출되지 않습니다 (적어도 최소한 예, 고객이 세부 사항에 대해 마음을 바꿀 수는 있지만 원래 원하는 것을 전달하는 데 사용한 추상화는 여전히 유효한 경향이 있습니다.
다음은 예입니다. 고객이 품목 포장 로봇을 생성하기를 원한다고 가정합니다.
public abstract class BaggingRobot() {
private Collection<Item> items;
public abstract void bag(Item item);
}
우리는 클라이언트가 우리가 모르는 것들에 대해 더 자세히 설명하지 않고 사용한 추상화로부터 무언가를 구축하고 있습니다. 이것은 매우 융통성이 있습니다. 실제로 "배기 추상화"라고 불리는 것을 보았습니다. 실제로 배깅이 어떻게 구현되었는지를 가정하는 것이 더 시기상조입니다. . 수업을 업데이트하려면 서명을 변경하기 만하면됩니다. 그러나 상향식으로 시작한 사람에게는 큰 시스템 점검이 필요할 수 있습니다.
미숙 한 추상화, 미숙 한 구체화와 같은 것은 없습니다. 이 진술에 어떤 문제가 있습니까? 내 추리의 결함은 어디에 있습니까? 감사.