Objektorienterad Programkonstruktion Föreläsning 9 Projektuppgift Collection, Iterator, Composite Christian Smith ccs@kth.se 1
Projektuppgift IM, skickar meddelanden mellan datorer En lite större labbuppgift, egen planering Basuppgift för E, välj till extrauppgifter för C, A Labbarbetet utförs parvis, båda ansvarar för resultatet Labbtid ca 2 h per vecka, för handledning Först redovisas struktur, kan ge 1 bonuspoäng på tentan om godkänt före 2:a februari kod + funktionalitet redovisas senast 9 mars för 1 bonuspoäng till tentan (Tenta: tisdag 13 mars 9:00-12:00) 2
Projektuppgift Projektplan (Bonus före 3 feb) Redovisas muntligt mha förberedda dokument Visa hur ert GUI kommer att se ut Ska innehålla en komplett UML-beskrivning av hur det färdiga programmet förväntas se ut. UML-diagrammet ska beskriva samtliga klasser som man har konstruerat själv, inklusive deras fält och metoder. Om det behövs för överskådlighet kan man göra flera UML-diagram - dels ett överskådligt som visar de stora sambanden men utelämnar detaljerna, och ett eller flera detaljerade som beskriver de olika delarna. 3
E - uppgift För betyg E på detta moment krävs att man: presenterat en godkänd projektplan (E1), presenterat ett program som uppfyller samtliga specifikationer (E2) Precis som i labbarna krävs att båda i gruppen kan redogöra för alla delarna av uppgiften, och förklara vad olika delar av koden gör och varför ni har valt att göra som ni gör. 4
Specifikationer för E Detaljer finns på kurshemsidan! Skriv ett program som kan agera antingen server eller klient En klient ska kunna koppla upp sig mot en server När uppkoppling är avklarad, ska man kunna skicka textmeddelanden till varandra, mellan två olika datorer Meddelandena kodas med XML, och innehåller information om vem som skickat meddelandet och hur det ska se ut (t.ex färg) Om man gjort allting rätt ska man kunna koppla upp sig mot program som andra grupper har gjort, och inte bara sitt eget! Måste följa stilkonventioner och kommentera väl! 5
Högre betyg Man får betyg C om man utöver kraven för E uppfyller kraven för en extrauppgift, A om man uppfyller kraven för alla Extrauppgifter: Koppla ihop upp till fyra (eller fler) program samtidigt Kryptera kommunikationen Skicka filer mellan två olika datorer Om man gjort rätt går det fortfarande att kommunicera med alla andra gruppers program! Detaljerade specifikationer finns på kurshemsidan 6
Collections Ett samlingsnamn på objekt som innehåller en samling av andra objekt Det finns många olika sorters Collections, t.ex listor, träd, mängder, mm I Java finns gränssnittet Collection, som definierar ett antal metoder som är gemensamma, bl.a add(element e) garanterar att elementet e finns (valfri) addall(collection c) garanterar att alla element i c finns (valfri) clear() - tömmer samlingen size() - returnerar antalet element toarray() - returnerar en Array med alla alement i iterator() - returnerar en Iterator 7
Collections Med Collection-gränsnittet behöver man inte veta hur den interna representationen ser ut, man kan ändå stoppa in och plocka ut element Sett åt andra hållet, om man själv skriver en klass som använder sig av gränsnittet, så kan man använda många inbyggda funktioner i Javabiblioteken, som tex for each MyCollection collection = new MyCollection(); for (Object o : collection){ System.out.println(o); } 8
Exempel på Collection HashSet - Tillåter ett exemplar av varje element, använder hashtabeller för att ge snabba operationer. Har ingen specifik ordning. ArrayList - Tillåter flera exemplar av varje element, använder array:er internt för att lagra element. Har en väldefinierad ordning. LinkedList - Tillåter flera exemplar av varje element, använder en dubbellänkad lista för intern representation. har en väldefinierad ordning. TreeSet - Tillåter bara ett exemplar av varje element, använder ett sorterat träd för sin interna representation, kräver att de lagrade elementen är Comparable, och har en väldefinierad ordning 9
Map En samling av nyckel-element-par Kan liknas vid en funktion: om man anger nyckeln så får man tillbaka det tillhörande elementet Samma element kan förekomma flera gånger, men en viss nyckel får bara finnas en gång När man skapar en Map, eller när man lägger till fler element måste man alltid förse varje element med en tillhörande nyckel När man vill plocka ut ett element anger man nyckeln och får det tillhörande elementet Exempel: Elementet är ett objekt som innehåller studieresultat, nyckeln är ett personnummer Elementet är en förklarande text, nyckeln är ett ord (ordlista) 10
Map i Java Map är ett gränsnitt Implementerande klasser är t.ex: HashMap, Hashtable, TreeMap Det definierar bl.a följande metoder put(key, value) get(key) remove(key) values() values() returnerar en Collection med samma innehåll, som man alltså kan ta sig igenom med en Iterator: for(object o: mymap.values()){ }... 11
Iterator (GoF) Behaviorial Pattern Iteratorer är objekt som tillhandahåller ett sätt att stega sig igenom element i en Collection Ett sätt att möjliggöra algoritmer som verkar på datastrukturer utan att man vet hur strukturen ser ut. I Java kan alla klasser som implementerar Collection returnera ett Iterator-objekt som man sedan kan använda för att stega sig igenom alla element. 12
Iteratorer i Java Gränssnittet Iterator definierar tre metoder: hasnext() - returnerar true om det finns element kvar next() - returnerar nästa element remove() - plockar bort senast returnerat element (frivillig) Om en klass tillhandahåller en metod Iterator() som returnerar ett iteratorobjekt över klassen, kan den implementera gränssnittet Iterable, och användas i en for-each-loop Collection är ett exempel som ärver från Iterable Scanner är ett exempel på en iterator över ett Stringobjekt 13
Composite (GoF) Structural Pattern Låter en behandla grupper av objekt på samma sätt som ett enskilt objekt Passar när man har en trädstruktur och vill göra exakt samma sak med en nod och alla dess barn Definiera en abstrakt Component-klass som rymmer alla de metoder man vill kunna anropa, en struktur för att rymma barn-noder, samt metoder för att lägga till barn och komma åt dessa Nu kan man definiera en Leaf-klass och en Compositeklass som ärver från Component Ett program som arbetar med dessa strukturer behandlar alla delar som om de vore Component-objekt, och ett anrop av någon metod utförs för samtliga Leaf-objekt nedanför i hierarkin 14
Composite bild fr. "Design Patterns" av GoF 15
Composite-exempel I grafik kan varje bild bestå av linjer Dessa linjer blir till olika polygoner Polygonerna blir till avancerade bilder Man vill kunna flytta en bild, då anropas flytta-metoden i alla polygoner den består av, som i sin tur anropar flyttametoden i sina beståndsdelar linjerna. På samma sätt vill man kunna byta färg på en enskild linje, en enskild polygon, en grupp av polygoner eller hela föremålet 16
Composite-exempel Stjärna triangel triangel linje linje linje linje linje linje 17