Iterator DP
Kratak opis koncepta iterator
Suština koncepta iteratora je obezbediti sekvencijalni
pristup do elementa strukture, bez izlaganja njene interne
reprezentacije.
Iterator poseduje operacije za :
- postavljanje na početak strukture (Prvi() )
- za pomeranje na sledeći element
strukture (Sledeći () )
- za pristup do tekućeg elementa (TekućaStavka() )
- za ispitivanje da li se došlo do kraja strukture (Gotovo() )
Zbog čega ITERATOR DP ?
Da se ne bi opterećivao sam interfejs zadate strukture
podataka operacijama ,
onda se zadatoj strukturi obezbeđuje posebna klasa iteratora. Ta
klasa poznaje internu predstavu zadate strukture podataka i ta
klasa je odgovorna za obilazak strukture. Za tu klasu se može
napraviti izvestan broj instanci koje nezavisno iteriraju i takvo
rešenje predstavlja Iterator DP.
Iterator DP je pogodno primeniti i u situacijama kada se piše
kôd koji mora da funkcioniše nad objektima različitih kolekcija
(Vector, Hashtable, List, Stack , ...) , baš zato što se sadržaju objekta
agregata pristupa bez izlaganja njegove interne predstave.
Pod objektom agregat se podrazumeva objekat sastavljen od delova
za koje je odgovoran.
Dijagram prikaz
Prednosti primene Iterator DP-a
- pruža podršku za više istovremenih obilazaka istog objekta agregata (npr. liste),
jer iterator prati svoje stanje obilaženja
- obezbeđuje dovoljno uniformni interfejs za potrebe obilaska
različitih struktura agregata (tj. za potrebe polimorfne iteracije)
Naime, Iteratori pojednostavljuju izmenu algoritma obilaska zamenom instance iteratora.
Za podršku novih obilazaka moguće je definisati i potklse klase Iterator.
- pojednostavljenje interfejsa Agregat zaduženog za kreiranja objekta Iterator,
zato što postojanje interfejsa obilaska u Iteratoru uklanju potrebu za
sličnim interfejsom u Agregatu.
Mane primene Iterator DP-a
- menjanje agregata(dodavanje ili uklanjanje) moše da utiče
negativno na proces obilaženja
Dodavanje i uklanjanje elemenata u/iz agregat(a) može da dovede do toga da se istom elementu
pristupa dva puta ili da neki element bude preskočen. Rešenje treba tražiti u mehanizmu
koji bi povoljno uticao na robusnost iteratora. Taj mehanizam nije obuhvaćen u ovom radu.
Postoji nekoliko radova na temu analize i opisa implementacije robustnih iteratora.
( videti [1] [2] )
Poznat i pod imenom
Kursor
Primeri korišćenja Iterator DP-a u realnim sistemima
- Kako su iteratori uobičajeni u objektno orijentisanim sistemima, onda
većina biblioteka klasa kolekcija sadrži neki oblik iteratora. Interfejs
Java jezika java.util.Iterator (od Java 1.2) namenjen je radu sa elementima neke kolekcije.
Postoje izvesne razlike između ovog interfejsa i Iterator koji je učesnik
u konceptu iterator design pattern-a.
I to u postojanju metoda remove() u java.util.Iterator
i u metodima First() (Prvi()) i CurrentItem() (TekucaStavka() ) koji postoje
u konceptu iterator design pattern-a.
No, ova dva metoda iz koncepta iterator design pattern-a se mogu obezbediti u Java:
Metod First() može biti prvi poziv upucen ka next() u novoj iteraciji.
Metod CurrentItem() koji vraća trenutni element agregata
(nije direktno implementiran pri Iterator interfejsu) se može dodati uvođenjem
podinterfejsa za interfejs Iterator.
U Java Collection API-ju Iteratori
su robusni, nasuprot enumeracijima, koje nisu robusne.
- Borland Object Windows je sadržao hijerarhiju klasa iteratora za kontejnere,
uz mogućnost istovetne iteracije kroz različite tipove kontejnera.
Bliski DP
Factory Method
Koncept iteratora može da se uopšti tako da podrži
polimorfnu iteraciju. Pri instanciranju potklase klase Iterator, polimorfni
iteratori sarađuju sa Factory Method-ima.
Memento DP
Iterator DP i Memento DP mogu da se koriste zajedno tako što bi Iterator
koristio Memento da interno čuva stanja iteracije.