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