Hallo Java-Forum! Ist mein erster Post hier.
Ich muss ein Programm für die Uni schreiben, was auch funktioniert, nur habe ich noch ein paar Fragen zu OOP / Programmierstil (wird auch bewertet, außerdem interessiert es mich sowieso):
1.
Angenommen, ich habe z.B. eine LinkedList allThings mit Dingen, welche durch eine ID eindeutig identifizierbar sind und will eine einfache Funktion getThing(int id) schreiben, die das Ding mit diese ID aus der Liste heraussucht und returnt (wenn nicht vorhanden, return null). Dann geht an sich ja einfach mit einem break oder zwei returns:
bzw.
Nur heißt es ja, dass breaks und zusätzliche returns verpöhnt sind. Ist das in einem solchen Fall OK, oder wie soll ich das am besten umgehen? Oder gleich HashMaps benutzen? Wenn ich mit dem ListIterator durch ne while-Schleife iteriere müsste ich ja in der Abbruchbedingung prüfen, ob die Liste noch ein Element hat und ob das Element das gesuchte ist und müsste nach der Schleife nochmal überprüfen, ob sie das Element gefunden und abgebrochen oder nur alle durchlaufen und abgebrochen hat, was ja umständlich wäre...
2.
Soll man, wenn man innerhalb einer Klasse auf deren Attribute / Methoden zugreift, immer "this" davorschreiben (Lesbarkeit), oder nur, wenn es nötig ist?
3.
Angenommen, ich will ein neues Ding erzeugen und zur Liste hinzufügen, aber mit der Einschränkung, dass die ID eines Dings nur genau 8-stellig sein darf:
Außerdem hat mein Programm eine Shell, die z.b. den Befehl "addthing x" kennt (x ist die ID). In der Shell wird überprüft, ob x überhaupt ein Integer ist usw.. Ist es in Ordnung, wenn ich in der auch Shell üperprüfe, ob diese ID 8-stellig ist, dann könnte ja durch die public-Methode addThing(int id) theoretisch auch Dinge mit nicht 8-stelligen IDs anlegen. Was aber dadurch verhindert wird, dass man nur über die Shell-Befehle Dinge adden kann, wo ja die ID auf "8-Stelligkeit" überprüft wird. Muss nun gemäß des Kapselungsprinzips trotzdem in addThing(int id) anstatt in der Shell die ID auf 8-Stelligkeit überprüft werden, weil ja die Klasse mit der LinkedList auch unabhängig von der Shell funzen soll? Oder reicht es, wenn man alle Prüfungen in der Shell durchführt?
4.
Angenommen, ich mache das ID-Attribut der Klasse Thing final, weil es ja unveränderbar ist... muss ich die ID dann public machen (in den Code Conventions hab ich nix gefunden), oder kann ich sie auch private lassen (mit Getter). Gibt es irgendeinen Fall, wo letzteres Sinn macht?
EDIT:
Geht also nur
oder auch
Ich muss ein Programm für die Uni schreiben, was auch funktioniert, nur habe ich noch ein paar Fragen zu OOP / Programmierstil (wird auch bewertet, außerdem interessiert es mich sowieso):
1.
Angenommen, ich habe z.B. eine LinkedList allThings mit Dingen, welche durch eine ID eindeutig identifizierbar sind und will eine einfache Funktion getThing(int id) schreiben, die das Ding mit diese ID aus der Liste heraussucht und returnt (wenn nicht vorhanden, return null). Dann geht an sich ja einfach mit einem break oder zwei returns:
Java:
public Thing getThing(int id) {
Thing returnedThing = null;
for (Thing thing : allThings) {
if (thing.getID() == (id)) {
returnedThing = thing;
break;
}
}
return returnedThing;
}
Java:
public Thing getThing(int id) {
for (Thing thing : allThings) {
if (thing.getID() == (id)) {
return thing;
}
}
return null;
}
2.
Soll man, wenn man innerhalb einer Klasse auf deren Attribute / Methoden zugreift, immer "this" davorschreiben (Lesbarkeit), oder nur, wenn es nötig ist?
3.
Angenommen, ich will ein neues Ding erzeugen und zur Liste hinzufügen, aber mit der Einschränkung, dass die ID eines Dings nur genau 8-stellig sein darf:
Java:
public void addThing(int id) {
allThings.add(new Thing(id));
}
4.
Angenommen, ich mache das ID-Attribut der Klasse Thing final, weil es ja unveränderbar ist... muss ich die ID dann public machen (in den Code Conventions hab ich nix gefunden), oder kann ich sie auch private lassen (mit Getter). Gibt es irgendeinen Fall, wo letzteres Sinn macht?
EDIT:
Geht also nur
Java:
public final int ID;
Java:
private final int ID; // "ID" oder "id", wenns private ist? Code Conventions sagen da glaub ich nix?
Zuletzt bearbeitet: