OOP Uebungen: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 19: Zeile 19:
Im folgenden finden sich Übungen zur objektorientierten Programmierung.
Im folgenden finden sich Übungen zur objektorientierten Programmierung.
==== Aufgabe: Datenklasse ====
==== Aufgabe: Datenklasse ====
Es soll eine '''Methode''' erstellt werden, welche das '''kleinste''' und das '''größte Element''' sowie den '''Durchschnitt''' eines {{JSL|int[]}} ermittelt und zurückgibt. Alle  ermittelten Werten sollen in einem Datenobjekt zurückgegeben werden. Erstelle dazu eine Datenklasse welche die entsprechenden Werte enthält.
Es soll eine '''Methode''' erstellt werden, welche das '''kleinste''' und das '''größte Element''' sowie den '''Durchschnitt''' eines {{JSL|int[]}} ermittelt und zurückgibt. Alle  ermittelten Werten sollen in einem Datenobjekt zurückgegeben werden. Erstelle dazu eine Datenklasse welche die entsprechenden Werte enthält. Teste diese '''Methode''' ausgiebig mit verschiedenen {{JSL|int[]}}, verwende auch ein zufallsgeneriertes {{JSL|int[]}} mit negativen und positiven Werten.
* Erstelle die Datenklasse mit einem Sinnvollen Klassennamen und entsprechenden '''Attributen'''. Achte hierbei auch auf die Korrekte Sichtbarkeit
* Erstelle die Datenklasse mit einem Sinnvollen Klassennamen und entsprechenden '''Attributen'''. Achte hierbei auch auf die Korrekte Sichtbarkeit
* Erstelle in in der Datenklasse einen '''Konstruktor''' welcher alle Werte entgegennimmt und erstelle '''getter''' für alle Werte
* Erstelle in in der Datenklasse einen '''Konstruktor''' welcher alle Werte entgegennimmt und erstelle '''getter''' für alle Werte
* Überschreibe die {{JSL|toString()}} '''Methode''' und erstelle einen schönen {{JSL|String}} mit den gegebenen Werten.
* Überschreibe die {{JSL|toString()}} '''Methode''' und erstelle einen schönen {{JSL|String}} mit den gegebenen Werten.
==== Aufgabe: Person ====
Erstelle eine '''Klasse''' welche die typischen Werte eines Menschen speichern kann.
* Größe
* Alter
* Name
* Gewicht
Erstelle weiters eine Methode welche eine {{JSL|List}} von Personen erhält bezüglich '''Größe''', '''Alter''', '''Gewicht''', das '''kleinste''' und das '''größte Element''' sowie den '''Durchschnitt''' berechnet und wie in der vorhergehenden Aufgabe in einer eigenen Klasse zurückgibt.


==== Aufgabe: Fotoapparat ====
==== Aufgabe: Fotoapparat ====

Version vom 3. November 2021, 06:33 Uhr

Im folgenden finden sich Übungen zur objektorientierten Programmierung. Weiters soll direkt ein überblick über die Themen erfolgen.

Überblick

Im folgenden sollen diese Begriffe verstanden und angewandt werden. Diese sind nicht chronologisch geordnet:

  • Klasse
    • Instanz- vs. Klassenmethode
    • Instanz- vs. Klassenattribut
    • Innere Klassen (statisch vs. nicht statisch)
  • Vererbung
  • Abstrakte Klasse
  • Interface
  • Beziehungen
    • Has-A vs. Is-A
    • Implementierung von Interfaces
  • Collections (Liste, Set, Map)
  • Generics
  • Designpatterns

Übungen

Im folgenden finden sich Übungen zur objektorientierten Programmierung.

Aufgabe: Datenklasse

