Inleidend probleem Data structuur (hiërarchie van classes) Snel algoritme zie paragraaf 4.4
Het probleem Een DNA molecule bestaat uit vele tienduizenden aminozuren. Bevat het molecule herhalende reeksen van opeenvolgende aminozuren met lengte 4?
Mogelijke oplossingen Drie geneste for-statements. Plaats alle reeksen met lengte 4 in een array en sorteer het array. Identieke reeksen staan achter elkaar in het array. Maak gebruik van hashing. (komt nog!) Snelste methode.
Abstract Data Types Inhoud: Definitie van type Operatie Definitie ADT Type beschrijving Interface Klassieke ADT’s Bag / Set Stack, Queue, Deque Map
Type Type is een verzameling van waarden. int: –2147483648 t/m 2147483647 boolean: true, false char: ‘ ‘, ‘?’, ‘a’, ‘b’, ……. Op waarden kunnen operaties worden uitgevoerd die specifiek zijn voor het type.
Operaties De verzameling van operaties op een type vormen een interface. Signature van een operatie is: naam van de operatie type van de argumenten type van de return-waarde
Operaties Een interface is een verzameling signatures. Een interface bevat geen implementatie. Operaties worden gedefinieerd a.d.h.v. pre- en postcondities, waardoor de properties worden gedefinieerd.
Pre- en postcondities Indien aan de precondities van een method is voldaan, gelden na uitvoering van de method de postcondities. Indien niet aan de precondities is voldaan, is de toestand na uitvoering van de method niet gedefinieerd!
Operaties Operaties kunnen polymorf zijn. 3 + 5 t.o.v. 3.0 + 5.0 “abc” + “def” toString() Probleem: 3. 0 + 5
Polymorfe variabelen Polymorfe variabele kan een waarde bevatten van ander type. Inheritance Object obj = new String(“Dit mag”) Interface Bag zakje = new LinkedList(); zakje kan waarden van verschillende types bevatten.
Abstract Data Type ADT is een beschrijving van: een verzameling van waarden een aantal operaties op deze waarden. De class String is een implementatie van het ADT String.
Klassieke ADT’s Diverse collecties: Bag elementen in een Bag hoeven niet uniek te zijn. Set elementen in een Set zijn uniek. Map bevat paren (sleutel, object).
Bag, Set en Map Java kent niet de class Bag. Set en Map zijn een interfaces in Java. Voor Bag kan bijv. een LinkedList worden gebruikt. Voor Set kan een HashSet of een TreeSet worden gebruikt. Voor Map kan bijv. een HashMap of Hashtable worden gebruikt.
Stack = stapel Lijst waarbij uitsluitend aan één kant mutaties kunnen worden uitgevoerd. push() pop()
Stack In tegenstelling tot Bag en Set is de volgorde waarin elementen worden toegevoegd belangrijk. Java kent de class Stack (java.util.Stack)
Queue = wachtrij Lijst waarbij toevoegen en verwijderen aan verschillende uiteinden wordt uitgevoerd. verwijderen toevoegen Java kent geen implementatie voor Queue.
Deque Dequeue = double ended queue Lijst waarbij toevoegen en verwijderen aan beide uiteinden kunnen worden uitgevoerd. verwijderen toevoegen toevoegen verwijderen Java kent geen implementatie voor Deque.
Map Interface die operaties beschrijft voor een verzameling paren (sleutel, object) waarvan de sleutels uniek zijn. De objecten zijn toegankelijk via hun sleutel. Bijv. Object get(Object key) Object remove(Object key)