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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Struktur als Propertie

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Der Aufrufer der GET-Methode hält ja als Ergebnis eine Referenz auf den internen Wert, und mit dieser Referenz kann er dann alles machen, insbesondere auch schreiben.
    Ein schreiben per SET auf einen Referenztyp würde bedeuten, die Referenz zu überschreiben (also würde die Referenz auf ein anderes Datum zeigen), das will man aber nicht.
    Bernhard Werner
    3S-Smart Software Solutions (CODESYS)

  2. #12
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also wird die get-Methode auch aufgerufen, wenn die Propertie auf der linken Seite des := steht? Ich dachte dann wirkt immer die Set-Methode. ???

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

    Standard

    Zitat Zitat von SY50 Beitrag anzeigen
    Also wird die get-Methode auch aufgerufen, wenn die Propertie auf der linken Seite des := steht? Ich dachte dann wirkt immer die Set-Methode. ???
    Ich verstehe die Aussage so:

    Um den Wert zuweisen zu können, braucht man die Adresse, an die der Wert gepackt wird.

    Das liefert die GET Funktionalität, die liefert die Referenz. Auf diese Referenz wird dann der Wert geschrieben.

    Diese ganze Zeigerei ist in ST sehr unübersichtlich, Pascal wollte im Gegensatz zu C möglichst ohne Zeiger auskommen, später hat man dann gemerkt, dass man doch so etwas gerne hätte und die Semantiker mussten gewaltige Klimmzüge machen.

    Es ist schade, dass man sich nicht endlich einmal mit der neuen ST Spracherweiterung an aktuelle Entwicklungen in der Notation angepasst hat.

    Was dem FB fehlt aus meiner Sicht, ist der Schritt zum echten Objekt mit Constructor und mit gettern/settern und Methoden. Wenn man dann noch von C# das Referenz Modell incl. Notation übernehmen würde, könnte man die Pointer abschaffen und hätte eine inhärent sichere und effektive Sprachimplementation gewonnen.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Wie ich das verstehe  

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

    Standard

    RobiHerb hat recht, aber ich sags nochmal in meinen Worten:

    Wir haben es ja hier mit einem Referenz-Zugriff zu tun, intern entspricht das folgendem Code mit Pointer:

    instanz.pstruct^.a := instanz.pstruct^.a + 1;

    der Pointer selbst wird hierbei ja auch nicht geschrieben, der ist auf der linken und der rechten Seite der Zuweisung der gleiche,
    und verändert sich durch die Zuweisung nicht. Es wird nur die Variable a geschrieben.
    Wenn das Property einen Pointer zurückliefern würde, wäre die Sache vermutlich klar:

    So würde das SET-Property aufgerufen:
    inst.pstruct := ADR(irgendwas);
    In dem Fall könnte der Pointer auch NULL sein, der alte Wert interessiert nicht.

    So wird aber das GET-Property aufgerufen:
    inst.pstruct^ := irgendwas;
    In dem Fall würde es zu einer Exception kommen, wenn der Pointer NULL ist.

    Ich gebe gern zu dass das ganze verwirrend ist, aber wie gesagt, ich kenne solchen Code vor allem aus Bibliotheken.
    Die Komplexität liegt in der richtigen Definition des Property. Der, der das Property benutzt muss sich dann
    nicht mehr darum kümmern, ob er hier direkt einen Wert bekommt, oder eine Referenz, oder ob der SET oder GET-Accessor
    aufgerufen wird.
    Bernhard Werner
    3S-Smart Software Solutions (CODESYS)

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

    Standard

    Zitat Zitat von RobiHerb Beitrag anzeigen
    Es ist schade, dass man sich nicht endlich einmal mit der neuen ST Spracherweiterung an aktuelle Entwicklungen in der Notation angepasst hat.

    Was dem FB fehlt aus meiner Sicht, ist der Schritt zum echten Objekt mit Constructor und mit gettern/settern und Methoden. Wenn man dann noch von C# das Referenz Modell incl. Notation übernehmen würde, könnte man die Pointer abschaffen und hätte eine inhärent sichere und effektive Sprachimplementation gewonnen.
    Sprichst du von CODESYS V3 oder von IEC 61131-3 3rd Edition?
    Also ein Konstruktor ist schon praktisch, haben wir im Moment nur eingeschränkt (FB_Init), in der 3rd Edition steht so was nicht, wird aber auch nicht ausgeschlossen.
    Das C# Referenzmodell lebt halt auch vom garbage collector, und dieser ist auf einer SPS mit Echtzeitanforderungen nur schwer zu implementieren.
    Die statisch allozierten FBs der 61131-3 haben den Vorteil, das nie die Referenz auf ein Objekt verloren gehen kann, und dass der Speicher zur Laufzeit
    nie ausgehen kann. Man muss einen Kompromiss finden.

    Nachsatz: eine FB_Instanz ist auch nie NULL.
    Bernhard Werner
    3S-Smart Software Solutions (CODESYS)

  6. #16
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe ein Problem mit den Namen der Properties.
    Ich habe eine Variable namens Direction. Habe auch eine Property Namens Direction erstellt.
    Nun möchte ich im Getter diese zuweisen. Wenn ich dort nun Dircetion eingebe, dann bekomme ich in der Autovervollständigung nur die Vriable angezeigt. nicht die Property.
    Gibt es da ne Möglichkeit diese auch dort hin zu bekommen? Oder muss die Property anderst heisen? Das wäre natürlich etwas blöd

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

    Standard

    Beide sind lokal bekannt? Dann gibt es ja auch eine Verschattungsregel, vermutlich verschattet die Variable das Property und deshalb kann auch nur eines von beiden verwendet werden.
    Also genauso wie man nicht zwei lokale Variablen gleich nennen kann, kann man auch nicht ein Property so nennen wie eine lokale Variable.
    Beide teilen sich einen Namensraum.
    Bernhard Werner
    3S-Smart Software Solutions (CODESYS)

  8. #18
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Das ist natürlich schade, dann müsste ich die kompletten Variablen in eine unterstruktur packen, oder wie? ode reinfach nen Buchstaben anhängen?

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich persönlich beginne meine lokalen Variablen immer mit _var, dann erkenne ich das auch auf den ersten Blick.
    In den meisten Firmen gibt es ja spezielle Richtlinien zur Namensgebung.
    Bernhard Werner
    3S-Smart Software Solutions (CODESYS)

  10. Folgender Benutzer sagt Danke zu Werner29 für den nützlichen Beitrag:

    SY50 (13.03.2013)

Ähnliche Themen

  1. Struktur in Array
    Von ipacsre im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 19.05.2010, 20:08
  2. Struktur als Übergabeparameter bei Aktionsaufrufen
    Von vpcoder im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 18.06.2009, 08:19
  3. Antworten: 12
    Letzter Beitrag: 22.01.2009, 17:30
  4. Schrittketten Struktur
    Von MatMer im Forum Programmierstrategien
    Antworten: 25
    Letzter Beitrag: 18.09.2007, 15:13
  5. DB-struktur
    Von Pimsti im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.06.2006, 12:48

Lesezeichen

Berechtigungen

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