Orlok: FromData toString und Kontextwechsel

Beitrag lesen

Hallo pl

Wer schon einmal OO entwickelt hat, wird jedoch wissen, daß es public und private Methods gibt.

Wer schon in mehr als einer Sprache OO entwickelt hat, wird wahrscheinlich wissen, dass nicht jede objektorientierte Programmiersprache auch Mechanismen für die Kapselung von Daten bereitstellt. In ECMAScript gibt es bis dato keine Möglichkeit, den Zugriff auf Eigenschaften und Methoden durch entsprechende Syntax zu beschränken.

Gleiches gilt im Übrigen für Python. Auch hier gilt, dass Eigenschaften und Methoden prinzipiell von außerhalb angesprochen, beziehungsweise aufgerufen werden können. Eine Abgrenzung zwischen öffentlicher Schnittstelle und interner Implementierung erfolgt hier im Wesentlichen über Namenskonventionen. Soll eine Eigenschaft oder Methode privat sein, wird ihrem Namen ein Unterstrich vorangestellt.

class Container:

    def __init__(self):
        self.__data = []

    def _internal_method(self):
        pass


Container().__data.append('value')  # AttributeError

Python besitzt allerdings einen Mechanismus namens Name Mangling. Wird ein Eigenschafts- oder Methodenname wie in dem Beispiel oben mit zwei Unterstrichen geprefixt, statt bloß mit einem, dann kann die Eigenschaft oder Methode von außerhalb des Objektes nur durch explizite Angabe des Klassennamens referenziert werden.

Container()._Container__data.append('value')

Darüber hinaus gibt es in vielen Programmiersprachen Möglichkeiten, Funktionen die nicht Teil der öffentlichen Schnittstelle sind, in Namensräumen zu kapseln. Das kann ein Modul sein, das standardmäßig nur die Klasse selbst exportiert, nicht jedoch die im globalen Gültigkeitsbereich definierten internen Funktionen, oder ein Funktionsabschluss, wie im folgenden ECMAScript-Beispiel.

const Stack = function() {
    const data = [];

    // push and pop can access data via closure

    return class Stack {

        push(value) {
            return data.push(value), this;
        }

        pop() {
            return data.pop();
        }

    };

}();


new Stack().push('value').pop();  // 'value'

Hier wird ein unmittelbar aufgerufener Funktionsausdruck dazu genutzt, das in der Konstante hinterlegte Array vor unbefugten Zugriffen zu schützen. Die Methoden push und pop können auch nach der Abarbeitung der äußeren anonymen Funktion über die Scope Chain auf das Array zugreifen, Code von außerhalb jedoch nicht.

Gruß,

Orlok

--
„Dance like it hurts.
Make love like you need money.
Work when people are watching.“ — Dogbert
0 184

Braucht noch wer jQuery?

