Algorithms and OOD (CSC 207 2014S) : EBoards

CSC207.01 2014S, Class 34: Implementing Queues with Arrays


Overview

Preliminaries

Upcoming work

Admin

Questions on the Exam

Can our skip list iterator call underlying methods of the skip list?

Certainly.

Should we fail fast for the skip list iterator?

It would be nice. It's also fine if you just crash and burn if someone else mutates the list.

Should we fail fast for the filtered list iterator?

It would be nice. It's also fine if you just crash and burn if someone else mutates the list.

Why does my filtered iterator crash and burn when I try to remove an element from a filtered range using delegation?

Because ranges do not implement remove.

That's acceptable behavior. You can't do any better than the underlying iterator.

Wrappers, Adapters, Delegation, and such

Code

public class Utils
{
   public int square(int x)
   {
     return x*x;
   } // square

   public double expt(double x, int n)
   {
     ...;
   } // expt
} // class Utils

public class BetterUtils
  extends Utils
{
  int callsToSquare = 0;

  @Override
  public int square(int x)
  {
    ++this.callsToSquare;
    // And do the old behavior
    return super.square(x);
  } // square(int)

Problem! What if we want to add/extend anything that meets an interface?

A typical solution appears in the ReportingLinearStructure.java class.

What is the additional utility that we might want?

A more general approach to one of the benefits of inheritance

Design Patterns

Lab

Copyright (c) 2013-14 Samuel A. Rebelsky.

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.