WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 22.08.2003, 17:03   #1
moorhahn
Veteran
 
Registriert seit: 26.12.2000
Beiträge: 489


moorhahn eine Nachricht über ICQ schicken
Standard [Java] Interface - wozu?

wozu sind interfaces in java? die theoretische beschreibung is schon klar, in den meisten tutorials oder büchern steht in etwa, dass interfaces dazu da sind, um etwas ähnliches wie die merhfachvererbung (die es in java ja nicht gibt) in java zu verfügung zu haben. denn ohne merhfachvererbung müsste man ja in manchen fällen gleichen code doppelt schreiben, und das würde quasi gegen eine konvention verstoßen und wäre ja auch völlig dämlich, man müsste ja dann bei einer änderung jede methode ändern.
aber wie soll dieses problem durch interfaces beseitigt werden (was ja laut büchern und tutorials der sinn von interfaces wäre), wenn man die methoden sowieso in jeder klasse wieder neu implementieren muss.

von http://java.programmersbase.net/ folgendes beispiel:

Code:
interface MyInterface1
{	
  public void print1();
}
interface MyInterface2 extends MyInterface1
{	
  public void print2();
}

class MySuperClass
{		
  protected String s = "ProgrammersBase.NET";
}

class MySubClass extends MySuperClass
implements MyInterface2
{
  public void print1()
  {
    System.out.println(s);
  }
  public void print2()
  {
    System.out.println("ProgrammersBase.DE");
  }
}

public class MyClass
{
  public static void main(String[] args)
  {  	
    MySubClass object = new MySubClass();
    
    object.print1();
    object.print2();
  }
}

dieses beispiel könnte man genauso gut ohne interfaces schreiben.

wozu also dann diese interfaces?
____________________________________
Wenn Null ganz besonders gross ist, ist es schon fast so viel wie ein kleines bisschen Eins... - (Kommentar zum Thema Rundungsfehler bei Fliesskommazahlen).
moorhahn ist offline   Mit Zitat antworten
Alt 22.08.2003, 17:08   #2
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard Re: [Java] Interface - wozu?

Zitat:
Original geschrieben von moorhahn
dieses beispiel könnte man genauso gut ohne interfaces schreiben.

wozu also dann diese interfaces?
Für mich sind Interfaces eine Art Vertrag, dass ein Klasse eine gewisse Funktionalität implementiert.

~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 22.08.2003, 17:16   #3
moorhahn
Veteran
 
Registriert seit: 26.12.2000
Beiträge: 489


moorhahn eine Nachricht über ICQ schicken
Standard

weiß ned wirklich was du damit meinst, hört sich aber in etwa so an, als seien interfaces programmiertechnisch eigentlich sinnlos.
____________________________________
Wenn Null ganz besonders gross ist, ist es schon fast so viel wie ein kleines bisschen Eins... - (Kommentar zum Thema Rundungsfehler bei Fliesskommazahlen).
moorhahn ist offline   Mit Zitat antworten
Alt 22.08.2003, 19:34   #4
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

Mit einem Interface definierst du eine Art Grundfunktionalität die eine Klasse zur Verfügung stellen muss, wenn sie das Interface implementieren will. Auf diese Art könntest du zum Beispiel ein Frontend für ein Programm schreiben ohne selbst wirklich auf die Hintergrunddetails einzugehen. Das Implementieren dieses Teils überlässt du einem Kollegen der eine Klasse schreibt, die das von dir definierte Interface implementiert. Nachdem dein Programm dann ein Jahr lang gelaufen ist kommst du dahinter, dass dein Kollege ein sogenannter Vollnubbler war und das Programm Fehler aufweist. Als Ausweg schreibst du einfach wieder eine neue Klasse die dein Interface implementiert und hängst sie hinter dein Frontend. Problem gelöst.
Man muss sich immer vor Augen halten, dass der Einzelkämpfer-Programmierer nicht unbedingt die Regel ist. In einem Team machen viele Sachen Sinn die für einen allein absolut sinnlos scheinen.


Seit meiner Ausbildung muss ich mich leider grösstenteils als Wald- und Wiesen-Programmierer betätigen und habe nur selten Gelegenheit mit anderen Leuten zu arbeiten die Ahnung vom Programmieren haben. Aus diesem Grund würde ich auf die Korrektheit meiner Erklärung kein Geld verwetten aber ich bin mir recht sicher, dass ich den Kern so ziemlich getroffen habe.
Seidl ist offline   Mit Zitat antworten
Alt 22.08.2003, 19:49   #5
K@sperl
bitte Mailadresse prüfen!
 
Registriert seit: 03.04.2001
Beiträge: 2.387


Standard

Ein Interface zeigt nichts anderes als die Methoder einer Klasse, sehe ich das richtig?
K@sperl ist offline   Mit Zitat antworten
Alt 22.08.2003, 19:51   #6
kju
Senior Member
 
