You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
7.3 KiB
Java
228 lines
7.3 KiB
Java
package com.company.lösungen;
|
|
|
|
public class Ebook {
|
|
// Öffentliche Klasse zur Repräsentation eines E-Books
|
|
public class Ebook {
|
|
// Deklaration privater Variablen
|
|
private MediaAsset[] assets;
|
|
private String author;
|
|
private int year;
|
|
|
|
// Öffentlicher Konstruktor, der zur Angabe von
|
|
// Autor und Jahreszahl verpflichtet
|
|
public Ebook(String author, int year) {
|
|
this.assets = new MediaAsset[100];
|
|
this.author = author;
|
|
this.year = year;
|
|
}
|
|
|
|
// Getter-Methode zur Rückgabe der Seitenanzahl
|
|
public int numPages() {
|
|
float sum = 0.0f;
|
|
|
|
// Gehe Assets-Array durch
|
|
for (int i = 0; i < assets.length; i = i + 1) {
|
|
// Ist Eintrag in Array vorhanden, dann Summe errechnen
|
|
if (assets[i] != null) {
|
|
sum = sum + assets[i].numPages();
|
|
}
|
|
}
|
|
|
|
return Math.round(sum);
|
|
}
|
|
|
|
// Methode, über die ein MediaAsset hinzugefügt werden kann
|
|
// Das Asset muss an die Methode übergeben werden.
|
|
public void addAsset(MediaAsset asset) {
|
|
// Gehe Assets-Array durch
|
|
for (int i = 0; i < assets.length; i = i + 1) {
|
|
// Ist kein Eintrag in Array vorhanden, dann einmal hinzufügen
|
|
if (assets[i] == null) {
|
|
assets[i] = asset;
|
|
|
|
// Springe aus Schleife
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Methode, die eine String-Repräsentation dieses
|
|
// E-Books zurückliefert.
|
|
public String toString() {
|
|
String output = "Ebook: " + author + " (" + year + ")\nSeiten: " +
|
|
numPages() + "\n-------\n";
|
|
|
|
// Gehe Array-Inhalte durch
|
|
for (int i = 0; i < assets.length; i = i + 1) {
|
|
// Füge toString-Ausgabe hinzu
|
|
if (assets[i] != null) {
|
|
output = output + assets[i].toString();
|
|
}
|
|
}
|
|
|
|
return output;
|
|
}
|
|
}
|
|
|
|
// Klasse zur Beschreibung eines MediaAsset
|
|
public class MediaAsset {
|
|
// Deklaration privater Variablen
|
|
private String file;
|
|
private int size;
|
|
private String language;
|
|
|
|
// Konstruktor, der zur Angabe diverser Informationen verpflichtet
|
|
public MediaAsset(String file, int size, String language) {
|
|
this.file = file;
|
|
this.size = size;
|
|
this.language = language;
|
|
}
|
|
|
|
// Methode zur Rückgabe der Seitenanzahl ist hierbei nicht möglich
|
|
public float numPages() {
|
|
// Ein undefiniertes Asset trägt nicht zur Seitenzahl bei
|
|
return 0.0f;
|
|
}
|
|
|
|
// Methode zur Repräsentation des Assets
|
|
public String toString() {
|
|
return file + " (" + numPages() + " Seiten)\n";
|
|
}
|
|
}
|
|
|
|
// Öffentliche Klasse zur Repräsentation eines TextAssets, die
|
|
// von der Klasse MediaAsset ableitet.
|
|
public class TextAsset extends MediaAsset {
|
|
// Deklaration privater Variablen
|
|
private int numChars;
|
|
|
|
// Konstruktor, der zur Angabe von Werten für Dateinamen, -größe,
|
|
// Sprache sowie Anzahl an Zeichen verpflichtet
|
|
public TextAsset(String file, int size, String language, int numChars) {
|
|
// Aufruf der Basisklasse und Übergabe der Werte
|
|
super(file, size, language);
|
|
|
|
// Spezifische Werte werden lokal gespeichert
|
|
this.numChars = numChars;
|
|
}
|
|
|
|
// Methode zur Abfrage der Anzahl an Seiten
|
|
public float numPages() {
|
|
return numChars / 2000.0f;
|
|
}
|
|
}
|
|
|
|
// Öffentliche Klasse zur Repräsentation eines PictureAssets, die
|
|
// von der Klasse MediaAsset ableitet.
|
|
public class PictureAsset extends MediaAsset {
|
|
// Deklaration privater Variablen
|
|
private int w;
|
|
private int h;
|
|
|
|
// Öffentlicher Konstruktor, der zur Angabe der folgenden Werte
|
|
// verpflichtet
|
|
public PictureAsset(
|
|
String file,
|
|
int size,
|
|
String language,
|
|
int w,
|
|
int h
|
|
) {
|
|
// Aufruf und Übergabe der von der Basisklasse verwalteten Werte
|
|
super(file, size, language);
|
|
|
|
// Übrige Werte werden lokal festgehalten
|
|
this.w = w;
|
|
this.h = h;
|
|
}
|
|
|
|
// Methode zur Berechnung und Rückgabe der Anzahl von Seiten
|
|
public float numPages() {
|
|
float height = h * (960 / (float)w);
|
|
if (height > 600) {
|
|
return 1.0f;
|
|
}
|
|
else {
|
|
return 0.5f;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Öffentliche Klasse zur Repräsentation eines PictureAssets, die
|
|
// von der Klasse MediaAsset ableitet.
|
|
public class AudioAsset extends MediaAsset {
|
|
// Deklaration privater Variablen
|
|
private int duration;
|
|
|
|
// Öffentlicher Konstruktor, der zur Angabe der folgenden Werte
|
|
// verpflichtet
|
|
public AudioAsset(String file, int size, String language, int duration) {
|
|
// Aufruf und Übergabe der von der Basisklasse verwalteten Werte
|
|
super(file, size, language);
|
|
|
|
// Übrige Werte werden lokal festgehalten
|
|
this.duration = duration;
|
|
}
|
|
|
|
// Methode zur Berechnung und Rückgabe der Anzahl von Seiten
|
|
public float numPages() {
|
|
return 0.0f;
|
|
}
|
|
}
|
|
|
|
|
|
// Öffentliche Klasse zur Repräsentation eines VideoAssets, die
|
|
// von der Klasse MediaAsset ableitet.
|
|
public class VideoAsset extends MediaAsset {
|
|
// Deklaration privater Variablen
|
|
private int duration;
|
|
private int w;
|
|
private int h;
|
|
|
|
// Konstruktor, der zur Angabe der folgenden Werte verpflichtet
|
|
public VideoAsset(
|
|
String file,
|
|
int size,
|
|
String language,
|
|
int duration,
|
|
int w,
|
|
int h
|
|
) {
|
|
// Aufruf und Übergabe der von der Basisklasse verwalteten Werte
|
|
super(file, size, language);
|
|
|
|
// Übrige Werte werden lokal festgehalten
|
|
this.duration = duration;
|
|
this.w = w;
|
|
this.h = h;
|
|
}
|
|
|
|
// Methode zur Berechnung und Rückgabe der Anzahl von Seiten
|
|
public float numPages() {
|
|
float height = h * (960 / (float)w);
|
|
if (height > 600) {
|
|
return 1.0f;
|
|
}
|
|
else {
|
|
return 0.5f;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Startpunkt des Hauptprogramms
|
|
// Hier werden die implementierten Klassen zu Demonstrations- und
|
|
// Testzwecken instanziiert und verwendet.
|
|
public void setup() {
|
|
Ebook testBook = new Ebook("Stephan Wiefling", 2017);
|
|
testBook.addAsset(new TextAsset("Aufgabe 1", 12, "Deutsch", 3444));
|
|
testBook.addAsset(new AudioAsset("Audio 1", 12, "Deutsch", 95));
|
|
testBook.addAsset(
|
|
new VideoAsset("Video 1", 12, "Deutsch", 95, 800, 800)
|
|
);
|
|
testBook.addAsset(new PictureAsset("Bild 1", 12, "Deutsch", 2000, 600));
|
|
testBook.addAsset(new TextAsset("Aufgabe 2", 12, "Deutsch", 7655));
|
|
System.out.println(testBook);
|
|
}
|
|
}
|