[PHP und/oder Java] Objektorientierung: Ich kapiers nicht.

Timdaroxxa

Lieutenant
Registriert
März 2009
Beiträge
954
Hi Leute,

ich soll jetzt fürs Studium Java lernen und im Vorkurs kam schon Objektorientierung dran, aber sehr konzentriert und kurz, sodass ich es nicht verstanden habe (und auch nach ein paar Tutorials hier im Inet nicht besser verstehe).

Da ich mir nebenbei noch PHP beibringen und ich dieses bis jetzt besser lesen kann, frage ich hier, ob mir jemand ein Beispiel-Code schreiben kann, wo ein Objekt sinnvoll ist.

Ein Vorschlag von mir, weil es gerade selber probiert habe, wäre ein Objekt, durch dass ich eine Datenbankverbindung aufbaue oder ähnliches.

Würde mich über ein Beispiel freuen.

Gruß
Tim
 
Reale Welt: Objekt mit Eigenschaften und Fähigkeiten
Obj.Or.-Welt: Klasse mit Membern und Methoden

Für Datenbankverbindungen schreibt man DataAccessObjects, das könnte im kürzesten Fall zB so aussehen:

class MySQLDAO{

int countTables(){
// Hier die Logik, wie der SQL Befehl umgesetzt wird, das ist je nach Framework bzw. Datenbanktreiber anders, für Java ist es z.B. JDBC
}
}

Ansonsten ist die Frage leider zu unspezifisch, um sie zu beantworten.
 
ich greif mal deinen vorschlag auf. mein beispiel soll nicht unbedingt in der praxis so sinnvoll sein sondern nur das konzept beispielhaft verdeutlichen:

du hast ein programm, dass will daten in eine datenbank speichern. du willst beim programmieren deiner fachlichen logik ja nichts davon wissen wie und wo die daten hin sollen. einfach nur speichern ;)

also hast du z.b. ein objekt "DatabaseManager".

du benutzt in deinem fachlichen code immer wieder dieses objekt (die selbe instanz im allgemeinen). konkret benutzt du methoden wie:

myDBManager.store( object)
myDBManager.get( objectName )

myDBManager ist dabei vom typ der klasse DatabaseManager.

du siehst, die methoden sind an einem objekt gebunden (myDBManager.store z.B.). store kennt also den kontext "myDBManager". d.h. du must der methode store nur sagen was du speicherst. wohin weiß es quasi schon dadurch, dass sie zu dem objekt myDBManager gehört.

noch mehr.... wir speichern ja objekte. z.b. ein Objekt person vom typ MyPerson.

MyPerson ist dabei eine Klasse, die Felder (interne Variablen) hat und Methoden (Gunktionen zum bearbeiten, setzten etc. dieser felder).

wenn du also myDBManager.store( person ) aufrufst, dann kann man im code von store einfach alles was zu dem übergebenen objekt "person" gehört einfach über dessen methoden erhalten:

DatabaseManager.store( MyPerson p ) {
objectName = p.getName()
....
}

Zusammengefasst: wir haben funktionen allgemine programmiert, diese können aber kontext spezifisch agieren ohne ihnen expliziet als parameter einen kontext zu übergeben, da sie beim aufrufen an einem objekt drann hängen "object.methode()".
 
Bitte nicht falsch verstehen ... aber als Student solltest du eigentlich selber in der Lage sein mittels Google etwas passendes zu finden.
Java kann man nur OOP programmieren und es gibt min. 1 Zillion Websites zum Thema.
 
Naja, ein Objekt ist halt sinnvoll, wenn du mehrere Eigenschaften an diesem hast, welche du abrufen oder eben verändern möchtest. Dazu hat man in OOP den Vorteil, diese Objekte bei anderen Objekten zu verwenden (=Vererbung) und nur das relevante zu verändern. Das ist dann jedoch schon erweiterte Anwendung eines Objekts.

Beispiel für ein Objekt:
Bezeichnung: Mensch
Eigenschaften:
- Geschlecht
- Alter
- Größe
- Sexuelle Ausrichtung
- Religion
- usw
- "Methoden" um komplexe "Berechnungen" für das jeweilige Objekt anzustellen

Du kannst dann solch ein Objekt definieren, dann eines instanziieren (d.h. es "erstellen" und Daten darauf ablegen) und anschließend Daten abrufen im Style von:
Mensch Person1 = new Mensch();
Mensch Person2 = new Mensch();

Person1.Geschlecht = "weiblich";
Person2.Geschlecht = "männlich";
Person1.Alter = 20;
...
AlterZuPrüfen = Person1.Alter;