Registriert seit: 28.05.2002
Alter: 47
Beiträge: 141


kju eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von moorhahn
weiß ned wirklich was du damit meinst, hört sich aber in etwa so an, als seien interfaces programmiertechnisch eigentlich sinnlos.
nein im gegenteil interfaces werden in java sehr häufig verwendet und spielen daher eine wichtige rolle! z.b.: beim Eventhandling (EventListener, ActionListener, KeyListener,
MouseListener, MouseMotionListener, usw.) oder Objektserialisierung (Serializable) ...
____________________________________
There are two rules for ultimate success in life.
1. Never tell everything you know.
kju ist offline   Mit Zitat antworten
Alt 22.08.2003, 20:45   #7
moorhahn
Veteran
 
Registriert seit: 26.12.2000
Beiträge: 489


moorhahn eine Nachricht über ICQ schicken
Standard

ja, klar sie sind anscheinend wichtig, aber wie bei obigem beispiel ersichtlich, könnte mans genausogut ohne interface machen.

@seidl: ein interface hat also nix damit zu tun, die in java nicht mögliche mehrfachvererbung zu ersetzen?
____________________________________
Wenn Null ganz besonders gross ist, ist es schon fast so viel wie ein kleines bisschen Eins... - (Kommentar zum Thema Rundungsfehler bei Fliesskommazahlen).
moorhahn ist offline   Mit Zitat antworten
Alt 22.08.2003, 21:34   #8
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

Stell dir vor du schreibst ein Programm.

Stell dir vor andere sollen dafür PlugIns schreiben können.

Nun stellst du ihnen ein Interface zur verfügung, das die anderen implementieren müssen.

Code:
public interface IPlugin {
    PluginStatus status {
        get {}
    }
    void start();
    void stop();
}
Das ist zwar C#, kann aber nicht soviel Unterschied zu Java sein.

Damit kannst du überprüfen, ob ein Plugin das Interface implementiert und die entsprechenden Methoden/Eigenschaften bietet.

~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 22.08.2003, 23:27   #9
Tarjan
Quantensingularität
 
Registriert seit: 28.09.2000
Alter: 55
Beiträge: 8.336


Tarjan eine Nachricht über ICQ schicken
Standard

Also die Erklärung von Seidl ist schon sehr gut. Nur etwas auf unterschiedliche Programmierer ausgerichtet .

Interface ist eben eine Schnittstelle. Die tatsächliche Implementierung erfolgt dann in den Klassen die die Schnitstelle implementieren. Wird mit der Schnittstelle gearbeitet, so interessiert die tasächliche Implementierung nicht, nur das Interface.

Beispiel aus meinen Projekt: Alle Datenbankzugriffe sind in Interfaces gekapselt. Die stellen die Methoden und werden von Factories zurückgeliefert. Die tasächliche Implementierung der Funktionalität, in meinen Beispiel für die DB2 Datenbank sind in Klassen, die die Interfaces implementieren. Soll das ganze jetzt zB. mit Oracle auch funktionieren, so werden einfach neue Klassen geschrieben, die eben die Oraclefunktionalität implementieren. Die Factories liefern dann diese zurück. Der Programmierer der die Datenbankinterfaces verwendet merkt davon überhaupt nichts, da er ja mit den Interfaces arbeitet und ihn die Implementierung für welche Datenbank auch immer nicht interessiert.

Das lässt sich natürlich auf jeden Bereich anwenden.
____________________________________
Was ist klein, grün und dreieckig?
Ein kleines grünes Dreieck!


Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg!
Tarjan ist offline   Mit Zitat antworten
Alt 23.08.2003, 05:15   #10
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

Anderes beispiel:

du hast eine ArrayList, die du durchlaufen willst.

Code:
ArrayList al = new ArrayList();
// fill arraylist with data
Iterator it = al.iterator();
was du jetzt hast ist ein iterator. und wenn du dir die api-doc ansiehst kommst du drauf dass Iterator ein interface ist.

was heißt das jetzt für dich?

du weißt dass du eine instanz einer bestimmten klasse bekommen hast (weil instanzen von interfaces gibt es nicht).
allerdings weißt du nicht was für eine klasse - aber, und das ist das entscheidende für dich - es kann dir wurscht sein weil du weißt, dass diese klasse alle methoden des interfaces Iterator implementiert hat. wie - das kann dir auch wieder wurscht sein.

wenn du iterator() an einer anderen collection aufrufst, kriegst du eine instanz einer womöglich ganz anderen klasse zurück. aber du kannst mit den in Iterator definierten methoden wieder durch deine collection laufen.

genau darum gehts - ein anderer programmiert was für dich, wie er das macht interessiert dich nicht, hauptsache er gibt dir eine standardisierte schnittstelle über die du zugreifen kannst.
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees.
Who-T ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:42 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag