Iterator pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
parziale, estesa riscrittura dell'articolo |
m Bot: fix wl, replaced: Design Patterns patterns → Design pattern |
||
(66 versioni intermedie di 40 utenti non mostrate) | |||
Riga 1:
{{U|Iteratore|Informatica|Febbraio 2020}}
L'''Iterator'' risolve diversi problemi connessi all'accesso e alla navigazione attraverso gli elementi, in particolare, di una [[struttura dati]]
▲Nella [[Programmazione_orientata_agli_oggetti|programmazione ad oggetti]], il termine '''''Iterator''''' (reso in italiano con '''"iteratore"''') denota uno dei più comuni e conosciuti ''[[design pattern]]''.
L'[[oggetto (informatica)|oggetto]] principale su cui si basa questo ''design pattern'' è l'[[iteratore]].▼
▲L'''Iterator'' risolve diversi problemi connessi all'accesso e alla navigazione attraverso gli elementi di una [[struttura dati]] contenitore, in particolare, senza esporre i dettagli di [[implementazione]] e la struttura interna del contenitore.
▲L'[[oggetto]] principale su cui si basa questo ''design pattern'' è l'[[iteratore]].
== Motivazioni ==
Una [[Classe (informatica)|classe]]
Il ''design pattern'' ''Iterator'',
== Concetti fondamentali ==
Line 20 ⟶ 19:
L'idea chiave del ''pattern'' ''Iterator'' consiste nel trasferire la responsabilità dell'accesso e della navigazione attraverso gli elementi a una classe separata dal contenitore: l'iteratore.
La classe iteratore consente di visitare ad uno ad uno l'insieme degli elementi di un contenitore come se fossero ordinati in una sequenza finita. A questo scopo, un oggetto iteratore
Per permettere di visitare qualunque aggregato di elementi di un tipo concreto, indipendentemente dall'iteratore specifico e dal contenitore ad esso associato, il ''pattern'' ''Iterator'' richiede la definizione di due interfacce:
Line 29 ⟶ 28:
== Struttura ==
[[File:IteratorPattern.png|thumb|upright=1.8|Struttura del pattern Iterator]]
Il ''pattern'' ''iterator'' definisce due gerarchie di classi: una per i contenitori e una per gli iteratori. Le classi contenitore possono essere specializzate per tipo di elemento contenuto o per tipo di struttura in cui gli elementi sono organizzati. Le classi di iteratori sono specializzati per tipo di contenitore (iteratore concreto) e per tipo di navigazione attraverso la sequenza di elementi (iteratori specializzati).
== Partecipanti ==
== Benefici e conseguenze ==
Line 54 ⟶ 51:
Senza [[polimorfismo (informatica)|polimorfismo]], una classe iteratore è strettamente accoppiata al suo tipo di contenitore e di elementi. Per poter cambiare la classe contenitore senza dover cambiare il codice che ne usufruisce e che attraversa gli elementi contenuti, occorre generalizzare il concetto di iteratore e trasformarlo in un'interfaccia.
Sfruttando le capacità polimorfiche di alcuni linguaggi di programmazione è possibile definire un'unica interfaccia uniforme per tutti i tipi di oggetti iteratore. Questo permette di scrivere programmi in cui l'accesso ai dati contenuti da un aggregato è completamente indipendente dalla struttura dell'aggregato stesso,
Per rendere il ''pattern'' ''Iterator'' completamente indipendente dall'implementazione concreta, è necessario virtualizzare il processo di creazione delle istanze di iteratori. Di solito si provvede a questa necessità definendo un'operazione dell'interfaccia contenitore per creare un nuovo iteratore ad ogni invocazione.
== Bibliografia ==
* E.Gamma, R.Helm, R.Johnson, J.Vlissides, ''Design Patterns, Elements of Reusable Object-Oriented Software'', Pearson Education, Milano 2002, ISBN 0-201-63361-2
== Voci correlate ==
* [[Design pattern]]
* [[
* [[Iteratore
* Quando la classe contenitore possiede [[struttura dati ricorsiva|struttura ricorsiva]], è possibile utilizzare il ''pattern
* Il ''pattern'' ''[[Factory method
== Altri progetti ==
▲* Quando la classe contenitore possiede [[struttura dati ricorsiva|struttura ricorsiva]], è possibile utilizzare il ''pattern'' ''[[Composite pattern|Composite]]'' per definire una classe contenitore concreta.
{{interprogetto|commons=Category:Iterator pattern|preposizione=sull'}}
▲* Il ''pattern'' ''[[Factory method pattern|Factory Method]]'' è spesso applicato per virtualizzare la creazione di oggetti iteratore da parte delle classi contenitore.
== Collegamenti esterni ==
*
{{Design pattern}}
[[Categoria:Pattern]]▼
|