Robert B.
  • javascript
  • jquery
  1. 1
    Rolf B
  2. 0
    Mitleser
    1. 0
      Robert B.
  3. 2
    klawischnigg
    1. 0
      Robert B.
    2. 1
      Henry
      1. 2
        Matthias Apsel
        • javascript
        1. 0
          Henry
          1. 1
            Robert B.
            1. 2
              JürgenB
      2. 0
        beatovich
        1. 1
          Henry
          • javascript
          • jquery
          • meinung
        2. 0
          Robert B.
          • javascript
          • jquery
          • menschelei
    3. 2
      pl
      1. 1
        klawischnigg
        1. 0
          pl
        2. 0
          marctrix
  4. 1
    JürgenB
  5. 7

    Ein gutes Wort für jQuery

    1unitedpower
    1. 0
      Rolf B
      1. 1
        1unitedpower
  6. 0
    pl
    1. 0
      dedlfix
      1. 0
        Christian Kruse
        1. 0
          dedlfix
          1. 0
            Christian Kruse
            1. 0
              dedlfix
              1. 0
                pl
                1. 0
                  dedlfix
                  1. 0
                    pl
                    1. 0
                      dedlfix
                      1. 0
                        pl
                        1. 0
                          Christian Kruse
                        2. 0
                          MudGuard
                        3. 0
                          dedlfix
                          1. -2
                            pl
                          2. 0
                            pl
                            1. 0
                              Robert B.
                              • menschelei
                              1. -1
                                pl
                                1. 0
                                  Matthias Apsel
                                2. 0
                                  Robert B.
                                  1. 0
                                    pl
                                    1. 4
                                      Christian Kruse
                                    2. 0
                                      Robert B.
                                      1. -1
                                        pl
                                        1. 0
                                          Matthias Apsel
                                        2. 0
                                          Robert B.
                                          1. 0
                                            Matthias Apsel
                                          2. 0
                                            pl
                                            1. 0
                                              Matthias Apsel
                                            2. 0
                                              Robert B.
                                              1. 0
                                                pl
                                            3. 1
                                              dedlfix
                                              1. 0
                                                pl
                                                1. 2
                                                  dedlfix
                                                  1. 0
                                                    pl
                                                    1. 1
                                                      Matthias Apsel
                                                      1. -1
                                                        pl
                            2. 0
                              Matthias Apsel
                              • meinung
                            3. 2
                              dedlfix
                        4. 0
                          JürgenB
                          1. 0
                            pl
                            1. 0
                              JürgenB
                              1. 0
                                pl
                                1. 1
                                  JürgenB
                                  1. 0

                                    jquery vs modern JS

                                    pl
                                    1. 2
                                      JürgenB
                                      1. 0
                                        pl
                        5. 0
                          Robert B.
                          • browser
                          • javascript
                          • jquery
                          1. 0
                            beatovich
                            1. 0
                              Robert B.
                              1. 0
                                beatovich
                                1. 1
                                  dedlfix
                                  1. 0
                                    beatovich
                                    1. 0
                                      dedlfix
                      2. 0
                        Matthias Apsel
                        1. 0
                          dedlfix
                          1. 0
                            Matthias Apsel
                            1. 0
                              dedlfix
          2. 0
            pl
      2. 0
        pl
        1. 0
          dedlfix
          1. 0
            pl
            1. 1
              dedlfix
              1. 0

                FromData toString und Kontextwechsel

                pl
                1. 4
                  dedlfix
                  1. 0
                    pl
                    1. 2
                      dedlfix
                      1. -1
                        pl
                        1. 1
                          dedlfix
                          1. 0
                            pl
                    2. 0

                      Typisch für OOP Overload

                      pl
                      1. 0
                        pl
                        • javascript
                        • jquery
                        • perl
                2. 2
                  Orlok
                  • programmiertechnik
                  1. 0
                    pl
                    1. 0
                      Matthias Apsel
                  2. 0
                    Robert B.
                    • javascript
                    • programmiertechnik
                    • python
                    1. 0
                      dedlfix
                      1. 0
                        Robert B.
                        1. 1
                          Christian Kruse
                        2. 1
                          dedlfix
                          1. 0
                            Robert B.
                            • menschelei
                            1. 0
                              dedlfix
                              1. 0
                                Robert B.
                                • menschelei
                                • python
                                1. 0
                                  dedlfix
                          2. 0
                            Robert B.
                            • c++
                            • javascript
                            • programmiertechnik
                            1. 2
                              Orlok
                          3. 0
                            Klaus Mennward
                            1. 0
                              dedlfix
                              1. 0
                                dedlfix
                            2. 0
                              Robert B.
                              • programmiertechnik
                              • python
                              1. 1
                                Rolf B
    2. 0
      pl
      1. 2
        dedlfix
        1. 0
          pl
          1. 4
            dedlfix
            1. 0
              pl
              1. 0
                dedlfix
                1. -1
                  pl
                  1. 0
                    dedlfix
                    1. 0
                      pl
                      1. 0
                        dedlfix
                        1. -1
                          pl
                          1. 3
                            Christian Kruse
                          2. 6
                            dedlfix
                            1. -3
                              pl
                              1. 4
                                dedlfix
                                1. -2
                                  pl
                                  1. 0
                                    dedlfix
                                    1. -1
                                      pl
                                      1. 2
                                        dedlfix
                                        1. 0
                                          pl
                                          1. 1
                                            Robert B.
                                            • menschelei
                                            • zu diesem forum
                                            1. 0
                                              pl
                                          2. 2
                                            dedlfix
                                            1. -2
                                              pl
                                              1. 2
                                                dedlfix
                                                1. -2
                                                  pl
                                                  1. 2
                                                    dedlfix
                                                    1. 1
                                                      Rolf B
                                                      1. 0
                                                        Matthias Apsel
                                                        1. 0
                                                          Christian Kruse
                                                          1. 0
                                                            Matthias Apsel
                                                            • menschelei
                                                      2. 0
                                                        pl
                                                        1. 3
                                                          dedlfix
                                                    2. 0

                                                      Framework und serialize

                                                      pl
                                                      1. 2
                                                        dedlfix
                                                        1. -1

                                                          Schlechter Programmierstil

                                                          pl
                                                  2. 3
                                                    Christian Kruse
                                            2. -1

                                              Datenstrukturen aus Formulareingaben

                                              pl
                                              1. 2
                                                dedlfix
                                                1. 0
                                                  pl
                                                  1. 0
                                                    dedlfix
                                                    1. -1
                                                      pl
                                                      1. 1
                                                        dedlfix
                                                        1. -2
                                                          pl
                                                          1. 0
                                                            beatovich
                                                            1. -1
                                                              pl
                                                          2. 1
                                                            Mitleser
                                                            1. 1
                                                              JürgenB
                                                              1. 0
                                                                pl
                                                            2. -1
                                                              pl
                                                              1. 2
                                                                Matthias Apsel
                                                                • meinung
                                                                • sonstiges
                                                                1. 0
                                                                  pl
                                                                  1. 0
                                                                    Matthias Apsel
                                                                    1. -1
                                                                      pl
                                                                    2. -1
                                                                      pl
                                                                      1. 0
                                                                        Matthias Apsel
                                                                        1. -1
                                                                          pl
                                                                          1. 1
                                                                            Christian Kruse
                                                          3. 3
                                                            dedlfix
                                                            1. -1
                                                              pl
                                                              1. 1
                                                                dedlfix
                                                                1. 0
                                                                  pl
                                                                  1. 1
                                                                    dedlfix
                                                                    1. -1
                                                                      pl
                                                          4. 1
                                                            Robert B.
                                                            • menschelei
                                                        2. 0
                                                          Matthias Apsel
                                                          • menschelei
                                              2. 0
                                                pl
                                              3. 0
                                                pl
  7. 1
    klawischnigg
    1. 0
      Robert B.
  8. 1
    marctrix
    • css
    • sass