Programming 2 - Java
Vorbereitung Semesterprüfung.
Vorbereitung Semesterprüfung.
-
- 1 / 21
-
Lernkarten
Was sind Ziele von OOP, bzw. welche 6 Eigenschaften sollte Code haben?
Efficient, extendable, maintainable, reliable, usable, reusable
Wie sieht eine CRC-Karte aus ? Was sind deren Inhalte?
Wie ist das Vorgehen beim Erstellen von CRC-Karten?
1. Auf Basis der Systemanforderungen ca. 5 Hauptkonzepte (= Nomen) finden. —> Classes
2. Sich fragen, was die Objekte dieser Klassen wissen und was sie mit diesem Wissen tun können. —> Responsibilities
3. Sich fragen, welche andere Objekte / Klassen eine Klasse kennen muss, damit sie ihre responsibilities wahrnehmen kann —> Collaborators
Was sind einige good practices beim Erstellen von CRC-Karten? (4)
- Papier und Stift verwenden
- Agil bleiben —> Mit Classes, Responsibilities und Collaborators spielen
- Nicht die perfekte Lösung suchen —> Wird sowieso refactored
- Klassen challengen anhand den Design Principles
Welche 4 Arten von Klassen gibt es (im Kontext von CRC)?
1. Klassen, welche ein einzelnes Konzept aus der Problemumgebung repräsentieren (z.B. in der Geometrie -> Rechteck, im Banking -> BankAccount)
2. Klassen welche für die System-Implementierung benötigt werden (z.B. Controller, Factory, …)
3. Value Classes, welche essentielle Werte beinhalten (z.B. Position, Rechteck). Identität spielt keine Rolle und sind oft Immutable
4. Entity Classes. Identität spielt eine Rolle. (z.B. Pacman, Ghost)
Was sind 3 fundamentale Konzepte von OOP?
1. Encapsulation
2. Cohesion
3. Coupling
Was bedeutet Encapsulation? (4 Punkte)
- Klassen sind Blackboxes
- Konzept des Data Hiding -> Variablen sind gegenüber anderen Objekten nicht exposed
- Ist der Schlüssel für Reuse- und reliability
- Regel: Objekte sollen nur durch Method Calls miteinander interagieren
Was bedeutet Cohesion? (1 Punkt)
Wann ist Cohesion aus Sicht einer Klasse gegeben? (1 Punkt)
- Eine Klasse repräsentiert ein einzelnes Konzept
- Ein Public Interface ist cohesive, wenn dessen Feature mit dem Klassenkonzept übereinstimmen (z.B. Klasse Pacman darf das Spiel nicht starten können)
1. Was ist Coupling?
2. Wo ist Coupling grafisch dargestellt?
1. - Coupling = Klassenabhängigkeit. Ist gegeben, wenn Objekte einander gegenseitig brauchen
- High Coupling = Viele Abhängigkeiten // Low Coupling = wenige
- Coupling sollte minimiert werden, um den Impact von Interface-Änderungen zu minimieren
2. - Diese Abhängigkeiten werden im Klassendiagramm visualisiert
Was sind Models?
Was ist das Go-To für Models?
- Werden verwendet, um abstrakte Sicht des Systems zu erhalten (nur Relevantes wird gezeigt)
- UML (= 14 Diagramme, aufgeteilt in structure und behaviour diagrams)
Welche 2 Arten von Models gibt es und mit welchen Diagrammen werden diese räpresentiert?
Welcher Art sind diese Diagramme?
Was zeigen diese auf?
1. Static Model
- Wird mit einem Klassendiagramm dargestellt
- Ist ein structure diagramm
- Sicht zur compile time
2. Dynamic Model
- Wird mit dem Sequenzdiagramm dargestellt
- Ist ein behavour diagramm
- Sicht zur run time
Wie werden folgende Multiplicities im Klassendiagramm angegeben:
- Beliebig viele
- Eines oder mehr
- Null oder eines
- Genau eines
Beliebig viele: *
Eines oder mehr: 1..*
Null oder eines: 0..1
Genau eines: 1
Was ist ein Sequenzdiagramm? Beschreibe die Achsen, Formen, usw.
Was sind Design Principles?
Wie grenzen sich diese von den Fundamental Concepts ab?
Welche gibt es?
Guidelines, um die Ziele der Fundamental Concepts zu erreichen
SOLID:
Single Responsibility Principle (SRP)
Open Closed Principle (OCP)
Liskov Substitution Principle (LSP)
Interface Segregation Principle (ISP)
Dependency Inversion Principle (DIP)
Was besagt das Singles Responsibility Principle (SRP) ?
Jede Klasse sollte nur eine Verantwortlichkeit haben —> Klassen bleiben klein und APIs überschaubar
Was besagt das Open Closed Principle (OCP) ?
System sollte offen für Erweiterung sein, jedoch geschlossen für Änderung
Existierender Code sollte nicht geändert werden müssen, um neue Funktionalitäten hinzuzufügen
Bsp: Geister in Pacman haben unterschiedliche Fortbewegungsarten —> Abstrakte Mover-Klasse mit spezifischen Subclasses statt
Was besagt das Liskov Substitution Principle (LSP) ?
Wo immer ein Objekt einer SUPERKlasse erwartet wird, muss es auch möglich sein, ein Objekt einer SUBKlasse zu geben, ohne Änderungen vornehmen zu müssen.
- Preconditions der Superclass dürfen von abgeleiteten Klassen nicht eingeschränkt werden
- Postconditions dürfen nicht abgeschwächt werden
Was besagt das Interface Segregation Principle (ISP) ?
Clients (Objekte, die andere brauchen) sollten nicht von Methoden abhängen, die sie nicht verwenden
—> API einer Klasse sollte also in mehrere unabhängige Interfaces gesplittet werden (siehe SRP)
Welche 2 Arten gibt es, um Multithreading zu ermöglichen, wie implementiert man sie?
Gibt es Vor- / Nachteile?
1. ExampleClass extends Thread
ExampleClass e = new ExampleClass();
e.start();
2. ExampleClass implements Runnable
ExampleClass e = new ExampleClass();
Thread thread = new Thread(e);
thread.start();
Vor- / Nachteile
Das Implementieren via "extends Thread" braucht kein zusätzliches Thread-Objekt, dafür kann sie von keiner anderen Klasse extenden.
Die Implementation via Runnable Interface benötigt zwar ein zusätzliches Thread-Objekt, dafür wird die Inheritance nicht blockiert. Man kann mehrere Interfaces implementieren.
Erkläre die .join() Methode
thread1.join() pausiert den aktuellen thread so lange, bis thread1 fertig ist, und fährt danach weiter.