Nested Classes II Erich Gamma, Richard Helm, Ralph Johso, Joh Vlissides, Desig Patters Elemets of Reusable Object- Orieted Software, Addiso-Wesley, 1995, AKA GoF Bruce Eckel, Thikig i Patters with Java, cf. http://www.midview.et/books/tipatters/ jvo@ualg.pt José Valete de Oliveira 13-1 Overview What are ested classes? Why ad whe should we use ested classes? Nested classes q static member classes ad (static) member iterfaces q member classes (o-static ested classes or ier classes) q local classes q aoymous classes The Iterator desig patter q The iterator for-each jvo@ualg.pt José Valete de Oliveira 13-2 1
Example: A sigle liked list 3 8 1 jvo@ualg.pt José Valete de Oliveira 13-3 Exemplo 2: Listas simplesmete ligadas Termiologia iclui: - lista vazia, i.e., lista sem ós; - comprimeto, i.e., úmero de ós da lista ligada; - cabeça da lista, i.e., valor do item do primeiro ó; - cauda da lista, lista que se obtém elimiado o primeiro ó. jvo@ualg.pt José Valete de Oliveira 13-4 2
Listas simplesmete ligadas ou cadeias Algumas fuções elemetares sobre cadeias: - devolver a cabeça; - limpar a lista; - devolver a cauda, - duplicar a lista; - devolver o comprimeto; - cocatear 2 listas. - verificar se está vazia; - iserir um ovo ó; - remover um ó; - trocar a cauda de 2 listas jvo@ualg.pt José Valete de Oliveira 13-5 Exemplo 2: Listas simplesmete ligadas Iserção deovo óumacadeia de iteiros Remoção deum ó jvo@ualg.pt José Valete de Oliveira 13-6 3
Example 2: A liked list /** @versio 0.1 */ public class SLL<T> { private it sz; private Node<T> head; private static class Node<T> { T item; Node ext; Node (T t) { item = t; ext = ull; jvo@ualg.pt José Valete de Oliveira 13-7 Example 2: A liked list /** isert a ew ode with item o at the head of the list */ public void isert(t o) { Node<T> = ew Node<T>(o);.ext = head; head = ; sz++; jvo@ualg.pt José Valete de Oliveira 13-8 4
Example 2: A liked list public T head() { retur head.item; public T removehead(){ T tmp = head.item; head = head.ext; sz--; retur tmp; jvo@ualg.pt José Valete de Oliveira 13-9 Example 2: A liked list public Strig tostrig() { Strig r = ew Strig(); Node<T> tmp = head; while (tmp!= ull) { r += tmp.item.tostrig() + " "; tmp = tmp.ext; retur r; jvo@ualg.pt José Valete de Oliveira 13-10 5
Example 2: A liked list public class Mai { public static void mai(strig[] args) { SLL<Character> lst = ew SLL<Character>(); for(it i=0; i< 3; i++) lst.isert(character.fordigit(i,10)); System.out.pritl(lst); lst.removehead(); System.out.pritl(lst); System.out.pritl(lst.head()); jvo@ualg.pt 13-11 class SLL<T> { private it sz; private ILik<T> head; /** @versio 1.1 */ private iterface ILik<T> { // static by defiitio ILik<T> ext(); void setnext(ilik<t> l); T item(); // isert a ILik at the head private void isert(ilik<t> l) { l.setnext(head); head = l; sz++; public void isert(t o) { ILik<T> l = ew Likable<T>(o); isert(l); jvo@ualg.pt José Valete de Oliveira 13-12 6
private static class Likable<T> implemets ILik<T> { private T item; private ILik<T> ext; public Likable(T o) { item = o; ext = ull; public ILik<T> ext() { retur ext; public void setnext(ilik<t> l) { ext = l; public T item() { retur item; // // ed of class SLL<T> jvo@ualg.pt José Valete de Oliveira 13-13 Example 2: liked lists Cliet code public class SLLCliete { public static void mai(strig [] s) { SLL<Strig> lst = ew SLL<Strig>(); lst.isert( Aa ); lst.isert( Alice ); //... jvo@ualg.pt José Valete de Oliveira 13-14 7
Ier classes class OuterClass { class IerClass { // // jvo@ualg.pt José Valete de Oliveira 13-15 Local classes Like local variables local classes are defied iside a block, ad exist oly withi that block. A local class is a ier class, i.e., a local class is (also) a member of its outerclass A local class ca assess variables withi the scope of its outerclass The istaces of a local class are o diferet from the istaces ay other classe fial is the sole applicable qualifier jvo@ualg.pt José Valete de Oliveira 13-16 8
The liked list example, a iterator for public class SLLCliete { public static void mai(strig [] s) { SLL<Strig> lst = ew SLL<Strig>(); lst.isert( Aa ); lst.isert( Alice ); for(strig elemet: lst) System.out.pritl(elemet); //... >java SLLCliet <ret> Alice Aa > jvo@ualg.pt José Valete de Oliveira 13-17 Summary Nested classes q static member class (or static member iterfaces) q member classes (ier classes, or o-static ested classes) q local classes jvo@ualg.pt José Valete de Oliveira 13-18 9