2013-08-13 2 views
1

나는 다음과 같은 것을 달성 할 수 있도록 수업을 어떻게 배열해야하는지 알아 내려고 노력 중이다.수업을 어떻게 디자인합니까?

궁극적으로 나는 노드와 에지를 취하는 그래프를 가지고 있습니다.

그리고 아이디어는 이러한 노드와 가장자리를 기반으로 일부 그래프 알고리즘을 실행하는 것입니다.

따라서, 기본 단위 그래프 클래스는

private Node node 
private Edge Edge 

이고, 당신이 ... 그래프를 형성하는 것은 바로

지금, 여기에 문제가 걸립니다.

저는 이전 Edge를 구현하고 자체적으로 특별한 속성을 가진 특수 Edge Edge라는 특수 Edge를 가지고 있습니다.

그래서 나는 지금 형 Node, SpecialEdge

의 그래프를 가지고, 내가 에지를 받아 SpecialEdge하지 그래프 G를 어떻게 사용합니까?

의견을 보내 주시면 감사하겠습니다. 감사합니다.

답변

2

SpecialEdge와 같은 하위 클래스가이를 구현할 인터페이스 Edge를 정의 할 수 있습니다. Edge의 많은 구현이있을 수 있으며 항상 작동합니다.

또한 그래프에 노드가 많고 가장자리가 많으므로 디자인에 List<Node>List<Edge>을 사용하는 것이 좋습니다.

편집 : Nick에 따르면이 경우에는 순서가 문제가되지 않기 때문에 Set<Node>Set<Edge>을 사용해야합니다.

+0

'Set' 대신'List's를 사용하게 된 이유는 무엇입니까? 그래프의 일반적인 생각은 모서리 나 노드의 순서를 정의하지 않고 반복되는 모서리 나 노드를 허용하지 않기 때문에'Set'이 컬렉션을'List'보다 더 잘 모델링하는 것처럼 보입니다. – Nick

2

Edge의 두 가지 하위 클래스, 즉 BasicEdge 및 SpecialEdge를 만들어야합니다.

둘 모두 받아 들여야하는 그래프는 Edge 여야합니다. 하나의 유형 만 원하면 BasicEdge 또는 SpecialEdge를 승인하십시오.

+0

그러나 'Edge'와 'SpecialEdge'는 이미 계층 적으로 관련되어 있습니다. – arshajii

+0

@arshajii Edge는 포괄적 인 클래스이거나 심지어 인터페이스 일 수도 있습니다. Being BasicEdge는 기본이되는 표시입니다. – hexafraction

+3

원래 포스터의 질문은 너무 모호해서 현재 클래스 계층 구조에 무엇이 잘못되었는지 자세히 설명하지 않습니다. –

관련 문제