Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6116[/thread]

Was ist ein Objekt: Suche erläuternde Definition (Seite 2)



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
Strat
 2004-03-04 20:15
#80560 #80560
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
also ich finde diese ganzen wunderbaren fremdwoerter einfach toll, und unter instanz einer klasse konnte ich mir noch nie was vorstellen (habe es damals auf der uni aber bei den pruefungen auch wunderbar runtergebetet...). deshalb mal ein Versuch einer Erklaerung von OOP auf deutsch:

Ein Objekt ist ein Container, in dem Daten gespeichert werden können, und bietet zusaetzlich einen Zugriffsmechanismus auf diese Daten. Die Daten werden Objektattributwerte genannt. Die Container, in denen diese Daten gespeichert werden, nennt man Objektattribute. Um auf diese Attribute und Attributwerte zugreifen zu können, gibt es Methoden, die als Schnittstellen zu den Daten dienen. Objekte und Methoden gehören zu einer Klasse. Eine Klasse besteht aus einem (oder mehreren) Objekt(en) mit seinen Daten und den darauf anwendbaren Methoden, sowie einigen Methoden, die nicht auf ein Objekt angewendet werden, sondern auf die Klasse (=Klassemmethoden, z.B. die Erzeugung eines neuen Objektes)

Warum das Ganze?

Kapselung von Daten und Zugriff: Wenn man Daten und den Zugriffsmechanismus auf die Daten kapseln kann, braucht man nicht zu wissen, wie ein Objekt Daten speichert, sondern kann über spezifizierte Schnittstellen (=Methoden) auf die Daten zugreifen. Wenn z.B die Daten ab sofort nicht mehr in einer Hashreferenz, sondern in einer Datei gespeichert werden, müssen nur die Methoden angepasst werden, aber die Schnittstellen zu den Daten bleiben gleich. Einem Programm kann es somit egal sein, wie was intern gespeichert ist, solange es genauso wie vorher (nämlich über die Objektmethoden) darauf zugegreifen kann. Durch diese groessere Abstraktion durch die klaren Schnittstellen wird es leichter, Code wiederzuverwenden.
Vererbung von Funktionalität: wenn die Funktionalität einer Klasse nicht mehr ausreicht und erweitert werden muß, kann man eine neue Klasse generieren, die die Funktionalität der alten Klasse erbt und erweitert oder überschreibt. Dies hat den Vorteil, daß die gesammte geerbte Funktionalität nicht nochmal gecoded werden muß, sondern nur die erweiterte oder überschriebene hinzugefuegt werden muss. Einen solchen Mechanismus nennt man Vererbung.


Objektorientierte Programmierung zahlt sich normalerweise erst ab größeren Mengen Code aus (sagen wir mal so ab 1000 Zeilen Code). Objektorientierte Programmierung macht auch ein Programm in der Regel ein klein wenig langsamer als mit prozeduraler Programmierung. Durch die bessere Kapselung des Codes wird jedoch die Entwicklungsgeschwindigkeit gesteigert, die Wartbarkeit und Wiederverwendbarkeit erhoeht. Und da die Entwicklungszeit meistens teurer ist als eine schnellere Hardware, rentiert sich OOP in der Regel schon.

Wie korrekt ist sowas vom Standpunkt der Theorie her?\n\n

<!--EDIT|Strat|1078424258-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2004-03-05 11:44
#80561 #80561
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Toller Ansatz :)

Aber das hier:

[quote=Strat,04.03.2004, 19:15][...] Eine Klasse besteht aus einem (oder mehreren) Objekt(en) [...][/quote]

Kann ich eigentlich nicht so stehen lassen. Für mich ist das Konzept "Klasse" völlig losgelöst von eventuellen Objekten, und eine "frisch programmierte" Klasse, zu der es noch keine Objekte gibt oder eine selten verwendete Klasse, zu der gerade keine Programme laufen, wo Objekte dieser Klasse verwendet werden, ist dennoch eine Klasse.

Außerdem lässt Du eine Menge aus (Klassendaten vs. Objektdaten, Klassenmethoden vs. Objektmetoden etc. pp).

Trotzdem finde ich den Ansatz und viele Formulierungen sehr gelungen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Vorkim
 2004-03-05 13:54
#80562 #80562
User since
2003-09-27
50 Artikel
BenutzerIn
[default_avatar]
Vielleicht hilft meine Version auch noch:

Motivation für das Paradigma der Objektorientierung: Abbildung der Wirklichkeit durch abstrakte Modelle. (Vergleich mit Strukturierter Programmierung wäre ein guter Einstieg.)

Klasse: Bauplan für gleichartige Objekte

Exemplar (Instanz, Objekt): ein nach dem Bauplan einer Klasse erzeugtes Objekt. (Habe mal gelesen, dass der Begriff Instanz eigentlich ein Übersetzngsfehler ist und dafür Exemplar verwendet werden sollte.)

Objekte haben Eigenschaften (Attribute), die sich nur durch Operationen (Methoden) verändern lassen (sollten).

