Iteration Abstraction - PowerPoint PPT Presentation

1 / 17
About This Presentation
Title:

Iteration Abstraction

Description:

Iteration Abstraction. Announcements/Reminders. Quiz II on Thursday. Project phase II submission Tuesday March 11th ... Project phase III will be up before ... – PowerPoint PPT presentation

Number of Views:47
Avg rating:3.0/5.0
Slides: 18
Provided by: mateiripea
Category:

less

Transcript and Presenter's Notes

Title: Iteration Abstraction


1
Iteration Abstraction
2
Announcements/Reminders
  • Quiz II on Thursday
  • Project phase II submission Tuesday March 11th
  • Project phase III will be up before the end of
    the week
  • Tentatively due before the last week of classes
  • QUESTIONS?

3
Objectives
  • Up to Now
  • Procedural Abstraction (procedures)
  • Data Abstraction (classes/objects)
  • Today
  • - Iteration Abstraction (iterators)

4
Iteration Abstraction
  • Procedural abstraction
  • Define your own commandsand operators.
  • Data abstraction
  • Define your own new types (values and
    operations).
  • Theme Mechanisms that let you extend the
    language to do what you need.
  • See Growing a language by Guy Steele
  • Iteration abstraction Define your own kinds of
    loops.
  • Examine a collection of items (objects) in
    some order.
  • Abstraction hides details of where to start,
    where to stop, how to find next item.

5
Caution
  • Books terminology is confusing.
  • An iteratoris a method that returns an object
    of type Iterator.
  • The object of type Iterator is called a
    generator.
  • Isnt that irritating?
  • My (hopefully unambiguous) terms
  • iterator method and Iterator the
    object
  • Book is slightly outdated.
  • Iterator type is generic in Java 5, not in book.
  • Java 5 has special support for iteration
    abstraction.
  • Books way is more flexible, but (now)
    nonstandard.

6
Simple Example
  • public static Iterator elementsOf(Object a)
  • return new ArrayElementsIterator(a)
  • private static class ArrayElementsIterator
    implements Iterator
  • private Object a
  • private int pos
  • public ArrayElementsIterator(Object a)
  • if (a null) throw new
    NullPointerException()
  • this.a a
  • pos 0
  • public boolean hasNext()
  • return pos lt a.length
  • public Object next() throws
    NoSuchElementException

7
The iterator type
  • Java provides a standard interface for iterators.
  • package java.util
  • public interface Iterator
  • boolean hasNext()
  • /
  • _at_throws NoSuchElementException if there are
  • no more items.
  • /
  • Object next()
  • /
  • _at_throws UnsupportedOperationException if
    this Iterator
  • does not support the remove operation.
  • /
  • void remove()

8
Using the iterator
  • Suppose a is an array of Objects.
  • Iterator iter elementsOf(a)
  • while (iter.hasNext())
  • System.out.println(iter.next())
  • is equivalent to
  • int pos 0
  • while (pos lt a.length)
  • System.out.println(apos)

9
Why iterators?
  • Data structures (lists, sets,) have methods
    returning Iterators.
  • Allow users to loop over elements efficiently.
  • for (inti 0 i lt list.size() i)
  • list.get(i) // Slow operation for some reps.
  • Iterator object hides its implementation, so
    collections rep not exposed.
  • Iterator-based loop construct easy to read (if
    familiar), few distracting details.
  • Control logic for many of programs loops in one
    place.

10
Implementing Iterators
  • Data structure can have many iterator methods.
  • Almost every iterator method you write needs
    its own class of Iterator object.
  • Only iterator method should create objects of
    that class.
  • Use static nested classes

11
Two different Iterators
  • public abstract class ArrayIteration
  • public Iterator elementsOf(Object a)
  • return new ElementsIterator(a)
  • public Iterator elementsOfRev(Object a)
  • return new RevElementsIterator(a)
  • private static class ElementsIterator
    implements Iterator
  • private Object a
  • private int i
  • public ElementsIterator(Object a)
  • this.a a i 0
  • private static class RevElementsIterator
    implements Iterator

12
Data structure Iterators
  • Iterator object needs access to some or all of
    data structure representation
  • Avoid exposing the representation by nesting
    Iterator type within data structure class.
  • Optional make Iterator class non-static, giving
    its methods direct access to enclosing rep.

13
repInvariant and Abstraction Function for
Iterators
  • repInv
  • Similar with that for normal classes
  • Example for ElementsIterator defined before
  • // c.a ! null and 0ltltc.a.size
  • Abstraction function
  • // AF(c) x1, x2, xn where xiai

14
Java 5 iteration
  • In book, data structures can have many different
    iterator methods.
  • In real life, one is often more important than
    the others.
  • The interface java.lang.Iterable has one method
  • Iterator iterator()
  • Returns the iterator to use to visit contents
    of object.
  • Java 5 has special enhanced for loop syntax
  • for (Object x collection)
  • collection must be an Iterable.
  • Equivalent to
  • Iterator iter collection.iterator()
  • while (iter.hasNext()) Object x
    iter.next()

15
Java 5 iteration
  • Java 5 versions of the interfaces are generic.
  • interface IteratorltEgt E next()
  • interface IterableltEgt IteratorltEgt
    iterator()
  • If collection has type IterableltEgt, then the
    statement
  • for (E x collection)
  • is legal.
  • Advantage Avoids casts!
  • By the way, arrays are Iterable.
  • Example.

16
ExampleIterator for Lists
public class LinkedList  ListNode header
null int numnodes 0      public LinkedList( 
)  header  null numnodes0     public boo
lean isEmpty( )  public void insert( Object
 x)  ListNode n new ListNode( x )
n.setNext (header) header n
numnodes        public Iterator firstToLast
() return new firstToLastIterator
(header) private static class
firstToLastIterator implements Iterator

17
Example (cont)
public class LinkedList  private static
class firstToLastIterator implements Iterator
firstToLastIterator (header) ListNode
current header
public boolean hasNext () return current !
null public ListNode next() if
(header null) throw new NoSuchElementExcept
ion(some details) else ListNode
tmp current current current.next()
return temp
Write a Comment
User Comments (0)
About PowerShow.com