Projekt:2021/Fingerübungen: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
Markierungen: Manuelle Zurücksetzung Mobile Bearbeitung Mobile Web-Bearbeitung
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Projektseite
|Projekt=Fingerübungen
|Kurs=Informatik GK
|Schuljahr=2021/22
}}
== Fingerübungen zur Objektorientierten Programmierung ==
== Fingerübungen zur Objektorientierten Programmierung ==


Auf dieser Seite findest Du verschiedene Übungen zur Wiederholung und Festigung der Objektorientierten Programmierung (OOP). Die Übungen sind in verschiedene Kategorien einsortiert. Suche Dir Übungen heraus, bedienen Du noch Nachholbedarf hast.
Auf dieser Seite findest Du verschiedene Übungen zur Wiederholung und Festigung der Objektorientierten Programmierung (OOP). Die Übungen sind in verschiedene Kategorien einsortiert. Suche Dir Übungen heraus, bedienen Du noch Nachholbedarf hast.
=== Grundbegriffe ===
Der Kollege Herr Bolte hat eine [https://youtube.com/playlist?list=PLeKALosMKQIddK62MmKelLjGw7v8BRSWS YouTube-Playliste] zusammengestellt, die am Beispiel der BlueJ-Variante {{Greenfoot}} alle Grundlagen der OOP aus der EF durchgeht und an Beispielen wiederholt. Diese kannst du gut selber nacharbeiten (am besten, indem du die Beispiele direkt mitmachst).
<center>
{{#ev:youtubeplaylist|PLeKALosMKQIddK62MmKelLjGw7v8BRSWS}}
</center>
{{Aufgabe:Start}}
Beschreibe mit eigenen Worten so präzise wir möglich die folgenden Begriffe:
* lokale Variable
* Objektvariable
* Parameter
* Rückgabe
* Datentyp
* Objektreferenz
* Methodenaufruf
* Bedingte Anweisung
* logische Verknüpfung
* Array
{{Aufgabe:End}}
Diese Mindmaps zur OOP zeigt dir die wichtigsten Begriffe im Zusammenhang:
<coggle width="100%">https://embed.coggle.it/diagram/XOznaVTTBkqNLBAK</coggle>


=== Implementierungsdiagramme in Quelltext übersetzen ===
=== Implementierungsdiagramme in Quelltext übersetzen ===


{{Aufgabe:Start}}
{{Aufgabe:Start}}
Erstelle zu den UML-Diagrammen unten jeweils ein ''Klassengerüst'' mot allen gezeigten Methoden. Die Methoden müssen keine Funktionalität enthalten, ergänze bei Methoden mit Rückgaben einfach nur einen <code>return</code> Befehl.
Erstelle zu den UML-Diagrammen unten jeweils ein ''Klassengerüst'' mit allen gezeigten Methoden. Die Methoden müssen keine Funktionalität enthalten, ergänze bei Methoden mit Rückgaben einfach nur einen <code>return</code> Befehl.


Zum Beispiel zu <code>+wuerfeln(): int</code>
Zum Beispiel zu <code>+wuerfeln(): int</code>
Zeile 15: Zeile 45:
</syntaxhighlight>
</syntaxhighlight>


Halte Dich bei der Übersetzung immer genau an das UML-Diagramm. Manche der späteren Diagramme halten sich nicht strikt an unsere Konventionen (z.B. "Alle Objektvariablen sind private").
Halte Dich bei der Übersetzung immer '''genau''' an das UML-Diagramm. Manche der hinteren Diagramme halten sich nicht strikt an unsere Konventionen (z.B. "Alle Objektvariablen sind private"). Achte also auf die Sichtbarkeiten und Namen der Parameter.
{{Aufgabe:End}}
{{Aufgabe:End}}


Zeile 29: Zeile 59:
     +setNenner(pNenner: int): void
     +setNenner(pNenner: int): void
     +kuerzen(): void
     +kuerzen(): void
     +asDecimal(): float
     +asDecimal(): double
}
}
}}
}}
Zeile 56: Zeile 86:
     +abheben(pBetrag: double) double
     +abheben(pBetrag: double) double
}
}
Kunde "1" <-- Bankkonto : -kunde
Bankkonto --> "1" Kunde : -kunde
}}
}}


