Antje Hofmann: Was ist ein Objekt?

Hallo Forumianer,

was mich schon lange interessiert ist die Frage:

Wie definiert man ein Objekt konkret? Die meisten Beschreibungen beschränken sich auf Aufzählungen der Objekte.
Also was macht ein Objekt zum Objekt?
Sind es Eigenschaften, Methoden oder.....?
Warum erzeugt eval() ein Objekt?

Fragen die ich mir selbst nur intuitiv beantworten kann. Vielleicht wissen andere besser darüber Bescheid.

Viele Grüße

Antje

  1. Hallo!

    Hallo Forumianer,

    was mich schon lange interessiert ist die Frage:

    Wie definiert man ein Objekt konkret? Die meisten Beschreibungen beschränken sich auf Aufzählungen der Objekte.

    Also zunächst mal ganz abgehoben von document.all und diesen "praktischen" Dingen <g>... Ein "Objekt" ist ursprünglich nichts anderes als ein Block mit Daten, der tatsächlich Speicher belegt - also nicht nur ideell vorhanden  sondern tatsächlich z.B. im Computer oder auf der Festplatte ab Speicheradresse <nnnn> abgelegt ist. Demgegenüber steht der "Typ" des Objektes - sozusagen die Beschreibung dessen, was in einem Objekt drinstehen kann. Beispiel: Wenn in einem Programm

    int i=17;

    steht, dann ist der *Datentyp* "integer" - also eine Zahl ohne Nachkommastellen. Das eigentliche Objekt ist dagegen die Zahl "17", die irgendwo als Binärzahl im Speicher abgelegt wurde. Der Datentyp wird in Programmiersprachen wie C++ oder Java auch 'Klasse' genannt.

    Objekte können natürlich auch einen komplizierteren Datentyp haben als eine einfache Zahl - z.B. Strings, Arrays, Referenzen auf andere Objekte und/oder Kombinationen aus mehreren dieser "einfachen" Datentypen. Ein gutes Indiz dafür, daß es sich auch wirklich um ein 'Objekt' handelt, ist dabei immer, daß viele davon irgendwann zu Speicherknappheit führen.

    Wahrscheinlich willst Du aber letzlich auch auf den Begriff 'objektorientierte Programmierung' (OOP) hinaus, in der diese einfache Definition eines Objekt-Typen auch noch um Methoden, Vererbungsmechanismen usw. erweitert wird. Eine Gegenüberstellung von OOP mit strukturaler Programmierung (SP) (auch prozedurale Programmierung genannt), wäre sicher mal interessant im Forum - aber... morgen ist auch noch ein Tag ;-)

    Viele Grüße

    Andreas

  2. Ein Versuch zu einer verständlichen (wenn wahrscheinlich auch nicht 100% korrekten Erklärung)

    Ein Objekt in einer Objektorientierten Programmierumgebung  sind irgendwelche Daten, denen Methoden und Eigenschaften zugeordnet werden. Eigenschaften sind Variablen, z.B. könnte ein Objekt "Window", dass ein Fenster auf dem Bildschirm darstellt eine Eigenschaft "Window.color" haben, wenn man diese verändert würde es seine Farbe wechseln. Methoden sind dem Objekt zugeordnete Funktionen, die nur auf dieses eine Objekt angewendet werden können, z.B. könnte es die Methode "Window.close()" geben, bei deren Aufruf das Fenster geschlossen wird.
    Durch diesen Objekltorientierten Softwareentwurf, ist es sehr einfach, ein PRogramm in Komponenten zu strukturieren, ein Objekt kann sehr komplex aufgebaut sein, aber über seine Methoden und Eigenschaften, eine einfaches Interface (Schnittstelle) bieten, dem Programmierer kann es egal sein, wie das Objekt genau funktioniert, er muss nur noch wissen welche Methoden und Eigenschaften es gibt, und was diese machen.
    Ein weiterer Vorteil ist, dass man Teile oder das ganze Objekt verändern oder auswechseln kann, es müssen nur die gleichen Methoden und Eigenschaften wieder zur Verfügung stehen (es könnte aber z.B zusätzliche neue Methoden geben).
    Durch Vererbung, lassen sich aus bestehenden Objekte neue ableiten, die weitere Eigenschaften besitzen, so könnte man vom  Objekt "Window" ein Objekt "Dialog" ableiten, das alle Eigenschaften und Methoden des "Window" Objektes hat, aber mit zusätzlichen Methoden und Eigenschaften zu einem Dialogfenster erweitert ist, dazu müsste man aber nur die neuen Meth. und Eig. schreiben, der Code wird also auch kompakter.

    Ss das reicht fürs erste

    GRUSS

    Marko

    1. Hallo!

      Methoden sind dem Objekt zugeordnete Funktionen, die nur auf dieses eine Objekt angewendet werden können,

      ... ist imho nicht ganz korrekt. Normalerweise ist die Einteilung (zumindest in z.B. C++) so, daß es zum einen Objekte - also Datenstrukturen im Speicher - und zum anderen "Klassen", also die jeweilige Beschreibung der Datenstrukturen gibt. Die Methoden gehören dabei tendenziell eher zur "Beschreibung". D.h. auch, wenn z.B. 10 Objekte der Klasse "Dialogfenster" geöffnet sind, existiert trotzdem nur eine compilierte Version von z.B. der Methode "Dialog::sumbit()" oder "Dialog::selfDestruct()" (oder was auch immer...) im Speicher, die sich alle "Dialog"-Objekte gemeinsam teilen. Die Methoden sind somit eher der "Klasse" des Objektes zuzuordnen.

      Bei Java hab ich dunkel in Erinnerung, daß es da auch Funktionen geben kann, die tatsächlich individuellen Objekten zugeordnet sind - weiß da jemand genaueres drüber?

      Viele Grüße

      Andreas

  3. Hallo Forumianer,

    was mich schon lange interessiert ist die Frage:

    Wie definiert man ein Objekt konkret? Die meisten Beschreibungen beschränken sich auf Aufzählungen der Objekte.
    Also was macht ein Objekt zum Objekt?
    Sind es Eigenschaften, Methoden oder.....?
    Warum erzeugt eval() ein Objekt?

    Fragen die ich mir selbst nur intuitiv beantworten kann. Vielleicht wissen andere besser darüber Bescheid.

    Viele Grüße

    Antje

    Hallo Forum

    Liebe Altruisten

    kann jemand der lieben Antje und auch mir mit einer ausführlicheren Ausführung helfen, oder uns gute (online) Literatur zum Thema empfehlen ?

    Ich vermisse schon lange eine Übersichtstafel der Objekte, und wie ich sie für welchen Browser ansprechen muss, damit sie das tun wofür sie da sind .

    mfg
           Hendrik

    1. Ich vermisse schon lange eine Übersichtstafel der Objekte, und wie ich sie für welchen Browser ansprechen muss, damit sie das tun wofür sie da sind .

      Bei selfHTML gibt es meinen Erinnerungen nach soetwas. Ich weiss die Seite nicht genau, aber ich glaub bei SelfHTMl => Javascript => Objektreferenz.
      Duerfte nicht schwer zu finden sein und bei den alten Sachen auch recht vollstaendig.

      Viele Gruesse, Thomas Hieck

      1. Ich vermisse schon lange eine Übersichtstafel der Objekte, und wie ich sie für welchen Browser ansprechen muss, damit sie das tun wofür sie da sind .

        Bei selfHTML gibt es meinen Erinnerungen nach soetwas. Ich weiss die Seite nicht genau, aber ich glaub bei SelfHTMl => Javascript => Objektreferenz.
        Duerfte nicht schwer zu finden sein und bei den alten Sachen auch recht vollstaendig.

        Viele Gruesse, Thomas Hieck

        Hi Thomas

        ja hat mir Stefan auch schon ans Herz gelegt...

        Nein warauf ich raus will ist ein ÜBERSICHTLICHER Baum, so zum ansehen und direkt wissen wie es syntaktisch korrekt aus fame xyz mit Browser B anzusprechen ist!
        (Wofür ein Objekt im groben da ist, ist ja schnell gelernt)

        hoffent nicht zu sehr zu nerven
                                                       hendrik

        1. Nein warauf ich raus will ist ein ÜBERSICHTLICHER Baum, so zum ansehen und direkt wissen wie es syntaktisch korrekt aus fame xyz mit Browser B anzusprechen ist!

          Klingt gut - mach doch einfach mal so einen Baum - lass ihn auf A0 drucken und ich verspreche Dir, dass ich mindestens 6 Stueck abnmehmen werde. Andere tun dies vielleicht auch. Und das war jetzt kein Scherz :-)

          Viele Gruesse, Thomas Hieck

  4. Ich hatte bei mir noch ein paar seiten zu dem thema rumflattern. Ich habe die mal ins netz gestellt da ich die original url nicht mehr habe....

    ( äh antje der ftp zugang funktonierte erst nich :- )

  5. Ich möchte mich bei allen bedanken für ihre Informationen und bei dir Timo noch für das Mail. Ich werde das alles gründlich durchdenken und gegebenenfalls weiterfragen. :-)

    Viele Grüße

    Antje

    1. Hallo Antje,

      Wie definiert man ein Objekt konkret?

      da tu' ich mich schwer. Es gibt zwar viele Erläuterungsversuche,
      aber, wie Du schon gesehen hast, landen die meist bei Aufzählungen.
      Das mag auch wieder durch den (unsäglichen) Versuch bedingt sein
      eine ganze Entwicklung und ihren Kontext in ein 'Single-Statement'
      zu pressen, nach dem Motto 'OOP ist Watsch-Platsch'.

      Ich hab' OOP zwar (noch) nicht verinnerlicht, wird wohl auch nichts
      mehr, eine klieine Gedankenkrücke hab' ich mir aber aus der Entwick-
      lung dahin abgeleitet:

      Früher hat man sich überlegt wie man eine Fragestellung angeht und
      in guter Mathematikermanier hat man dann einen Algorithmus entwickelt.
      Eine Programmiersprache der 60er war ALGOL = Algorithmic Language.
      Da man das auch als Beschreibung von Prozessen/Prozeduren auffassen
      konnte, auch prozedurales Programmieren. Daher dann auch der Ent-
      wicklungsschritt der Makros zu den Prozeduren und Funktionen.

      Die Projekte wurden größer und auch die Anzahl der an einem Projekt
      beteiligten Programmierer. Jeder hatte sein Inselchen zu bearbeiten
      und das Zusammenfügen ging natürlich zunehmend schlechter.
      Auch die kleinste Änderung an der Datenstuktur bedingte eine regel-
      mäßige Überarbeitung des Algorithmus und damit des gesamten Programms.

      Daraufhin kam die 'Datenkapselung' in Mode, ein Programmierer sollte
      nicht wissen bzw nicht wissen müssen was der andere tut.
      Nur seine Aufgabenstellung sollte, wie spezifiziert und in einer
      Schnittstellenbeschreibung definiert ablaufen. Das war immer noch
      rein algorythmisch gedacht.

      Wenn jetzt eine Änderung in der Datenstruktur oder auch in der
      Art der Verarbeitung nötig wurde, dann konnte man auf 'sauber'
      definierte Blöcke zurückgreifen. Es lag nahe, daß man also einen
      'Subprozess' dazubaute der die neuen 'Eigenschaften' bearbeitete,
      neue 'Methoden' einfügte und ansonsten auf die bereits funktionierenden
      Teile zurückgriff. Letzteres hat den Namen 'Vererbung' bekommen.
      Anfangs waren es 'subroutines' die auf andere 'subroutines'
      zurückgriffen.

      Eigenschaften, Methoden und Vererbung, diese Schlagworte sind
      bei der Objektorientierung standard geworden.
      Die Theorie hat die Betrachtungsweisen deutlich erweitert,
      die Ursprünge sind aber, in meinem Erleben, so entstanden.
      Die Entwicklung ist uA auch an den Eigenschaften von Turbo-Pascal
      über Turbovision nach Delphi ganz gut abzulesen.

      Wie definiert man ein Objekt konkret?

      Hmm, um ehrlich zu sein, keine Ahnung. Ich hab' so viele
      Definitionsversuche gelesen, meistens '... ist wenn' oder
      '... ist zB ...' oder auch '... nehmen wir an, daß ...'.
      Letztlich hilft mir nur die Erinnerung an die Schmerzen.

      Klaus

      PS: Stefan hat Dir inzwischen auch einen Erläuterungsversuch mit
      'Angenommen, (daß)' dargelegt. Das hilft ja auch weiter und zwar
      nicht schlecht. Wie Du Dir Dein Bild zusammenschnitzt hängt aber
      vor allem von Deinen ganz persönlichen Denkstrukturen ab (trivial).
      Ich finde es gut, daß Du das Thema angesprochen hast!
      Vielleicht lerne ja auch ich nochmal was das ist.

      1. PS: Stefan hat Dir inzwischen auch einen Erläuterungsversuch mit
        'Angenommen, (daß)' dargelegt. Das hilft ja auch weiter und zwar
        nicht schlecht. Wie Du Dir Dein Bild zusammenschnitzt hängt aber
        vor allem von Deinen ganz persönlichen Denkstrukturen ab (trivial).
        Ich finde es gut, daß Du das Thema angesprochen hast!
        Vielleicht lerne ja auch ich nochmal was das ist.

        Ich werde nächste Woche alle Meinungen durcharbeiten zerlegen, wieder zusammenfassen und dann hier posten. Dieser Begriff ist so schwer faßbar und wird dabei so oft verwendet. Vielleicht hat der eine oder andere auch noch einen Hinweis dazu.
        Wäre ich jetzt noch Studentin, würde ich meinen Prof. nerven. :-)
        Vielleicht könnte das einer der Informatikstudenten tuen? ;-)

        Viele Grüße

        Antje

        1. Wäre ich jetzt noch Studentin, würde ich meinen Prof. nerven. :-)
          Vielleicht könnte das einer der Informatikstudenten tuen? ;-)

          Bloß nicht... Antworten und vorlesungen von Informatik Professoren sind entweder trivial (weil die einem erklären wie man den computer einschaltet) oder derartig theoretisch und unverständlich das man sich die antwort an die backe schmieren kann.

          Ich empfehle amerikanische literatur. die amis sind was lehrbücher angeht wirklich besser drauf als die deutschen.

          Sehr gut sind die Bücher aus dem o'reilly verlag. die gibt es auch grossenteils schon in der deutschen übersetzung.

          Timo (verzweifelter Informatikstudent)

  6. Hallo Antje,

    Wie definiert man ein Objekt konkret? Die meisten Beschreibungen beschränken sich auf Aufzählungen der Objekte.

    Angenommen du sagst: ich fange an mit einem Punkt. Der Punkt hat eine Eigenschaft, naemlich eine Farbe. "Punkt" ist dann ein Objekt, dass die Eigenschaft "Farbe" hat.

    Dann sagst du, ich will eine Linie. Die besteht aus Punkten. Das Objekt "Linie" hat eine neue Eigenschaft, naemlich ihre Laenge. Benutzen tut sie, um ihre Leistung zu erbringen, so viele Objekte des Typs "Punkt", wie erforderlich sind, um die gewuenschte Laenge zu erreichen. Und hoppla, da kriegt sie gleich noch was mit: naemlich eine Farbe, abhaengig davon, welche Farbe die Punkte haben, aus denen sie besteht. Die Linie "besteht" also aus einfacheren Objekten "Punkt" und erbt deren Eigenschaft "Farbe".

    Als naechstes kannst Du aus der Linie so Dinge ableiten wie Rechtecke, Kreise usw. Die haben wieder neue Eigenschaften, und erben die ihrer "allgemeineren" Vorgaenger.

    Nun koennte man natuerlich auch eine Konvention einfuehren, um festzulegen, welche Eigenschaften eines Objekts weitervererbt werden sollen und welche nicht. Das gibt es auch, und man nennt es "Kapselung".

    Dann unterscheidet man ausserdem noch zwischen reinen "Eigenschaften" wie Farbe oder Laenge, und Werten, die erst "on the fly" ermittelt werden, durch eine kleine Berechnung oder Prozedur. Zum Beispiel aus dem Durchmesser eines Kreises den Radius. Solche "prozeduralen Eigenschaften" nennt man Methoden.

    Tja, und wenn du dann mal nicht nur an Punkte denkst, sondern an andere "Paradigmen" wie User-Events, Bildschirmdarstellung oder dergleichen, dann ist das, was am Ende rauskommt, die Welt der modernen objekt- und ereignisorientierten Programmierung.

    So, mehr gibt mein Laienverstand dazu aber auch nicht her <g>

    viele Gruesse
      Stefan Muenz