By Developers, For Developers

Historical errata for Interface Oriented Design

PDF PgPaper PgTypeDescriptionFixed onComments
30ERROR

The Customer class’ set_address and set_name methods reference observer (the argument to add_observer) rather than the_observer (the class member).

2007-05-11
xvTYPO

Text should read:
“We use Interface-Responsibility-Interaction (IRI) cards,[…], as the primary method for creating interface-oriented designs”
instead of:
“We use Interface-Responsibility-Interaction (IRI) cards,[…], as the primary method for creating an interface-oriented designs”

2007-05-11
41TYPO

Sample code should read:

XMLPullParser parser = new XMLPullParser(‘file.xml’)

instead of:

XMLPullParser xml = new XMLPullParser(‘file.xml’)

To contact submitter poc0123, send email to pocguard-errata@yahoo.com. I would like to offer my services as a technical reviewer.

2007-05-11
37TYPO

Last line of second code snippet: “a.list” should be “a_list”.
In the Ruby example on the same page “passeditem.print_item()” should be “passed_item.print_item()”. Oh, and I hope you’ve defined print_item() for Fixnum objects :)

2007-05-11
94TYPO

In this class description:
class PizzaOrder
set_size(Size)
set_topping(Topping)
Size get_size()
Topping [] get_toppings()
set_size(Address)
Address get_size()

The last set_size and get_size methods should be
set_address(Address)
Address get_address()

2007-05-11
116TYPO

Figure 7.5 The Interactions box should have PizzaDeliverer and not PizzaOrder

2007-05-11
116TYPO

place_order(Order) should be in the OrderEnterer interface and not in the PizzaMaker interface.

2007-05-11
56TYPO

Method “which_side_on_you_on()” in interface DoubleSidedPrinter should be named “which_side_are_you_on()”.

2007-05-11
7TYPO

Change “to show that an class” to “to show that a class”.

2007-05-11
10TYPO

In File interface, remove comma after write method.

2007-05-11
29TYPO

In the third paragraph, change “in an dynamically” to “in a dynamically”.

2007-05-11
29DEFER

The paragraph after the Customer interface uses different method names than in the interface. Readers not familiar with Ruby might not see that set_address and set_name are defined in the interface as address= and name=.

48TYPO

In the last paragraph, change “don’t like way” to “don’t like the way”.

2007-05-11
52TYPO

In the Flavor enumeration, add a space before Strawberry.

2007-05-11
52TYPO

In the paragraph after the IceCreamOrdering interface, add a space between “IceCreamOrdering” and “interface”.

2007-05-11
71TYPO

In the last paragraph of section 5.2, change “allows your to” to “allows you to”.

2007-05-11
76TYPO

Change “multiple-selections lists and check boxes together” to “multiple-selection lists and check boxes together”.

2007-05-11
77TYPO

DefensivePlayer and OffensivePlayer should extend from “FootballPlayer” rather than “Football Player”.

2007-05-11
77TYPO

Change “Payton Manning” to “Peyton Manning” (this error occurs multiple times).

2007-05-11
79TYPO

