Реализация графика в Java

Мне дали задание реализовать график в java. В конечном итоге он будет использоваться для тестирования методов поиска (сначала в ширину, сначала в глубину и итеративное углубление). Три создаваемых класса должны реализовать три соответствующих интерфейса:

public interface Node {
    public Node createNode(String name, int ID, float weight);
    public Node[] getNeighbours();
    public Edge[] getEdges();
    public void addEdge(Edge e);
    public void removeEdge(Edge e);
    public String getName();
    public int getID();
    public float getWeight();
    public String toString();

public interface Edge {
    public Edge createEdge(String name, int ID, float weight);
    public Node getStartNode();
    public void setStartNode(Node n);
    public Node getEndNode();
    public void setEndNode(Node n);
    public String getName();
    public int getID();
    public float getWeight();
    public String toString();

public interface Graph {
    public Graph createGraph(String name, int ID, Node[] nodes, Edge[] edges, Node root);
    public String getName();
    public Edge[] getEdges();
    public void addEdge(Edge e);
    public Edge getEdge(String name, int ID);
    public void removeEdge(Edge e);
    public Node[] getNodes();
    public void addNode(Node n);
    public Node getNode(String name, int ID);
    public void removeNode(Node n);
    public void setRoot(Node n);
    public Node getRoot();  
    public boolean isTree();        <= optional!
    public String toString();

Основной метод будет в классе графа.

Я немного смущен тем, почему для каждого класса существуют методы создания, а не конструкторы.

Также может кто-нибудь посоветовать, следует ли мне хранить края, используя матрицу смежности или список смежности?

Любая помощь будет принята с благодарностью.

Спасибо


person bananamana    schedule 30.10.2011    source источник
comment
Я вижу, что здесь близкое голосование. Возможно, если вы переименуете свой вопрос в методы, подобные конструктору Strange, в интерфейсе Java, это может сделать его более убедительным. Просто мысль.   -  person Ray Toal    schedule 30.10.2011


Ответы (2)


Я согласен с вами в вопросе целесообразности размещения методов создания в интерфейсе. Методы в интерфейсе должны быть реализованы как методы экземпляра в реализующих классах, и обычно такие методы, когда они используются вместо конструкторов, являются методами класса, а именно статические фабричные методы, которые не могут отображаться в интерфейсах.

Единственная причина иметь метод создания в интерфейсе Java - это если кто-то выполняет клонирование, что здесь не так. Когда вы реализуете эти интерфейсы, методы создания будут вызывать ваш конструктор (который вы можете реализовать любым удобным для вас способом), но эти методы довольно глупы, потому что в качестве методов экземпляра вам понадобятся существующие объекты для их вызова. .

Что касается вашего второго вопроса, выбор матрицы смежности, списка смежности или списка инцидентности полностью зависит от вас.

person Ray Toal    schedule 30.10.2011

Интерфейсы не могут определять конструкторы. Для обсуждения см. эту вики-страницу.

См. страницу Википедии, посвященную компромиссам в списках смежности, для краткого обсуждения, которое может привести вас к правильное направление.

person Dave Newton    schedule 30.10.2011