Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #12883
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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