Lernstoff 1xHIF POS PLF-2 2024-01-09

3. Typumwandlung (cast)

4. Methoden mit komplizierteren Zusammenhängen

Z.B. altes Laborbeispiel 08: Labor – Auto

Dazu eine ausführlich Javadoc-kommentierte Beispiel-Lösung: Demo Klasse Auto samt Javadoc, Testklasse

6. Debugger-Verwendung zur Fehlersuche

7. String-Methoden

8. Assoziationen

Siehe auch https://moodle.spengergasse.at/mod/assign/view.php?id=209653 [POS_JAVA_1CHIF_2324: Aufgabe 10 - Assoziationen: Fahrrad]
oder https://moodle.spengergasse.at/mod/assign/view.php?id=210536 [POS_JAVA_1CHIF_2324: Aufgabe 11 - Assoziationen: Miniwald]
und https://moodle.spengergasse.at/mod/assign/view.php?id=211328 [POS_JAVA_1CHIF_2324: Aufgabe 12 - Assoziationen: Mittagessen]

Wichtig:

  • Deklaration von Objekt-Variablen (z.B. private Adresse wohnAdr;) erzeugt noch kein Objekt, sondern nur eine Variable, die vorerst null enthält und später durch Zuweisung eine Objekt-Referenz aufnehmen kann: wohnAdr = new Adresse(…​); oder gleich bei Deklaration eine Zuweisung erhält: Adresse eineAdr = getWohnAdr();)

  • Null-Prüfung VOR Verwendung von Objekt-Variablen, da diese null enthalten könnten:
    if (name == null || name.length() < 2) { …​ } oder
    if (name != null && name.length() >= 2) { …​ }

10. WHILE-Schleife (möglicherweise "Bonus-Beispiel")

Theorie dazu siehe Wiederholungsanweisung WHILE,
Labor-Bsp. siehe Lab – Schleifen: Einstieg

10.1. Mathe-Beispiele zu "while"

10.2. Zeichnen mit Zeichen (while)

Typische Beispiele: Zeichnen von "M", "N", "V", "W", "X" (erst V, dann Dach), "Y" (erst V, dann senkrechter Strich mit Einrückung).

Am einfachsten mit Hilfsmethode zum Ausgeben eines horizontalen Balkens aus z.B. '-' oder Leerzeichen zur Einrückung, siehe Waagrechte Balken aus Einzelzeichen.

11. Statische Methoden, Klassenvariable, Konstante

Kein zwingend nötiger Stoff!!, aber sinnvoll z.B.:

  • Verwendung von Klassenvariabler bei Util für Bildschirm-Ausgaben: private static Util u = new Util();

  • Mathematische Konstante u.ä., z.B. Math.PI

12. Wichtige Beispiele:

13. Alter Lernstoff für PLF 1:

13.1. Wichtige Begriffe zu Programmieren, Objektorientierung (OO), Java

IDE, Compiler, Editor, Debugger, JVM,
Klasse, Objekt, Attribut, Instanzvariable,
Typ, Methode, Methodensignatur, Deklaration, Implementierung,
Getter, Setter, Konstruktor, Standardkonstruktor (=Defaultkonstruktor),
lokale Variable, Parametervariable, Parametertyp, Parameterwert,
Rückgabetyp, Rückgabewert,
Ausdruck (=Expression), Anweisung (=Statement)

Sollten mit wenigen Stichworten, Beispielcode ungefähr beschrieben werden können. Ausführlichere Beschreibungen siehe z.B. in

13.2. Datentypen

int (ganze Zahlen),
boolean (true, false),
double (auch nicht-ganzzahlige Werte),
char (Einzelzeichen, Literale mit z.B. 'x'),
String (Texte, Literale mit z.B. "Hallo Leute" – Objekt-Datentyp!!).
Details zu den primitiven Datentypen siehe z.B. Ausgabe, Ausdrücke, Operatoren, Datentypen (v.a. Abschnitt 5 - Primitive Datentypen).