Verwendung einer Methode vom Objekt Mensch:
Wahrscheinlichkeit = Person1.WahrscheinlichkeitVonGebärmutterkrebs(); (irgendwas von 0-100%, da Person1 == weiblich)
Wahrscheinlichkeit = Person2.WahrscheinlichkeitVonGebärmutterkrebs(); (liefert 0% zurück, da Person2 == männlich)
 
@andy_g: Bitte nicht Klassen und Objekte durcheinander bringen... auch wenn es für einen Anfänger erklärt wird, sollte er es gleich richtig lernen...
 
Da gebe ich dir irgendwie recht. Aber es lässt sich so nun einmal ganz nett beschreiben. Um es wirklich fundiert zu verstehen, muss er sowieso ein Fachbuch durcharbeiten bis es klick macht.

Doof ist häufig die Bezeichnung "Objekt". Ich würde dann eher von Klassen und von Instanzen reden. In meinem Terminus und im meinem Verständnis für OOP sind das alles Objekte, eine pauschalisiert und die andere instanziiert. Ich habe aber auch mal gegoogelt. Es gibt Einträge, wie z.B. Wikipedia, die ein Objekt mit Instanz gleichsetzen. Das macht natürlich keinen Sinn, da es ja z.B. statische Klassen gibt welches im Code ebenfalls als "Objekt" zu betrachten ist.
 
Vielen Dank für die ganzen Antworten.
Ich möchte hier nochmal klarstellen, dass ich kein Problem mit dem Programmcode habe, sondern mehr mit der Anwendung.
Wenns nach mir ginge würde ich nur normale Funktionen benützen. Da ich aber weis, dass OOP häufig besser ist, suche ich nun Anwendungsnahe Beispiele.

Andy hat mir schonmal am meisten geholfen. Vielen Dank.
Das von Dese war auch schon ein Schritt in die richtige Richtung, nur bin ich mir nicht sicher, ob ich es richtig verstanden habe...

Bin aber natürlich auch für weitere Beispiele offen!
 
Klassen sind ja im Wesentlichen nur dazu da, um Code zu zerteilen und Variablen und Funktionen zu enthalten. Es ist nur ein Ordnungsparadigma, wenn man so will. Zusätzlich kann man für einzelne Elemente Sichtbarkeitsoptionen einstellen, was gegen falsche Software-Evolution gegensteuern kann.

Es ist doch einleuchtend, dass es besser ist, 30 Klassen a 50-100 Zeilen Code zu haben, als 1 Datei mit 2000 Zeilen Code. Vor allem wenn ein ganzes Team daran arbeitet. UND: man kann am Klassennamen schon erkennen, was der Code darin macht (bzw. machen soll, das heißt, ein gutes OO Software Design braucht keine Kommentare im Code, was sehr gut ist da Kommentare schlecht sind). Das heißt zum Beispiel auch, ich kann vom Quellcode automatisch Klassen-Diagramme generieren lassen und mir diese ansehen (bzw. ausdrucken und an die Wand kleben), das unterstützen alle modernen IDEs wie Eclipse oder Visual Studio.

Und es beschleunigt das compilieren, wenn ich eine große Datei habe, muss ich immer alles compilieren, wenn ich 50 Klassen habe und etwas ändere muss ich nur die 1 Klasse neu compilieren und ggF. Klassen, die von dieser Klasse abhängen, was in der Regel vielleicht 2-3 weitere Klassen sind.

So kommt man ganz automatisch auf die OO-Philosophie. Wenn ich den Code schon in kleine Teile zerteile, dann werde ich es wohl so machen, dass thematisch verwandter Code zusammenbleibt (= Klasse).

Eigentlich ist es gar nicht möglich, nicht-objektorientiert zu programmieren, denn selbst einfachste Typen wie "int" sind letztlich eine ganze Zahl, und somit irgendwo ein Objekt.

Auch die structs in C sind letztlich sowas wie Klassen ohne Funktionen, auch wenn man von C nicht sagt, dass es objektorientiert ist.
 
Zuletzt bearbeitet:
Den Kerngedanken von OO kannst du hier nachlesen: wiki. Außerdem nützlich: Openbook OOP. Um OOP richtig (!) zu verstehen, wirst du sehr viel Erfahrung benötigen, von daher einfach bissl Geduld mitbringen ;-) Für den Anfang sollten dir aber meine Quellen helfen.

edit: da war jemand schneller :D
 
Vielen vielen Dank, für die ganze Tipps und empfehlungen.

Dann fang ich einfach mal an zu programmieren und lese nebenher eure Links! :D
 
Zurück
Oben