Wichtig ist dabei, dass man die Begriffe Klasse und Objekt trennt und sich klar macht, dass mehrere Objekte einer Klasse existieren können (Objektidentität).

Falls du noch ein paar Tage Zeit bis zur Abiprüfung hast, guck dir mal die ersten beiden Kapitel von Bernd Oestereich: Objektorientierte Softwareentwicklung an. Daraus sind auch weitgehend die Kurzdefinitionen oben.


Die Widgets von GUIs beispielsweise Perl/Tk sind dazu vielleicht ganz anschaulich.\n\n

<!--EDIT|Vorkim|1078487693-->
kabel
 2004-03-05 15:44
#80563 #80563
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
neben dem klassenorientierten OO-konzept gibt es noch das prototyporientierte. ein paar links (sortiert nach relevanz):

ganz kurze erklärung klassenorientiert <=> prototyporientiert
ein perl modul
ein weiteres
die sprache self

perlmonks weiss noch mehr, stichwort inside out objects ...
-- stefan
Relais
 2004-03-05 16:17
#80564 #80564
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
@kabel: fürchterbare Doku, um etwas so simples aufzupusten. Das Konzept des Objekte-Klonens war mir aus Perl schon gut bekannt.

Die beiden "Klassen" auf CPAN, um es auch klassenlos hinzubiegen, aber neu. Danke! Sehr nett!
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Strat
 2004-03-05 22:56
#80565 #80565
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ein neuer Versuch (dank Crian):

Ein Objekt ist ein Container, in dem Daten gespeichert werden können, und bietet zusaetzlich einen Zugriffsmechanismus (=Objektmethoden) auf diese Daten. Die Daten werden Objektattributwerte genannt. Die Container, in denen diese Daten gespeichert werden, nennt man Objektattribute. Um auf diese Attribute und Attributwerte zugreifen zu können, gibt es Methoden, die als Schnittstellen zu den Daten dienen.

Zusaetzlich gibt es noch Klassenmethoden, die nicht fuer ein bestimmtes Objekt aufgerufen werden, sondern die ein neues Objekt erzeugen (=Konstruktor) oder sich eventuell auf mehrere Objekte beziehen.
Diese Klassen- und Objektmethoden bilden zusammen einen Rahmen (=Klasse) fuer Objekte, und ein Objekt weiss stets, zu welcher Klasse es gehoert, sodass man z.B. auch mehrere Objekte von verschiedenen Klassen haben kann, die dieselben Methoden implementieren, und dadurch weiss die Programmiersprache, welche Methode welcher Klasse es ausfuehren muss (=Polymorphismus).

Warum das Ganze?

Kapselung von Daten und Zugriff: Wenn man Daten und den Zugriffsmechanismus auf die Daten kapseln kann, braucht man nicht zu wissen, wie ein Objekt Daten speichert, sondern kann über spezifizierte Schnittstellen (=Methoden) auf die Daten zugreifen. Wenn z.B die Daten ab sofort nicht mehr in einer Hashreferenz, sondern in einer Datei gespeichert werden, müssen nur die Methoden angepasst werden, aber die Schnittstellen zu den Daten bleiben gleich. Einem Programm kann es somit egal sein, wie was intern gespeichert ist, solange es genauso wie vorher (nämlich über die Objektmethoden) darauf zugegreifen kann. Durch diese groessere Abstraktion durch die klaren Schnittstellen wird es leichter, Code wiederzuverwenden.
Vererbung von Funktionalität: wenn die Funktionalität einer Klasse nicht mehr ausreicht und erweitert werden muß, kann man eine neue Klasse generieren, die die Funktionalität der alten Klasse erbt und erweitert oder überschreibt. Dies hat den Vorteil, daß die gesammte geerbte Funktionalität nicht nochmal gecoded werden muß, sondern nur die erweiterte oder überschriebene hinzugefuegt werden muss. Einen solchen Mechanismus nennt man Vererbung.


Objektorientierte Programmierung zahlt sich normalerweise erst ab größeren Mengen Code aus (sagen wir mal so ab 1000 Zeilen Code). Objektorientierte Programmierung macht auch ein Programm in der Regel ein klein wenig langsamer als mit prozeduraler Programmierung. Durch die bessere Kapselung des Codes wird jedoch die Entwicklungsgeschwindigkeit gesteigert, die Wartbarkeit und Wiederverwendbarkeit erhoeht. Und da die Entwicklungszeit meistens teurer ist als eine schnellere Hardware, rentiert sich OOP in der Regel schon.

ist es so besser?\n\n

<!--EDIT|Strat|1078521181-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2004-03-05 23:05
#80566 #80566
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ja, sehr hübsch :)

(s/stehts, zu/stets, zu/)\n\n

<!--EDIT|Crian|1078520741-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2004-03-05 23:13
#80567 #80567
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
danke, korrigiert
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2004-03-05 23:35
#80568 #80568
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Wohin packen wir diese schöne Erklärung? Ins Wiki?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Strat
 2004-03-06 00:00
#80569 #80569
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn du es machen willst, gerne
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2004-03-04 13:15.