Nicht vergessen: Strings werden (wie alle anderen Objekttypen auch) mit txt1.equals(txt2) auf Gleichheit geprüft, auf Ungleichheit durch Vorstellen von '!' (bedeutet NOT).
Beispiele:
if (txt.equals("AUDI")) {System.out.println("txt ist AUDI");}
if ( ! txt.equals("gruen")) {System.out.println("txt ist NICHT gruen");}
Details siehe String-Methoden, Datentyp 'char', Parameter-Validierung.

13.3. If / else if / else

Wird z.B. für Parameter-Validierung in den Settern und für "smarte" Ausgabe bei boolean-Attributen verwendet.
Beispiel zu boolean:

public class SmartBooleanOutput {
    private boolean allrad = false;

    public void setAllrad(boolean allrad) {
        this.allrad = allrad;
    }
    public String allradTxt() {
        String arTxt;  // lokale Variable
        if (allrad) {
            arTxt = "mit";
        } else {
            arTxt = "OHNE";
        }
        return arTxt;
    }
    public void printInfo() {
        // ...
        System.out.println("Fahrzeug " + allradTxt() + " Allrad-Antrieb");
    }
}

liefert bei setAllrad(false) und Aufruf von printInfo() Ausgabe Fahrzeug OHNE Allrad-Antrieb, bei setzen auf true Ausgabe Fahrzeug mit Allrad-Antrieb.
Siehe oben und u.a. auch If-Else-Statement, Boolsche Ausdrücke

13.4. UML-Klassendiagramme

  • Aus UML-Klassendiagramm Java-Klasse erstellen (mit den zusätzlichen Spezifikationen im Text der Aufgabenstellung)

  • Aus gegebenem Java-Programm ein UML-Klassendiagramm erstellen (im UML-Diagramm sind nur die Methoden-"Köpfe" enthalten, nicht der innere Teil mit Statements etc.)
    Siehe z.B. Einstieg Java mit BlueJ, Klassendiagramme

13.5. Hinweise zu Java-Programmen

  • Alle Konstruktoren müssen die Setter verwenden (Standardkonstruktor nutzen Literale für die Parameterwerte, die anderen geben die eigenen Parameter weiter, wenn nötig ergänzt mit Literalen, falls einzelne Parameter in der Parameterliste des Konstruktors nicht definiert sind).

    Siehe auch Java Grundlagen

  • Setters müssen die übergebenen Parameterwerte auf Gültigkeit prüfen, wie in Angabe festgelegt oder logisch nötig. Nur boolean Parameter können meist nicht geprüft werden.
    Beispiele:

    • Radius größer 0 und kleiner 1000:     radius > 0 && radius < 1000

    • Text-Länge größer als 3:     txt.length() > 3

    • Text enthält Stück "xx":     txt.contains("xx") // liefert true, wenn der Fall

    • Text beginnt mit Stück "Wei":     "Weihnachten".startsWith("Wei") // liefert `true

  • Ausgabe mit z.B. System.out.println("Wert Attr.1: " + this.attr1 + ", Attr.2: " + getAttr2())

    Das "ln" am Ende bedeutet "Zeilenschaltung". Wenn man in der gleichen Zeile weiterschreiben möchte, verwendet man stattdessen System.out.print(…​)

13.6. Schreiben einer Java-Klasse

  • Oft 2 Konstruktoren (Default=parameterlos und einer mit Parametern): Darin Setter nutzen in BEIDEN (Literale im Defaultkonstr., weiterreichen der Parameter-Variablen im anderen)

  • Alle Setter (mit Parameterprüfungen z.B. . Geprüft werden String-Werte mit den gelernten String-Methoden, Zahlen und Einzelzeichen (char) mit Vergleichsoperatoren

  • Alle Getter

  • möglicherweise eine Berechnungsmethode

  • möglicherweise "smarte" Ausgabe bei boolean-Attributen

  • printInfo() …​ u.U. auch Aufruf von Berechnungsmethoden – z.B. System.out.println("Fläche: " + calcVolumen() + "m³");
    (Zeichen '{', '|', '€', '²', '³' mit Zusatztaste AltGr)