Es soll eine Methode erstellt werden, welche das kleinste und das größte Element sowie den Durchschnitt eines int[] ermittelt und zurückgibt. Alle ermittelten Werten sollen in einem Datenobjekt zurückgegeben werden. Erstelle dazu eine Datenklasse welche die entsprechenden Werte enthält. Teste diese Methode ausgiebig mit verschiedenen int[], verwende auch ein zufallsgeneriertes int[] mit negativen und positiven Werten.

  • Erstelle die Datenklasse mit einem Sinnvollen Klassennamen und entsprechenden Attributen. Achte hierbei auch auf die Korrekte Sichtbarkeit
  • Erstelle in in der Datenklasse einen Konstruktor welcher alle Werte entgegennimmt und erstelle getter für alle Werte
  • Überschreibe die toString() Methode und erstelle einen schönen String mit den gegebenen Werten.

Aufgabe: Person

Erstelle eine Klasse welche die typischen Werte eines Menschen speichern kann.

  • Größe
  • Alter
  • Name
  • Gewicht

Erstelle weiters eine Methode welche eine List von Personen erhält bezüglich Größe, Alter, Gewicht, das kleinste und das größte Element sowie den Durchschnitt berechnet und wie in der vorhergehenden Aufgabe in einer eigenen Klasse zurückgibt.

Aufgabe: Fotoapparat

  • Fotoapparat mit verschiedenen Attributen (Brennweite min/max), Hersteller, Model, Megapixel
  • setter/getter
  • Schöner String in toString()
  • methode takePhoto()

Aufgabe: Fotoapparat & Objektiv & Speicherkarte

Erweitere das vorhergehende Beispiel um die Klassen Objektiv und Speicherkarte. Die Brennweite der Kamera fällt demnach weg. Das Objektiv und die Speicherkarte sollen getauscht werden können. Erstelle Methoden um zu erfragen wieviele Fotos bereits aufgenommen wurden und wieviel Speicher noch frei ist. Für die Berechnung speicherplatz pro bild, kann ein wert von 0.3mb pro Megapixel angenommen werden.[1]

Aufgabe: Filesystem traversal

Erstelle eine Methode welche durch das Dateisystem ab einem gegebenen Pfad navigiert (Ob der Pfad als String oder File übergeben wird ist egal). Wird der Pfad nicht gefunden, so soll eine FileNotFoundException geworfen werden. Die Navigation soll dabei Rekursiv erfolgen. Gib den Pfad mit entsprechender Einrückung aus.

Tip zur Rekursion: Iteriere in einer Methode durch alle Kinder einer Datei. Handelt es sich um einen Ordner so rufe für jedes Kind dieses Ordners die Methode wieder auf und erhöhe die Einrückung.

Ausgabe (muss nicht genau so aussehen:

├── otherPackageInvocationTest
   └── Test.java
├── week1
   ├── tag3
      ├── Aufgabe1.java
      ├── Aufgabe2.java
      └── Loops.java
   ├── tag4
      ├── Christbaum2.java
      ├── Christbaum.java
      ├── Loops.java
      ├── Traingle2.java
      └── Triangle.java
   ├── tag5
      ├── Circle2.java
      ├── Circle3.java
      ├── Circle.java
      └── Methods.java
   └── tag5a
       └── UseMethods.java
├── week2
   ├── day3
      ├── Calendar.java
      ├── LogicPuzzle.java
      ├── Recursion2.java
      └── Recursion.java
   └── day4
       ├── Menu.java
       └── UserInput.java

Aufgabe: Filesystem traversal usefull

Erstelle eine Methode welche durch das Dateisystem ab einem gegebenen Pfad navigiert. Die Methode erhält weiters eine Klasse FileReceiver. Diese Klasse hat eine Methode onFileReceived(int depth, File file) welche zur Verarbeitung jeder einzelnen Datei, bzw. jedes einzelnen Ordners aufgerufen wird. Erstelle verschiedene weitere Klassen die von FileReceiver erben und onFileReceived(int depth, File file) überschreiben und folgende Aufgaben erfüllen sollen:

  • Größe aller Dateien berechnen
  • Anzahl der Dateien mit einer bestimmten Endung zählen
  • Alle Dateiendungen Zählen. Tip.: HashMap

Aufgabe: Filesystem traversal usefull & extended

Wie in der vorhergehenden Aufgabe, jedoch soll nicht nur ein FileReceiver übergeben werden können, sondern eine List von FileReceiver.