Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java 7 Grundkurs

Attribute lesen und ändern: Getter und Setter

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Get- und Set-Methoden sind Gegenstand dieses Lernvideos und Sie lernen, Attributwerte direkt zu setzen. Mehr dazu in den anschaulichen Beispielen.
14:59

Transkript

In diesem Video erfahren Sie, wie Sie den Zugriff auf Attribute mit get- und set-Methoden regeln können. Ich habe dazu dieses kleine Beispielprojekt geöffnet, darin habe ich eine Klasse "Auto", die beschreibt ein Auto, das hat eine Geschwindigkeit und dieses Auto kann ich beschleunigen und ich kann es bremsen und ich kann es nach seiner aktuellen Geschwindigkeit fragen. Außerdem gibt es eine Testklasse zum Erzeugen eines Autos und zum Ausprobieren. Hier wird ein Auto kreiert, es werden die beschleunigenden Methoden zweimal aufgerufen, dann wird nach der aktuellen Geschwindigkeit gefragt, die wird ausgegeben und schließlich treten wir einmal kurz auf die Bremse und lassen die Geschwindigkeit noch einmal ausgeben. Ausführung des Programmes gibt also folgende Ausgabe: "Wir fahren 2 km/h" und danach "Wir fahren 1 km/h". Soweit das Beispielprojekt. Nun lassen sich ja nach einem Bauplan beliebig viele Objekte erzeugen. Ich könnte also nach dem Bauplan "Auto" problemlos ein weiteres Auto bauen. Das mache ich jetzt einmal. Ich deklariere mir hier eine Variable, die nenne ich jetzt einmal "Dein Auto" und erzeuge ein weiteres Auto nach dem Bauplan "Auto". Auch dieses zweite Auto möchte ich jetzt einmal beschleunigen, Strg+Leertaste hilft bei dem Vervollständigen, "Punkt" zeigt uns eine Liste der möglichen Methoden. Wir können also "Beschleunigen" mit Enter auswählen und wenn ich jetzt noch weitere Male beschleunigen möchte, dann müsste ich natürlich diese Zeile noch einmal hineinschreiben. Ich kann mit NetBeans eine Zeile aber kopieren, verdoppeln, indem ich Strg+Shift und Pfeil-runter drücke. Nochmal, Strg+Umschalten+Pfeil-runter. Jetzt wird also "Dein Auto" dreimal beschleunigt. Um zu sehen, wie schnell wir jetzt fahren, müssen wir das natürlich ausgeben, also sout+Tab, "Dein Auto fährt nun" und jetzt hole ich mir von deinem Auto Strg+Leertaste, die Geschwindigkeit mit "getGeschwindigkeit" und hintendran noch "km/h". So, wenn ich das jetzt ausführe, indem ich hier oben auf den grünen Knopf drücke oder die Taste F6, dann sehe ich hier unten, "wir fahren 2 km/h", "wir fahren 1 km/h", das kommt von unserem Auto und "Dein Auto" fährt nun 3 km/h. Wir sehen also, die beiden Objekte agieren auch tatsächlich völlig unabhängig voneinander. Wenn Sie sich mit anderen Software-Entwicklern unterhalten, die auch objektorientierte Software-Entwicklung betreiben, dann werden Sie merken, dass die nicht unbedingt von Objekt oder Exemplar einer Klasse reden, sondern manchmal von Instanz. Das kommt vom englischen "Instance" und das heißt auf Deutsch eigentlich "Exemplar". Es hat sich aber das deutsche Wort Instanz durchgesetzt. Das heißt, eine Instanz ist demzufolge ein Exemplar einer Klasse und der Vorgang, eine solche Instanz zu erzeugen, also hier z.B., heißt dann "eine Klasse instanziieren". Um diese beiden Autos besser unterscheiden zu können, möchte ich ihnen jetzt Namen verpassen. Die Namen sollten dann hier unten immer erscheinen, wenn ich Meldungen zu einem der Autos ausgebe. Ich könnte jetzt auch mit eindeutigen Bezeichnen agieren oder mit der Fahrzeugidentifikationsnummer, die ja bekanntlich die international genormte 17-stellige Nummer ist mit der Kraftfahrzeuge eindeutig identifiziert werden können, aber wir wollen es nicht zu kompliziert machen. Deswegen geben wir den beiden Autos einfach Namen, also z.B. Anna und Bernhard. Wir könnten jetzt also hier schreiben: "Anna fährt gerade". Und nochmal: "Anna fährt gerade". Und hier dann: "Bernhard fährt". Damit sehen wir auch immer, welches Auto gerade gemeint ist. Objektorientierung bedeutet nun aber eigentlich, dass alle Informationen, die zu dem Objekt gehören, also alle Eigenschaften des Objektes, auch tatsächlich Teil des Objektes sind. Und eine Eigenschaft unseres Objektes, unseres Objektes "Auto", ist offensichtlich der Name. Wir sollten den Namen also eigentlich lieber in das Auto hinein verlegen. Genau das tun wir jetzt. Gehen wir zur Klasse "Auto" und fügen hier ein zweites Attribut hinzu, das ist vom Typ "String". Achten Sie darauf, dass Sie ein großes "S" verwenden, String ist nämlich eigentlich eine Klasse und das Attribut heißt "Name". Strings kann man trotzdem fast genauso nutzen wie primitive Datentypen, Sie müssen sich da also im Moment noch keine weiteren Gedanken darüber machen. Um diesen Namen ändern zu können und auslesen zu können, brauche ich zwei Methoden. Der Name selbst ist ja "Private", ich kann also von außen eigentlich nicht darauf zugreifen. Um zugreifen zu können, baue ich mir zwei Methoden dazu, ich setze die einmal hierhin. Für beide Methoden gibt es jetzt wieder eine Namenskonvention. Wir sehen das hier unten bei dem "getGeschwindigkeit" schon. Wenn ich ein Attribut auslesen möchte, dann nenne ich die Methode "get" und dann den Namen des Attributs mit einem großen Anfangsbuchstaben. Machen wir das einmal. Rückgabetyp ist der Typ, den die Methode zurückgibt und sein Name ist vom Typ "String", also ist der Rückgabetyp "String" und die Methode heißt dann "getName". Was tut diese Methode? Die Methode liefert den Namen zurück. Die Methode, die den Namen ändern soll, heißt jetzt "setName". Die Methode muss nichts zurückliefern, weil sie soll ja etwas in das Objekt hinein verfrachten, nämlich den Namen. Der Name ist auch hier wieder vom Typ "String". Nennen wir das "Neuer Name". So, und in der Methode machen wir jetzt Folgendes: Wir haben hier oben unser Attribut "Name" und das möchten wir jetzt belegen mit dem neuen Namen, der hier reinkommt, also schreiben wir "Name" ergibt sich als "Neuer Name", Strg+Leertaste spart wieder ein paar Tastenanschläge. So, damit hat unser Auto jetzt ein neues Attribut. Das Attribut ist "Private", es ist also vernünftig gekapselt, niemand kann direkt auf das Attribut zugreifen. Um das Attribut lesen und schreiben zu können, gibt es zwei public-deklarierte Methoden. "getName" zum Auslesen und "setName" bzw. "setName" zum Setzen eines neuen Namens. Ich speichere das mal und jetzt können wir in unserer Auto-Demo nämlich diese neuen Funktionen benutzen. Wenn ich hier oben "Mein Auto" erzeugt habe, dann gebe ich ihm zuerst einen Namen und zwar hatten wir gesagt, wir nennen das erste Auto "Anna". "Enter". Dann können wir hier an dieser Stelle, statt den Namen quasi hart zu kodieren, hier unten jedes Mal, bei jeder Ausgabe, können wir jetzt das Auto fragen: "Sag mal, wie heißt du eigentlich?" "Mein Auto." Und jetzt haben wir hier "getName", ein Plus-Zeichen und das Gleiche zwei Zeilen tiefer nochmal "Name" raus, "Mein Auto.getName" und ein Plus-Zeichen dran. Wenn die Zeilen Ihnen zu lang werden sollten, hier nach rechts raus, dann können Sie die natürlich umbrechen, nur nicht innerhalb eines Textes, das ist sehr ungünstig. Ich mache das mal hier. "Enter" und hier auch "Enter" und schon passt wieder alles auf den Bildschirm. So, was für "Mein Auto" recht ist, ist für "Dein Auto" billig, also direkt nach der Zeugung des Autos setzen wir auch für "Dein Auto" den Namen mit "setName", und geben hier den Namen ein. Sie können einfach darauf lostippen. Und zwar, ich hatte gesagt "Bernhard". Auch hier ersetzen wir nun die Ausgabe durch "Dein Auto.getName". Ausführen des Programmes zeigt uns, es funktioniert alles so wie gedacht und der Name ist jetzt tatsächlich eine Eigenschaft des Autos selbst. Auch hier können wir noch zwei Zeilen daraus machen. So, passt alles darauf, wunderbar. Solche sog. Getter und Setter, also Methoden die Werte herausliefern oder Werte hineinschreiben, werden sehr häufig benötigt und deswegen gibt es natürlich in der IDE eine Möglichkeit das Ganze etwas schneller und etwas einfacher zu bekommen. Um das zu demonstrieren, nehme ich mal diese beiden Methoden noch einmal weg. So, Strg+E, Methoden sind wieder raus. Das Attribut ist bereits da und jetzt kann ich hier über Alt+Einfügen, ein kleines Mini-Menü aufrufen und hier habe ich jetzt "Getter", "Setter" und "Getter and Setter". Drücke ich "Enter", bekomme ich eine Auswahl, welche Attribute gibt es denn, die noch keine Getter und Setter haben. Das ist in diesem Fall "Name" und ein Klick auf "Name" und drücke "Generate", dann bekomme ich "getName" und "setName" generiert. "getName" bzw. "getName" sieht genauso aus, wie wir es geschrieben haben, "setName" ist ein klein wenig anders. Und zwar wird hier als Bezeichnung für den Parameter ebenfalls "Name" verwendet, der gleiche Bezeichner, den auch unser Attribut trägt. Wir haben jetzt also zwei Variablen mit derselben Bezeichnung. Einmal das, was hier übergeben wird als Parameter in die Methode hinein, und einmal das Attribut, was oben deklariert wurde. Würden wir jetzt einfach schreiben "Name" ergibt sich als "Name", dann würde das nicht funktionieren, wir würden nämlich beide Male diese lokale Variable, diesen Parameter verwenden und nicht auf das Attribut zugreifen. Um auf das Attribut zu zugreifen, gibt es einen speziellen Bezeichner und der heißt "this". Dieses "this" ist sozusagen ein Verweis des Objektes auf sich selbst. Wenn ich also mal in der Situation bin, dass ich innerhalb einer Methode eine Variable bereits habe, die genauso heißt wie ein Attribut des Objektes, dann würde diese Variable das Attribut verdecken und um trotzdem an das Attribut ranzukommen, verwende ich "this", das heißt also, die Referenz, der Verweis des Objektes, auf sich selbst und sage dann: "Ich hätte gerne von diesem Objekt dieses Attribut." Da das Objekt auf sein eigenes Attribut zugreift, stört es auch nicht, dass dieses Attribut als "Private" deklariert ist, denn "Private" bedeutet ja nur, andere dürfen nicht drauf zugreifen, das Objekt selbst aber schon. Dieses "this.Name" greift also auf das Attribut dieses Objektes zu und diesem Attribut weisen wir nun den Wert dieses Parameters zu. Achten Sie darauf, dass es keine Pflicht ist, Getter und Setter einzubauen. Get- und set-Methoden brauchen wir nur, wenn Sie tatsächlich fachlich notwendig sind. Wir haben hier z.B. unsere Geschwindigkeit und es gibt zwar eine "getGeschwindigkeit"-Methode, zum Auslesen der Geschwindigkeit, es gibt aber keine "setGeschwindigkeit", sondern es gibt stattdessen nur . die Methoden "Beschleunigen" und "Bremsen". Denn das ist es, was ein Auto normalerweise ermöglicht. Getter und/oder Setter also immer nur einbauen, wenn Sie sie tatsächlich brauchen. Die Funktionalität unserer Methoden könnte durchaus auch noch ein bisschen aufgebohrt werden. Die "setName"-Methode könnte z.B. überprüfen, ob das hier ein gültiger Name ist, ob der zulässig ist, ob da überhaupt etwas übergeben wurde und Ähnliches. Um das Beispiel abzurunden möchte ich noch eine letzte Änderung vornehmen. Wir sehen hier, in unserer Hauptklasse in der Main-Methode, dass wir dreimal praktisch denselben Code haben. Wir haben dreimal "Hole den Namen des Autos", "Gib aus 'Fährt'", "Hole die aktuelle Geschwindigkeit" und "Schreib hinten dran 'km/h' ", einmal hier, einmal hier und einmal hier Es gibt ein Programmierprinzip, das heißt "Don't repeat yourself." Abgekürzt "Dry". Also D, R, Y. Und das bedeutet, dass Sie es vermeiden sollten, denselben Code an mehreren Stellen immer wieder zu schreiben. Stattdessen schreibt man diesen Code in eine separate Methode und ruft dann an den mehreren Stellen einfach diese eine Methode mehrmals auf. In unserem Fall haben wir also eine Methode, die muss etwas tun. Die muss den Namen des Autos holen, kurzen Text ausgeben, muss die Geschwindigkeit des Autos holen und noch einen kurzen Text ausgeben. Es ist also durchaus nahe liegend, dass das eine Methode ist, die sich im Auto befinden könnte. Machen wir das, fügen wir noch eine letzte Methode hinzu. Ich setze die einmal unten drunter, aber noch in die Klasse hinein natürlich. Und zwar sollte die Methode eine kurze, textuelle Beschreibung des Objektes zurückgeben, also einen String, ich nenne sie einmal "getStatus". Die Methode braucht nichts dafür, weil alles ist ja schon im Objekt drinnen, das Auto weiß ja selbst wie es heißt und wie schnell es gerade fährt. Was ich also machen muss, ist einen passenden String zusammenbasteln und den zurückgeben. Das kann ich in eine Zeile schreiben. und zwar geben wir zuerst den Namen zurück, dazu holen wir uns den Namen aus der Variable "Namen", dann der Text "fährt gerade", jetzt holen wir uns die Geschwindigkeit, die können wir uns aus der Variablen "Geschwindigkeit" holen. Wir haben ja Vollzugriff darauf, wir befinden uns ja innerhalb dieser Klasse und hintendran noch "km/h". So, Semikolon nicht vergessen, ist die Methode fertig. Jetzt können wir diese Methode aus unserer Hauptklasse heraus verwenden und diese länglichen Texte, die wir mit "system.out.println" ausgeben, ersetzen durch einfach "Mein Auto.getStatus". Hier auch, "Mein Auto.", wenn mal nichts da stehen sollte, Strg+Leertaste hilft "getStatus" und hier ebenfalls, "Mein Auto.getStatus". So, letzter Test, "Programm ausführen", F6 und siehe da, es funktioniert alles immer noch. Diese Variable hier oben brauchen wir jetzt natürlich nicht mehr. Die aktuelle Geschwindigkeit kennt das Auto ja selbst. Strg+E löscht die Zeile und damit ist unser Programm wieder etwas kürzer und etwas übersichtlicher geworden. Sie haben nun also gesehen, wie Sie neue Attribute zu einer vorhandenen Klasse hinzufügen und wie Sie den Zugriff auf diese Attribute mit get- und set-Methoden ermöglichen.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!