This commit is contained in:
Luca Conte 2023-05-31 16:51:27 +02:00
parent 815d0cfa25
commit 31dd5c47c7
9 changed files with 391 additions and 0 deletions

10
u26/.classpath Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

1
u26/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/bin/

17
u26/.project Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>u26</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,14 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=17
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=17

88
u26/src/Buch.java Normal file
View File

@ -0,0 +1,88 @@
/**
* Klasse für Bücher mit Verlag und Autor
* @author p8q-yhw-u1
*
*/
public class Buch extends Medium {
private String verlag;
private String autor;
/**
* Erzeugt Buch Objekt
* @param titel darf nicht leer sein
* @param erscheinungsjahr darf nicht < 0 sein
* @param verlag darf nicht leer sein
* @param autor darf nicht leer sein
*/
public Buch(String titel, int erscheinungsjahr, String verlag, String autor) {
super(titel, erscheinungsjahr);
this.setVerlag(verlag);
this.setAutor(autor);
}
/**
* Setzt den Verlag des Buchs
* @param verlag darf nicht leer sein
*/
public void setVerlag(String verlag) {
if (verlag == null || verlag.length() == 0) {
throw new IllegalArgumentException("Verlag darf nicht leer sein");
}
this.verlag = verlag;
}
/**
* Gibt den Verlag des Buches zurück
* @return
*/
public String getVerlag() {
return this.verlag;
}
/**
* Setzt den Autor des Buches
* @param autor darf nicht leer sein
*/
public void setAutor(String autor) {
if (autor == null || autor.length() == 0) {
throw new IllegalArgumentException("Autor darf nicht leer sein");
}
this.autor = autor;
}
/**
* Gibt den autor des Buches zurück
* @return
*/
public String getAutor() {
return this.autor;
}
/**
* Gibt die Leihfrist für Bücher zurück
* @return
*/
@Override
public int getLeihFrist() {
return 28;
}
/**
* Gibt eine String repräsentation des Buches zurück
*/
@Override
public String toString() {
return String.format(
"%s: %s (%d) %s",
this.getAutor(),
this.getTitel(),
this.getErscheinungsjahr(),
this.getVerlag()
);
}
}

85
u26/src/CD.java Normal file
View File

@ -0,0 +1,85 @@
/**
* Klasse für CDs mit Künstler und Spielzeit
* @author p8q-yhw-u1
*
*/
public class CD extends Medium {
private String kuenstler;
private int spielzeit;
/**
* Erstellt ein CD Objekt
* @param titel darf nicht leer sein
* @param erscheinungsjahr darf nicht < 0 sein
* @param kuenstler darf nicht leer sein
* @param spielzeit darf nicht < 1 sein
*/
public CD(String titel, int erscheinungsjahr, String kuenstler, int spielzeit) {
super(titel, erscheinungsjahr);
this.setKuenstler(kuenstler);
this.setGesamtspielzeit(spielzeit);
}
/**
* Setzt den Künstler der CD
* @param kuenstler darf nicht leer sein
*/
public void setKuenstler(String kuenstler) {
if (kuenstler == null || kuenstler.length() == 0) {
throw new IllegalArgumentException("Künstler darf nicht leer sein");
}
this.kuenstler = kuenstler;
}
/**
* gibt den Künstler der CD zurück
* @return
*/
public String getKuenstler() {
return this.kuenstler;
}
/**
* Setzt die Gesamtspielzeit der CD
* @param spielzeit darf nicht < 1 sein
*/
public void setGesamtspielzeit(int spielzeit) {
if (spielzeit < 1) {
throw new IllegalArgumentException("Spielzeit darf nicht kleiner als 1 sein");
}
this.spielzeit = spielzeit;
}
/**
* Gibt die Gesamtspielzeit der CD zurück
* @return
*/
public int getGesamtspielzeit() {
return this.spielzeit;
}
/**
* Gibt die Leihfrist für CDs zurück
* @return
*/
@Override
public int getLeihFrist() {
return 14;
}
/**
* Gibt eine String repräsentation der CD zurück
*/
@Override
public String toString() {
return String.format(
"%s: %s (%d) %d Minuten",
this.getKuenstler(),
this.getTitel(),
this.getErscheinungsjahr(),
this.getGesamtspielzeit()
);
}
}

39
u26/src/MedienMain.java Normal file
View File

