2014-12-18 5 views
0

이 질문은 기본적으로 언어와 관련이 없지만 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처럼 사용해야합니다.

질문은 다음과 같습니다.
이 경우 올바른 접근 방식은 무엇입니까?
나는 그것을 보는 내 방식에 완전히 틀립니 까?

미리 알려 주셔서 감사합니다.

+0

확장되면 상속됩니다. 그렇지 않으면 구성입니다. "상속에 대한 구성"은 규칙이 아니라 충고 일뿐입니다. – Leo

+0

@ 레오 나는 그것이 충고임을 안다. 내가 아는 한 많은 사람들은 그것을 규칙으로 보거나, 더 나쁜 것은 교리로 본다. 나는 (GUI 개발의 경우 특히) 뭔가를 오해 한 사람이거나 단순히 그 사람들을 무시할 수 있다면 어떤 의견을 원한다. :) –

+0

이 사람들을 무시 :-). 프로그래밍 만이 아닙니다. 현실 세계에서는 최고의 코드를 작성하는 데 충분한 시간/사람/리소스가 없을 것입니다. 당신이 할 수있는 최선책은 방어 적으로 코드를 작성하는 법을 배우는 것입니다. – Leo

답변

1

프로그래밍은 과학만큼이나 예술입니다. 그 점에서 결과를 얻는 데 반드시 최선의 방법은 하나도 없으며 장단점을 비교하는 것은 사용자의 몫입니다.

  • OOP로 시작, 그것은 사방 상속을보고 유혹 :

    는 "구성 상속을 통해 선호하는 것입니다"안내입니다.

  • 현실 세계에서 은 -보다 많으며 은 -보다 자주 발생하며 더 적절합니다.
  • 일부 언어는 단일 상속으로 제한됩니다. 이것은 상속을 희소하고 귀중한 무언가로 만듭니다. 정말로 필요한 경우에만 사용해야합니다.

    • 생일날짜입니다 :

    다음 예

  • 는 유용하고 효과적인이 지침은 방법을 보여줍니다.
  • 그러나 보통 사람생일 있습니다. 날짜 그 자체는 결코 생일이 아니며 다른 어떤 것과 관련하여 생일 일뿐입니다. 따라서 구성이 올바른 선택입니다.

이 예 에 추가 통찰력은-A 을 가지고 대-A 제공 방법. D가 B를 상속 받았다면 이것은 모든 D가 B라는 것을 의미합니다. 그러나 이는 B가 자신의 존재에 의해 존재한다는 것을 의미합니다. 즉, 모든 호랑이입니다.동물 및 일부 동물은 그 자체로는 호랑이이다.

이러한 일반적인 규칙은 지침 일뿐입니다. 흑백 사이에는 많은 회색 음영이 있습니다. 예를 들어 애완 자체동물인가? 또는 누군가이 있습니까? 관계의 어떤 부분이 가장 관련성이 있는지/코드 표현성에 가장 큰 이익을 가져다줍니다.

특정 GUI에 대해 많은 설명을 드릴 수 없습니다. 난 단지 중립적 인 언어를 제공 할 수 있습니다 (내 개인적인 해석과 지식을 바탕으로) subective 의견 (내가 충분히 자바 knwo하지 않음) :

  • 당신은 일반적으로 사용하다 JFrame의 제네릭 확장의 종류를 작성하는 경우 여러 응용 프로그램의 경우 상속을 고려해야합니다.
  • 하지만 GUI에는 사용자와의 상호 작용을위한 JFrame이있을 수 있으므로 principel 구성에서는 가능합니다. 예를 들어 모바일 장치에서 응용 프로그램이 FrameLayout 또는 JFrame 대신 다른 것을 사용한다고 상상할 수 있습니다. 구성을 변경하는 것이 더 쉽습니다. 어떤 종류의 애플리케이션에서는 GUI에 여러 개의 JFrame이있어 애플리케이션의 모델을 다르게 볼 수 있다고 상상할 수도 있습니다. 추상 팩토리를 사용하여 응용 프로그램이 사용되는 구체적인 객체와 관계없이 GUI와 그 요소를 만들 수 있습니다.
  • 그러나 결국에는 전술적 인 이유가있을 수 있습니다. 왜 GUI를 사용하여 JFrame에서 상속하는 것이 더 좋을까요? 예를 들어, GUI가 JFrame처럼 정확하게 동작하도록하려면. 또는 애플리케이션이 JFrame 상속을 필요로하는 더 큰 프로젝트의 일부인 경우. 또는 널리 사용되는 방법이기 때문입니다.

결론을 내리면, 교리가 당신을 결정하게하지 마십시오. 특정 사건에 대해 최선의 선택을하고 확실한 구체적인 논쟁으로이를 방어 할 준비를하십시오!