Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Grundlagenfragen zu OOP


Black Lightning - Fr 09.08.02 17:04
Titel: Grundlagenfragen zu OOP
Hi,
ich bin zwar kein blutiger Anfänger mehr, aber mir fehlt immer Grundlagenwissen, was höchste Zeit ist zu lernen.
also meine erste grundlegende Frage zu OOP ist: was ist OOP? Bisher habe ich immer angenommen das die Eigenschaft einer Sprache, welche sie Objektorientiert macht, die Eigenschaft sei, Klassen bzw Typen zu erstellen.
Da ich nie eine nicht-objekt-orientierte Sprache gelernt habe, kenn ich den Unterschied eben nicht.

2. Wenn man Prozeduren weder als puplic oder privat deklariert, was sind sie dann? Public? Wenn ja, wozu dann die extra Public-Deklaration?

Ich dachte ich hätte noch mehr fragen, aber zumindest fallen sie mir jetzt nicht ein.

gruß
Black Lightning


Delphinator - Fr 09.08.02 18:43

Hi,

zu zwei: Das kommt ganz auf die Sprache an, würde ich mal sagen. Bei C++ ist es z.B. so, das alles automatisch als private makiert wird (und dann kommts auch wieder auf den Compiler an. Manche bringen dann Fehler), sofern du nix anderes angibst. Wie das bei anderen Sprachen aussieht weiß ich nicht, da ich bisher nur mit C++ OO gearbeitet habe.

Hoffe ich konnte dir ein wenig helfen :)

Greetz,
Delphinator


Black Lightning - Fr 09.08.02 20:23

ausgerechnet von C++ wusste ich das auch...aber bei Delphi eben nicht.


Klabautermann - Fr 09.08.02 20:28

Hallo,

mit deiner Definition von Objektorientierter Programmierung liegst du gar nicht schlecht. OOP ist die Idee Methoden und Daten zu einer Einheit zusammenzuschnüren. Dazu kommen dann noch ein paar antere Extras wie Vererbung oder Polymorphie, wobei ich nicht sagen kann inwieweit diese zwingend sind um eine Sprache als Objektorientiert zu beweichnen.

Wie Delphinator schon sagte, hängt es von deinem Compiler ab wie nichtgekenzeichnete Bereiche definiert sind. In Delphi ist dies public. Du als Programmierer solltest aber alles in den Publich Bereich schreiben der Bereich ohne angabe sollte DELPHI vorbehalten bleiben, dort wird alles deklariert was Delphi "automatisch" einfügt. Und wenn dort eine Procedure Deklariert ist die weilter unten nicht ausprogrammiert wurde dann löscht Delphi den eintrag beim nächsten Speichern wieder selbstständig bein nächsten Speichern. Unter Publich kannst du aber leere Proceduren deklarieren, den das Gild als Handgemacht, deshalb fingert Delphi da nicht dran rum.

Gruß
Klabautermann


Delphinator - Sa 10.08.02 15:44

Hi,

@Klabautermann:

Sehr interessant deine Ausführung. Gut zu wissen :D *lob!*


Greetz,
Delphinator


Black Lightning - Sa 10.08.02 16:16

ja...sehr zufriedenstellend beantwortet :D

Aber dennoch eine Frage...
wenn methoden oder eigenschaften als public deklariert sind kann ja von überall drauf zugeriffen werden, wenn sie privat sind, dann nur von innerhalb des Typs, wenn protected dann nur innerhalb der unit.
Richtig?
Wenn ich also eine andere unit in die uses liste im implementation-teil aufnehme kann diese Unit trotzdem nicht auf protected methoden etc zugreifen, wenn ich sie aber in die uses liste des interface abschnittes mit aufnehme dann schon
auch richtig?

mfg
Black Lightning


Klabautermann - So 11.08.02 15:36

Ok,

gucken wir mal ob ich das noch richtig zusammenkriege:

public: Es kann von überall auf die Objekte zugegriffen werden. Sowohl inerhalb als auch von außerhalb des Objektes.
published: Nur interessant in zusammenhang mit Komponenten. Alle hier aufgeführten Propertys erscheinen im Objektinspektor. Es sind ausnahmslos propertys in diesem bereich zugelassen. Aus dem Quelltext kann man published Propertys so behandeln als währen sie Public.
protected: Alles was hier definiert ist kann nur aus dem Objekt selbst verwendet werden. Ein Zugriff von außen ist nicht möglich. Nachfahren des Objektes können ebenfalls auf protectet's zugreifen.
private: Wie protected mit dem unterschied, das auch nachfahren des Objektes nicht drauf zugreifen können.

Fals nötig wird um verbesserungen und ergänzungen gebeten ;).

Gruß
Klabautermann


Delphinator - So 11.08.02 17:47

Hi,

@Klabautermann:

gibts hier bei Delphi auch sowas wie "friend" bei der Kapselung ???

Würd mich mal interessieren.


Greetz,
Delphinator


Klabautermann - So 11.08.02 18:26

Hi,

auf die schnelle würde ich sagen nein. Zumindest ist mir da keine möglichkeit bekannt. Ich lasse mich aber gerne belehren.

Gruß
Klabautermann


Delphinator - So 11.08.02 18:28

Na gudd *g* ... Werde in meinem schlauen Buch mal nachforschen. Vielleicht steht ja was drin. Bis dann...


Greetz,
Delphinator


Black Lightning - So 11.08.02 19:01

ich hab zwar schon in verschiedenen Büchern/Tutorials die Definition der 4 Stufen des Information Hiding gelesen....aber kein Auto hat es so klip und klar auf den Punkt gebracht wie du nun.
(Soll nicht als Schleim verstanden werden sondern als Tatsache :D )

@Delphinator
was ich bisher über das Friendkonzept gehört habe lässt sich das nur so realisieren, dass man z.B. 2 Klassen in eine Unit packt, andere die nicht darauf zugreifen dürfen in eine andere und diese dann nicht referenziert...naja, nicht so elegant wie in C++.

gruß
Black Lightning


Delphinator - So 11.08.02 19:32

Hi,

nüja, OOP mit Delphi schenk ich mir vorerst noch. Muss mich erst mal in die Grundlagen einarbeiten. Trotzdem werd ich mirs mal ansehen.


Greetz,
Delphinator


Black Lightning - Mo 12.08.02 02:14

gerade eben hab ich gelesen (und Delphi Hilfe hat es bestätigt) dass protected, den Zugriff auf die gesamte Unit auch verschiedener Klassen zulässt.
Somit lässt sich ja ein guter Friend ersatz finden. Indem man die zwischen 2 Klassen befreundeten Methoden als protected sind und in der gleichen Unit stehn.