Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Interface vs. Object ??

  1. #1
    Registriert seit
    02.10.2010
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo miteinander!!
    Ich habe folgendes unter Codesys programmiert.
    Ich verstehe anscheind noch nicht so ganz den Vorteil eines Interfaces.
    Könnt Ihr mir vielleicht die beiden unterschiedlichen Ergebnisse erklären?
    Hoffe der Code ist verständlich.
    Vielen Dank...

    PROGRAM Main1
    VAR
    x:ARRAY [1..5]OF Beispiel;
    y1:Beispiel;
    y2:Beispiel_1;
    Result:STRING:='00';
    END_VAR

    y1:=y2;
    x[1]:=y1;
    Result:=x[1].example(); --> 11
    _____________________________

    PROGRAM Main2
    VAR
    x:ARRAY [1..5]OF IBeispiel;
    y1:IBeispiel;
    y2:Beispiel_1;
    Result:STRING:='00';
    END_VAR

    y1:=y2;
    x[1]:=y1;
    Result:=x[1].example(); --> 22


    _____________________________________

    Aufbau bei für beide Programme gleich:

    IBeispiel (Interface) mit Mehtode example

    Beispiel (FB) Implements IBeispiel
    mit Methode example:STRING
    example:='11';

    Beispiel_1 (FB) Extends Beispiel
    mit Methode example:STRING
    example:='22';
    Zitieren Zitieren Interface vs. Object ??  

  2. #2
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    Im ersten Fall hast du ein Array von Instanzen angelegt und dann eine Zuweisung von einer Instanz auf eine andere unternommen.

    y1:=y2; // y1 ist eine gültige Instanz du kopierst hier nur die Werte von y2 nach y1 (eine inhaltliche Kopie)
    x[1]:=y1; // hier ebenfalls: x[1] ist eine gültige Instanz, du kopierst nochmal die Wert aus y1 nach x[1]
    Result:=x[1].example(); --> 11 // diesen Aufruf hättest du auch ohne die vorherige kopiererei machen können

    Im zweiten Fall hast du ein Array von Referenzen auf Instanzen (über die Interfaces) angelegt und dann dieser Referenz einen echten Wert zugewiesen.
    y1:=y2; // y1 bekommt hier nur eine Referenz auf die Instanz von y2
    x[1]:=y1; // hier kopierst du nochmal diese Referenz nach x[1]
    Result:=x[1].example(); --> 22 // hier rufst du über die Referenz eigentlich die Instanz von y2 auf. Ohne vorhergehende Zuweisung auf eine Referenz erhältst du zur Laufzeit eine Exception.

    Wenn du eine Variable vom Typ Interface deklarierst, dann kannst du damit erst was damit anfangen wenn du dieser Variable eine konkrete Instanz zuweist. Der "Gag" hierbei ist, dass du eine beliebige Instanz eines beliebigen FB's verwenden kannst, solange er das Interface implementiert.
    Das klassische Beispiel ist, du hast ein Interface für eine Achse "IAxis" und kannst über dieses Interface eine Reihe von Positionierbefehlen aufrufen egal was für eine implementierung in Wirklichkeit hinter der Achse steht.

  3. #3
    Plea ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.10.2010
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank für die schnelle Antwort!!!

    Mit Exception ist dann gemeint, das ich nur zur Laufzeit eine Erkennung und die anschließende Signalisierung eines Fehlerzustands erhalte und beim Übersetzen über den Debugger noch nicht??

  4. #4
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    die schnelle Antwort ist Zufall, ich schau unregelmässig ins Forum und suche nach "CoDeSys"...

    Aber genau, um eine Exception zu vermeiden, solltest du ein Interface immer erst auf <> 0 testen bevor du darauf zugreifst.

    Bernhard

  5. #5
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Frage

    Zitat Zitat von Werner29 Beitrag anzeigen
    ...
    Wenn du eine Variable vom Typ Interface deklarierst, dann kannst du damit erst was damit anfangen wenn du dieser Variable eine konkrete Instanz zuweist. Der "Gag" hierbei ist, dass du eine beliebige Instanz eines beliebigen FB's verwenden kannst, solange er das Interface implementiert.
    Muss man dazu einen Zuweisungs Operator definieren oder ist das implizit mit der Implementation des Interfaces geschehen?
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Verständnis  

  6. #6
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    Das passiert implizit. Also jeder Interface-Referenz kann jede Instanz eines FB's der dieses Interface implementiert zugewiesen werden. Das geht auch über Vererbungshierarchien hinweg.
    Der Compiler testet, dass das Interface korrekt implementiert wurde.

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Schön schön, toll, was nun so alles geht, ich seh schon die zerdemmelten Achsen und Anlagenteile in den Schrott wandern1
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #8
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Keiner wird gezwungen. Und wer bisher schon mit Pointer gearbeitet hat, kennt die Probleme und da bieten Interfaces eigentlich mehr Sicherheit.

Ähnliche Themen

  1. PLCSIM COM-Object
    Von towsim im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 17.10.2011, 19:17
  2. InTouch 10.1 Zugriff auf Object?
    Von BPlagens im Forum HMI
    Antworten: 0
    Letzter Beitrag: 03.11.2010, 17:31
  3. Antworten: 0
    Letzter Beitrag: 02.04.2008, 15:04
  4. Auf ActiveX Object zugreifen
    Von david.ka im Forum HMI
    Antworten: 1
    Letzter Beitrag: 20.04.2006, 17:37
  5. OPC, VB.NET - Welches Object bzw. Dll?? BSEND, von SPS empfa
    Von Anonymous im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 04.11.2005, 11:21

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •