2017-12-22 32 views
3

전기 장치를 나타내는 클래스가 있습니다 (클래스 1이라고 부름). 또한 본질적으로 함께 결합 된 장치의 배열 (클래스 2), 여러 장치를 나타내는 클래스가 있습니다.상속과 집계를 사용하여 두 객체를 관련시키는 것은 나쁜 프로그래밍 습관입니까?

분명히 집합 관계를 갖는 것이 의미가 있습니다. 클래스 1의 인스턴스는 클래스 2에 포함됩니다. 그러나 제 사용법에서는 클래스 2를 클래스 1의 더 큰 인스턴스로 간주하는 것이 일반적입니다 (비슷한 방식으로 배터리 뱅크는 단일 배터리로 생각할 수도 있습니다).

이것은 클래스 2의 클래스 1에있는 모든 메소드와 속성을 재사용하면서 몇 가지 메소드와 속성을 추가하려는 것을 의미합니다. 내 생각에 이것은 상속 관계가 또한 의미가 있음을 의미합니다. 그러나 일부 속성은 사용자가 정의하지 않고 임베디드 부모 객체에서 파생됩니다.

일반적으로 수행되는 작업인가요? 나는 프로그래밍에 익숙하지 만 부모 클래스와 자식 클래스 사이에 두 줄로 된 UML 다이어그램을 보지 못했다. 저의 접근 방식은 나쁜 프로그래밍 습관입니까? 그러한 관계에 대한 더 나은 표현이 있습니까?

+0

가능한 경우 상속을 통한 집계를 선호합니다. 이 경우에는 class2를 삭제하고 class1을 내부의 목록과 함께 사용할 수 있습니다. 나무처럼. 나는 집계와 동시에 상속의 필요성을 결코 갖지 못했습니다. –

답변

4

제가 이해한다면, 당신이 묘사하는 패턴은 "합성물"이라는 패턴처럼 들립니다. 이것은 드문 일도 아니며, 나쁜 습관 일 수도 있습니다. have a look here.

일반적으로 당신은 맞습니다. 클래스 간의 결합을 가능한 한 낮게 유지하십시오 (상속은 정말 강력합니다). 그러나 이해한다면 코드의 이해가 그렇게 구현할 수 있습니다. 패턴과 기법에 대해 실용적으로하십시오. 상속이 합리적이고 클래스 간의 관계를 모델로 만든 경우이를 사용하십시오.

0

나는 Class1과 Class2 사이에 상속이 없다고 생각한다. 클래스 2에서 class1 메서드를 사용하려는 이유는 상속을 사용하기에 충분하지 않기 때문입니다. Class1의 인스턴스 만 Class2에 Class1 메서드를 사용할 수 있습니다. 집합체 일뿐입니다.

예를 들어 한 클래스에서 String 배열을 사용하려는 경우 String을 상속하지 않습니다. 또 다른 예로 (현실 세계에서) 책은 종이가 아닙니다. 아파트는 일종의 방이 아닙니다. 한 그룹의 사람은 일종의 사람이 아닙니다.

1

내가 추가 할 수있는 유일한 것은 원칙적으로 두 가지 유형이 서로 하나 이상의 관계가있는 것은 아무 문제가 없다는 것입니다. 모두 귀하의 세부 사항에 달려 있습니다. 귀하의 경우에는 단순히 클래스 2가 클래스 1의 일종이고 클래스 2가 클래스 1을 집계한다는 것을 의미합니다. 즉, 클래스 1의 일종으로 더 많은 클래스 1을 집계 할 수 있습니다. 그래서 그것은 두 클래스 사이의 집합과 일반화를 사용하여 나타낼 수 있습니다. 그러나 다른 응답자들도 동의합니다. 클래스 2는 실제로 코드 1을 재사용하기 위해 상속을 사용하는 클래스 1이 아니기 때문에 훌륭한 디자인이라고 확신하지 못합니다. 클래스를 복합체 부분으로 분해하여 재사용을 촉진하는 것이 좋습니다. 클래스 2에서 구현하고자하는 클래스 1의 공통적 인 특성을 다형 적으로 정의 할 수 있도록 인터페이스를 고려할 수 있습니다.