Remove the “(” before “Figure 5.5” in the last paragraph.

2007-05-11
80TYPO

In the paragraph after the InputStream interface, change “into a InputStream” to “into an InputStream”.

2007-05-11
80ERROR

The CustomInputStream class should extend from “InputStreamDefault” rather than “InputStream”.

2007-05-11
81ERROR

The implementation of the read method contains a syntax error: read(byte[], 0, byte.length);

The first parameter should be “bytes”.

2007-05-11
83TYPO

Remove spaces before the two semicolons in the Markable interface.

2007-05-11
84TYPO

Remove the period in FileOutputStream’s description.

2007-05-11
103TYPO

In the first paragraph of section 6.6, change “have an remote” to “have a remote”.

2007-05-11
133DEFER

Be consistent in the WebPage and URL data interfaces. URL is preceded with the word “data” while WebPage is not.

136TYPO

Remove the space before the right paranthesis in the add_URL method of the LinkRepository interface.

2007-05-11
137ERROR

The set_URL_as_unbroken method in Figure 8.3 does not agree with the set_URL_as_okay method in the LinkRepository interface.

2007-05-12
142SUGGEST

Define a CommandLineParser interface with a method to get the initial URL, rather than duplicating code to get it from args[0].

2007-05-12
143SUGGEST

Be consistent in the naming of the URL. In the determineLinkStatus method, it’s called “beginningURL” while everywhere else it’s called “initialURL”.

2007-05-12
152TYPO

In the DataGatherer description, insert a space between “find_by_location()” and “matches”.

2007-05-12
155TYPO

Change “the three possible value for url” to “the three possible values for url”.

2007-05-12
185TYPO

Remove the extra space between “web_page_parser” and “= new RegularExpressionWebPageParser”.

2007-05-12
98TYPO

The internal representation’s method set_size(Address) should be set_address(Address).

2007-05-11
xvSUGGEST

Add information on how to submit errata.

There’s a link at the bottom of each page of the PDF, and on the book’s home page.

2007-05-11
8OK

“…, O_WRONLY or O_RDWR” should be “…, O_WRONLY, or O_RDWR”

Allowed by this style sheet.

2007-05-11
9OK

The text says that cat “… is nominally set so that …”. Perhaps the author meant “normally”, although I’ve never heard if cat(1) being set up any other way.

2007-05-11
13TYPO

The title of Asimov’s book is “I, Robot”.

2007-05-11
22DEFER

The paragraph that introduces “work case” seemed a bit murky to me. I had to read it a few times to figure out what was being said. How about saying “An internal use case, in contrast, describes …” and starting a new paragraph with “To differentiate …”?

2007-05-11
23TYPO

“Figure 2.3, on the next page shows …” should be “Figure 2.3, on the next page, shows …”.

2007-05-11
23TYPO

“Note in many languages, …” should be “Note: in many languages, …” or perhaps “Note that, in many languages, …”.

2007-05-11
26SUGGEST

Point 5 of the “Order a Pizza” test case says nothing about checking the pizza for extra or missing ingredients, let alone issues such as ingredient use (e.g., distribution, layering, quality, quantity) and cooking (e.g., over, under).

It might be useful to discuss the possibility of these sorts of issues, as well as “unspoken” assumptions (e.g., “most pizzas have cheese and tomato sauce”) that may be broken in particular cases.

32OK

“He created a program …” should be “He also created a program …” (or some such).

2007-05-11
40TYPO

The “topping” items (e.g., Pepperoni) should be indented in the XML display.

2007-05-11
41ERROR

Or really, a typo with technical implications (:-).

“print length of theTopping” should be exdented. Otherwise, it looks like you want to print a running sum, rather than a single total.

2007-05-11
26TYPO

The link in the footnote isn’t uptodate anymore. I couldn’t find the new one.

2007-05-14
29TYPO

I believe “observer” in the Customer class’s set_address and set_name methods should be “the_observer”.

40TYPO

I think “print length of theTopping” in the second pseudocode sample on this page should be “print length of theToppings” given the declaration “Node [] theToppings” on the previous line.

7ERROR

Example for C is not quite correct.
Function findAverage() in base class is private, then SampleImpelentation class inherit publically.
Could be struct SamepleInterface{} or class SampleInterface{
public:
double findAverage() = 0;
};

12ERROR

In the Kindle version of this book at location 291-97 (page 12 in the PDF) it says:
“Chapter 3
Interface Contracts”
The PDF version has it as Chapter 2. This later becomes confusing on page 55 (chapter 5 on kindle, 4 in PDF) where it talks about something presented in Chapter 2, when the information is really in what is marked as Chapter 3 on the Kindle.

114TYPO

In the last sentence before the interface list:

“I have found that to combine […] and then separate an […]”

The ‘and’ in front of the ‘then’ looks strange to me.
But I have to admit that I am not a native speaker.

115SUGGEST

In
Use Case: Normal Pizza order
1. OrderEnterer enters Pizza order

wouldn’t it be better (more correct) to say
1. OrderEnterer enters Order

as we need to supply Pizza and Address information for a valid order (which are both included in the Order interface, according to the prior list of interface list)

3TYPO

…you’ve probably performed the following scenario hundreds of time. [should be times]

61TYPO

Who’s Job Is It Anyway? [should be Whose]

5TYPO

enumeration Toppings {PEPPERONI, MUSHROOMS, PEPPERS, SAUSAGE}
[…]
set_toppings(Toppings [])

[Seems this should be called Topping, since it represents a single topping. Throughout the book, some code examples use Toppings, others use Topping. Also in some places there is a similar inconsistency, with a set_topping(Topping) and then a Topping[] get_toppings().]

94TYPO

the amount of simultaneous connections to that database [should be either “number of simultaneous connections” or perhaps “amount of simultaneous connection”]

52TYPO

only shop may implement the IceCreamOrderinginterface. [missing space between IceCreamOrdering and interface]

22SUGGEST

Where design by contact is discussed, it should be made clear that a method whose precondition is X has no obligations if X is not met, not even avoiding crashing. How it responds to an unmet X is an implementation choice.

The book makes it sound as if callers can expect unmet X to result in an exception or other sane behavior, but this is wrong; if the goal is for callers to be able to depend on certain behavior when X is NOT met, then X must not be a precondition, instead merely part of the described behavior, for example “If X holds, then method does Y, otherwise it does Z.” no preconditions there. To have it any other way is to water the meaning of precondition down to nothing, e.g. “You must be sure X holds when calling this function… well, you don’t have to, and if you don’t, the function will do Z instead of Y”.

The author could make it clear where the second law, do no harm, fits into this. It does so in the implementation of a contract with preconditions. Here, you have a choice of what the method does when precondition X isn’t met, and the second law says to avoid doing harm. This way defects in the calling software won’t harm anything, even if they result in an unmet precondition. But they must still not DEPEND on this, otherwise the precondition is being watered down and other implmementations that assume it really is a precondition will not work, since clients are depending on behavior when it’s not met.

58TYPO

ePub version - Missing text. Sentence states:
‘SAX is push/sequential; DOM is.’

64TYPO

ePub version.
Sentence does not make sense/has missing content:

‘If you add BALANCE to ChangeType, you do not have to change any Alternatively, you might have the method pass the new and old values:’

66TYPO

ePub version:
Missing text:

‘The code following frame.bind is executed when the window is’

Is what?

68TYPO

ePub version:
Sentence doesn’t make sense:

‘You can alter the of calls in the stateless interface, and the text is always printed with the same font modifier.’

88TYPO

ePub version:

Missing word:

‘Disadvantage-callers have to be changed if implementation’

If implementation what?

91TYPO

ePub version:
Missing space:

‘SimplePizza method such asmake_by_slicing_before_placing_toppings.’

Should be: ‘SimplePizza method such as make_by_slicing_before_placing_toppings.’

25SUGGEST

In Footnote 17:
You wrote “www.qualitytree.com/ruminate/022105.htm” Should be: “testobsessed.com/2005/02/flush-specific-stack-fiercely/”
Reason: The expected article is not reachable with the link you wrote, at least since 2007. And as of December 2012, Elisabeth Hendrickson seems to have closed Quality Tree Software Inc. But she retrieved the article in her current blog at testobsessed.com.

21TYPO

Link to article about use cases in footnote #13 is broken, should be updated to alistair.cockburn.us/Structuring+use+cases+with+goals

Categories: