From a06d23a833fa99b83a89a51ee6c6f6e7269d41b1 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Tue, 15 Dec 2015 10:54:53 +0100 Subject: EiP - 08 --- ws2015/eip/blaetter/08/H8-1ac.md | 6 +++ ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hund.java | 11 +++++ .../blaetter/08/de/lmu/ifi/tcs/Hundeschule.java | 20 +++++++++ .../08/de/lmu/ifi/tcs/HundeschuleKorrekt.java | 52 ++++++++++++++++++++++ ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Katze.java | 12 +++++ ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Tier.java | 8 ++++ .../eip/blaetter/08/de/lmu/ifi/tcs/TierDemo.java | 30 +++++++++++++ .../eip/blaetter/08/de/lmu/ifi/tcs/TierSchule.java | 13 ++++++ ws2015/eip/blaetter/08/manifest | 2 + 9 files changed, 154 insertions(+) create mode 100644 ws2015/eip/blaetter/08/H8-1ac.md create mode 100644 ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hund.java create mode 100644 ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hundeschule.java create mode 100644 ws2015/eip/blaetter/08/de/lmu/ifi/tcs/HundeschuleKorrekt.java create mode 100644 ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Katze.java create mode 100644 ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Tier.java create mode 100644 ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierDemo.java create mode 100644 ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierSchule.java create mode 100644 ws2015/eip/blaetter/08/manifest (limited to 'ws2015') diff --git a/ws2015/eip/blaetter/08/H8-1ac.md b/ws2015/eip/blaetter/08/H8-1ac.md new file mode 100644 index 0000000..40b6ee9 --- /dev/null +++ b/ws2015/eip/blaetter/08/H8-1ac.md @@ -0,0 +1,6 @@ +# Vererbung vs. Aggregation + +a) `ArrayList` implementiert anscheinend `addAll` nicht durch mehrfachen Aufruf von `add`. + Die (schon prinzipiell schlecht designte) Prüfung vor dem Einfügen wird umgangen. + +b) Wir kontrollieren nun die gesamte API unserer Hundeschule und können somit garantieren, dass auf unsere interne Liste nur durch unseren Code zugegriffen wird. diff --git a/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hund.java b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hund.java new file mode 100644 index 0000000..8e86ace --- /dev/null +++ b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hund.java @@ -0,0 +1,11 @@ +package de.lmu.ifi.tcs; + +/** + * Created by jost on 08.12.15. + */ +public class Hund implements Tier { + @Override + public String gibLaut() { + return "Wau! Wau!"; + } +} diff --git a/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hundeschule.java b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hundeschule.java new file mode 100644 index 0000000..e802c6a --- /dev/null +++ b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Hundeschule.java @@ -0,0 +1,20 @@ +package de.lmu.ifi.tcs; + +import java.util.ArrayList; + +/** + * Ein Beispiel, wie man es _nicht_ machen sollte! + * + * Created by jost on 08.12.15. + */ +public class Hundeschule extends ArrayList { + + @Override + public boolean add(Tier t){ + if (t.gibLaut().equals("Wau! Wau!")) + return super.add(t); + else + return false; + } + +} diff --git a/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/HundeschuleKorrekt.java b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/HundeschuleKorrekt.java new file mode 100644 index 0000000..6fb527f --- /dev/null +++ b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/HundeschuleKorrekt.java @@ -0,0 +1,52 @@ +package de.lmu.ifi.tcs; + +import java.util.ArrayList; +import java.util.Iterator; + +class HundeschuleKorrekt { + private ArrayList roster; + + public HundeschuleKorrekt() + { + roster = new ArrayList(); + } + + private static boolean isAdmissable(Tier tier) + { + if (tier.getClass().equals(Hund.class)) + return true; + return false; + } + + public boolean add(Tier tier) + { + if (! isAdmissable(tier)) + return false; + return roster.add(tier); + } + + public boolean addAll(ArrayList tiere) + { // Ugh. + Iterator it = roster.iterator(); + ArrayList admissable = new ArrayList(); + + while (it.hasNext()) + { + Tier tier = it.next(); + if (isAdmissable(tier)) + admissable.add(tier); + } + + return roster.addAll(admissable); + } + + public boolean remove(Tier tier) + { + return roster.remove(tier); + } + + public ArrayList getTiere() + { + return roster; + } +} diff --git a/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Katze.java b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Katze.java new file mode 100644 index 0000000..0e20b72 --- /dev/null +++ b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Katze.java @@ -0,0 +1,12 @@ +package de.lmu.ifi.tcs; + +/** + * Created by jost on 08.12.15. + */ +public class Katze implements Tier { + + @Override + public String gibLaut() { + return "Miau!"; + } +} diff --git a/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Tier.java b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Tier.java new file mode 100644 index 0000000..fabd990 --- /dev/null +++ b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/Tier.java @@ -0,0 +1,8 @@ +package de.lmu.ifi.tcs; + +/** + * Created by jost on 08.12.15. + */ +public interface Tier { + String gibLaut(); +} diff --git a/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierDemo.java b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierDemo.java new file mode 100644 index 0000000..3a3adfa --- /dev/null +++ b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierDemo.java @@ -0,0 +1,30 @@ +package de.lmu.ifi.tcs; + +import java.util.ArrayList; + +public class TierDemo { + + public static void main(String[] args) { + ArrayList tiere = new ArrayList (); + tiere.add(new Katze()); + tiere.add(new Hund()); + Hundeschule hundeschule = new Hundeschule(); + hundeschule.add(new Hund()); + hundeschule.add(new Katze()); + hundeschule.addAll(tiere); + for (Tier t : hundeschule) { + System.out.println(t.gibLaut()); + } + System.out.println("Test Teil 2:"); + HundeschuleKorrekt schule = new HundeschuleKorrekt(); + schule.add(new Hund()); + schule.add(new Katze()); + schule.add(new Hund()); + schule.add(new Katze()); + schule.addAll(tiere); + for (Tier t : schule.getTiere()) { + System.out.println(t.gibLaut()); + } + } + +} diff --git a/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierSchule.java b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierSchule.java new file mode 100644 index 0000000..0d25738 --- /dev/null +++ b/ws2015/eip/blaetter/08/de/lmu/ifi/tcs/TierSchule.java @@ -0,0 +1,13 @@ +package de.lmu.ifi.tcs; + +import java.util.ArrayList; + +/** + * Created by jost on 08.12.15. + */ +public interface TierSchule { + boolean add(Tier tier); + boolean remove(Tier tier); + boolean addAll(ArrayList tiere); + ArrayList getTiere(); +} diff --git a/ws2015/eip/blaetter/08/manifest b/ws2015/eip/blaetter/08/manifest new file mode 100644 index 0000000..35fc1ec --- /dev/null +++ b/ws2015/eip/blaetter/08/manifest @@ -0,0 +1,2 @@ +H8-1ac.pdf +de/lmu/ifi/tcs \ No newline at end of file -- cgit v1.2.3