Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#41

Re: Delphi objektorientiert?

  Alt 29. Nov 2005, 20:34
Hi,
ich möchte mal kurz anmerken, dass ihr euch so noch ewig streiten könnt, was OOP ist und was nicht (und keiner von euch hat absolut Recht/Unrecht). Es gibt einfach keine genaue Definition wann etwas OOP ist und wann nicht mehr. Ähnlich wie Logische, Funktionale, Imperative, ... Programmierung ist auch die OOP nur ein Konzept dass einige Ansätze vorgibt, aber eben auch nicht mehr.

Natürlich haben C++, Delphi, Java, ... streng genommen nur die Möglichkeit Eigenschaften der OOP zu benutzen, aber sind (streng genommen) keine OOP-Sprachen.
Ich weiß ehrlich gesagt nicht, warum dass zweite O hier so betont wird. IMHO hat es nichts mit den Objekten der Programmiersprachen zu tun, sondern es bezieht sich lediglich auf das Konzept hinter OOP. Es ging bei OOP eigentlich nur darum, das "reale Leben" nachzubilden. Und wenn man sich anguckt wie das Funktioniert (natürlich stark vereinfacht und abstrahiert), dann kommt man schnell dazu dass es eine Welt gibt, die von Objekten bevölkert wird. Diese Objekte können sich kennen und miteinander kommunizieren, sie können Eigenschaften weitergeben und nicht ausserhalb dieser Welt leben. Zudem ist wohldefiniert, wie einzelne miteinander kommunizieren. Sehr grob ist das wohl das, was das Objekt Orientiert ausmacht.

Wo sich übrigens alle Definitionen weitgehend einig sind ist, dass OOP folgendes in den Vordergrund stellt:
  • Abstraktion
  • Vererbung
  • Kapselung
  • und irgendwas was mir gerade nicht einfällt

Jedenfalls existiert ein Objekt immer nur für eine bestimmte Zeit (max. von Beginn bis Ende des Programms). Jedes Objekt hat Eigenschaften, von denen aber möglichst wenig bekannt sein sollte. Es soll nur bekannt sein, was ein Objekt macht, nicht wie. Ein Objekt kann auf eingehende Nachrichten reagieren. Dabei ist eine Nachricht übrigens nur ein Begriff, nicht gekoppelt an eine Interpretation wie diese Nachricht aussieht.
Objekte können Eigenschaften vererben und geerbte Eigenschaften verändern (also anders reagieren).
Das war es eigentlich auch schon.

Ob Objekte intern eine Prozedur aufrufen oder nicht ist vollkommen egal. Aus Sicht der OOP interessiert das keinen, das Objekt ist schließlich nur eine Kapselung seiner Funktionalität. Anders als bei Prozeduralen ansätzen sollte ich bei einem Objekt gar keine Möglichkeit haben, eine prozedur einfach aufzurufen. Ich habe aber durchaus die Möglichkeit mit einem Objekt zu kommunizieren. Durch die Kapselung weiß ich also was ich dem Objekt mitteile und was ich als Antwort bekomme. Natürlich sieht das in einigen Umsetzungen so aus, wie der Aufruf einer Prozedur, die zu einem Objekt gehört, aber das ist doch nur eine Umsetzung.

Wichtig ist, dass OOP ein ganz anderen Ansatz verfolgt als Prozedurale Programmierung. Das heißt aber nicht, dass sie nichts gemeinsam haben dürfen (Haskell kennt auch while-Schleifen, für mich bleibt es Funktional). Aber alles was nicht OOP ist, muss doch auch nicht automatisch Prozedural sein.

Was jedenfalls bleibt ist der Fakt, dass es alles nur Auslegungssache ist. Meines Erachtens gibt es keine einzigst wahre und allgemeingültige sowie vollständige Definition von OOP und damit auch kein Argument wann etwas definitiv nicht mehr OOP ist. Es ist halt so, dass (sicher auch durch den Modeeffekt von OOP) viele Sprachen unsaube Konzepte mischen (immerhin kann man in Delphi sowohl komplett iterativ als auch weitestgehend OO programmieren oder es einfach mischen). Und um mal von Delphi wegzugehen, Python (sicherlich, eine interpretierte Sprache, aber egal), kann z.B. auch Prozedural oder mit dem Lambda Funktional arbeiten...

Ach ja, zu meinen Anmerkungen dass OOP Modeerscheinung ist möchte ich auch noch sagen, dass ich es nicht abwertend meine. Ich mag die OOP (egal wie streng man sie nun auslegt) und sie hat durchaus ihren Sinn. Wie schon häufiger gesagt, nicht immer, nicht überall. Man sollte nur Bedenken wie alt die Ansätze der OOP sind (> 20 Jahre) und das es die ersten 10 Jahre kaum Interesse an diesen Konzepten gab (nicht so breit wie heute). Natürlich lag es daran, dass Abstraktion immer mit Overhead verbunden ist, der für damalige Verhältnisse (Rechenzeit, Speicherplatz,...) zu teuer war. Aber ich persönlich finde, dass etwas zu stark zum bejubbeln der OOP geneigt wird, da viele OOP schreien ohne verstanden zu haben, dass es um was anderes als nur Klassen / Objekte und Vererbung geht.

Gruß Der Unwissende

Edit : Delphi statt list verwendet, peinlich
  Mit Zitat antworten Zitat