Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #12883

Re: Grundsätzliche Frage zu Interfaces

From Michael Paap <feunews@mpaap.de>
Newsgroups de.comp.lang.java
Subject Re: Grundsätzliche Frage zu Interfaces
Date 2015-12-31 02:35 +0100
Organization FernUni Hagen
Message-ID <5684865C.7090405@mpaap.de> (permalink)
References <n60hnj$ojd$1@news.albasani.net> <n61aq1$a34$1@news-ailanthus.fernuni-hagen.de> <n61o6h$3q6$1@news.albasani.net>

Show all headers | View raw


Am 31.12.2015 um 00:09 schrieb Ralf S. Hellersen:

>> Dieses Bilden eines "Teil-Typs" ermöglicht es, dass Programmteile völlig
>> unabhängig von konkreten Implementierungen gebaut werden können: Eine
>> Klasse, welche ein Objekt nur in seiner Rolle als Exemplar eines
>> Interface-Typs kennt, ist von der tatsächlichen Klasse dieses Objekts
>> unabhängig und kann vollständig gebaut und übersetzt werden, ohne dass
>> es überhaupt schon eine das Interface implementierende Klasse geben
>> muss. Und das ist eine wesentliche Voraussetzung z.B. für das Schreiben
>> von Frameworks und generell für eine team- oder gar
>> unternehmensübergreifend arbeitsteilige Entwicklung.
> Dafür werde ich nach Beispielen suchen, um es zu verstehen.

Hier mal ein simples Beispiel... ein TicTacToe-Spiel. Wenn ich dir
folgende Klassen gebe:

public enum EFieldState {
    CROSS, CIRCLE, EMPTY
}

public class PlayerException extends Exception {
    public PlayerException(String message, Throwable cause) {
        super(message, cause);
    }

    public PlayerException(String message) {
        super(message);
    }
}

und ein paar Interfaces festlege:

public interface ITTTModel {
    EFieldState getFieldState(int row, int column);

    void setFieldState(int row, int column, EFieldState state);

    EFieldState[][] getFieldStates();
}

public interface ITTTView {
    void refresh();
}

public interface IPlayer {
    Point getMove(EFieldState[][] situation) throws PlayerException;
}

public interface IRuleMaster {
    boolean isValidMove(Point move, EFieldState newState);
}


dann kannst du schon eine hübsche kleine Partie-Steuerung bauen, die
völlig unabhängig davon ist, woher konkrete Player-Klassen später ihre
Züge bekommen werden (von einem Menschen vorm Rechner, übers Netzwerk,
einer KI...), wie das Model intern implementiert ist (ein String, ein
3x3-Array, Datenbankzugriff...) oder wie das Spielfeld "ausgegeben" wird
(grafische Darstellung, ASCII auf Konsole, Sprachausgabe, Braillezeile).
Mal als "Skizze":

public class MatchController {

    private IPlayer player1;

    private IPlayer player2;

    private ITTTModel model;

    private ITTTView view;

    private IRuleMaster ruleMaster;

    public MatchController(IPlayer player1, IPlayer player2,
            ITTTModel model, ITTTView view, IRuleMaster ruleMaster) {
        this.player1 = player1;
        this.player2 = player2;
        this.model = model;
        this.view = view;
        this.ruleMaster = ruleMaster;
    }

    @Override
    public void run() {
        for (int i = 0; i < 9; i++) {
            boolean even = i % 2 == 0;
            IPlayer currentPlayer = even ? player1 : player2;
            EFieldState nextFieldState =
                    even ? EFieldState.CROSS : EFieldState.CIRCLE;
            boolean moved = false;
            try {
                while (!moved) {
                    Point move = currentPlayer.
                            getMove(model.getFieldStates());
                    if (ruleMaster.isValidMove(move, nextFieldState)) {
                        model.setFieldState(
                                move.x, move.y, nextFieldState);
                        view.refresh();
                        moved = true;
                    } else {
                        // Problembehandlung
                    }
                }
            } catch (PlayerException e) {
                // Exceptionhandling
            }
        }
    }
}

