Was sind Klassen, Objekte und Methoden in Java?
Ich versuche gerade Java zu lernen.
Ich habe schon mehrere Webseiten angeschaut.
Irgendwie verstehe ich es trotzdem nicht.
Irgendwie verstehe ich nicht was die Eigenheiten von objektorientierter Programmierung sind.
Bislang vermute ich herausgefunden zu haben, dass Methoden das sind, was in vielen anderen Programmiersprachen Funktionen und Prozeduren genannt wird, warum man dann aber so ein blödes neues Wort benutzt ist mir allerdings schleierhaft.
Klassen können scheinbar zwei Zwecken dienen -->
1.) Als Sammlung von Methoden dienen, also als Sammlung von Funktionen und Prozeduren.
2.) Als Klassen dienen, wo mehrere Funktionen (Methoden) innerhalb dieser Klasse denselben Namen haben wie die Klasse selbst, nur wo jeweils unterschiedliche Parameter übergeben werden können und / oder eine unterschiedliche Anzahl an Parametern übergeben werden kann.
Objekte sind scheinbar Aufrufe von Methoden aus Klassen heraus.
Habe ich da was falsch verstanden ?
Was soll daran jetzt das Besondere sein ?, so dass man extra von objektorientierter Programmierung spricht ?
Kann mir das jemand noch mal mit eigenen Worten erklären und zwar so, dass man es auch kapiert ?
Ich habe auch schon Youtube - Videos angeschaut, aber trotzdem das Gefühl es nicht richtig verstanden zu haben ;-((
3 Antworten
Das ist ein bisschen schwierig in eigene Worte zu fassen, aber ich probiere es mal.
Eine Klasse ist sowas wie ein Muster. Stellen wir uns spaßeshalber mal eine Klasse namens "Auto" vor. In der Klasse kannst du festlegen, welche Attribute und Methoden Autos haben.
Attribute sind sowas wie Variablen (beim Auto z.B. Farbe, Länge, Breite, Höhe, Leistung, Hersteller, Typ etc.).
Methoden sind sowas wie Funktionen oder Prozeduren (beim Auto z.B. oeffnen(), schliessen(), anlassen(), blinken() etc.)
Objekte nenne ich selber immer Instanzen einer Klasse. Also wenn du die Klasse "Auto" fertig gebaut hast, kannst du in einer anderen Klasse Objekte vom Typ "Auto" erstellen.
Auto mamasFlitzer = new Auto();
Dadurch hast du ein Objekt namens "mamasFlitzer", bei dem du jetzt die Attribute einstellen kannst oder Methoden aufrufen kannst
mamasFlitzer.farbe = Color.RED; (Achtung, schlechter Stil, normalerweise baut man für sowas noch die Methoden getFarbe() und setFarbe() und greift nicht direkt auf die Attribute zu)
mamasFlitzer.oeffnen();
Das, was du noch geschrieben hast mit "mehrere Methoden in der Klasse haben den selben namen, wie die Klasse aber mit unterschiedlichen Parametern", sind keine Methoden, sondern Konstruktoren. Damit kannst du festlegen, was passieren soll, wenn eine neue Instanz der Klasse erzeugt wird. Beispielsweise kannst du einen Konstruktor bauen, der die Attribute "Hersteller", "Typ" und "Farbe" beim instanzieren der Klasse gleich festlegt.
Auto papasSchlitten = new Auto("Nissan", "GT-R", Color.BLACK);
Der Unterschied zwischen Funktionen und Methoden ist, dass Methoden immer zu einer Instanz einer Klasse gehören (z.B. papasSchlitten.anlassen();) und Funktionen halt eigenständige Programmschnipsel sind, die ohne Klasse funktionieren (in Java fällt mir da gar kein Beispiel zu ein, aber z.B. wenn du Excel die Formel =FINDEN("Bla", A1) eingibst, dann ist das eine Funktion, weil es halt ohne Klasse oder Objekt aufgerufen werden kann und ein Ergebnis zurückgibt.
Ich hoffe mal, ich hab das halbwegs verständlich erklärt. Wenn nicht, einfach nochmal fragen.
Bitteschön.
Was mir grade noch eingefallen, was ich noch schreiben wollte:
Bei den Konstruktoren hast du ja gesagt, dass es davon mehrere in der Klasse gibt. Das nennt man "überladen". Geht mit Konstruktoren oder Methoden.
Man kann davon mehrere mit dem gleichen Namen erstellen, aber sie müssen verschiedene Parameter und/oder verschiedene Rückgabewerte haben. Zum Beispiel könntest du zwei verschiedene Methoden Namens "getFarbe" machen, wo du einmal die Farbe und einmal den String, also den Namen der Farbe zurückgibst.
public Color getFarbe()
{
return this.farbe;
}
public String getFarbe()
{
String farbName;
if (this.farbe.equals(Color.BLACK)) {
farbName = "schwarz"; }
else if (this.farbe.equals(Color.RED)) {
farbName = "rot"; }
else {
farbName = "unbekannt"; }
return farbName;
}
Methode ist kein blödes Wort, ist sicherlich nicht blöder als Prozedur ;)
objektorientierte Programmierung meint, dass man Objekte erstellen kann, z.B:
public class Mensch(){ private String name; private int alter; public Mensch(String n, int a){ this.name = n; this.alter = a; public void setAlter(int a){ this.alter = a; } public String getName(){ return name; } public int getAlter(){ return alter; } }
von diesem Menschen kann man dann ein Objekt bzw. eine Instanz erzeugen
mittels Mensch thomas = new Mensch("Thomas",21);
und dieser thomas verfügt dann über die Werte alter und name, wobei man durch das Keywort private nicht direkt auf seinen Namen zugreifen kann,
man kann also nicht thomas.name = "Max" machen,
jedoch kann man durch den getter getName den Namen von thomas herausfinden
gäbe es diese Objektorientierung nicht müsste man für jeden Menschen alle Werte erzeugen, was z.B. so aussehen würde
...in der main-Methode String thomasName = "Thomas" int thomasAlter = 21; String lukasName = "Lukas" int lukasAlter = 10;
was wenn du 100 Menschen hast ziemlich unübersichtlich wird
außerdem gibt es durch die Objektorient. den Vorteil der Vererbung (googln^^)
man erzeugt also Objekte, zum Beispiel ein Auto, ein Haus, einen Menschen usw. usf. und mit denen kann man dann viel viel besser Arbeiten
man kann auch static Methoden erstellen, die benötigen kein Objekt um zu funktionieren
Vielen Dank für deine Antwort, ich werde über das geschriebene nachdenken.
Unter einem Objekt X der Klasse K versteht man Speicherplatz,
- dessen Struktur und Größe durch K definiert ist
- und dem Methoden zugeordnet sind, welche implementiert sind entweder in der Klasse K selbst oder in einer Klasse, von der K erbt.
Man spricht hier von Methoden (statt von Funktionen), da jede Methode über ihre explizit genannten Parameter hinaus noch einen zusätzlichen weiteren Parameter hat: Er ist das Objekt, dem sie beim Aufruf zugeordnet ist.
Lies bitte auch
Ok, ich verstehe deine Antwort zwar beim ersten Lesen nicht, aber ich werde mir die Links, die du beigefügt hast, durchlesen.
Vielen Dank für deine Antwort !
Recht herzlichen Dank für deine Antwort !