이 질문은 기본적으로 언어와 관련이 없지만 OOP를 사용하고 GUI를 만들 수있는 언어를 대상으로합니다.
그럼에도 불구하고 예제를 제공해야한다면 Java를 참조로 사용할 것입니다.GUI를 통한 상속을 통한 구성
클린 코드가 우리에게 가르쳐주는 것처럼 구성은 상속에 우선합니다.
이제는 GUI 개발을 목표로하는이 주제에 대한 많은 블로그 기사가 있습니다.
내가 지금까지 읽은 문장 중 가장 중요한 것은 "JFrame/JDialog에서 파생되지 않는다"는 것입니다.
한편, "has-a"는 구성을 나타내고 "is-a"는 상속을 명확히 나타내는 "is-a-a-a-has-a"로 간주하는 규칙이 있습니다.
지금 여기에 문제가 있습니다 : 내가 가 GUI,이 GUI이있는 응용 프로그램을 개발할 때 JFrame의 또는 JDialog를이다 (.하거나 특정 프로그래밍 언어, 예를 들어 System.Windows.Forms.Form
.NET Windows Forms의에 대한 위해 무엇이든) . 이 GUI는 에 개의 컨트롤이 있습니다. 나를 위해
이 케이스는 분명하다 : 그것은 가 JFrame의이며, 다음이 GUI는 다시에있는 컨트롤에 대한 구성을 사용하기 때문에
내 응용 프로그램이 GUI의 인스턴스를 가지고 구성을 사용하지만 GUI 자체는 상속을 사용하여 .
JFrame 및 GUI의 모든 컨트롤을 가진 GUI에 GuiManager를 사용하는 것처럼 절대로 compisition을 사용하지 않을 것이라고 생각합니다. 다음과 같이 빌드합니다 (함께 넣으면됩니다). 결국 컨트롤은 GUI의 일부이므로 멤버 변수 여야합니다. (GUI가 상속을 사용하는 경우에만 가능합니다).
그리고 더욱 명확하게 : 예, 내 GUI는 JFrame처럼 동작해야하며, 필요한 경우 다른 개발자가 JFrame처럼 사용해야합니다.
질문은 다음과 같습니다.
이 경우 올바른 접근 방식은 무엇입니까?
나는 그것을 보는 내 방식에 완전히 틀립니 까?
미리 알려 주셔서 감사합니다.
확장되면 상속됩니다. 그렇지 않으면 구성입니다. "상속에 대한 구성"은 규칙이 아니라 충고 일뿐입니다. – Leo
@ 레오 나는 그것이 충고임을 안다. 내가 아는 한 많은 사람들은 그것을 규칙으로 보거나, 더 나쁜 것은 교리로 본다. 나는 (GUI 개발의 경우 특히) 뭔가를 오해 한 사람이거나 단순히 그 사람들을 무시할 수 있다면 어떤 의견을 원한다. :) –
이 사람들을 무시 :-). 프로그래밍 만이 아닙니다. 현실 세계에서는 최고의 코드를 작성하는 데 충분한 시간/사람/리소스가 없을 것입니다. 당신이 할 수있는 최선책은 방어 적으로 코드를 작성하는 법을 배우는 것입니다. – Leo