Frage zu dem Thema interface

julia_76

Mitglied
Hallo,

heute hätte ich ein paar verständnissfragen zum thema Interface.

Ich fasse einmal kurz zusammen was ich über Interface weiß.

1. Interface sind ähnlich Klassen werden aber mit dem Schlüsselwort "interface" eingeleitet.
2. Interface schreibe ich in eine Datei.
3. ein Interface besitzt keine Implementierungen.
4. Im Interface stehen nur Methodenköpfe u. Konstanten.
5. interface kann ich mit hilfe von implement in eine klasse einbinden.

Ich verstehe aber nicht wie so ein Konstrukt inkl. vererbung und interface aufgebaut ist.

Es wäre schön wenn jemand ein code Beispiel kennt, wo ich mir den gesamten Ablauf einmal anschauen könnte.


Gruß, Thorsten
 
Hallo Thorsten,

aus einem Taschnrechnerprojekt:

Interface:
Java:
public interface Operation {

    public void calculate(Memory stack);
    
    public boolean isMatchingSymbol(String userInputSymbol);
    
 }


Eine Beispielklasse davon:
Java:
public class Addition implements Operation {

    public void calculate(Memory stack) {
        double sub1 = stack.pop();
        double sub2 = stack.pop();        
        
        stack.push(sub1 + sub2);
       
    }

    @Override
    public boolean isMatchingSymbol(String userInputSymbol) {
        return userInputSymbol.equals("+");
    }
}

Manager:
Java:
public class Manager {

    private List<Operation> registered = new ArrayList<Operation>();

    void register(Operation o) {
        registered.add(o);
    }

    boolean isRegistered(Operation o) {
        return registered.contains(o);
    }

    void executeOperation(String symbolToSearch, Memory stack) {
        for (int i = 0; i < registered.size(); i++) {
            Operation search = registered.get(i);

            if (search.isMatchingSymbol(symbolToSearch)) {
                search.calculate(stack);
            }
        }
    }
}

Warum das Ganze? Da alle meine Rechenoperationen dasselbe Interface implementieren, kann ich sie in einer Liste vom Typ <Operation> speichern und über diese Liste iterieren, um die gesuchte Rechenoperation zu finden.

Ohne dieses Interface müsste ich einen langen switch-case-Block bauen, um die gesuchte Rechenoperation zu finden.
Java:
void executeOperation(String symbolToSearch, Memory stack){
    	
    	switch(symbolToSearch){
    	case "+":
    		//...
    	case "-":
    		//...
    	case "/":
    		//...
    	case "*":
    		//...
    	   	
    	}
Bei nur vier Rechenoperationen ist die Ersparnis nicht allzu groß.

Allerding habe ich momentan einen anderen Fall, wo ich meine Such-Methode auf diese Art von ~270 auf ~30 Zeilen zusammenschrumpfen konnte.

Außerdem ist der Code so wiederverwendbarer bzw. ich kann Teile davon auslagern. Möchte ich eine neue Rechenoperation hinzufügen, erstelle ich einfach die passende Klasse und speichere eine Instanz davon in der Liste. Ich muss nicht daran denken, dass ich ja auch noch 'irgendwo' einen Switch habe, der angepasst werden muss.

Wenn ich selbst eine Klasse verwende, die ein bestimmtes Interface implementiert, kann ich mir sicher sein, dass diese Klasse über bestimmte Methoden verfügt.
Oder andersrum: Ich gebe dir den Auftrag, ein neue Rechenoperation zu schreiben. Dazu gebe ich dir einfach mein Interface + Doku und kann damit sicherstellen, dass du alle benötigten Methoden implementierst. Ohne Interface müsste ich hoffen, dass du nichts vergisst und alle Parameter und Rückgabetypen richtig setzt. Die Wahrscheinlichkeit, dass irgendwas nicht funktioniert und crasht, ist so wesentlich höher.
 
Zuletzt bearbeitet:
Natürlich kann man sich das alles über ein Buch beibringen. Ich habe hier sogar zwei Bücher, dennoch hat sich das Thema interface mir nicht richtig erschlossen. Nochmals danke für das Beispiel und die Hilfe.
 

Neue Themen


Zurück
Oben