Frage

Lets say we have a class with only 1 function, eg: compute DFS. Which of the following is preferred approach and why ?

Approach 1:

public class DFS {

    public DFS(Graph g) {
      dfs(g);  // <--- computation invoked from constructor.
    }

    private void DFS(Graph g) {
       // do dfs traversal
    }
}

Client:
DFS dfs = new DFS(graph);


Approach 2:
public class DFS {
    Graph g;
    public DFS(Graph g) {
       this.g = g
    }

    private void doDFS() {
       // do dfs traversal
    }
}

Client:
DFS dfs = new DFS(graph);
dfs.doDFS();
War es hilfreich?

Lösung 2

The latter. The convention is that the constructor creates a blank object that is ready to do work, not an object that immediately begins to work.

Although both will function, the former is unclear.

Andere Tipps

Constructors are meant to initialize the data fields in the object. Given the choices, the second approach seems more correct.

Although what might be better is to include the doDFS method in your graph object. It's usually bad practice to create an entire class for a single simple function. The doDFS method is specific to the graphs it works with, so including it in whatever graph class you have is natural.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top