@ -0,0 +1,39 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class MedienMain {
public static void main(String[] args) {
Set<Medium> medien= new HashSet<Medium>();
Collections.addAll(medien,
new Buch("Building Java Programs - A Back to Basics Approach",
2007, "Addison Wesley", "Stuart Reges, Marty Stepp"),
new CD("Are you Experienced?", 1967, "Jimi Hendrix", 40),
new Zeitschrift("Der Spiegel", 2010, 3) );
System.out.println(getMaxErscheinungsjahr(medien));
// Sortenreines Set von Büchern
Set<Buch> buecher= new HashSet<Buch>();
Collections.addAll(buecher,
new Buch("Building Java Programs - A Back to Basics Approach",
2007, "Addison Wesley", "Stuart Reges, Marty Stepp"),
new Buch("Java ist auch eine Insel",
2009, "Christian Ullenboom", "Galileo Computing"));
System.out.println(getMaxErscheinungsjahr(buecher));
// Sortenreines Set von Zeitschriften
Set<Zeitschrift> zeitschriften= new HashSet<Zeitschrift>();
Collections.addAll(zeitschriften,
new Zeitschrift("Der Spiegel", 2009, 12),
new Zeitschrift("Der Spiegel", 2010, 1),
new Zeitschrift("Der Spiegel", 2010, 2));
System.out.println(getMaxErscheinungsjahr(zeitschriften));
}
public static int getMaxErscheinungsjahr(Set<? extends Medium> medien) {
int max = 0;
for (Medium m : medien) {
max = Math.max(m.getErscheinungsjahr(), max);
}
return max;
}
}

75
u26/src/Medium.java Normal file
View File

@ -0,0 +1,75 @@
/**
* Abstrakte Medium Klasse für Bücher, CDs und Zeitschriften
* @author p8q-yhw-u1
* Note: this class has a natural ordering that is inconsistent with equals
*/
public abstract class Medium implements Comparable<Medium> {
private String titel;
private int erscheinungsjahr;
/**
* Constructor eines Mediums
* @param titel darf nicht leer sein
* @param erscheinungsjahr darf nicht < 0 sein
*/
public Medium(String titel, int erscheinungsjahr) {
this.setTitel(titel);
this.setErscheinungsjahr(erscheinungsjahr);
}
/**
* Setzt das Erscheinungsjahr eines Mediums
* @param erscheinungsjahr darf nicht < 0 sein
*/
public void setErscheinungsjahr(int erscheinungsjahr) {
if (erscheinungsjahr < 0) {
throw new IllegalArgumentException("Erscheinungsjahr muss positiv sein");
}
this.erscheinungsjahr = erscheinungsjahr;
}
/**
* Gibt das Erscheinungsjahr des Mediums zurücck
* @return
*/
public int getErscheinungsjahr() {
return this.erscheinungsjahr;
}
/**
* Setzt den Titel des Mediums
* @param titel darf nicht leer sein
*/
public void setTitel(String titel) {
if (titel == null || titel.length() == 0) {
throw new IllegalArgumentException("Titel darf nicht leer sein");
}
this.titel = titel;
}
/**
* Gibt den Titel des Mediums zurück
* @return
*/
public String getTitel() {
return this.titel;
}
/**
* Gibt die Leihfrist des Mediums zurück
* @return
*/
public abstract int getLeihFrist();
/**
* Vergleicht das Objekt mit einem anderen Medium nach deren Erscheinungsjahren
*
*/
@Override
public int compareTo(Medium m) {
return this.getErscheinungsjahr() - m.getErscheinungsjahr();
}
}

62
u26/src/Zeitschrift.java Normal file
View File

@ -0,0 +1,62 @@
/**
* Klasse für Zeitschriften mit Nummer
* @author p8q-yhw-u1
*
*/
public class Zeitschrift extends Medium {
private int nummer;
/**
* Erstellt ein Zeitschrift Objekt
* @param titel darf nicht leer sein
* @param erscheinungsjahr darf nicht < 0 sein
* @param nummer darf nicht < 1 sein
*/
public Zeitschrift(String titel, int erscheinungsjahr, int nummer) {
super(titel, erscheinungsjahr);
this.setNummer(nummer);
}
/**
* Setzt die Nummer der Zeitschrift
* @param nummer darf nicht < 1 sein
*/
public void setNummer(int nummer) {
if (nummer < 1) {
throw new IllegalArgumentException("Nummer darf nicht kleiner als 1 sein");
}
this.nummer = nummer;
}
/**
* Gibt die Nummer der Zeitschrift zurück
* @return
*/
public int getNummer() {
return this.nummer;
}
/**
* Gibt die Leihfrist für Zeitschriften zurück
* @return
*/
@Override
public int getLeihFrist() {
return 7;
}
/**
* Gibt eine String repräsentation des Buches zurück
*/
@Override
public String toString() {
return String.format(
"%s (%d/%d)",
this.getTitel(),
this.getNummer(),
this.getErscheinungsjahr()
);
}
}