9LehrstuhlfürBioinformatik EinführungindieProgrammierungfürBioinformatiker Prof.B.Rost,Dr.L.Richter Blatt09 19.12.2016 ObjektorientierungII Aufgabe9.1.Modellierung-GeometrischeFiguren VerwendenSiefürdieseAufgabenurdieerlaubtenJava-Methoden. Prismen oder Zylinder sind geometrische Körper, die durch Parallelverschiebung ihrer Grundfläche im Raum entstehen. Die folgende Abbildung zeigt als Beispiele für Prismen ein Dreiecksprisma, einen Quader und einen Zylinder, die durch Verschiebung eines Drei- ecks, eines Rechtecks bzw. eines Kreisesentstehen: PrismensinddurchihreHöheundihrejeweiligeGrundflächebestimmt.Als GrundflächeninFragekommen(zumBeispiel): • regelmäßige n-Ecke; bestimmt durch die Anzahl der Ecken und die Seitenlänge • Kreise;bestimmtdurchihrenRadius • Rechtecke;bestimmtdurchBreiteundLänge EineGrundflächemussdieBerechnungUmfangundFlächeninhaltzurVerfügung stellen;einPrismadieBerechnungvonOberflächeundVolumen. IndieserAufgabesolleineKlassenhierarchiefürdiesegeometrischenKörperin Javaim-plementiertwerden. 1) Erstellen Sie die Klasse Grundflaeche.java, als Oberklasse für alle Grundflächen. Legen sie Basisversionen der Methoden umfang() und flaeche(), sowie eine geeignete toString()-Methode an. 2) Erstellen Sie Klassen Kreis.java, Rechteck.java und NEck.java zur Repräsentation von Kreisen, Rechtecken und n-Ecken. Diese Klassen habenGrundflaechealsOberklasseunderweiterndieOberklasseum die benötigten Objektvariablen und überschreiben die Methoden zur Flächen- und Umfangberechnung. Ergänzen sie die toString()- Methodesinnvoll.VerwendenSienurIntegerbeidenObjektvariablen,um UngenauigkeitenbeidenarithmetischenOperationenzuvermeiden. 3) Erstellen sie die Klasse Prisma.java mit den benötigten Objektvariablen und den Methoden volumen() und oberflaeche(), sowieeinergeeignetentoString()-Methode.VerwendenSiewiezuvor beiObjektvariablennurIntegerfürGrößenangaben. 4) Ergänzen Sie alle Grundflächen um die Methode istQuadrat(), die zurückgibt, ob es sich bei der aktuellen Instanz um ein Quadrat handelt. Z.B.fallsbeieinemRechteckLängeundBreitegleichsind. 5) Erstellen Sie die Klasse Quadrat.java, welche durch ihre Seitenlänge eindeutig bestimmt ist, als weitere Unterklasse von Grundflaeche und ergänzen sie alle Grundflächen um einem Methode zuQuadrat(), die, falls es sich um ein Quadrat (auch passende Rechtecke und n-Ecke) handelt, ein Quadrat-Object mit der entsprechenden Seitenlänge zurückgibt. Handelt es sich nicht um ein Quadrat, dann wird null zurückgegeben. 6) Ergänzen sie die Klasse Prisma um eine Methode istWuerfel(), die zurückgibt,obessichbeidemaktuellenPrismaumeinenWürfelhandelt. 7) TestenSieIhrenCode. Hinweise: • PlanenSievordemProgrammierendieKlassenhierarchie • FassenSiegleichartigeAttributeundMethodenineinergeeigneten Oberklassezu-sammen. • VerwendensieGetter-Methoden. • GreifensiefallsmöglichaufbereitsimplementierteMethodenzurück. • DieFlächeeinesregelmäßigenn-EcksmitSeitenlängeaist • DieJava-KlasseMathstelltinderKlassenvariablenMath.PIeinenWert für π sowie in der Klassenmethode Math.tan() die Berechnung des TangenszurVerfügung.DieseMethodedarfverwendetwerden. • TestensieihreImplementierungmiteinergeeignetenTest-Klasse. !∗! ! !∗!"# ! ! Aufgabe9.2Polymorphie VerwendenSiefürdieseAufgabenurdieerlaubtenJava-Methoden. Wiederholen Sie gemeinsam im Tutorium die in der Vorlesung besprochende Vorgehens-weisezurBestimmungderMethode,diebeieinemMethodenaufruf ausgeführtwird.Be-sprechenSiebasierendaufdieserVorgehensweise,welche Methoden bei den Aufrufen im Programm ExampleOne.java ausgeführt werden undüberprüfenSieIhreÜberlegungenanschließend. BeachtenSie,dassesinJavaimAllgemeinenschlechterStilist,mehrereKlassen in einer Datei zu haben (sogenannte nested classes). In ExampleOne.java wirddaslediglichverwendet,umalleKlassensofortüberblickenundsomitdie Methodenaufrufeleichterbestimmenzukönnen. Aufgabe9.3LinkedListderJava-API Machen Sie sich in der folgenden Aufgabe mit der Verwendung der einfach verkettetenListederJava-Standardbibliothekvertraut. UmdieMethodenderKlasseLinkedListderStandard-APIzunutzen,müssen SienachderPaketdeklarationfolgendeAnweisungeneinfügen: import java.util.LinkedList; Nun steht Ihnen eine generische Liste zur Verfügung. Hinweis: Das Thema GenericswirdinderVorlesungnochbehandelt,hiergehtesjedochnichtdarum, dieseThematikbereitszuverstehen,sondernlediglichumdieVerwendungder LinkedList der Standard-API. Sie können via dem Ausdruck new LinkedList<T>() eineListeerstellen,dienurObjektevomTypTenthält(sowie allen abgeleiteten Typen). Elemente e können Sie via der Methode add(T e) anhängen. Um eine Liste zu durchlaufen, also von dem ersten Element bis zum letztenElement,könnenSiefolgendesGrundgerüstverwenden: LinkedList<String> list = new LinkedList<String>(); // ... list.add("foo"); list.add("bar"); ... for (String myString : list) { // ... } Der Variable myString wird in jedem Schleifendurchlauf ein Listenelement zugewiesen.AngefangenvondemerstenElementbiszumletzten.Innerhalbder Schleife können Sie dann via der Variable myString auf das jeweilige Listenelementzugreifen. ErstellenSiefolgendesProgramm: • LesenSievomBenutzereineganzeZahlnein. • ErstellenSieeineLinkedList<String>undspeichernSieindieser alleganzenZahleninaufsteigenderReihenfolgevon0bisn(alsString), fallsn≥0.IstnnegativbleibtdieListeleer. • GebenSiealleElementederListeinderReihenfolge,inderdieElemente inderListeenthaltensind(beginnendmitdemersten)aus,indemSiemit derobenerläutertenfor-SchleifedurchdieListeiterieren. Aufgabe9.4GenerischeFrüchte VerwendenSiefürdieseAufgabenurdieerlaubtenJava-. Im Folgenden wollen wir ein Programm schreiben, welches einen Früchtekorb, bestehendausÄpfeln,BananenundAnanas,simuliert.Dafürbenötigenwireine OberklasseFruit,wovondieKlassenApple,BananaundPineappleerben sollen. Des Weiteren interessieren wir uns im Speziellen für die Äpfelsorten Granny SmithsowiePink Lady,welchealsUnterklassenderKlasseApple implementiert werden sollen. D.h. Ihr Programm muss folgende Klassenhierarchiewiderspiegeln: In der Klasse Fruit sollen die Methoden isApple, isBanana sowie isPineapple jeweils false zurückliefern. Überschreiben Sie in den abgeleiteten Klassen die jeweilige Methode, sodass true zurückgeliefert wird, wenn es sich um das jeweilige Obst handelt. Achten Sie darauf, so wenig wie möglichabersovielwienötiganMethodenzuüberschreiben. Die Methode shelfLife gibt einen Wert zurück, der angibt, wie lange das jeweilige Obst haltbar ist (in Tagen). Dabei sind Früchte in Tagen wie folgt haltbar: • Früchte≈-1 • Äpfel≈30 o GrannySmith≈50 o PinkLady≈20 • Bananen≈7 • Ananas≈20 Beispiel:newApple().shelfLife()liefertdenWert30. Implementieren Sie nur die nötigsten Methoden und vermeiden Sie Redundanzenwannimmermöglich. NunwollenwirdenFrüchtekorbwiefolgtimplementieren: AlleFrüchteimKorbsolleninderprivatenListefruitsgespeichertwerden.Da wirmittlerweileProfisimListenprogrammierensind,machenwirunsdenSpaß und verwenden zum ersten Mal (nur in dieser Aufgabe) die einfach verkettete Liste aus der Java-Standardbibliothek (Sie dürfen alle verfügbaren LinkedListMethodenderStandard-APIverwenden).FügenSieandenAnfang,abernachder PaketdeklarationinderDateiFruitBasket.javafolgendeAnweisungenein: import java.util.LinkedList; Nun steht Ihnen eine generische Liste zur Verfügung. Sie können via dem Ausdruck new LinkedList<T>() eine Liste erstellen, die nur Objekte vom Typ T enthält (sowie allen abgeleiteten Typen). Elemente e können Sie via der Methode add(T e) anhängen. Um eine Liste zu durchlaufen, also von dem ersten Element bis zum letzten Element, können Sie folgendes Grundgerüst verwenden: for (Fruit f : fruits) { // ... } DerVariablefwirdinjedemSchleifendurchlaufeinListenelementzugewiesen. Angefan- gen von dem ersten Element bis zum letzten. Innerhalb der Schleife könnenSiedannviaderVariablefaufdasjeweiligeListenelementzugreifen. Die Methode addFruit(Fruit f) soll das Obst f an die Liste fruits anhängen. Die Methode getApples() liefert eine Liste aller Objekte vom Typen Apple zurück, die in der Liste fruits enthalten sind. Achten Sie auch auf Subtypen vonApple,diesesindschließlichauchvomTypenApple! Die Methode getEqualOrLongerShelfLife(int n) liefert eine Liste von Früchtenzurück,dieinderListefruitsenthaltenundmindestensnvieleTage haltbarsind.