Das Bauen der Klassen, welche die Interfaces implementieren, können
derweil andere Mitarbeiter erledigen. ;-)

Gruß,
Michael

Back to de.comp.lang.java | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Grundsätzliche Frage zu Interfaces "Ralf S. Hellersen" <schneiderxr@arcor.de> - 2015-12-30 12:12 +0000
  Re: GrundsAEtzliche Frage zu Interfaces Jan Burse <janburse@fastmail.fm> - 2015-12-30 15:54 +0100
  Re: Grundsätzliche Frage zu Interfaces Marcel Mueller <news.5.maazl@spamgourmet.org> - 2015-12-30 19:37 +0100
  Re: Grundsätzliche Frage zu Interfaces Michael Paap <feunews@mpaap.de> - 2015-12-30 20:20 +0100
    Re: Grundsätzliche Frage zu Interfaces "Ralf S. Hellersen" <schneiderxr@arcor.de> - 2015-12-30 23:09 +0000
      Re: Grundsätzliche Frage zu Interfaces Michael Paap <feunews@mpaap.de> - 2015-12-31 02:35 +0100
      Re: Grundsätzliche Frage zu Interfaces "Ralf S. Hellersen" <schneiderxr@arcor.de> - 2015-12-31 12:46 +0000
        Re: Grundsätzliche Frage zu Interfaces "M. Strobel" <strobel@example.com> - 2016-01-04 22:58 +0100
          Re: Grundsätzliche Frage zu Interfaces Michael Paap <feunews@mpaap.de> - 2016-01-04 23:40 +0100
            Re: Grundsätzliche Frage zu Interfaces Patrick Roemer <sangamon@netcologne.de> - 2016-01-05 00:13 +0100
              Re: Grundsätzliche Frage zu Interfaces Michael Paap <feunews@mpaap.de> - 2016-01-05 01:40 +0100
                Re: Grundsätzliche Frage zu Interfaces Thomas Grund <tom.grund@gmx.de> - 2016-01-05 08:54 +0100
                Re: Grundsätzliche Frage zu Interfaces Florian Weimer <fw@deneb.enyo.de> - 2016-01-07 21:31 +0100
                Re: Grundsätzliche Frage zu Interfaces Thomas Grund <tom.grund@gmx.de> - 2016-01-08 06:56 +0100
                Re: Grundsätzliche Frage zu Interfaces Florian Weimer <fw@deneb.enyo.de> - 2016-03-28 20:23 +0200
                Re: Grundsätzliche Frage zu Interfaces Lothar Kimmeringer <news200709@kimmeringer.de> - 2016-01-08 19:13 +0100
              Re: Grundsätzliche Frage zu Interfaces Patrick Roemer <sangamon@netcologne.de> - 2016-01-05 02:35 +0100
              Re: Grundsätzliche Frage zu Interfaces Michael Paap <feunews@mpaap.de> - 2016-01-05 09:06 +0100
                Re: Grundsätzliche Frage zu Interfaces Patrick Roemer <sangamon@netcologne.de> - 2016-01-05 14:38 +0100
                Re: Grundsätzliche Frage zu Interfaces Patrick Roemer <sangamon@netcologne.de> - 2016-01-05 17:06 +0100
                Re: Grundsätzliche Frage zu Interfaces Florian Weimer <fw@deneb.enyo.de> - 2016-01-07 21:43 +0100
                Re: Grundsätzliche Frage zu Interfaces Patrick Roemer <sangamon@netcologne.de> - 2016-01-08 17:15 +0100
            Re: Grundsätzliche Frage zu Interfaces "Ralf S. Hellersen" <schneiderxr@arcor.de> - 2016-01-09 20:45 +0000
  Re: Grundsätzliche Frage zu Interfaces Lothar Kimmeringer <news200709@kimmeringer.de> - 2015-12-30 20:50 +0100

csiph-web