Zeile 71: Zeile 101:
     +getOeffnungszeiten() String
     +getOeffnungszeiten() String
     +setOeffnungszeiten(pZeiten: String) void
     +setOeffnungszeiten(pZeiten: String) void
     +getMitarbeiter(): Mitarbeiter[]
     +getAngestellte(): Mitarbeiter[]
     +addMitarbeiter(pMitarbeiter: Mitarbeiter) void
     +addAngestellte(pMitarbeiter: Mitarbeiter) void
     +removeMitarbeiter(pMitarbeiter: Mitarbeiter) boolean
     +removeAngestellte(pMitarbeiter: Mitarbeiter) boolean
     +getMedien() Medium[]
     +getBuecher() Medium[]
     +getMedium(pBezeichnung: String) Medium
     +getBuch(pBezeichnung: String) Medium
}
}
class Mitarbeiter {
class Mitarbeiter {
Zeile 81: Zeile 111:
     +adresse: String
     +adresse: String
     +management: boolean
     +management: boolean
     +Mitarbeiter(pName: String, pAdresse: Sring, pIstManagement: boolean)
     +Mitarbeiter(pName: String, pAdresse: String, pIstManagement: boolean)
     +istManagement() boolean
     +istManagement() boolean
     -setManagement(pManagement: boolean) void
     -setManagement(pManagement: boolean) void
Zeile 89: Zeile 119:
     +setAdresse(pAdresse: String) void
     +setAdresse(pAdresse: String) void
}
}
Bibliothek--> "1..n" Mitarbeiter : mitarbeiter[]
class Medium {
    +name: String
    +art: int
    +Medium(pName: String, pTyp: int)
    +getName() String
    +istBuch() boolean
    +istCD() boolean
    +istMagazin() boolean
}
Bibliothek--> "1..n" Mitarbeiter : +mitarbeiter[]
Bibliothek--> "1..n" Medium : -medien[]
}}
}}
{{Lösung:Start|Lösung Bruch}}
<syntaxhighlight lang="java" line="1">
public class Bruch {
private int nenner;
private int zaehler;
public Bruch(int pNenner, int pZaehler) {
nenner = pNenner;
zaehler = pZaehler;
}
public int getNenner() {
return nenner;
}
public void setNenner(int pNenner) {
nenner = pNenner;
}
public int getZaehler() {
return zaehler;
}
public void setZaehler(int pZaehler) {
zaehler = pZaehler;
}
public void kuerzen() {
}
public double asDecimal() {
return (double)zaehler/(double)nenner;
}
}
</syntaxhighlight>
{{Lösung:End}}


=== Mit Objektreferenzen arbeiten ===
=== Mit Objektreferenzen arbeiten ===


In diesem Video zeigt der Kollege Herr Bolte die Grundlagen von Objektreferenzen und der Interaktion von Objekten (hier am Beispiel der BlueJ-Variante {{Greenfoot}}). Die Erklärung aus dem Unterricht (mit dem Vergleich zu einem Paketschein) kannst Du unter [[Lernpfad:Objektorientierte Programmierung mit Java/Referenzen]] finden.
<center>
{{#ev:youtube|uxCjtxdSu24}}
{{#ev:youtube|uxCjtxdSu24}}
</center>
{{Aufgabe:Start}}
Übernimm die gezeigten Klassen in ein neues BlueJ-Projekt und löse die Aufgaben dazu.
{{Aufgabe:End}}
==== Brüche ====
Übernimm die Klasse <code>Bruch</code> von oben und die Klasse <code>Rechner</code> unten.
{{Hinweis|Für das Kürzen eines Bruches benötigst Du den größten gemeinsamen Teiler. Den ggT hatten wir [[Lernpfad:Einführung in Git/8|früher schonmal berechnet]].}}
<syntaxhighlight lang="java" line="1">
public class Rechner {


    /**
    * Multipliziert die Brüche a und b und gibt das Produkt als neues
    * Bruch-Objekt zurück.
    */
    public Bruch multipliziere(Bruch a, Bruch b) {
        return null;
    }
 
    /**
    * Addiert die Brüche a und b und gibt die Summe als neues
    * Bruch-Objekt zurück.
    */
    public Bruch addiere(Bruch a, Bruch b) {
        return null;
    }
    /**
    * Kürzt den Bruch b vollständig (und speichert den gekürzten Bruch in b).
    */
    public void kuerze(Bruch b) {
    }
    /**
    * Bildet den Kehrwert des Bruches (und speichert ihn in b).
    */
    public void kehrwert(Bruch b) {
    }
    /**
    * Dividiert die Brüche a und b und speichert das Ergebnis im Bruch a.
    */
    public Bruch dividiere(Bruch a, Bruch b) {
        return null;
    }
}
</syntaxhighlight>


=== Arrays ===
=== Arrays ===


<center>
{{#ev:youtube|F9Fg_YsZmz4}}
{{#ev:youtube|F9Fg_YsZmz4}}
</center>


[[Kategorie:Projekte:2021/22]]
[[Kategorie:Projekte:2021/22]]

Navigationsmenü