Java Grundlagen – Block2 (Java Basics) – Tag 3
Ich nehme derzeit an einer Akademie zum Java Fullstack Software Engineer teil. In den kommenden Wochen möchte ich hier meine Mitschrift, so gut es geht, aufzeichnen und mitteilen. Hier ist das, was ich vom dritten Tag in Block 2 gelernt und behalten habe:
Variablen innerhalb einer Methode heißen Variablen. Liegen die Variablen innerhalb einer Klasse, nennt man sie Eigenschaften.
Das folgende "this" bezieht sich auf die Eigenschaft er Klasse:
Objektverantwortlichkeiten:
Generate Methode "toString": (Cursor in der der Datenklasse positionieren):
Konstruktoren sind immer automatisch in jeder Klasse drin, wenn man nicht eigene baut. Sie haben eine leere Signatur. Man kann auch mehrere Konstruktoren in einer Klasse haben:
Wenn diese zweite Konstruktor-Methode in zukunft aufgerufen wird, gibt man automatisch den Vor- und Nachnamen mit. Würde man das nicht tun, wären diese Felder erst mal nicht (oder mit Default-Werten) belegt.
Wir erzeugen die Objekte aus dem Konstruktor indem wir sie in der Hauptklasse "PersonenApp" mit einem "new" erstellen:
this(); //Ruft den Konstruktor der eigenen Klasse mit der Signatur() auf. Dadurch werden die Standartwerte übernommen. Das ist eine Konstruktorenverkettung:
PersonenApp.java
package de.firma;import de.firma.model.Person;
public class PersonenApp {
public static void main(String [] args) { Person p1 = new Person(); // p1.vorname = "Homer"; // p1.nachname = "Simpson"; //p1.alter = 37; //p1.puls = 120; p1.setVorname("Homer"); p1.setNachname("Simpson"); p1.setAlter(37); p1.setPuls(120); Person p2 = new Person(); //p2.vorname = "Fred"; //p2.nachname = "Feuerstein"; //p2.alter = 41; //p2.puls = -120; p2.setVorname("Fred"); p2.setNachname("Feuerstein"); p2.setAlter(41); p2.setPuls(-120); Person p3 = new Person(); Person p4 = new Person("Abe","Simpson"); System.out.println("p1: " + p1.toString()); System.out.println("p2: " + p2.toString()); System.out.println("p3: " + p3.toString()); System.out.println("p4: " + p4.toString()); }
}
Person.java
package de.firma.model;public class Person extends Object {
//Eigenschaften private String vorname; private String nachname; private int alter; private int puls; //Konstruktoren public Person() { // Default Constructor super(); // Ruft den Konstruktoren der Obertklasse auf -> Object() this.vorname = "Erwin"; this.nachname = "Mustermann"; this.alter = 37; this.setPuls(140); } public Person(String vorname, String nachname) { //super(); // Ruft den Konstruktoren der Obertklasse auf -> Object() this(); // Ruft den Konstruktoren der eigenen Klasse mit der Signatur () auf -> Person() this.vorname = vorname; this.nachname = nachname; } // Getter- und Setter-Methoden public String getVorname() { return vorname; } public void setVorname(String vorname) { this.vorname = vorname; } public String getNachname() { return nachname; } public void setNachname(String nachname) { this.nachname = nachname; } public int getAlter() { return this.alter; } public void setAlter(int alter) { this.alter = alter; } public int getPuls() { return puls; } public void setPuls(int puls) { if(puls <= 0) { System.out.println("Wiederbelebung " + this.vorname); this.puls = 80; } else { this.puls = puls; } } // Business-Logik /* @Override public String toString() { return this.vorname + " " + this.nachname + " " +this.alter + " " +this.puls; } */ @Override public String toString() { return "Person{" + "vorname='" + vorname + '\'' + ", nachname='" + nachname + '\'' + ", alter=" + alter + ", puls=" + puls + '}'; }
}
Deklaration von Klassen
UML - Unified Modelling Language
So sieht ein UML-Diagramm von unserem Programm:
Die Objekte (P1, P2) sind Zeiger auf reservierten Speicher.
This zeigt auf die Speicherpositionen innerhalb desselben Objektes.
Wir laden uns das Plugin "plantUML integration" und "PalntUML Parser":
Nun markieren wir unsere gewünschte Klasse, klicken mit der rechten Maustaste drauf und wählen PlantUML Parser:
---------------------------
Debugger
Breakpoint setzen:
Debugger starten:
Asci-Code:
H : 72
o: 111
m: 109
e: 101
r: 114
Die Klasse Schiff benutzt die Klasse Pos. Das ist eine gerichtet Assoziation.
In der Klasse Schiff sind Methoden, die aber nicht in einem Objekt gebaut werden können, weil sie abstrakt sind (Beschleunigen und Bremsen). Damit ist die ganze Klasse abstrakt.
Es gibt auch keine Mehrfachvererbung (also entweder werfe ich den Motor an oder setze die Segel):
Die Drei Schiffe Titanic, Olympic und Britanic kommen alle aus derselben Reederei (Klasse), dürfen aber nicht zum gleichen Zeitpunkt die gleichen Positionsdaten haben.
Attribute, Methoden, Botschaften,… sind Begriffe aus Klassen, Eigenschaften, Fähigkeiten,.. Sind Begriffe von Objekten
Botschaft = Methoden aufrufen
Objektorientierte Programmierung
Neues Projekt:
Wir definieren die Variable gebDate vom Typ LocalDate aus der Klasse java.time.
Es gibt aber einen Fehler, den wir mit Klicken auf das rote Lämpchen beheben konnten:
Wir bauen einen neuen Datentypen für das Geschlecht: New/Cass/Enum.
Ein Enum ist eine Aufzählungsliste:
Datumsvariable deklarieren:
Setzen des Datums:
p4.setGebDate(LocalDate.of(2019,05,01));
Wir bauen jetzt eine Klasse Schüler mit den Eigenschaften Schule und Taschengeld
New/Javaclass/
package de.firma.model;public class Schueler extends Person { //Erbt von der Klasse Person
// Eigenschaften
private String schule;
private double taschengeld;// Konstruktoren public Schueler() { //Konstruktoren heissen wie die Klasse super (); // Das passiert sowieso this.setSchule("Springfield Elementary School"); this.taschengeld = 2.0; //geht, schöner ist aber: this.setTaschengeld(2.0); } // Getter und Setter Methoden: public String getSchule() { return schule; } public void setSchule(String schule) { this.schule = schule; } public double getTaschengeld() { return taschengeld; } public void setTaschengeld(double taschengeld) { this.taschengeld = taschengeld; } //Business Logik @Override public String toString() { return "Schueler{" + "schule='" + schule + '\'' + ", taschengeld=" + taschengeld + "} " + super.toString(); }
}
——————
Disclaimer
Alles was ich mitschrieb und verstanden habe ist ohne Gewähr.
Besten Dank an unseren
Trainer: Hans-Joachim Blanke [email protected]
Mehr dazu im nächsten Blog von mir.
Gruß, Achim Mertens
View or trade
BEER
.Hey @achimmertens, here is a little bit of
BEER
from @pixresteemer for you. Enjoy it!Learn how to earn FREE BEER each day by staking your
BEER
.