We need is the list of books and the title of the book to look for.
// PURPOSE AND CONTRACT: // determine whether a book with the given title is in this list abstract boolean find(String title);
We develop the methods in the two classes concurrently, starting with examples.
Book b1 = new Book("HtDP", "Matthias", 60, 2001);
Book b2 = new Book("Beach Music", "Conroy", 20, 1996);
Book b3 = new Book("3 Com", "Remarque", 15, 1937);
ALoB mtlob = new MtLoB();
ALoB lob1 = new ConsLoB(b1, mtlob);
ALoB lob2 = new ConsLoB(b2, lob1);
ALoB lob3 = new ConsLoB(b3, lob2);
...
mtlob.find("Beach Music") -- expected: false
lob1.find("Beach Music") -- expected: false
lob2.find("Beach Music") -- expected: true
lob3.find("HtDP") -- expected: true
There is a separate template for each of the two subclasses.
/* TEMPLATE for the MtLoB class:
boolean find(String title) {
... } */
/* TEMPLATE for the ConsLoB class:
boolean find(String title) {
... this.fst ...
... this.fst.title ...
... this.fst.author ...
... this.fst.price ...
... this.fst.year ...
... this.rst.find(title) ... } */
Again, we have two different methods, one for each class.
// PROGRAM for the class MtLoB:
boolean find(String title) {
return false; }
// PROGRAM for the class ConsLoB:
boolean find(String title) {
return (title.equals(this.fst.title) || this.rst.find(title)); }
mtlob.find("Beach Music") == false
lob1.find("Beach Music") == false
lob2.find("Beach Music") == true
lob3.find("HtDP") == true