https://dev.eiffel.com/api.php?action=feedcontributions&user=Bmeyer&feedformat=atomEiffelStudio: an EiffelSoftware project - User contributions [en]2024-03-29T12:51:54ZUser contributionsMediaWiki 1.24.1https://dev.eiffel.com/index.php?title=Agents_in_SCOOP&diff=14748Agents in SCOOP2013-05-07T07:58:54Z<p>Bmeyer: /* Types */</p>
<hr />
<div>The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.<br />
<br />
== Status of agent targets ==<br />
: Because any agent object is created on a processor associated with the agent's target, that target hasto be controlled.<br />
'''Agent target validity rule.''' The target of an agent must be controlled.<br />
<br />
== Types ==<br />
'''Agent argument types validity rule.''' If an agent has a separate target, every non-expanded argument of the associated feature must be separate.<br />
: Because an agent is created on a processor of a target, without processor tags it is impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled (see previous rule).<br />
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.<br />
<br />
'''Example.''' <e><br />
f (p: separate P; q: separate Q): R<br />
t: separate T<br />
...<br />
r := agent t.f (c, ?)<br />
x := r.item ([a])<br />
</e><br />
The type <e>t</e> of <e>agent t.f (c, ?)</e> is <e><br />
separate FUNCTION [ANY, TUPLE [separate Q], separate R]<br />
</e><br />
<br />
: The first parameter is not separate because the target and the agent object have the same handler.<br />
: The separateness status of the type <e>TUPLE</e> used for arguments does not matter, what matters is the types of arguments. In many cases when <e>TUPLE</e> is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of <e>TUPLE</e>. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not <e>separate</e>.<br />
<br />
== Agent classes ==<br />
The first parameter in the class <e>ROUTINE</e> and descendants is not used, so in the future it will be dropped altogether.<br />
<br />
'''Example.''' The agent type from the example above becomes<e><br />
separate FUNCTION [TUPLE [separate Q], separate R]<br />
</e><br />
<br />
== Correctness and wait conditions ==<br />
The feature <e>{ROUTINE}.precondition</e> should be split into 2 parts: <e>correctness_condition</e> and <e>wait_condition</e>. Then the routine <e>call</e> looks like<e><br />
call (a: OPEN_ARGS)<br />
require<br />
correctness_condition (a)<br />
do<br />
from<br />
until<br />
not wait_condition (a)<br />
loop<br />
execute_body (a)<br />
end<br />
end<br />
</e><br />
The same change applies to the feature <e>item</e>.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Agents_in_SCOOP&diff=14747Agents in SCOOP2013-05-07T07:58:03Z<p>Bmeyer: /* Types */</p>
<hr />
<div>The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.<br />
<br />
== Status of agent targets ==<br />
: Because any agent object is created on a processor associated with the agent's target, that target hasto be controlled.<br />
'''Agent target validity rule.''' The target of an agent must be controlled.<br />
<br />
== Types ==<br />
'''Agent argument types validity rule.''' If an agent has a separate target, every non-expanded argument of the associated feature must be separate.<br />
: Because an agent is created on a processor of a target, without processor tags it is impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled (see previous rule).<br />
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.<br />
<br />
'''Example.''' <e><br />
f (p: separate P; q: separate Q): R<br />
t: separate T<br />
...<br />
r := agent t.f (c, ?)<br />
x := r.item ([a])<br />
</e><br />
The type <e>t</e> of <e>agent t.f (c, ?)</e> is <e><br />
separate FUNCTION [ANY, TUPLE [separate Q], separate R]<br />
</e><br />
<br />
: The first parameter is not separate because both a target and an agent object run on the same processor.<br />
: The separateness status of the type <e>TUPLE</e> used for arguments does not matter, what matters is the types of arguments. In many cases when <e>TUPLE</e> is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of <e>TUPLE</e>. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not <e>separate</e>.<br />
<br />
== Agent classes ==<br />
The first parameter in the class <e>ROUTINE</e> and descendants is not used, so in the future it will be dropped altogether.<br />
<br />
'''Example.''' The agent type from the example above becomes<e><br />
separate FUNCTION [TUPLE [separate Q], separate R]<br />
</e><br />
<br />
== Correctness and wait conditions ==<br />
The feature <e>{ROUTINE}.precondition</e> should be split into 2 parts: <e>correctness_condition</e> and <e>wait_condition</e>. Then the routine <e>call</e> looks like<e><br />
call (a: OPEN_ARGS)<br />
require<br />
correctness_condition (a)<br />
do<br />
from<br />
until<br />
not wait_condition (a)<br />
loop<br />
execute_body (a)<br />
end<br />
end<br />
</e><br />
The same change applies to the feature <e>item</e>.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Agents_in_SCOOP&diff=14746Agents in SCOOP2013-05-07T07:57:19Z<p>Bmeyer: /* Status of agent targets */</p>
<hr />
<div>The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.<br />
<br />
== Status of agent targets ==<br />
: Because any agent object is created on a processor associated with the agent's target, that target hasto be controlled.<br />
'''Agent target validity rule.''' The target of an agent must be controlled.<br />
<br />
== Types ==<br />
'''Agent argument types validity rule.''' If an agent has a separate target, every non-expanded argument of the associated feature must be separate.<br />
: Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.<br />
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.<br />
<br />
'''Example.''' <e><br />
f (p: separate P; q: separate Q): R<br />
t: separate T<br />
...<br />
r := agent t.f (c, ?)<br />
x := r.item ([a])<br />
</e><br />
The type <e>t</e> of <e>agent t.f (c, ?)</e> is <e><br />
separate FUNCTION [ANY, TUPLE [separate Q], separate R]<br />
</e><br />
<br />
: The first parameter is not separate because both a target and an agent object run on the same processor.<br />
: The separateness status of the type <e>TUPLE</e> used for arguments does not matter, what matters is the types of arguments. In many cases when <e>TUPLE</e> is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of <e>TUPLE</e>. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not <e>separate</e>.<br />
<br />
== Agent classes ==<br />
The first parameter in the class <e>ROUTINE</e> and descendants is not used, so in the future it will be dropped altogether.<br />
<br />
'''Example.''' The agent type from the example above becomes<e><br />
separate FUNCTION [TUPLE [separate Q], separate R]<br />
</e><br />
<br />
== Correctness and wait conditions ==<br />
The feature <e>{ROUTINE}.precondition</e> should be split into 2 parts: <e>correctness_condition</e> and <e>wait_condition</e>. Then the routine <e>call</e> looks like<e><br />
call (a: OPEN_ARGS)<br />
require<br />
correctness_condition (a)<br />
do<br />
from<br />
until<br />
not wait_condition (a)<br />
loop<br />
execute_body (a)<br />
end<br />
end<br />
</e><br />
The same change applies to the feature <e>item</e>.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Agents_in_SCOOP&diff=14745Agents in SCOOP2013-05-07T07:56:32Z<p>Bmeyer: /* Status of a target */</p>
<hr />
<div>The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.<br />
<br />
== Status of agent targets ==<br />
: Because a agent object is created on a processor associated with a target, this processor needs to be controlled.<br />
'''Agent target validity rule.''' The target of an agent must be controlled.<br />
<br />
== Types ==<br />
'''Agent argument types validity rule.''' If an agent has a separate target, every non-expanded argument of the associated feature must be separate.<br />
: Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.<br />
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.<br />
<br />
'''Example.''' <e><br />
f (p: separate P; q: separate Q): R<br />
t: separate T<br />
...<br />
r := agent t.f (c, ?)<br />
x := r.item ([a])<br />
</e><br />
The type <e>t</e> of <e>agent t.f (c, ?)</e> is <e><br />
separate FUNCTION [ANY, TUPLE [separate Q], separate R]<br />
</e><br />
<br />
: The first parameter is not separate because both a target and an agent object run on the same processor.<br />
: The separateness status of the type <e>TUPLE</e> used for arguments does not matter, what matters is the types of arguments. In many cases when <e>TUPLE</e> is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of <e>TUPLE</e>. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not <e>separate</e>.<br />
<br />
== Agent classes ==<br />
The first parameter in the class <e>ROUTINE</e> and descendants is not used, so in the future it will be dropped altogether.<br />
<br />
'''Example.''' The agent type from the example above becomes<e><br />
separate FUNCTION [TUPLE [separate Q], separate R]<br />
</e><br />
<br />
== Correctness and wait conditions ==<br />
The feature <e>{ROUTINE}.precondition</e> should be split into 2 parts: <e>correctness_condition</e> and <e>wait_condition</e>. Then the routine <e>call</e> looks like<e><br />
call (a: OPEN_ARGS)<br />
require<br />
correctness_condition (a)<br />
do<br />
from<br />
until<br />
not wait_condition (a)<br />
loop<br />
execute_body (a)<br />
end<br />
end<br />
</e><br />
The same change applies to the feature <e>item</e>.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Agents_in_SCOOP&diff=14744Agents in SCOOP2013-05-07T07:56:14Z<p>Bmeyer: /* Status of a target */</p>
<hr />
<div>The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.<br />
<br />
== Status of a target ==<br />
: Because a agent object is created on a processor associated with a target, this processor needs to be controlled.<br />
'''Agent target validity rule.''' The target of an agent must be controlled.<br />
<br />
== Types ==<br />
'''Agent argument types validity rule.''' If an agent has a separate target, every non-expanded argument of the associated feature must be separate.<br />
: Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.<br />
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.<br />
<br />
'''Example.''' <e><br />
f (p: separate P; q: separate Q): R<br />
t: separate T<br />
...<br />
r := agent t.f (c, ?)<br />
x := r.item ([a])<br />
</e><br />
The type <e>t</e> of <e>agent t.f (c, ?)</e> is <e><br />
separate FUNCTION [ANY, TUPLE [separate Q], separate R]<br />
</e><br />
<br />
: The first parameter is not separate because both a target and an agent object run on the same processor.<br />
: The separateness status of the type <e>TUPLE</e> used for arguments does not matter, what matters is the types of arguments. In many cases when <e>TUPLE</e> is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of <e>TUPLE</e>. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not <e>separate</e>.<br />
<br />
== Agent classes ==<br />
The first parameter in the class <e>ROUTINE</e> and descendants is not used, so in the future it will be dropped altogether.<br />
<br />
'''Example.''' The agent type from the example above becomes<e><br />
separate FUNCTION [TUPLE [separate Q], separate R]<br />
</e><br />
<br />
== Correctness and wait conditions ==<br />
The feature <e>{ROUTINE}.precondition</e> should be split into 2 parts: <e>correctness_condition</e> and <e>wait_condition</e>. Then the routine <e>call</e> looks like<e><br />
call (a: OPEN_ARGS)<br />
require<br />
correctness_condition (a)<br />
do<br />
from<br />
until<br />
not wait_condition (a)<br />
loop<br />
execute_body (a)<br />
end<br />
end<br />
</e><br />
The same change applies to the feature <e>item</e>.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Agents_in_SCOOP&diff=14743Agents in SCOOP2013-05-07T07:55:40Z<p>Bmeyer: /* Types */</p>
<hr />
<div>The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.<br />
<br />
== Status of a target ==<br />
: Because a agent object is created on a processor associated with a target, this processor needs to be controlled.<br />
'''Agent target validity rule.''' A target of an agent is controlled.<br />
<br />
== Types ==<br />
'''Agent argument types validity rule.''' If an agent has a separate target, every non-expanded argument of the associated feature must be separate.<br />
: Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.<br />
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.<br />
<br />
'''Example.''' <e><br />
f (p: separate P; q: separate Q): R<br />
t: separate T<br />
...<br />
r := agent t.f (c, ?)<br />
x := r.item ([a])<br />
</e><br />
The type <e>t</e> of <e>agent t.f (c, ?)</e> is <e><br />
separate FUNCTION [ANY, TUPLE [separate Q], separate R]<br />
</e><br />
<br />
: The first parameter is not separate because both a target and an agent object run on the same processor.<br />
: The separateness status of the type <e>TUPLE</e> used for arguments does not matter, what matters is the types of arguments. In many cases when <e>TUPLE</e> is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of <e>TUPLE</e>. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not <e>separate</e>.<br />
<br />
== Agent classes ==<br />
The first parameter in the class <e>ROUTINE</e> and descendants is not used, so in the future it will be dropped altogether.<br />
<br />
'''Example.''' The agent type from the example above becomes<e><br />
separate FUNCTION [TUPLE [separate Q], separate R]<br />
</e><br />
<br />
== Correctness and wait conditions ==<br />
The feature <e>{ROUTINE}.precondition</e> should be split into 2 parts: <e>correctness_condition</e> and <e>wait_condition</e>. Then the routine <e>call</e> looks like<e><br />
call (a: OPEN_ARGS)<br />
require<br />
correctness_condition (a)<br />
do<br />
from<br />
until<br />
not wait_condition (a)<br />
loop<br />
execute_body (a)<br />
end<br />
end<br />
</e><br />
The same change applies to the feature <e>item</e>.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Agents_in_SCOOP&diff=14742Agents in SCOOP2013-05-07T07:52:51Z<p>Bmeyer: Improved phrasing</p>
<hr />
<div>The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.<br />
<br />
== Status of a target ==<br />
: Because a agent object is created on a processor associated with a target, this processor needs to be controlled.<br />
'''Agent target validity rule.''' A target of an agent is controlled.<br />
<br />
== Types ==<br />
'''Agent argument types validity rule.''' Formal arguments of a feature used in an agent expression with a separate target are separate.<br />
: Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.<br />
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.<br />
<br />
'''Example.''' <e><br />
f (p: separate P; q: separate Q): R<br />
t: separate T<br />
...<br />
r := agent t.f (c, ?)<br />
x := r.item ([a])<br />
</e><br />
The type <e>t</e> of <e>agent t.f (c, ?)</e> is <e><br />
separate FUNCTION [ANY, TUPLE [separate Q], separate R]<br />
</e><br />
<br />
: The first parameter is not separate because both a target and an agent object run on the same processor.<br />
: The separateness status of the type <e>TUPLE</e> used for arguments does not matter, what matters is the types of arguments. In many cases when <e>TUPLE</e> is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of <e>TUPLE</e>. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not <e>separate</e>.<br />
<br />
== Agent classes ==<br />
The first parameter in the class <e>ROUTINE</e> and descendants is not used, so in the future it will be dropped altogether.<br />
<br />
'''Example.''' The agent type from the example above becomes<e><br />
separate FUNCTION [TUPLE [separate Q], separate R]<br />
</e><br />
<br />
== Correctness and wait conditions ==<br />
The feature <e>{ROUTINE}.precondition</e> should be split into 2 parts: <e>correctness_condition</e> and <e>wait_condition</e>. Then the routine <e>call</e> looks like<e><br />
call (a: OPEN_ARGS)<br />
require<br />
correctness_condition (a)<br />
do<br />
from<br />
until<br />
not wait_condition (a)<br />
loop<br />
execute_body (a)<br />
end<br />
end<br />
</e><br />
The same change applies to the feature <e>item</e>.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&diff=14532RosettaCode Monty Hall2012-08-09T17:25:27Z<p>Bmeyer: </p>
<hr />
<div>[[Category:Rosetta Code]]<br />
[[Category:Flash Code ]]<br />
<br />
==Reference==<br />
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].<br />
<br>Deadline for adding to RosettaCode page: 31 Aug 2012; submitter:<br />
<br />
==Eiffel code==<br />
<br />
==Comments==</div>Bmeyerhttps://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&diff=14530RosettaCode Monty Hall2012-08-09T17:24:14Z<p>Bmeyer: </p>
<hr />
<div>[[Category:Rosetta Code]]<br />
[[Category:Flash Code ]]<br />
<br />
==Reference==<br />
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].<br />
<p>Deadline for adding to RosettaCode page: 31 Aug 2012; submitter:<br />
<br />
==Eiffel code==<br />
<br />
==Comments==</div>Bmeyerhttps://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&diff=14528RosettaCode Monty Hall2012-08-09T17:22:45Z<p>Bmeyer: /* Reference */</p>
<hr />
<div>[[Category:Rosetta Code]]<br />
<br />
==Reference==<br />
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].<br />
<p>Deadline for adding to RosettaCode page: 31 Aug 2012; submitter:<br />
<br />
==Eiffel code==<br />
==Comments==</div>Bmeyerhttps://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&diff=14527RosettaCode Monty Hall2012-08-09T17:21:48Z<p>Bmeyer: /* Reference */</p>
<hr />
<div>[[Category:Rosetta Code]]<br />
<br />
==Reference==<br />
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].<br />
Deadline for adding to RosettaCode page: 31 Aug 2012; submitter:<br />
<br />
==Eiffel code==<br />
==Comments==</div>Bmeyerhttps://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&diff=14524RosettaCode Monty Hall2012-08-09T17:13:44Z<p>Bmeyer: /* Reference */</p>
<hr />
<div>==Reference==<br />
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].<br />
==Eiffel code==<br />
==Comments==</div>Bmeyerhttps://dev.eiffel.com/index.php?title=RosettaCode_Monty_Hall&diff=14523RosettaCode Monty Hall2012-08-09T17:13:07Z<p>Bmeyer: Creating page</p>
<hr />
<div>==Reference==<br />
Statement of the Monty Hall problem on RosettaCode: [http://rosettacode.org/wiki/Monty_Hall_problem here].</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Eiffel_Design_Feast_May-2012&diff=14392Eiffel Design Feast May-20122012-04-06T11:56:40Z<p>Bmeyer: feedbacks -> feedback</p>
<hr />
<div>[[Category:community]]<br />
[[Category:design-feast]]<br />
<br />
'''Co-located with TOOLS EUROPE 2012 / 30 May 2012, Prague, Czech Republic'''<br />
<br />
== Announce ==<br />
<br />
To continue the work made during previous Design Feast (June 2011, and December 2011), the next '''Eiffel Web Design Feast''' will take place on '''Wednesday, May 30th 2012 in Prague, Czech Republic'''. It is a workshop scheduled as part of the '''TOOLS EUROPE 2012''' conference.<br />
<br />
== Description ==<br />
<br />
The first design feast goal was to get a global view of Eiffel solutions related to web applications (server and client). It was also the kickoff of the Eiffel Web Framework project (EWF), an open source project to write server application in Eiffel).<br />
<br />
The second workshop collected user feedback, and tried to reduce the gap between low level aspects and the expected high level view of a user friendly framework. In the meantime, the Eiffel Web Framework has improved, and is reaching the state of its first release (scheduled as part of the EiffelStudio 7.1 release on May 15th).<br />
<br />
During the May 2012 feast we will present the first release, explore new ways to create a user friendly framework for web applications and prepare the future work.<br />
<br />
== Information of the one day workshop ==<br />
<br />
The Design Feast will take place as a one day workshop during the [http://tools2012.fit.cvut.cz/ TOOLS 2012 conference] in Prague, Czech Republic<br />
<br />
Wednesday, May 30th, 2012<br />
<br />
The participants are responsible for their own travel and accommodation. Because the workshop is part of the TOOLS 2012 conference, the participants must register for at least the day of the workshop, or for the full conference.<br />
See [http://tools2012.fit.cvut.cz/index.php/registration.html Registration page] for details.<br />
<br />
Check the [http://tools2012.fit.cvut.cz/index.php/program.html TOOLS 2012 program] ([http://tools2012.fit.cvut.cz/tl_files/program/TOOLS-2012-Rooms-New-Schedules-With-Keynotes.pdf PDF]) for times, and rooms.<br />
<br />
We hope you can participate. If so, please indicate it to '''designfeast@eiffel.com''' .<br />
We look forward to an intense and productive discussion.<br />
<br />
The present page (http://dev.eiffel.com/Eiffel_Design_Feast_May-2012) will be updated with more information as it becomes available.<br />
<br />
== About the Eiffel Web Framework ==<br />
* Check the [http://eiffel-world.github.com/Eiffel-Web-Framework/ page] of the EWF project.<br />
* Framework to build web server application in Eiffel <br />
** Written in void-safe Eiffel<br />
** Compliant with future EWSGI specification, then portable on any platforms, and httpd available connectors.<br />
** Provides the core functionalities, such as REQUEST, RESPONSE, URL router (url dispatching), URI template component, MIME handler, ...)<br />
** Provides simple http client library.<br />
** More to come (about RESTful, HATEOS, Authentication, ...) after the first release.<br />
** Once the first release is out, feel confident to contribute with libraries and tools built on top of EWF. So this new Web ecosystem covers all the needs.<br />
<br />
* Important note: the Eiffel Design Feast will start at 9:10am. However, if you want to listen to the Keynote, you can still join the workshop at 11:00am.<br />
* Program: to be defined</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Eiffel_Design_Feast_May-2012&diff=14389Eiffel Design Feast May-20122012-04-06T05:22:14Z<p>Bmeyer: /* Eiffel Web Framework */</p>
<hr />
<div>[[Category:community]]<br />
[[Category:design-feast]]<br />
<br />
'''Co-located with TOOLS EUROPE 2012 / 30 May 2012, Prague, Czech Republic'''<br />
<br />
== Announce ==<br />
<br />
To continue the work made during previous Design Feast (June 2011, and December 2011), the next '''Eiffel Web Design Feast''' will take place on '''Wednesday, May 30th 2012 in Prague, Czech Republic'''. It is a workshop scheduled as part of the '''TOOLS EUROPE 2012''' conference.<br />
<br />
== Description ==<br />
<br />
The first design feast goal was to get a global view of Eiffel solutions related to web applications (server and client). It was also the kickoff of the Eiffel Web Framework project (EWF), an open source project to write server application in Eiffel).<br />
<br />
The second workshop collected user feedbacks, and tried to reduce the gap between low level aspects and the expected high level view of a user friendly framework. In the meantime, the Eiffel Web Framework has improved, and is reaching the state of its first release (scheduled as part of the EiffelStudio 7.1 release on May 15th).<br />
<br />
During the May 2012 feast we will present the first release, explore new ways to create a user friendly framework for web applications and prepare the future work.<br />
<br />
== Information of the one day workshop ==<br />
<br />
The Design Feast will take place as a one day workshop during the [http://tools2012.fit.cvut.cz/ TOOLS 2012 conference] in Prague, Czech Republic<br />
<br />
Wednesday, May 30th, 2012<br />
<br />
The participants are responsible for their own travel and accommodation. Because the workshop is part of the TOOLS 2012 conference, the participants must register for at least the day of the workshop, or for the full conference.<br />
See [http://tools2012.fit.cvut.cz/index.php/registration.html Registration page] for details.<br />
<br />
Check the [http://tools2012.fit.cvut.cz/index.php/program.html TOOLS 2012 program] ([http://tools2012.fit.cvut.cz/tl_files/program/TOOLS-2012-Rooms-New-Schedules-With-Keynotes.pdf PDF]) for times, and rooms.<br />
<br />
The present page (http://dev.eiffel.com/Eiffel_Design_Feast_May-2012) will be updated with more information as it becomes available.<br />
<br />
== About the Eiffel Web Framework ==<br />
* Check the [http://eiffel-world.github.com/Eiffel-Web-Framework/ page] of the EWF project.<br />
* Framework to build web server application in Eiffel <br />
** Written in void-safe Eiffel<br />
** Compliant with future EWSGI specification, then portable on any platforms, and httpd available connectors.<br />
** Provides the core functionalities, such as REQUEST, RESPONSE, URL router (url dispatching), URI template component, MIME handler, ...)<br />
** Provides simple http client library.<br />
** More to come (about RESTful, HATEOS, Authentication, ...) after the first release.<br />
** Once the first release is out, feel confident to contribute with libraries and tools built on top of EWF. So this new Web ecosystem covers all the needs.<br />
<br />
* Important note: the Eiffel Design Feast will start at 9:10am. However, if you want to listen to the Keynote, you can still join the workshop at 11:00am.<br />
* Program: to be defined</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Eiffel_Design_Feast_May-2012&diff=14388Eiffel Design Feast May-20122012-04-06T05:21:22Z<p>Bmeyer: Cosmetic changes</p>
<hr />
<div>[[Category:community]]<br />
[[Category:design-feast]]<br />
<br />
'''Co-located with TOOLS EUROPE 2012 / 30 May 2012, Prague, Czech Republic'''<br />
<br />
== Announce ==<br />
<br />
To continue the work made during previous Design Feast (June 2011, and December 2011), the next '''Eiffel Web Design Feast''' will take place on '''Wednesday, May 30th 2012 in Prague, Czech Republic'''. It is a workshop scheduled as part of the '''TOOLS EUROPE 2012''' conference.<br />
<br />
== Description ==<br />
<br />
The first design feast goal was to get a global view of Eiffel solutions related to web applications (server and client). It was also the kickoff of the Eiffel Web Framework project (EWF), an open source project to write server application in Eiffel).<br />
<br />
The second workshop collected user feedbacks, and tried to reduce the gap between low level aspects and the expected high level view of a user friendly framework. In the meantime, the Eiffel Web Framework has improved, and is reaching the state of its first release (scheduled as part of the EiffelStudio 7.1 release on May 15th).<br />
<br />
During the May 2012 feast we will present the first release, explore new ways to create a user friendly framework for web applications and prepare the future work.<br />
<br />
== Information of the one day workshop ==<br />
<br />
The Design Feast will take place as a one day workshop during the [http://tools2012.fit.cvut.cz/ TOOLS 2012 conference] in Prague, Czech Republic<br />
<br />
Wednesday, May 30th, 2012<br />
<br />
The participants are responsible for their own travel and accommodation. Because the workshop is part of the TOOLS 2012 conference, the participants must register for at least the day of the workshop, or for the full conference.<br />
See [http://tools2012.fit.cvut.cz/index.php/registration.html Registration page] for details.<br />
<br />
Check the [http://tools2012.fit.cvut.cz/index.php/program.html TOOLS 2012 program] ([http://tools2012.fit.cvut.cz/tl_files/program/TOOLS-2012-Rooms-New-Schedules-With-Keynotes.pdf PDF]) for times, and rooms.<br />
<br />
The present page (http://dev.eiffel.com/Eiffel_Design_Feast_May-2012) will be updated with more information as it becomes available.<br />
<br />
== Eiffel Web Framework ==<br />
* Check the [http://eiffel-world.github.com/Eiffel-Web-Framework/ page] of the EWF project.<br />
* Framework to build web server application in Eiffel <br />
** Written in void-safe Eiffel<br />
** Compliant with future EWSGI specification, then portable on any platforms, and httpd available connectors.<br />
** Provides the core functionalities, such as REQUEST, RESPONSE, URL router (url dispatching), URI template component, MIME handler, ...)<br />
** Provides simple http client library.<br />
** More to come (about RESTful, HATEOS, Authentication, ...) after the first release.<br />
** Once the first release is out, feel confident to contribute with libraries and tools built on top of EWF. So this new Web ecosystem covers all the needs.<br />
<br />
* Important note, the Eiffel Design Feast will start at 9:10am. However, if you want to listen to the Keynote, you can still join the workshop at 11:00am.<br />
* Program: to be defined</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Eiffel_Design_Feast_June-2011&diff=14131Eiffel Design Feast June-20112011-06-20T10:07:28Z<p>Bmeyer: /* Organization */</p>
<hr />
<div>[[Category:community]]<br />
<br />
= Announce =<br />
Design the next-generation Eiffel Web solution! The great 2011 Eiffel Design Feast: (Zurich, 25-26 June 2011.)<br />
The software of the future will, for a large part, run on the cloud. A superb<br />
Web application design framework is the hallmark of a great software<br />
environment. While Web solutions for Eiffel exist (ever since the first<br />
EiffelWeb library in 1994) the design of the ideal Eiffel Web solution remains<br />
in the future.<br />
<br />
The future is June 25 and 26. We are holding an Eiffel Design Feast in Zurich on<br />
this date. The participants will, together, devise the next Web development<br />
framework, taking full advantage of Eiffel's strengths.<br />
<br />
The Eiffel Design Feast will take place at ETH Zurich over two full days, just<br />
prior to the TOOLS conference week (http://tools.ethz.ch); the results will be<br />
presented at the Eiffel workshop on the next day<br />
(https://wiki.se.inf.ethz.ch/nec/bin/view/Main/ToolsWorkshop). Participation is<br />
free but participants are responsible for their own expenses (see the TOOLS<br />
pages for information about accommodation).<br />
<br />
The Eiffel Design Feast is open to anyone with design experience, Web<br />
experience, Eiffel experience and a genuine desire to help build an outstanding<br />
open-source solution. A document describing an analysis of available choices and<br />
possible directions will be circulated to participants ahead of time to help<br />
start an effective discussion. We hope the event will result in clear design<br />
decisions, a solid architecture, and a blueprint for the rest of the<br />
development.<br />
<br />
If you wish to showcase your design skills and help shape the future, please<br />
write to designfeast@eiffel.com including a short description of your background<br />
including experience (Eiffel, Web framework design etc.) relevant to the Design<br />
Feast.<br />
<br />
The Eiffel Software Team<br />
<br />
== Organization ==<br />
* '''Contact''': designfeast@eiffel.com<br />
* '''Date''': Saturday and Sunday, 25 and 26 June 2011<br />
* '''Location''': ETH Zurich (Switzerland)<br />
'''Room E42'''<br />
'''IFW Building of ETH'''<br />
Access through RZ building, Clausiusstrasse 59<br />
Location map: http://tinyurl.com/447dnud<br />
Public transport: tram stop "Haldenegg", trams<br />
6, 7 or 10 (two stops from Zurich main station)<br />
Or 15<br />
More local access information from the ETH<br />
Computer Science department: http://www.inf.ethz.ch/about/finding<br />
(Warning: only instructions for "RZ" building are valid, the department's<br />
other locations are further away.)<br />
<br />
BUILDING ACCESS: the building is closed on Saturday and Sunday; you need<br />
someone to open the door for you. Please come on both days between 8:45 and 9;<br />
someone will be there to escort you. If for some reason you need<br />
access outside of these hours please send an email to designfeast[at]eiffel.com.<br />
<br />
== Agenda ==<br />
=== Saturday (25/june) ===<br />
* 9 to 17<br />
=== Sunday (26/june) ===<br />
* 9 to 17<br />
<br />
=== Info ===<br />
Coffee etc. will be available, and lunch will be provided in a nearby restaurant<br />
<br />
== Material ==<br />
* Documentation of the EiffelWebReloaded framework .. in progress/soon available<br />
* ... links ...<br />
<br />
== Suggestions ==<br />
* http://www.theregister.co.uk/2011/06/16/google_and_spdy/<br />
* http://www.theregister.co.uk/2011/06/17/mozilla_multithreaded_firsfox_dom_project/</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Environment_Roadmap&diff=13941Environment Roadmap2010-08-03T14:34:43Z<p>Bmeyer: /* EiffelStudio 6.6 (1st quarter 2010) */</p>
<hr />
<div>[[Category:EiffelStudio]]<br />
A [[Language_road_map|separate page]] gives the detailed roadmap for implementation of the '''full ISO/ECMA Eiffel standard'''.<br />
<br />
Roadmap information for EiffelStudio releases:<br />
<br />
==EiffelStudio long term goals==<br />
===UI===<br />
* Customizable menus and toolbars<br />
* Revisit the project settings window<br />
* Progress bar for degree 6, for C compilation and for automatic precompilation<br />
* Better wizards<br />
* Keyboard support for code browsing/activation - Esc to go to context reference in editor, F9 to set a breakpoint, etc.<br />
* More refactoring<br />
* Smart compiling (The goal is to not have to press the compile button ever).<br />
<br />
===Compiler===<br />
* Ability to download libraries/applications from a website directly from EiffelStudio (see [[Configuration_Discovery|Discovering Configuration Files]])<br />
* Add new inheritance clause semantics (rename at the end rather than at the beginning).<br />
* Experimental new catcall mechanism<br />
* Catcall checker<br />
<br />
===Debugger===<br />
*Allow edition of variables in debugger<br />
*Expand execution replay mechanism; add possibility of changing values then replaying<br />
*Make sure debugger supports new (ISO/ECMA) mechanisms<br />
<br />
===Library===<br />
* Resource library<br />
<br />
===Internal===<br />
* Reduce size of C generated in workbench mode<br />
<br />
<br />
==EiffelStudio 6.7 (15 November 2010)==<br />
===Compiler===<br />
* Concurrency: implementation of the basic SCOOP model for threads<br />
* Unicode support: accepting UTF-8 Eiffel source file<br />
<br />
===Ports===<br />
* EiffelVision: Macintosh native support for COCOA<br />
<br />
==EiffelStudio 6.6 (15 May 2010)==<br />
===UI===<br />
* Various improvements to the diagram tool<br />
<br />
===Compiler===<br />
* Initial support for QAT and once per object<br />
* New check instruction<br />
<br />
===Libraries===<br />
* Default to the void-safe version of the library<br />
<br />
==EiffelStudio 6.5 (4th quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Compiler===<br />
* <del>Added support for new loop construct to iterate over various containers</del><br />
<br />
==EiffelStudio 6.4 (2nd quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Library===<br />
* <del>Making all libraries void safe</del><br />
* <del>Added new library for internationalization, diff and encoding</del><br />
* <del>EiffelNet with IPv6 support</del><br />
<br />
===Testing===<br />
* <del>Improved testing facilities</del><br />
<br />
==EiffelStudio 6.3 (4th quarter 2008)==<br />
===Testing===<br />
* <del>Improved testing tool based on the CDD experiment</del><br />
* <del>Automatic testing of classes</del><br />
<br />
===Compiler===<br />
* <del>Proper semantics of feature replication and non-conforming inheritance.</del><br />
* <del>First implementation of void-safety.</del><br />
<br />
==EiffelStudio 6.2 (2nd quarter 2008)==<br />
===UI===<br />
* <del>Contract Editor.</del><br />
* <del>More intellisense in the editor (snippet, ...)</del><br />
<br />
===Compiler===<br />
* <del>More on attached types and CAPs</del><br />
* <del>Exception as object</del><br />
<br />
===Documentation===<br />
* <del>Allow reference to external documentation from Eiffel code (external can be: wiki, PDF, Word documents, ...).</del><br />
<br />
==EiffelStudio 6.1 (4th quarter 2007)==<br />
===UI===<br />
* <del>New Errors and Warnings tool</del><br />
<br />
===Compiler===<br />
* <del>Attached mechanism</del><br />
* <del>Non-conforming inheritance</del><br />
* <del>Object test syntax support</del><br />
* <del>Report more than one error at a time</del><br />
* <del>Added support for MinGW on Windows</del><br />
<br />
===Debugger===<br />
* <del>Execution replay</del><br />
* <del>Various improvements</del><br />
<br />
==EiffelStudio 6.0 (2nd quarter 2007)==<br />
===UI===<br />
* <del>Improved docking facilities in EiffelStudio to fully control the layout of EiffelStudio</del><br />
* <del>Configurable pick-and-drop: user can choose between a contextual menu or pick-and-drop within the EiffelStudio environment</del><br />
* <del>Internationalization support</del><br />
* <del>Customizable shortcuts</del><br />
<br />
===Compiler===<br />
* <del>Warning/error for changed environment variables used in a project configuration file</del><br />
* <del>"Hidden" clusters in libraries, clusters that are not accessible if the library is used (like libraries in libraries are not accessible).</del><br />
* <del>Clean up "inheritance" rules for project settings (e.g. assertion levels of libraries)</del><br />
* <del>Addition of binary and octal notation for manifest integers</del><br />
<br />
===Internal===<br />
* <del>Clean up delivery, names of tools, directory layout.</del><br />
* <del>Get rid of *.wb files and store this in the user settings.</del><br />
<br />
==EiffelStudio 5.7 (4th quarter 2006)==<br />
* This is the first open source version of EiffelStudio. Look at the [http://eiffelsoftware.origo.ethz.ch/index.php/EiffelStudio_5.7_Releases release notes of 5.7] for more information.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Environment_Roadmap&diff=13940Environment Roadmap2010-08-03T14:34:25Z<p>Bmeyer: /* EiffelStudio 6.7 (3rd quarter 2010) */</p>
<hr />
<div>[[Category:EiffelStudio]]<br />
A [[Language_road_map|separate page]] gives the detailed roadmap for implementation of the '''full ISO/ECMA Eiffel standard'''.<br />
<br />
Roadmap information for EiffelStudio releases:<br />
<br />
==EiffelStudio long term goals==<br />
===UI===<br />
* Customizable menus and toolbars<br />
* Revisit the project settings window<br />
* Progress bar for degree 6, for C compilation and for automatic precompilation<br />
* Better wizards<br />
* Keyboard support for code browsing/activation - Esc to go to context reference in editor, F9 to set a breakpoint, etc.<br />
* More refactoring<br />
* Smart compiling (The goal is to not have to press the compile button ever).<br />
<br />
===Compiler===<br />
* Ability to download libraries/applications from a website directly from EiffelStudio (see [[Configuration_Discovery|Discovering Configuration Files]])<br />
* Add new inheritance clause semantics (rename at the end rather than at the beginning).<br />
* Experimental new catcall mechanism<br />
* Catcall checker<br />
<br />
===Debugger===<br />
*Allow edition of variables in debugger<br />
*Expand execution replay mechanism; add possibility of changing values then replaying<br />
*Make sure debugger supports new (ISO/ECMA) mechanisms<br />
<br />
===Library===<br />
* Resource library<br />
<br />
===Internal===<br />
* Reduce size of C generated in workbench mode<br />
<br />
<br />
==EiffelStudio 6.7 (15 November 2010)==<br />
===Compiler===<br />
* Concurrency: implementation of the basic SCOOP model for threads<br />
* Unicode support: accepting UTF-8 Eiffel source file<br />
<br />
===Ports===<br />
* EiffelVision: Macintosh native support for COCOA<br />
<br />
==EiffelStudio 6.6 (1st quarter 2010)==<br />
===UI===<br />
* Various improvements to the diagram tool<br />
<br />
===Compiler===<br />
* Initial support for QAT and once per object<br />
* New check instruction<br />
<br />
===Libraries===<br />
* Default to the void-safe version of the library<br />
<br />
==EiffelStudio 6.5 (4th quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Compiler===<br />
* <del>Added support for new loop construct to iterate over various containers</del><br />
<br />
==EiffelStudio 6.4 (2nd quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Library===<br />
* <del>Making all libraries void safe</del><br />
* <del>Added new library for internationalization, diff and encoding</del><br />
* <del>EiffelNet with IPv6 support</del><br />
<br />
===Testing===<br />
* <del>Improved testing facilities</del><br />
<br />
==EiffelStudio 6.3 (4th quarter 2008)==<br />
===Testing===<br />
* <del>Improved testing tool based on the CDD experiment</del><br />
* <del>Automatic testing of classes</del><br />
<br />
===Compiler===<br />
* <del>Proper semantics of feature replication and non-conforming inheritance.</del><br />
* <del>First implementation of void-safety.</del><br />
<br />
==EiffelStudio 6.2 (2nd quarter 2008)==<br />
===UI===<br />
* <del>Contract Editor.</del><br />
* <del>More intellisense in the editor (snippet, ...)</del><br />
<br />
===Compiler===<br />
* <del>More on attached types and CAPs</del><br />
* <del>Exception as object</del><br />
<br />
===Documentation===<br />
* <del>Allow reference to external documentation from Eiffel code (external can be: wiki, PDF, Word documents, ...).</del><br />
<br />
==EiffelStudio 6.1 (4th quarter 2007)==<br />
===UI===<br />
* <del>New Errors and Warnings tool</del><br />
<br />
===Compiler===<br />
* <del>Attached mechanism</del><br />
* <del>Non-conforming inheritance</del><br />
* <del>Object test syntax support</del><br />
* <del>Report more than one error at a time</del><br />
* <del>Added support for MinGW on Windows</del><br />
<br />
===Debugger===<br />
* <del>Execution replay</del><br />
* <del>Various improvements</del><br />
<br />
==EiffelStudio 6.0 (2nd quarter 2007)==<br />
===UI===<br />
* <del>Improved docking facilities in EiffelStudio to fully control the layout of EiffelStudio</del><br />
* <del>Configurable pick-and-drop: user can choose between a contextual menu or pick-and-drop within the EiffelStudio environment</del><br />
* <del>Internationalization support</del><br />
* <del>Customizable shortcuts</del><br />
<br />
===Compiler===<br />
* <del>Warning/error for changed environment variables used in a project configuration file</del><br />
* <del>"Hidden" clusters in libraries, clusters that are not accessible if the library is used (like libraries in libraries are not accessible).</del><br />
* <del>Clean up "inheritance" rules for project settings (e.g. assertion levels of libraries)</del><br />
* <del>Addition of binary and octal notation for manifest integers</del><br />
<br />
===Internal===<br />
* <del>Clean up delivery, names of tools, directory layout.</del><br />
* <del>Get rid of *.wb files and store this in the user settings.</del><br />
<br />
==EiffelStudio 5.7 (4th quarter 2006)==<br />
* This is the first open source version of EiffelStudio. Look at the [http://eiffelsoftware.origo.ethz.ch/index.php/EiffelStudio_5.7_Releases release notes of 5.7] for more information.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Environment_Roadmap&diff=13939Environment Roadmap2010-08-03T14:33:07Z<p>Bmeyer: /* Ports */</p>
<hr />
<div>[[Category:EiffelStudio]]<br />
A [[Language_road_map|separate page]] gives the detailed roadmap for implementation of the '''full ISO/ECMA Eiffel standard'''.<br />
<br />
Roadmap information for EiffelStudio releases:<br />
<br />
==EiffelStudio long term goals==<br />
===UI===<br />
* Customizable menus and toolbars<br />
* Revisit the project settings window<br />
* Progress bar for degree 6, for C compilation and for automatic precompilation<br />
* Better wizards<br />
* Keyboard support for code browsing/activation - Esc to go to context reference in editor, F9 to set a breakpoint, etc.<br />
* More refactoring<br />
* Smart compiling (The goal is to not have to press the compile button ever).<br />
<br />
===Compiler===<br />
* Ability to download libraries/applications from a website directly from EiffelStudio (see [[Configuration_Discovery|Discovering Configuration Files]])<br />
* Add new inheritance clause semantics (rename at the end rather than at the beginning).<br />
* Experimental new catcall mechanism<br />
* Catcall checker<br />
<br />
===Debugger===<br />
*Allow edition of variables in debugger<br />
*Expand execution replay mechanism; add possibility of changing values then replaying<br />
*Make sure debugger supports new (ISO/ECMA) mechanisms<br />
<br />
===Library===<br />
* Resource library<br />
<br />
===Internal===<br />
* Reduce size of C generated in workbench mode<br />
<br />
<br />
==EiffelStudio 6.7 (3rd quarter 2010)==<br />
===Compiler===<br />
* Concurrency: implementation of the basic SCOOP model for threads<br />
* Unicode support: accepting UTF-8 Eiffel source file<br />
<br />
===Ports===<br />
* EiffelVision: Macintosh native support for COCOA<br />
<br />
==EiffelStudio 6.6 (1st quarter 2010)==<br />
===UI===<br />
* Various improvements to the diagram tool<br />
<br />
===Compiler===<br />
* Initial support for QAT and once per object<br />
* New check instruction<br />
<br />
===Libraries===<br />
* Default to the void-safe version of the library<br />
<br />
==EiffelStudio 6.5 (4th quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Compiler===<br />
* <del>Added support for new loop construct to iterate over various containers</del><br />
<br />
==EiffelStudio 6.4 (2nd quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Library===<br />
* <del>Making all libraries void safe</del><br />
* <del>Added new library for internationalization, diff and encoding</del><br />
* <del>EiffelNet with IPv6 support</del><br />
<br />
===Testing===<br />
* <del>Improved testing facilities</del><br />
<br />
==EiffelStudio 6.3 (4th quarter 2008)==<br />
===Testing===<br />
* <del>Improved testing tool based on the CDD experiment</del><br />
* <del>Automatic testing of classes</del><br />
<br />
===Compiler===<br />
* <del>Proper semantics of feature replication and non-conforming inheritance.</del><br />
* <del>First implementation of void-safety.</del><br />
<br />
==EiffelStudio 6.2 (2nd quarter 2008)==<br />
===UI===<br />
* <del>Contract Editor.</del><br />
* <del>More intellisense in the editor (snippet, ...)</del><br />
<br />
===Compiler===<br />
* <del>More on attached types and CAPs</del><br />
* <del>Exception as object</del><br />
<br />
===Documentation===<br />
* <del>Allow reference to external documentation from Eiffel code (external can be: wiki, PDF, Word documents, ...).</del><br />
<br />
==EiffelStudio 6.1 (4th quarter 2007)==<br />
===UI===<br />
* <del>New Errors and Warnings tool</del><br />
<br />
===Compiler===<br />
* <del>Attached mechanism</del><br />
* <del>Non-conforming inheritance</del><br />
* <del>Object test syntax support</del><br />
* <del>Report more than one error at a time</del><br />
* <del>Added support for MinGW on Windows</del><br />
<br />
===Debugger===<br />
* <del>Execution replay</del><br />
* <del>Various improvements</del><br />
<br />
==EiffelStudio 6.0 (2nd quarter 2007)==<br />
===UI===<br />
* <del>Improved docking facilities in EiffelStudio to fully control the layout of EiffelStudio</del><br />
* <del>Configurable pick-and-drop: user can choose between a contextual menu or pick-and-drop within the EiffelStudio environment</del><br />
* <del>Internationalization support</del><br />
* <del>Customizable shortcuts</del><br />
<br />
===Compiler===<br />
* <del>Warning/error for changed environment variables used in a project configuration file</del><br />
* <del>"Hidden" clusters in libraries, clusters that are not accessible if the library is used (like libraries in libraries are not accessible).</del><br />
* <del>Clean up "inheritance" rules for project settings (e.g. assertion levels of libraries)</del><br />
* <del>Addition of binary and octal notation for manifest integers</del><br />
<br />
===Internal===<br />
* <del>Clean up delivery, names of tools, directory layout.</del><br />
* <del>Get rid of *.wb files and store this in the user settings.</del><br />
<br />
==EiffelStudio 5.7 (4th quarter 2006)==<br />
* This is the first open source version of EiffelStudio. Look at the [http://eiffelsoftware.origo.ethz.ch/index.php/EiffelStudio_5.7_Releases release notes of 5.7] for more information.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Environment_Roadmap&diff=13938Environment Roadmap2010-08-03T14:32:38Z<p>Bmeyer: /* Compiler */</p>
<hr />
<div>[[Category:EiffelStudio]]<br />
A [[Language_road_map|separate page]] gives the detailed roadmap for implementation of the '''full ISO/ECMA Eiffel standard'''.<br />
<br />
Roadmap information for EiffelStudio releases:<br />
<br />
==EiffelStudio long term goals==<br />
===UI===<br />
* Customizable menus and toolbars<br />
* Revisit the project settings window<br />
* Progress bar for degree 6, for C compilation and for automatic precompilation<br />
* Better wizards<br />
* Keyboard support for code browsing/activation - Esc to go to context reference in editor, F9 to set a breakpoint, etc.<br />
* More refactoring<br />
* Smart compiling (The goal is to not have to press the compile button ever).<br />
<br />
===Compiler===<br />
* Ability to download libraries/applications from a website directly from EiffelStudio (see [[Configuration_Discovery|Discovering Configuration Files]])<br />
* Add new inheritance clause semantics (rename at the end rather than at the beginning).<br />
* Experimental new catcall mechanism<br />
* Catcall checker<br />
<br />
===Debugger===<br />
*Allow edition of variables in debugger<br />
*Expand execution replay mechanism; add possibility of changing values then replaying<br />
*Make sure debugger supports new (ISO/ECMA) mechanisms<br />
<br />
===Library===<br />
* Resource library<br />
<br />
===Internal===<br />
* Reduce size of C generated in workbench mode<br />
<br />
<br />
==EiffelStudio 6.7 (3rd quarter 2010)==<br />
===Compiler===<br />
* Concurrency: implementation of the basic SCOOP model for threads<br />
* Unicode support: accepting UTF-8 Eiffel source file<br />
<br />
===Ports===<br />
* Mac native support<br />
<br />
<br />
==EiffelStudio 6.6 (1st quarter 2010)==<br />
===UI===<br />
* Various improvements to the diagram tool<br />
<br />
===Compiler===<br />
* Initial support for QAT and once per object<br />
* New check instruction<br />
<br />
===Libraries===<br />
* Default to the void-safe version of the library<br />
<br />
==EiffelStudio 6.5 (4th quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Compiler===<br />
* <del>Added support for new loop construct to iterate over various containers</del><br />
<br />
==EiffelStudio 6.4 (2nd quarter 2009)==<br />
This version will not bring major new functionality. We aim at fixing all the inconveniences that people may have experienced with our previous releases.<br />
<br />
===Library===<br />
* <del>Making all libraries void safe</del><br />
* <del>Added new library for internationalization, diff and encoding</del><br />
* <del>EiffelNet with IPv6 support</del><br />
<br />
===Testing===<br />
* <del>Improved testing facilities</del><br />
<br />
==EiffelStudio 6.3 (4th quarter 2008)==<br />
===Testing===<br />
* <del>Improved testing tool based on the CDD experiment</del><br />
* <del>Automatic testing of classes</del><br />
<br />
===Compiler===<br />
* <del>Proper semantics of feature replication and non-conforming inheritance.</del><br />
* <del>First implementation of void-safety.</del><br />
<br />
==EiffelStudio 6.2 (2nd quarter 2008)==<br />
===UI===<br />
* <del>Contract Editor.</del><br />
* <del>More intellisense in the editor (snippet, ...)</del><br />
<br />
===Compiler===<br />
* <del>More on attached types and CAPs</del><br />
* <del>Exception as object</del><br />
<br />
===Documentation===<br />
* <del>Allow reference to external documentation from Eiffel code (external can be: wiki, PDF, Word documents, ...).</del><br />
<br />
==EiffelStudio 6.1 (4th quarter 2007)==<br />
===UI===<br />
* <del>New Errors and Warnings tool</del><br />
<br />
===Compiler===<br />
* <del>Attached mechanism</del><br />
* <del>Non-conforming inheritance</del><br />
* <del>Object test syntax support</del><br />
* <del>Report more than one error at a time</del><br />
* <del>Added support for MinGW on Windows</del><br />
<br />
===Debugger===<br />
* <del>Execution replay</del><br />
* <del>Various improvements</del><br />
<br />
==EiffelStudio 6.0 (2nd quarter 2007)==<br />
===UI===<br />
* <del>Improved docking facilities in EiffelStudio to fully control the layout of EiffelStudio</del><br />
* <del>Configurable pick-and-drop: user can choose between a contextual menu or pick-and-drop within the EiffelStudio environment</del><br />
* <del>Internationalization support</del><br />
* <del>Customizable shortcuts</del><br />
<br />
===Compiler===<br />
* <del>Warning/error for changed environment variables used in a project configuration file</del><br />
* <del>"Hidden" clusters in libraries, clusters that are not accessible if the library is used (like libraries in libraries are not accessible).</del><br />
* <del>Clean up "inheritance" rules for project settings (e.g. assertion levels of libraries)</del><br />
* <del>Addition of binary and octal notation for manifest integers</del><br />
<br />
===Internal===<br />
* <del>Clean up delivery, names of tools, directory layout.</del><br />
* <del>Get rid of *.wb files and store this in the user settings.</del><br />
<br />
==EiffelStudio 5.7 (4th quarter 2006)==<br />
* This is the first open source version of EiffelStudio. Look at the [http://eiffelsoftware.origo.ethz.ch/index.php/EiffelStudio_5.7_Releases release notes of 5.7] for more information.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=EiffelBase2&diff=13778EiffelBase22010-04-17T13:32:07Z<p>Bmeyer: Basic information</p>
<hr />
<div>[[Category:Library]]<br />
<br />
==Overview==<br />
<br />
EiffelBase2, currently under development, is a general-purpose data structures library for Eiffel. It is intended as the future replacement for the [[EiffelBase]] library ("Classic EiffelBase" in this document), which has for many years played a central role in Eiffel development. <br />
<br />
==Design goals==<br />
<br />
The design goals for EiffelBase2 are:<br />
<br />
*Verifiability. The library is designed to allow proofs of correctness.<br />
<br />
*Full contracts. Partly as a result of the verifiability goal, but also for clarity and documentation, the contracts associated with classes and features should describe the relevant semantics in its entirety.<br />
<br />
*Simple and consistent hierarchy, in particular avoidance of descendant hiding and of "taxomania" (classes not representing a meaningful abstraction, unnecessary inheritance links).<br />
<br />
*As in Classic EiffelBase, application of a systematic classification (a theory) of fundamental data structures.<br />
<br />
*Full traversal mechanisms, based on external cursors (with internal cursors also provided when useful).<br />
<br />
*Client-interface compatibility with corresponding classes in Classic EiffelBase, whenever it does not conflict with he preceding goals.<br />
<br />
==Status==<br />
<br />
Development of EiffelBase has started as a project at ETH Zurich; see the [http://eiffelbase2.origo.ethz.ch/ project page]. Documentation and other material will soon be transferred to the present page.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Libraries&diff=13591Libraries2010-01-27T00:34:13Z<p>Bmeyer: </p>
<hr />
<div>[[Category:EiffelStudio]]<br />
[[Category:Compiler]]<br />
[[Category:Configuration]]<br />
[[Category:Library]]<br />
== General ==<br />
=== What is a library? ===<br />
A library is a collection of functionality that is exported by an interface. The implementation of the library is not exported so that the library can be changed without affecting users of the library as long as the interface is compatible.<br />
<br />
=== What is in a library? ===<br />
A library has classes that are available to users and may also have classes that are only in the library for implementation purposes and are therefore not available to the user of the library. A library normally also has dependencies on other libraries and may have externals, pre/post compile tasks and may mark some classes as visible (they will always be compiled).<br />
It is also possible to specify several options for the use of a library. E.g. it is possible to disable warnings or set a certain assertion level (see [[ConfigurationOptions]]).<br />
<br />
=== Name clashes and conflicts ===<br />
As libraries are designed and created independently of each other it is possible that two libraries have classes in them which have the same name. As long as the classes with the name clash are only in the implementation part of the library (and therefore not exported) the user of the library does not have to do anything as there is no conflict for him. If the name clash is in the interface part of the two libraries the user of the libraries has to deal with them. There are several possible solutions:<br />
<br />
# '''Prefixing''': He can prefix one (or both of the libraries) in his system. <br />
# '''Renaming''': Renaming is very similar to Prefixing, the only difference is that instead of adding a prefix to all classes, only one (or a few) classes receive a different name.<br />
<br />
=== Testing and Debugging of a library ===<br />
It is possible to add testing and debugging code to a library by adding additional targets (that inherit from the library target). This targets can then be used to debug and test the library and make the library a fully self contained component.<br />
<br />
== Examples ==<br />
=== EiffelBase ===<br />
EiffelBase is the most often used library as almost every system and library uses it.<br />
Base consists of one recursive cluster which is exported. In .NET mode base also uses some assemblies for its implementation (of which the contents are not exported). Base does not have any externals or dependencies on other libraries.<br />
<br />
=== Graphic ===<br />
A platform independent graphic library could look something like this: One exported interface cluster that describes the interface of this library. One not exported implementation cluster for each supported platform. For example on windows this implementation could make use of the WEL library and on Macintosh it could do all the implementation directly and may use C externals. There could also be a target that builds a sample application to debug various things of the library. One additional target could also build a system that uses and tests all available graphical elements of the library.<br />
The developer of the library can use the addition targets for testing and debugging, the user of the library would not know about them and would also not know about the implementation clusters.<br />
<br />
=== Name Clash Example ===<br />
==== Swiss_bank library ====<br />
Provided by a Swiss bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* EUROCARD<br />
<br />
==== Us_bank library ====<br />
Provided by a US bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* CHECK<br />
<br />
==== Local applications (Swiss and US) ====<br />
The local Swiss application uses only the Swiss_bank library and does not have any conflicts.<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_money: MONEY<br />
l_my_account, l_your_account: ACCOUNT<br />
do<br />
create l_your_account<br />
l_money := l_your_account.withdraw_all<br />
<br />
create l_my_account.deposit (l_money)<br />
end<br />
end<br />
</code><br />
<br />
The local US application is similar, using only the US_bank library.<br />
<br />
==== International Application ====<br />
An international application needs to use both Swiss_bank and Us_bank, for example to transfer money from a Swiss bank to a US bank. MONEY and ACCOUNT conflict. To solve the name clash, the author of the international application adds a prefix CH_ when using Swiss_bank classes and, similarly, a prefix US_ for those of US_bank.<br />
<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_swiss_money: CH_MONEY<br />
l_us_money: US_MONEY<br />
l_swiss_account: CH_ACCOUNT<br />
l_us_account: US_ACCOUNT<br />
do<br />
create l_swiss_account<br />
l_swiss_money := l_swiss_account.withdraw_all<br />
<br />
create l_us_money.make (l_swiss_money.value * exchange_rate)<br />
create l_us_account.deposit (l_us_money)<br />
end<br />
<br />
exchange_rate: REAL_32 is 0.7975<br />
<br />
end<br />
</code><br />
As the renaming is done on the the side of library usage, it does not break any local applications that use only one of the libraries.<br />
<br />
The scheme also supports an application that uses both a library A and a library B which itself uses A, and some renaming is needed.<br />
<br />
The idea is that a library can never be "broken" from the outside: it always works independently of existing usage.<br />
<br />
<br />
== How to perform the renaming ==<br />
Under EiffelStudio, select Project Settings, then Libraries under Groups, and the desired library. Under Advanced,go to Prefix and enter a prefix, such as "CH_" in the above example. That's it.<br />
<br />
If instead of choosing a single prefix for all classes of the library you want to define new names for some of them, select Renaming instead of Prefix; click the right column, then for affected classes enter the old name and the new name.<br />
<br />
<br />
== Implementation ==<br />
=== Unique library identifiers ===<br />
To decide if two libraries referenced in an application are the same, the EiffelStudio scheme uses a UUID (unique identifier). Two problems this technique addresses are:<br />
<br />
* Any error that could result if the same library is referenced through different paths (for example with symbolic links).<br />
<br />
* Making it possible to compile each library only once even if multiple parts of the applications (including other libraries) refer to it.<br />
<br />
* Making sure that renaming (prefixing) classes of a library A in a library B does not affect other parts of the application, including other libraries.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Libraries&diff=13590Libraries2010-01-27T00:33:27Z<p>Bmeyer: /* How to perform a renaming */</p>
<hr />
<div>[[Category:EiffelStudio]]<br />
[[Category:Compiler]]<br />
[[Category:Configuration]]<br />
[[Category:Library]]<br />
== General ==<br />
=== What is a library? ===<br />
A library is a collection of functionality that is exported by an interface. The implementation of the library is not exported so that the library can be changed without affecting users of the library as long as the interface is compatible.<br />
<br />
=== What is in a library? ===<br />
A library has classes that are available to users and may also have classes that are only in the library for implementation purposes and are therefore not available to the user of the library. A library normally also has dependencies on other libraries and may have externals, pre/post compile tasks and may mark some classes as visible (they will always be compiled).<br />
It is also possible to specify several options for the use of a library. E.g. it is possible to disable warnings or set a certain assertion level (see [[ConfigurationOptions]]).<br />
<br />
=== Name clashes and conflicts ===<br />
As libraries are designed and created independently of each other it is possible that two libraries have classes in them which have the same name. As long as the classes with the name clash are only in the implementation part of the library (and therefore not exported) the user of the library does not have to do anything as there is no conflict for him. If the name clash is in the interface part of the two libraries the user of the libraries has to deal with them. There are several possible solutions:<br />
<br />
# '''Prefixing''': He can prefix one (or both of the libraries) in his system. <br />
# '''Renaming''': Renaming is very similar to Prefixing, the only difference is that instead of adding a prefix to all classes, only one (or a few) classes receive a different name.<br />
<br />
=== Testing and Debugging of a library ===<br />
It is possible to add testing and debugging code to a library by adding additional targets (that inherit from the library target). This targets can then be used to debug and test the library and make the library a fully self contained component.<br />
<br />
== Examples ==<br />
=== EiffelBase ===<br />
EiffelBase is the most often used library as almost every system and library uses it.<br />
Base consists of one recursive cluster which is exported. In .NET mode base also uses some assemblies for its implementation (of which the contents are not exported). Base does not have any externals or dependencies on other libraries.<br />
<br />
=== Graphic ===<br />
A platform independent graphic library could look something like this: One exported interface cluster that describes the interface of this library. One not exported implementation cluster for each supported platform. For example on windows this implementation could make use of the WEL library and on Macintosh it could do all the implementation directly and may use C externals. There could also be a target that builds a sample application to debug various things of the library. One additional target could also build a system that uses and tests all available graphical elements of the library.<br />
The developer of the library can use the addition targets for testing and debugging, the user of the library would not know about them and would also not know about the implementation clusters.<br />
<br />
=== Name Clash Example ===<br />
==== Swiss_bank library ====<br />
Provided by a Swiss bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* EUROCARD<br />
<br />
==== Us_bank library ====<br />
Provided by a US bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* CHECK<br />
<br />
==== Local applications (Swiss and US) ====<br />
The local Swiss application uses only the Swiss_bank library and does not have any conflicts.<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_money: MONEY<br />
l_my_account, l_your_account: ACCOUNT<br />
do<br />
create l_your_account<br />
l_money := l_your_account.withdraw_all<br />
<br />
create l_my_account.deposit (l_money)<br />
end<br />
end<br />
</code><br />
<br />
The local US application is similar, using only the US_bank library.<br />
<br />
==== International Application ====<br />
An international application needs to use both Swiss_bank and Us_bank, for example to transfer money from a Swiss bank to a US bank. MONEY and ACCOUNT conflict. To solve the name clash, the author of the international application adds a prefix CH_ when using Swiss_bank classes and, similarly, a prefix US_ for those of US_bank.<br />
<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_swiss_money: CH_MONEY<br />
l_us_money: US_MONEY<br />
l_swiss_account: CH_ACCOUNT<br />
l_us_account: US_ACCOUNT<br />
do<br />
create l_swiss_account<br />
l_swiss_money := l_swiss_account.withdraw_all<br />
<br />
create l_us_money.make (l_swiss_money.value * exchange_rate)<br />
create l_us_account.deposit (l_us_money)<br />
end<br />
<br />
exchange_rate: REAL_32 is 0.7975<br />
<br />
end<br />
</code><br />
As the renaming is done on the the side of library usage, it does not break any local applications that use only one of the libraries.<br />
<br />
The scheme also supports an application that uses both a library A and a library B which itself uses A, and some renaming is needed.<br />
<br />
The idea is that a library can never be "broken" from the outside: it always works independently of existing usage.<br />
<br />
== Implementation ==<br />
=== Unique library identifiers ===<br />
To decide if two libraries referenced in an application are the same, the EiffelStudio scheme uses a UUID (unique identifier). Two problems this technique addresses are:<br />
<br />
* Any error that could result if the same library is referenced through different paths (for example with symbolic links).<br />
<br />
* Making it possible to compile each library only once even if multiple parts of the applications (including other libraries) refer to it.<br />
<br />
* Making sure that renaming (prefixing) classes of a library A in a library B does not affect other parts of the application, including other libraries.<br />
<br />
=== How to perform a renaming ===<br />
Under EiffelStudio, select Project Settings, then Libraries under Groups, and the desired library. Under Advanced,go to Prefix and enter a prefix, such as "CH_" in the above example. That's it.<br />
<br />
If instead of choosing a single prefix for all classes of the library you want to define new names for some of them, select Renaming instead of Prefix; click the right column, then for affected classes enter the old name and the new name.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Libraries&diff=13589Libraries2010-01-27T00:17:31Z<p>Bmeyer: </p>
<hr />
<div>[[Category:EiffelStudio]]<br />
[[Category:Compiler]]<br />
[[Category:Configuration]]<br />
[[Category:Library]]<br />
== General ==<br />
=== What is a library? ===<br />
A library is a collection of functionality that is exported by an interface. The implementation of the library is not exported so that the library can be changed without affecting users of the library as long as the interface is compatible.<br />
<br />
=== What is in a library? ===<br />
A library has classes that are available to users and may also have classes that are only in the library for implementation purposes and are therefore not available to the user of the library. A library normally also has dependencies on other libraries and may have externals, pre/post compile tasks and may mark some classes as visible (they will always be compiled).<br />
It is also possible to specify several options for the use of a library. E.g. it is possible to disable warnings or set a certain assertion level (see [[ConfigurationOptions]]).<br />
<br />
=== Name clashes and conflicts ===<br />
As libraries are designed and created independently of each other it is possible that two libraries have classes in them which have the same name. As long as the classes with the name clash are only in the implementation part of the library (and therefore not exported) the user of the library does not have to do anything as there is no conflict for him. If the name clash is in the interface part of the two libraries the user of the libraries has to deal with them. There are several possible solutions:<br />
<br />
# '''Prefixing''': He can prefix one (or both of the libraries) in his system. <br />
# '''Renaming''': Renaming is very similar to Prefixing, the only difference is that instead of adding a prefix to all classes, only one (or a few) classes receive a different name.<br />
<br />
=== Testing and Debugging of a library ===<br />
It is possible to add testing and debugging code to a library by adding additional targets (that inherit from the library target). This targets can then be used to debug and test the library and make the library a fully self contained component.<br />
<br />
== Examples ==<br />
=== EiffelBase ===<br />
EiffelBase is the most often used library as almost every system and library uses it.<br />
Base consists of one recursive cluster which is exported. In .NET mode base also uses some assemblies for its implementation (of which the contents are not exported). Base does not have any externals or dependencies on other libraries.<br />
<br />
=== Graphic ===<br />
A platform independent graphic library could look something like this: One exported interface cluster that describes the interface of this library. One not exported implementation cluster for each supported platform. For example on windows this implementation could make use of the WEL library and on Macintosh it could do all the implementation directly and may use C externals. There could also be a target that builds a sample application to debug various things of the library. One additional target could also build a system that uses and tests all available graphical elements of the library.<br />
The developer of the library can use the addition targets for testing and debugging, the user of the library would not know about them and would also not know about the implementation clusters.<br />
<br />
=== Name Clash Example ===<br />
==== Swiss_bank library ====<br />
Provided by a Swiss bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* EUROCARD<br />
<br />
==== Us_bank library ====<br />
Provided by a US bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* CHECK<br />
<br />
==== Local applications (Swiss and US) ====<br />
The local Swiss application uses only the Swiss_bank library and does not have any conflicts.<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_money: MONEY<br />
l_my_account, l_your_account: ACCOUNT<br />
do<br />
create l_your_account<br />
l_money := l_your_account.withdraw_all<br />
<br />
create l_my_account.deposit (l_money)<br />
end<br />
end<br />
</code><br />
<br />
The local US application is similar, using only the US_bank library.<br />
<br />
==== International Application ====<br />
An international application needs to use both Swiss_bank and Us_bank, for example to transfer money from a Swiss bank to a US bank. MONEY and ACCOUNT conflict. To solve the name clash, the author of the international application adds a prefix CH_ when using Swiss_bank classes and, similarly, a prefix US_ for those of US_bank.<br />
<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_swiss_money: CH_MONEY<br />
l_us_money: US_MONEY<br />
l_swiss_account: CH_ACCOUNT<br />
l_us_account: US_ACCOUNT<br />
do<br />
create l_swiss_account<br />
l_swiss_money := l_swiss_account.withdraw_all<br />
<br />
create l_us_money.make (l_swiss_money.value * exchange_rate)<br />
create l_us_account.deposit (l_us_money)<br />
end<br />
<br />
exchange_rate: REAL_32 is 0.7975<br />
<br />
end<br />
</code><br />
As the renaming is done on the the side of library usage, it does not break any local applications that use only one of the libraries.<br />
<br />
The scheme also supports an application that uses both a library A and a library B which itself uses A, and some renaming is needed.<br />
<br />
The idea is that a library can never be "broken" from the outside: it always works independently of existing usage.<br />
<br />
== Implementation ==<br />
=== Unique library identifiers ===<br />
To decide if two libraries referenced in an application are the same, the EiffelStudio scheme uses a UUID (unique identifier). Two problems this technique addresses are:<br />
<br />
* Any error that could result if the same library is referenced through different paths (for example with symbolic links).<br />
<br />
* Making it possible to compile each library only once even if multiple parts of the applications (including other libraries) refer to it.<br />
<br />
* Making sure that renaming (prefixing) classes of a library A in a library B does not affect other parts of the application, including other libraries.<br />
<br />
=== How to perform a renaming ===<br />
Under EiffelStudio, select Project Settings, then Libraries under Groups, and the desired library. Under "Advanced", double-click Renaming; enter the old names (e.g. MONEY) and corresponding new names (e.g. CH_MONEY).</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Libraries&diff=13588Libraries2010-01-26T23:59:26Z<p>Bmeyer: /* Local Swiss Application */</p>
<hr />
<div>[[Category:EiffelStudio]]<br />
[[Category:Compiler]]<br />
[[Category:Configuration]]<br />
[[Category:Library]]<br />
== General ==<br />
=== What is a library? ===<br />
A library is a collection of functionality that is exported by an interface. The implementation of the library is not exported so that the library can be changed without affecting users of the library as long as the interface is compatible.<br />
<br />
=== What is in a library? ===<br />
A library has classes that are available to users and may also have classes that are only in the library for implementation purposes and are therefore not available to the user of the library. A library normally also has dependencies on other libraries and may have externals, pre/post compile tasks and may mark some classes as visible (they will always be compiled).<br />
It is also possible to specify several options for the use of a library. E.g. it is possible to disable warnings or set a certain assertion level (see [[ConfigurationOptions]]).<br />
<br />
=== Name clashes and conflicts ===<br />
As libraries are designed and created independently of each other it is possible that two libraries have classes in them which have the same name. As long as the classes with the name clash are only in the implementation part of the library (and therefore not exported) the user of the library does not have to do anything as there is no conflict for him. If the name clash is in the interface part of the two libraries the user of the libraries has to deal with them. There are several possible solutions:<br />
<br />
# '''Prefixing''': He can prefix one (or both of the libraries) in his system. <br />
# '''Renaming''': Renaming is very similar to Prefixing, the only difference is that instead of adding a prefix to all classes, only one (or a few) classes receive a different name.<br />
<br />
=== Testing and Debugging of a library ===<br />
It is possible to add testing and debugging code to a library by adding additional targets (that inherit from the library target). This targets can then be used to debug and test the library and make the library a fully self contained component.<br />
<br />
== Examples ==<br />
=== EiffelBase ===<br />
EiffelBase is the most often used library as almost every system and library uses it.<br />
Base consists of one recursive cluster which is exported. In .NET mode base also uses some assemblies for its implementation (of which the contents are not exported). Base does not have any externals or dependencies on other libraries.<br />
<br />
=== Graphic ===<br />
A platform independent graphic library could look something like this: One exported interface cluster that describes the interface of this library. One not exported implementation cluster for each supported platform. For example on windows this implementation could make use of the WEL library and on Macintosh it could do all the implementation directly and may use C externals. There could also be a target that builds a sample application to debug various things of the library. One additional target could also build a system that uses and tests all available graphical elements of the library.<br />
The developer of the library can use the addition targets for testing and debugging, the user of the library would not know about them and would also not know about the implementation clusters.<br />
<br />
=== Name Clash Example ===<br />
==== Library swiss_bank ====<br />
Provided by a Swiss bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* EUROCARD<br />
<br />
==== Library us_bank ====<br />
Provided by a US bank<br />
<br />
Exported classes:<br />
* MONEY<br />
* ACCOUNT<br />
* CHECK<br />
<br />
==== Local applications (Swiss and US) ====<br />
The local Swiss application uses only the Swiss_bank library and does not have any conflicts.<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_money: MONEY<br />
l_my_account, l_your_account: ACCOUNT<br />
do<br />
create l_your_account<br />
l_money := l_your_account.withdraw_all<br />
<br />
create l_my_account.deposit (l_money)<br />
end<br />
end<br />
</code><br />
<br />
The local US application is similar, using only the US_bank library.<br />
<br />
==== International Application ====<br />
Uses both swiss_bank and us_bank to transfer money from a swiss bank to a us_bank. MONEY and ACCOUNT conflict. To solve the name clash, the user adds a prefix CH_ on the usage of the swiss_bank library and a prefix of US_ on the us_bank library.<br />
<br />
<code>[eiffel, N]<br />
class<br />
ROOT_CLASS<br />
<br />
create<br />
make<br />
<br />
feature<br />
<br />
make <br />
local<br />
l_swiss_money: CH_MONEY<br />
l_us_money: US_MONEY<br />
l_swiss_account: CH_ACCOUNT<br />
l_us_account: US_ACCOUNT<br />
do<br />
create l_swiss_account<br />
l_swiss_money := l_swiss_account.withdraw_all<br />
<br />
create l_us_money.make (l_swiss_money.value * exchange_rate)<br />
create l_us_account.deposit (l_us_money)<br />
end<br />
<br />
exchange_rate: REAL_32 is 0.7975<br />
<br />
end<br />
</code><br />
As the renaming is done on the usage of the library, this does not break the Local Swiss Application. This allows also to have situations where we use a library directly and use another library that in its implementation uses the same library and we may have to do a renaming, then this still works. The idea is that a library can not be "broken" from the outside. A library always works independently of what the usage of the library is.<br />
<br />
== Implementation ==<br />
=== UUID ===<br />
To decide if two libraries that are referenced in an application are the same we use a UUID. This solves problems that occur if the same library is referenced with different paths (for example with symlinks). This allows to compile each library only once even if it is referenced multiple times by other libraries. Renamings are handled in a way that renaming/prefixing a library in a library does not effect other libraries or the application itself.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Diagram_tool_suggestions&diff=13524Diagram tool suggestions2009-11-23T16:47:33Z<p>Bmeyer: New page: == Suggestions for future development of the EiffelStudio Diagram Tool ==</p>
<hr />
<div>== Suggestions for future development of the EiffelStudio Diagram Tool ==</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Library_Categorization&diff=13176Library Categorization2009-08-18T21:28:39Z<p>Bmeyer: /* Proposed new structure */</p>
<hr />
<div>[[Category:Library]]<br />
The goal of this page is to offer a better file hierarchy for Eiffel libraries included in EiffelStudio. Currently (as of EiffelStudio 6.4 and older) you have a flat representation of libraries under $ISE_LIBRARY and they are represented by their name. Our goal is to provide a hierarchy based on what they provide. Our inspiration is the FreeBSD ports hierarchy which is only one level deep.<br />
<br />
In addition to the categorization, we will add some suffix to the library name so that we can clearly check the status of the library:<br />
* no suffix: Eiffel Software endorsed and supported library.<br />
* -contrib: externally contributed library not supported by Eiffel Software.<br />
* -unstable: library available to user but beware that it might change its interface from release to release.<br />
<br />
Here is the list of libraries included flat in EiffelStudio 6.4:<br />
* api_wrapper: Make it easy to call C routines from dynamically loaded shared libraries<br />
* argument_parser: Parsing the command line arguments of a program<br />
* base: Kernel library classes, data structure, reflection, I/O<br />
* com: COM technology<br />
* diff: Diff and patch facilities<br />
* docking: Facility to have a customizable UI.<br />
* Eiffel2Java: Calling Java from Eiffel<br />
* encoding: Transforming text in one encoding to another encoding<br />
* event: Low level mechanism to receive a UI event when a file/pipe has something new.<br />
* gobo: Gobo<br />
* gobo_extension: ISE gobo extensions<br />
* graph: Representation of graph in UI (See diagram tool in Eiffel Studio).<br />
* i18n: Internationalization library:<br />
* lex: lexical analysis<br />
* memory_analyzer: Memory analysis<br />
* net: Networking library<br />
* parse: Parsing:<br />
* preferences: Facility to store user preferences<br />
* process: Facility to start and follow processes<br />
* store: Relational database access<br />
* testing: Testing facility<br />
* thread: Threading in Eiffel<br />
* time: Time facility<br />
* uuid: UUID generation facility<br />
* vision2: Platform independent UI toolkit<br />
* vision2_extension: Extension to Vision2<br />
* web: CGI facility for Eiffel<br />
* wel: UI toolkit for Windows<br />
<br />
==Proposed new structure==<br />
It is a two level structure where libraries are always at the second level.<br />
<br />
*'''data'''<br />
:*'''database'''<br />
::* ''ecli-contrib'': ODBC only database access<br />
::* ''store'': Relational database access<br />
<br />
*'''data_structures'''<br />
:*'''adt'''<br />
::*''base'': Kernel library classes, data structure, I/O<br />
::*''event'': Low level mechanism to receive a UI event when a file/pipe has something new.<br />
<br />
*'''language_interfaces''': Interact with other programming languages easily from Eiffel.<br />
:*'''C'''<br />
::* ''api_loader'': Make it easy to call C routines from dynamically loaded shared libraries<br />
:*'''COM'''<br />
::* ''com'': COM technology<br />
:*'''Java'''<br />
::* ''Eiffel2Java'': Calling Java from Eiffel<br />
<br />
*'''network'''<br />
:*'''socket'''<br />
::* ''net'': Networking library<br />
<br />
*'''runtime'''<br />
:*'''memory'''<br />
::* ''memory_analyzer'': Memory analysis<br />
:*'''process'''<br />
::* ''argument_parser'': Parsing the command line arguments of a program<br />
::* ''process'': Facility to start and follow processes<br />
:*'''reflection'''<br />
:*'''concurrency'''<br />
::* ''thread'': Threading in Eiffel<br />
<br />
*'''testing'''<br />
:*'''framework'''<br />
::* ''testing'': Testing facility<br />
<br />
*'''text'''<br />
:*'''encoding'''<br />
::* ''encoding'': Transforming text in one encoding to another encoding<br />
:*'''internationalization'''<br />
::* ''i18n'': Internationalization library<br />
:*'''lexer'''<br />
::*''lex'': EiffelLex<br />
:*'''parser'''<br />
::*''parse'': EiffelParse<br />
:*'''utilities'''<br />
::*''diff'': Diff and patch facilities<br />
<br />
*'''ui'''<br />
:*'''drawing'''<br />
::*''graph'': Representation of graph in UI (See diagram tool in EiffelStudio)<br />
:*'''interface'''<br />
::*''docking'': Facility to have a customizable UI<br />
::*''preferences'': Facility to store user preferences<br />
:*'''toolkit'''<br />
::*''vision2'': Platform independent UI toolkit<br />
::*''vision2_extension'': Extension to Vision2<br />
::*''wel'': UI toolkit for Windows<br />
<br />
*'''utilities'''<br />
:*general<br />
::* ''uuid'': UUID generation facility<br />
:*time<br />
::*''time'': time and date<br />
<br />
*'''web'''<br />
:*'''cgi'''<br />
::*''web'': CGI facility for Eiffel<br />
:*'''framework'''<br />
::*''xebra'': Eiffel Server Pages</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Library_Categorization&diff=13153Library Categorization2009-08-12T20:36:33Z<p>Bmeyer: </p>
<hr />
<div>[[Category:Library]]<br />
The goal of this page is to offer a better file hierarchy for Eiffel libraries included in EiffelStudio. Currently (as of EiffelStudio 6.4 and older) you have a flat representation of libraries under $ISE_LIBRARY and they are represented by their name. Our goal is to provide a hierarchy based on what they provide. Our inspiration is the FreeBSD ports hierarchy which is only one level deep.<br />
<br />
In addition to the categorization, we will add some suffix to the library name so that we can clearly check the status of the library:<br />
* no suffix: Eiffel Software endorsed and supported library.<br />
* -contrib: externally contributed library not supported by Eiffel Software.<br />
* -unstable: library available to user but beware that it might change its interface from release to release.<br />
<br />
Here is the list of libraries included flat in EiffelStudio 6.4:<br />
* api_wrapper: Make it easy to call C routines from dynamically loaded shared libraries<br />
* argument_parser: Parsing the command line arguments of a program<br />
* base: Kernel library classes, data structure, reflection, I/O<br />
* com: COM technology<br />
* diff: Diff and patch facilities<br />
* docking: Facility to have a customizable UI.<br />
* Eiffel2Java: Calling Java from Eiffel<br />
* encoding: Transforming text in one encoding to another encoding<br />
* event: Low level mechanism to receive a UI event when a file/pipe has something new.<br />
* gobo: Gobo<br />
* gobo_extension: ISE gobo extensions<br />
* graph: Representation of graph in UI (See diagram tool in Eiffel Studio).<br />
* i18n: Internationalization library:<br />
* lex: lexical analysis<br />
* memory_analyzer: Memory analysis<br />
* net: Networking library<br />
* parse: Parsing:<br />
* preferences: Facility to store user preferences<br />
* process: Facility to start and follow processes<br />
* store: Relational database access<br />
* testing: Testing facility<br />
* thread: Threading in Eiffel<br />
* time: Time facility<br />
* uuid: UUID generation facility<br />
* vision2: Platform independent UI toolkit<br />
* vision2_extension: Extension to Vision2<br />
* web: CGI facility for Eiffel<br />
* wel: UI toolkit for Windows<br />
<br />
==Proposed new structure==<br />
<br />
* external_interfaces: Make it easy to call C routines from dynamically loaded shared libraries<br />
* argument_parser: Parsing the command line arguments of a program<br />
* data_structures: Kernel library classes, data structure, I/O<br />
* reflexion<br />
* com: COM technology<br />
* diff: Diff and patch facilities<br />
* docking: customizable UI.<br />
* java: Calling Java from Eiffel<br />
* internationalization: Internationalization library:<br />
* memory_analyzer: Memory analysis<br />
* networking: Networking library (EiffelNet)<br />
* parse: parsing and lexical analysis (including EiffelParse, EiffelLex)<br />
* preferences: manage user preferences<br />
* process: start and manage processes<br />
* database: database access, including EiffelStore<br />
* concurrency_thread: multi-threading<br />
* time_date: time and date<br />
* uuid: UUID generation facility<br />
* gui_design: platform independent UI toolkit (EiffelVision)<br />
* gui_graph: Representation of graph in UI (See diagram tool in EiffelStudio)<br />
* gui_windows: UI toolkit for Windows<br />
* gui_extension: Extension to Vision2<br />
* web: building Web applications<br />
<br />
<br />
Not yet reclassified:<br />
<br />
* event: Low level mechanism to receive a UI event when a file/pipe has something new.<br />
* encoding: Transforming text in one encoding to another encoding<br />
* gobo: Gobo<br />
* gobo_extension: ISE gobo extensions<br />
* testing: Testing facility</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Library_Categorization&diff=13152Library Categorization2009-08-12T20:35:40Z<p>Bmeyer: </p>
<hr />
<div>[[Category:Library]]<br />
The goal of this page is to offer a better file hierarchy for Eiffel libraries included in EiffelStudio. Currently (as of EiffelStudio 6.4 and older) you have a flat representation of libraries under $ISE_LIBRARY and they are represented by their name. Our goal is to provide a hierarchy based on what they provide. Our inspiration is the FreeBSD ports hierarchy which is only one level deep.<br />
<br />
In addition to the categorization, we will add some suffix to the library name so that we can clearly check the status of the library:<br />
* no suffix: Eiffel Software endorsed and supported library.<br />
* -contrib: externally contributed library not supported by Eiffel Software.<br />
* -unstable: library available to user but beware that it might change its interface from release to release.<br />
<br />
Here is the list of libraries included flat in EiffelStudio 6.4:<br />
* api_wrapper: Make it easy to call C routines from dynamically loaded shared libraries<br />
* argument_parser: Parsing the command line arguments of a program<br />
* base: Kernel library classes, data structure, reflection, I/O<br />
* com: COM technology<br />
* diff: Diff and patch facilities<br />
* docking: Facility to have a customizable UI.<br />
* Eiffel2Java: Calling Java from Eiffel<br />
* encoding: Transforming text in one encoding to another encoding<br />
* event: Low level mechanism to receive a UI event when a file/pipe has something new.<br />
* gobo: Gobo<br />
* gobo_extension: ISE gobo extensions<br />
* graph: Representation of graph in UI (See diagram tool in Eiffel Studio).<br />
* i18n: Internationalization library:<br />
* lex: lexical analysis<br />
* memory_analyzer: Memory analysis<br />
* net: Networking library<br />
* parse: Parsing:<br />
* preferences: Facility to store user preferences<br />
* process: Facility to start and follow processes<br />
* store: Relational database access<br />
* testing: Testing facility<br />
* thread: Threading in Eiffel<br />
* time: Time facility<br />
* uuid: UUID generation facility<br />
* vision2: Platform independent UI toolkit<br />
* vision2_extension: Extension to Vision2<br />
* web: CGI facility for Eiffel<br />
* wel: UI toolkit for Windows<br />
<br />
A proposed structure would be:<br />
<br />
* external_interfaces: Make it easy to call C routines from dynamically loaded shared libraries<br />
* argument_parser: Parsing the command line arguments of a program<br />
* data_structures: Kernel library classes, data structure, I/O<br />
* reflexion<br />
* com: COM technology<br />
* diff: Diff and patch facilities<br />
* docking: customizable UI.<br />
* java: Calling Java from Eiffel<br />
<br />
<br />
<br />
<br />
* i18n: Internationalization library:<br />
* lex: lexical analysis<br />
* memory_analyzer: Memory analysis<br />
* networking: Networking library (EiffelNet)<br />
* parse: parsing and lexical analysis (including EiffelParse, EiffelLex)<br />
* preferences: manage user preferences<br />
* process: start and manage processes<br />
* database: database access, including EiffelStore<br />
* concurrency_thread: multi-threading<br />
* time_date: time and date<br />
* uuid: UUID generation facility<br />
* gui_design: platform independent UI toolkit (EiffelVision)<br />
* gui_graph: Representation of graph in UI (See diagram tool in EiffelStudio)<br />
* gui_windows: UI toolkit for Windows<br />
* gui_extension: Extension to Vision2<br />
* web: building Web applications<br />
<br />
<br />
Not yet reclassified:<br />
<br />
* event: Low level mechanism to receive a UI event when a file/pipe has something new.<br />
* encoding: Transforming text in one encoding to another encoding<br />
* gobo: Gobo<br />
* gobo_extension: ISE gobo extensions<br />
* testing: Testing facility</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Void-Safe_Library_Status&diff=12496Void-Safe Library Status2009-04-08T07:37:26Z<p>Bmeyer: /* Rules */</p>
<hr />
<div>[[Category:Releases]]<br />
<br />
During the [[:Category:EiffelStudio|EiffelStudio]] [[EiffelStudio 6.4 Releases|6.4]] development cycle Eiffel Software and any willing third-party contributors are updating the Eiffel stock [[:Category:Library|libraries]] to be Void-Safe. The libraries will still compile in non-Void-Safe contexts so your code will not be broken. The status reflects work completed so you may start migrating your own code to ensure Void-safety.<br />
<br />
Make sure to follow the general rules given below, and ask the community for guidance if you run into any problems or uncertainties.<br />
<br />
== Completion Status ==<br />
<br />
To better hightlight the usefulness of the void-safety mechanism, we have put together a [[Void-Safe_Library_Results|non-exhaustive list]] of bugs found during the conversion process.<br />
<br />
{| class="wikitable"<br />
|-<br />
! width="200"|Library Name<br />
! width="250"|Status<br />
! width="200"|Credits<br />
|-<br />
| EiffelBase<br />
| Done<br />
| Eiffel Software<br />
|-<br />
| EiffelBase extension<br />
| Done<br />
| Eiffel Software (Larry)<br />
|-<br />
| EiffelTime<br />
| Done<br />
| Eiffel Software (Ted, Ian)<br />
|-<br />
| EiffelThread<br />
| Done (classic)<br />
| Eiffel Software (Arno)<br />
|-<br />
| EiffelUUID<br />
| Done<br />
| Eiffel Software ([[User:paulb|Paul]])<br />
|-<br />
| Eiffel2Java<br />
| Done<br />
| Eiffel Software (Ted, Ian)<br />
|-<br />
| WEL<br />
| Done<br />
| Eiffel Software (Manu)<br />
|-<br />
| EiffelVision2<br />
| In progress<br />
| Eiffel Software (Ian)<br />
|-<br />
| EiffelVision2 extension<br />
| <br />
| <br />
|-<br />
| EiffelProcess<br />
| Done (classic)<br />
| Eiffel Software (Arno)<br />
|-<br />
| Argument parser<br />
| Done<br />
| Eiffel Software ([[User:paulb|Paul]])<br />
|-<br />
| EiffelLex<br />
| Done<br />
| Eiffel Software ([[User:paulb|Paul]])<br />
|-<br />
| EiffelParse<br />
| Done<br />
| Eiffel Software (Ted, Ian)<br />
|-<br />
| EiffelNet<br />
| Done<br />
| Eiffel Software (Manu)<br />
|-<br />
| EiffelNet IPv6<br />
| Done<br />
| Eiffel Software (Manu)<br />
|-<br />
| EiffelCurl<br />
| Done<br />
| Eiffel Software (Manu)<br />
|-<br />
| Encoding<br />
| Done<br />
| Eiffel Software (Ted, Ian)<br />
|-<br />
| EiffelCOM<br />
| <br />
| <br />
|-<br />
| EiffelStore<br />
| In progress<br />
| Eiffel Software (Larry)<br />
|-<br />
| EiffelTesting<br />
| Done<br />
| Eiffel Software (Arno)<br />
|-<br />
| EiffelWeb<br />
| Done<br />
| Eiffel Software (Manu)<br />
|-<br />
| Gobo<br />
| In progress <br> - kernel (done)<br />
| Eiffel Software ([[User:jfiat|Jocelyn]],Larry) + GoboSoft (Eric)<br />
|-<br />
| Docking<br />
| <br />
| <br />
|-<br />
| Gobo extension<br />
| Done<br />
| Eiffel Software ([[User:jfiat|Jocelyn]])<br />
|-<br />
| EiffelGraph<br />
| <br />
| <br />
|-<br />
| Memory Analyzer<br />
| <br />
| <br />
|-<br />
| EiffelPreferences<br />
| Batch done, Remaining Graphical part.<br />
| Eiffel Software ([[User:jfiat|Jocelyn]])<br />
|-<br />
| Diff<br />
| Done<br />
| Eiffel Software ([[User:paulb|Paul]])<br />
|}<br />
<br />
== Contributing ==<br />
EiffelStudio is open source and welcomes the Eiffel community contributions to speed up the adaptation process. If you are interested in participating please put a comment on the discussion board with your contact details.<br />
<br />
==Rules to be applied ==<br />
<br />
Please observe the following guidelines carefully to guarantee a quality result.<br />
<br />
=== Examples ===<br />
For examples of libraries already adapted, see UUID (for a small example) and EiffelBase (for a larger one).<br />
<br />
=== Overall process === <br />
<br />
# First compile with the `full_class_checking' option on. Then enable the void-safe option.<br />
# Compile libraries on all of Windows/.NET/Unix to ensure it is sound.<br />
# Minimize modifications; types should be attached by default if it makes sense, otherwise it has to be detachable by default.<br />
# Use the convention library-safe.ecf for naming void-safe libraries for now. All library references should be using the -safe.ecf variants.<br />
# Use the same UUIDs for void-safe and non-void-safe libraries.<br />
# Before any modifications add a library.lic and library-safe.lic (replace library with the name of the ECF minus the .ecf extension) next to the ECFs of the same name containing only the single line reference:forum2.<br />
# Update all samples to use the void-safe ecfs and update them.<br />
<br />
=== Rules ===<br />
# DO NOT USE the '''attached''' keyword (ex-"'''!'''" attached mark).<br />
# MINIMIZE USE OF OBJECT TEST; ideally, don't use object test unless there was an assignment attempt in the original library.<br />
# When a precondition expects a Void argument, use '''detachable''' if attached by default.<br />
# When a precondition expects a non-Void argument, use '''attached''' if detachable by default.<br />
# '''Libraries should compile in both void-safe and non-void-safe mode''' (i.e. there should only be one version of each library).<br />
# Only use the '''attribute''' keyword when it is impossible to initialize an attribute in the creation procedure. Never use it for lazy evaluation.<br />
# You may include preconditions x /= Void, but it will have to be removed in the end (helped by a compiler warning that says this is not needed for attached x).<br />
<br />
=== General cleanup ===<br />
The void-safe adaptation process should be accompanied by a general upgrade to ISO/ECMA Eiffel:<br />
<br />
* Remove uses of is_equal and equal to compare objects. (They can cause catcalls.) Replace them with the tilde operator, i.e. a ~ b instead of equal (a, b) or a.is_equal (b). Be careful to preserve the semantics (~ always returns false in the case of non-identical types).<br />
* Replace the '''indexing''' keyword with '''note'''.<br />
* Remove the '''is''' keyword in routines. Use the Replace tool with the regex '''\ is[ \t]*$'''. (Be careful not to use replace all, because comments and multi-line strings may have "is" text!)<br />
* Replace the '''is''' keyword in constants with '''='''.<br />
<br />
=== Test authoring ===<br />
1. Create a cluster called 'tests' in the library root folder. E.g., for the UUID library the 'tests' folder exists at '$ISE_LIBRARY/uuid/tests'.<br />
<br />
2. In the library ECFs, exclude the 'tests' cluster because it contains testing code and not library code.<br />
<br />
3. Add a testing 'tests.ecf' in the 'tests' folder. (See the UUID library for an example ECF.) Be sure to create a library ECF and change the UUID. The library should also use the void-safe options found in the associated library's ECF.<br />
<br />
4. Create test class names using the library name along with TEST as a prefix:<br />
EiffelBase = BASE_TEST_<br />
EiffelThread = THREAD_TEST_<br />
EiffelVision2 = EV_TEST_ or VISION2_TEST_<br />
<br />
=== Improving this page === <br />
<br />
As you encounter problems and devise your solutions, please include the results of your experience here.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12434Touch of class typos2009-03-17T09:56:37Z<p>Bmeyer: /* 19 Introduction to software engineering */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
</strike><br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
</strike><br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
<br />
More comments by Raphaël Meyer<br />
<br />
<strike><br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
</strike><br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
Comments by Raphaël Meyer, 16 March 2009<br />
<strike><br />
Page 202, paragraph starting with "What is a": (change wording so that you don't use "just" twice in a row"): "but for just a moment let us just rely" should read "but for now let us just rely"<br />
<br />
page 202, same paragraph: (shorten sentence for clarity and conciseness) "Here are some of the kinds of event that can, each in its own way, shatter the bliss of a normal program execution" should read "Here are some events that can shatter the bliss of a normal program execution"<br />
<br />
page 203, paragraph starting with "to illustrate": (typo) "routine will fails." should read "routine will fail."<br />
<br />
page 203, next paragraph: (typo ... "n" should be "m") "send_to_transmitter (n, i)" should read "send_to_transmitter (m, i)"<br />
<br />
page 204, paragraph starting with "Like any other": (reorder words for clarity) "Like any other integer local variable" should read "Like any other local integer variable"<br />
<br />
page 204, next sentence: (reword for correctness) "as a result of a call to send_to_transmitter failing" should read "as a result of a failed call to send_to_transmitter"<br />
<br />
Page 204, same paragraph: (I don't think the comma here is necessary) "(the do clause), to try the" should read "(the do clause) to try the"<br />
<br />
page 205, paragraph starting with "A consequence": (here there are too many instances of the word "it". consider replacing one of them with an actual noun to clarify what you are referring to.) "if it finds it in"<br />
<br />
page 206, last paragraph: (remove the word "they" for correctness) "Their spirits, however, they reflect" should read "Their spirits, however, reflect"<br />
<br />
page 206, last sentence: (add comma for readability) "its error-processing needs" should read "its error-processing needs,"<br />
<br />
page 212, exercise 7E.9: (reword for clarity) "Consider a try-catch style for handling exceptions, as sketched in this chapter" should read "Consider the try-catch style for exception handling sketched in this chapter"<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
Corrections by Raphaël Meyer, 16 March 2009<br />
<br />
<strike><br />
page 323, second paragraph: (add an "s" on "tool") "what kinds of tool are available" should read "what kinds of tools are available"<br />
<br />
page 324, paragraph starting with "Programming Languages": (wrong tense) "since its focus on" should read "since it focuses on"<br />
<br />
page 324, next sentence: (missing the word "of") "The appendices describe the specifics four important languages" should read "The appendices describe the specifics of four important languages"<br />
<br />
page 324, "Application" bulletpoint: (replace "for example" with "such as") "others address a specific application area, for example Web site development, business data processing or real-time." should read "others address a specific application area, such as Web site development, business data processing or real-time."<br />
<br />
page 326, first sentence: (incorrect tense) "low level of abstraction ensuring direct" should read "low level of abstraction ensures direct"<br />
<br />
page 326, bulletpoint on "Mathematics discourse": (need to define "them"; it is unclear what you are referring to. Please revise. Also, the sentence is missing a period at the end.) "but talks about values and relations between them"<br />
<br />
page 327, final paragraph: ("from" should be "to") "let us move from Lisp from another language" should read "let us move from Lisp to another language"<br />
<br />
page 327, final paragraph: (reword for conciseness and clarity) "We will consider just one example, which illustrates functional programming ideas well and is" should read "we will consider an example which not only illustrates functional programming but is also"<br />
<br />
page 329, "scalability" bulletpoint: (I don't think the "as" is necessary) "the notion of class as present" should read "the notion of class present"<br />
<br />
page 329, paragraph starting with "In the eyes": (unnecessary comma) "languages, provides" should read "languages provides"<br />
<br />
page 329, next paragraph: (unnecessary comma) "language, by using" should read "language by using"<br />
<br />
page 330, first paragraph, first sentence: (the third clause after the colon does not make sense; it should read "the place was ..., the time was ..., and the creators were ...". Please revise)<br />
<br />
page 330, same paragraph, final sentence: (reword for clarity and to make it less casual) "Dahl was the more introverted theoretician, Nygaard perhaps more the engineer, definitely an" should read "Dahl was the more introverted theoretician and Nygaard perhaps more the engineer, an"<br />
<br />
page 330, paragraph starting with "Simula's origins": (reword for correctness, clarity, and readability) "programs are not just a way to talk to your<br />
computer, but modeling tools" should read "programs not only allow you to talk to your computer but serve as modeling tools as well."<br />
<br />
page 330, same paragraph: (typo; revise) "Simula 67 reflects is testimony"<br />
<br />
page 330, same paragraph: (remove "they"; typo) "make sure they we can" should read "make sure we can"<br />
<br />
page 331, paragraph starting with "Smalltalk": (clarify "they" since it is not the subject of the sentence) "the various protections they afford" should read "the various protections these declarations afford"<br />
<br />
page 331, paragraph starting with "With successive versions": (incorrect tense) "allowing a whole new generation discovered" should read "allowing a whole new generation to discover"<br />
<br />
page 331, same paragraph: (add the word "a") "when in 1986 the ACM organized aconference" should read "when in 1986 the ACM organized a conference"<br />
<br />
page 331, paragraph starting with "In just a few": (typo) "significant playeers" should read "significant players"<br />
<br />
page 331, final paragraph: (add a comma for clarity) "Ever since the first OOPSLA critics" should read "Ever since the first OOPSLA, critics"<br />
<br />
<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
More corrections by Raphaël Meyer, 15 March 2009<br />
<br />
<strike><br />
<br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
<strike><br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.<br />
</strike></div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12433Touch of class typos2009-03-17T09:35:51Z<p>Bmeyer: /* 13 Programming languages and tools */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
</strike><br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
</strike><br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
<br />
More comments by Raphaël Meyer<br />
<br />
<strike><br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
</strike><br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
Comments by Raphaël Meyer, 16 March 2009<br />
<strike><br />
Page 202, paragraph starting with "What is a": (change wording so that you don't use "just" twice in a row"): "but for just a moment let us just rely" should read "but for now let us just rely"<br />
<br />
page 202, same paragraph: (shorten sentence for clarity and conciseness) "Here are some of the kinds of event that can, each in its own way, shatter the bliss of a normal program execution" should read "Here are some events that can shatter the bliss of a normal program execution"<br />
<br />
page 203, paragraph starting with "to illustrate": (typo) "routine will fails." should read "routine will fail."<br />
<br />
page 203, next paragraph: (typo ... "n" should be "m") "send_to_transmitter (n, i)" should read "send_to_transmitter (m, i)"<br />
<br />
page 204, paragraph starting with "Like any other": (reorder words for clarity) "Like any other integer local variable" should read "Like any other local integer variable"<br />
<br />
page 204, next sentence: (reword for correctness) "as a result of a call to send_to_transmitter failing" should read "as a result of a failed call to send_to_transmitter"<br />
<br />
Page 204, same paragraph: (I don't think the comma here is necessary) "(the do clause), to try the" should read "(the do clause) to try the"<br />
<br />
page 205, paragraph starting with "A consequence": (here there are too many instances of the word "it". consider replacing one of them with an actual noun to clarify what you are referring to.) "if it finds it in"<br />
<br />
page 206, last paragraph: (remove the word "they" for correctness) "Their spirits, however, they reflect" should read "Their spirits, however, reflect"<br />
<br />
page 206, last sentence: (add comma for readability) "its error-processing needs" should read "its error-processing needs,"<br />
<br />
page 212, exercise 7E.9: (reword for clarity) "Consider a try-catch style for handling exceptions, as sketched in this chapter" should read "Consider the try-catch style for exception handling sketched in this chapter"<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
Corrections by Raphaël Meyer, 16 March 2009<br />
<br />
<strike><br />
page 323, second paragraph: (add an "s" on "tool") "what kinds of tool are available" should read "what kinds of tools are available"<br />
<br />
page 324, paragraph starting with "Programming Languages": (wrong tense) "since its focus on" should read "since it focuses on"<br />
<br />
page 324, next sentence: (missing the word "of") "The appendices describe the specifics four important languages" should read "The appendices describe the specifics of four important languages"<br />
<br />
page 324, "Application" bulletpoint: (replace "for example" with "such as") "others address a specific application area, for example Web site development, business data processing or real-time." should read "others address a specific application area, such as Web site development, business data processing or real-time."<br />
<br />
page 326, first sentence: (incorrect tense) "low level of abstraction ensuring direct" should read "low level of abstraction ensures direct"<br />
<br />
page 326, bulletpoint on "Mathematics discourse": (need to define "them"; it is unclear what you are referring to. Please revise. Also, the sentence is missing a period at the end.) "but talks about values and relations between them"<br />
<br />
page 327, final paragraph: ("from" should be "to") "let us move from Lisp from another language" should read "let us move from Lisp to another language"<br />
<br />
page 327, final paragraph: (reword for conciseness and clarity) "We will consider just one example, which illustrates functional programming ideas well and is" should read "we will consider an example which not only illustrates functional programming but is also"<br />
<br />
page 329, "scalability" bulletpoint: (I don't think the "as" is necessary) "the notion of class as present" should read "the notion of class present"<br />
<br />
page 329, paragraph starting with "In the eyes": (unnecessary comma) "languages, provides" should read "languages provides"<br />
<br />
page 329, next paragraph: (unnecessary comma) "language, by using" should read "language by using"<br />
<br />
page 330, first paragraph, first sentence: (the third clause after the colon does not make sense; it should read "the place was ..., the time was ..., and the creators were ...". Please revise)<br />
<br />
page 330, same paragraph, final sentence: (reword for clarity and to make it less casual) "Dahl was the more introverted theoretician, Nygaard perhaps more the engineer, definitely an" should read "Dahl was the more introverted theoretician and Nygaard perhaps more the engineer, an"<br />
<br />
page 330, paragraph starting with "Simula's origins": (reword for correctness, clarity, and readability) "programs are not just a way to talk to your<br />
computer, but modeling tools" should read "programs not only allow you to talk to your computer but serve as modeling tools as well."<br />
<br />
page 330, same paragraph: (typo; revise) "Simula 67 reflects is testimony"<br />
<br />
page 330, same paragraph: (remove "they"; typo) "make sure they we can" should read "make sure we can"<br />
<br />
page 331, paragraph starting with "Smalltalk": (clarify "they" since it is not the subject of the sentence) "the various protections they afford" should read "the various protections these declarations afford"<br />
<br />
page 331, paragraph starting with "With successive versions": (incorrect tense) "allowing a whole new generation discovered" should read "allowing a whole new generation to discover"<br />
<br />
page 331, same paragraph: (add the word "a") "when in 1986 the ACM organized aconference" should read "when in 1986 the ACM organized a conference"<br />
<br />
page 331, paragraph starting with "In just a few": (typo) "significant playeers" should read "significant players"<br />
<br />
page 331, final paragraph: (add a comma for clarity) "Ever since the first OOPSLA critics" should read "Ever since the first OOPSLA, critics"<br />
<br />
<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
More corrections by Raphaël Meyer, 15 March 2009<br />
<br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
<strike><br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.<br />
</strike></div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12432Touch of class typos2009-03-17T09:31:02Z<p>Bmeyer: /* 7 Control structures */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
</strike><br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
</strike><br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
<br />
More comments by Raphaël Meyer<br />
<br />
<strike><br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
</strike><br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
Comments by Raphaël Meyer, 16 March 2009<br />
<strike><br />
Page 202, paragraph starting with "What is a": (change wording so that you don't use "just" twice in a row"): "but for just a moment let us just rely" should read "but for now let us just rely"<br />
<br />
page 202, same paragraph: (shorten sentence for clarity and conciseness) "Here are some of the kinds of event that can, each in its own way, shatter the bliss of a normal program execution" should read "Here are some events that can shatter the bliss of a normal program execution"<br />
<br />
page 203, paragraph starting with "to illustrate": (typo) "routine will fails." should read "routine will fail."<br />
<br />
page 203, next paragraph: (typo ... "n" should be "m") "send_to_transmitter (n, i)" should read "send_to_transmitter (m, i)"<br />
<br />
page 204, paragraph starting with "Like any other": (reorder words for clarity) "Like any other integer local variable" should read "Like any other local integer variable"<br />
<br />
page 204, next sentence: (reword for correctness) "as a result of a call to send_to_transmitter failing" should read "as a result of a failed call to send_to_transmitter"<br />
<br />
Page 204, same paragraph: (I don't think the comma here is necessary) "(the do clause), to try the" should read "(the do clause) to try the"<br />
<br />
page 205, paragraph starting with "A consequence": (here there are too many instances of the word "it". consider replacing one of them with an actual noun to clarify what you are referring to.) "if it finds it in"<br />
<br />
page 206, last paragraph: (remove the word "they" for correctness) "Their spirits, however, they reflect" should read "Their spirits, however, reflect"<br />
<br />
page 206, last sentence: (add comma for readability) "its error-processing needs" should read "its error-processing needs,"<br />
<br />
page 212, exercise 7E.9: (reword for clarity) "Consider a try-catch style for handling exceptions, as sketched in this chapter" should read "Consider the try-catch style for exception handling sketched in this chapter"<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
More corrections by Raphaël Meyer, 15 March 2009<br />
<br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
<strike><br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.<br />
</strike></div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12426Touch of class typos2009-03-16T07:49:09Z<p>Bmeyer: /* 19 Introduction to software engineering */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
</strike><br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
</strike><br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
<br />
More comments by Raphaël Meyer<br />
<br />
<strike><br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
</strike><br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
More corrections by Raphaël Meyer, 15 March 2009<br />
<br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
<strike><br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.<br />
</strike></div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12425Touch of class typos2009-03-15T23:12:43Z<p>Bmeyer: /* Comments on the overall text */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
</strike><br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
</strike><br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
<br />
More comments by Raphaël Meyer<br />
<br />
<strike><br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
</strike><br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
<strike><br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.<br />
</strike></div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12424Touch of class typos2009-03-15T18:04:40Z<p>Bmeyer: /* 5 Just Enough Logic */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
</strike><br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
</strike><br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
<br />
More comments by Raphaël Meyer<br />
<br />
<strike><br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
</strike><br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12423Touch of class typos2009-03-15T18:03:13Z<p>Bmeyer: /* 4 The interface of a class */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
</strike><br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12422Touch of class typos2009-03-13T21:37:38Z<p>Bmeyer: </p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12421Touch of class typos2009-03-13T21:37:12Z<p>Bmeyer: /* NO MORE CORRECTIONS PLEASE */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections (after Saturday morning, March 14, 9 AM Zurich time) as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12420Touch of class typos2009-03-13T21:36:14Z<p>Bmeyer: /* NO MORE CORRECTIONS */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
==NO MORE CORRECTIONS PLEASE==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12419Touch of class typos2009-03-13T21:35:55Z<p>Bmeyer: </p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
==NO MORE CORRECTIONS==<br />
I have finished the writing and am doing my last pass of proofreading, so please refrain from sending me corrections as this would delay the process. Only exceptions: if you see something really important, or on the last stuff that I wrote (sections 7.10 and 12.1). In addition, the index may be worth a check.<br />
<br />
Many thanks to all who spent considerable time proofreading. I am extremely grateful.<br />
<br />
-- BM<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12414Touch of class typos2009-03-13T09:18:23Z<p>Bmeyer: /* 5 Just Enough Logic */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
Page 82, first sentence: (not crucial change but the sentence can be simplified a bit) “The equivalence operator helps in defining” should read “The equivalence operator helps to define”<br />
<br />
Page 83, first sentence: (reorder words for readability) “you prove first” should read “first you prove”<br />
<br />
page 90, bulletpoint “2”: (reword the sentence to make it complete and not so casual) “Joke of course, but suggesting the same flawed reasoning.” Should read “this is, of course, a job, but it suggests the same flawed reasoning.”s<br />
<br />
page 91, sentence starting with “Computer programming”: (I’m not exactly clear on the meaning of this sentence, but in any case it needs an extra word in there somewhere. I have suggested two different options, but please revise.) “This is all the more remarkable that” should read “It is all the more remarkable that” OR “This is all the more remarkable given that”<br />
<br />
page 93, paragraph starting with “This is not achievable”: (unnecessary comma, and maybe add a word) “from evaluating both operands, and risking failure.” Should read “from evaluating both operands and thereby risking failure.”<br />
<br />
Page 97, paragraph starting with “For example”: (add “an” for correctness) “as example” should read “as an example”<br />
<br />
Page 101, last sentence: (typo: “regarding” should be “regardless”) “which is true regarding of what” should read “which is true regardless of what”<br />
<br />
Page 103, first bulletpoint about “Disjunction and conjunction”: (shouldn’t the word “yields” here be written without the “s”? The way I understand it, the property is yielded as a result of all three actions, and therefore the actions yield something).<br />
<br />
Page 104, exercise 5.e2-1: “the terms of the above” should read “the terms in the above”<br />
<br />
Page 104, final sentence: (typo; sentence missing a word) “someone who been granted” should read “someone who has been granted”<br />
<br />
Page 107, paragraph starting with “A hundred persons”: (change wording for correctness and clarity) “but neither their own nor those of people behind.” Should read “but not their own hat colors nor those of the people behind.” <br />
<br />
Page 107, paragraph starting with “You are asked”: (I would change the wording order for conciseness and clarity) “to maximize the number of people who — regardless of the distribution of hat colors, about which you know nothing — are guaranteed to shout the color of their own hats” should read “to maximize the number of people who are guaranteed to shout the color of their own hats - regardless of the distribution of hat colors, about which you know nothing.”<br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=Touch_of_class_typos&diff=12413Touch of class typos2009-03-13T09:16:45Z<p>Bmeyer: /* 13 Programming languages and tools */</p>
<hr />
<div>__NOTOC__<br />
Typos for "Touch of Class" draft<br />
<br />
===How to report a typo===<br />
Report it under the appropriate chapter title below. Make sure the extract is easy to find (often locating the place of a correction is the most time-consuming part). If you copy-paste the relevant text, highlight the faulty word(s), for example by **...**. <br />
<br />
As errors get corrected I <strike>strike them out</strike>.<br />
<br />
===Preface etc.===<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page v, section Preface.<br />
in the 'note' clause of the class PREFACING.<br />
replace:<br />
"]<br />
by:<br />
]"<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xiii, section student_preface/Abstraction.<br />
middle of second paragraph.<br />
replace:<br />
you'll been encouraged<br />
by:<br />
you'll be encouraged<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xv, section instructor_preface.<br />
second paragraph, third bullet.<br />
text:<br />
Eiffel and Design by Contract<br />
action:<br />
put the last letter of "Contract" in bold.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxi, section student_preface/OUTSIDE-IN: THE INVERTED CURRICULUM/The supporting software.<br />
middle of second paragraph.<br />
replace:<br />
In the seond week<br />
by:<br />
In the second week<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxv, section student_preface/TECHNOLOGY CHOICES/Eiffel and Design by Contract.<br />
right margin.<br />
replace:<br />
at tinyurl.com/cq8gw..<br />
by:<br />
at tinyurl.com/cq8gw.<br />
action:<br />
remove extra dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxix, section student_preface/TECHNOLOGY CHOICES/Why not Java?.<br />
replace:<br />
university context,it is meant<br />
by:<br />
university context, it is meant<br />
action:<br />
space after comma.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page xxxiv, section student_preface/TOPICS COVERED.<br />
paragraph starting with "Part III"<br />
text:<br />
It makes no attempt at<br />
action:<br />
missing end of sentence.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
Student preface recommendations given by Raphael Meyer 23-02-2009.<br />
<br />
<strike>Dedication Page: Shouldn't the name "C.A.R" be written with a period at the end, i.e. "C.A.R."?<br />
<br />
Student Preface, first page, second paragraph: (formatting problem) The paragraph should be indented.<br />
<br />
Student Preface, first page, paragraph starting with "By going into": (missing the word "and") "conferences, journals, magazines" should read "conferences, journals, and magazines"<br />
<br />
Student preface, page xiv, paragraph starting with "Although more": (missing the word "the") "Ability to do computing" should read "The ability to do computing"<br />
<br />
Student preface, page xv, paragraph starting with "On the other hand": (awkward wording) In the sentence starting with "In particular", there is no need to repeat "particularly" later in the sentence, and that word should be removed.<br />
<br />
Student preface, page xv, same paragraph, final sentence: (unnecessary word "in" should be removed) "look like they typed in their" should read "look like they typed their"<br />
<br />
Student preface, page xvi, paragraph starting with "Object-Oriented": (I suggest changing the wording) "for example circles or polygons" should read "such as circles or polygons"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods are": (awkward wording, I suggest rewording) "To learn formal methods in" should read "Learning formal methods to"<br />
<br />
Student preface, page xvii, paragraph starting with "Formal methods can": (missing a comma for clarity and flow) "the idea of Design by Contract" should read "the idea of Design by Contract,"<br />
<br />
Same paragraph: (missing the word "and") "correct, robust, durable" should read "correct, robust, and durable"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (awkward wording, I suggest rewording "you will be just relying" should read "you will simply be relying"<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (various words in the list are not parallel, and a comma is necessary) "graphical visualization, simulations, computing routes, animating the routes etc." should read "graphical visualization, simulations, computing routes, route animation, etc."<br />
<br />
Student preface, page xviii, paragraph starting with "The expertise": (sentence missing the word "or" or "and") "problems, learn" should read "problems, or learn"<br />
<br />
Student preface, page xix, paragraph starting with "Basing your work": (reword the end of this sentence) "that, as a consumer, you need." should read "that you need as a consumer."<br />
<br />
Same paragraph: (reword and change "which states" to "stating") "description of the purpose of a software module, which states only its functions," should read "description of a software module's purpose, stating only its functions,"<br />
<br />
Student preface, page xix, paragraph starting with "This technique": (I would reword this phrase for clarity and efficiency) "Every professor and textbook of software development" should read "Every software development professor and textbook"<br />
<br />
Student preface, page xx, paragraph starting with "This book teaches": ("requires" should be "require" to match up tenses) "and requires" should read "and require".</strike><br />
<br />
Done by Raphael meyer, 25-02-2009<br />
<br />
<strike><br />
Page xiv, paragraph starting with "It is important": (awkward wording; replace "that we" with "to") "in inappropriate demands that we teach the specific" should read "in inappropriate demands to teach the specific"<br />
<br />
page xiv, same paragraph: ("ads" is too casual and should read "advertisements" or "postings") "job ads" should read "job postings"<br />
<br />
page xxvi, top paragraph: (sentence missing two commas for clarity) "Reuse is from the beginning one" should read "Reuse is, from the beginning, one"<br />
<br />
page xxvii, first paragraph: (intro should read introductory) "in an intro course" should read "in an introductory course"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "is not sufficient any more today;" should read "is no longer sufficient;"<br />
<br />
page xxvii, paragraph starting with "This approach gives": (reword for clarity and conciseness) "many people who are not professional software developers" should read ""many non-professional software developers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (I would replace "specially" with "specifically") "produced specially for" should read "produced specifically for"<br />
<br />
page xxvii, paragraph starting with "From the outset": (add "where" to keep the two clauses parallel) "and the basic layers" should read "and where the basic layers"<br />
<br />
page xxvii, paragraph starting with "From the outset": (re-order words for clarity and remove "right") "are able right from the start to produce interesting applications," should read "are able to produce interesting applications from the start,"<br />
<br />
page xxviii, last paragraph: (reorder words) "but then we would" should read "but we would then"<br />
<br />
<br />
page xxxi, paragraph starting with "Many intriductory": (add comma for clarity) "modern technology students" should read ""modern technology, students"<br />
<br />
<br />
page xxxii, third bulletpoint under "We rely on Eiffel": (reorder wording) "Eiffel is easy to learn for a beginner." should read "Eiffel is easy for a beginner to learn."<br />
<br />
<br />
page xxxii, next bulletpoint: (add the word "and" to finish the sentence) "software metrics, leading-edge" should read "software metrics, and leading-edge"<br />
<br />
<br />
page xxxii, final bulletpoint: I would separate each of the topics in the last sentence (Eiffel Base, Eiffel Time, EiffelVision, etc.) with semicolons (;) rather than commas (,) since there is so much in that sentence.<br />
<br />
<br />
page xxxiii, first bulletpoint: (reword for clarity and correctness) "designed for education only," should read "designed exclusively for education,"<br />
<br />
<br />
page xxxiii, same bulletpoint: (reword for correctness) "billions of dollars of investment" should read "billions of dollars in investments" OR "billions of investment dollars"<br />
<br />
<br />
page xxxiv, paragraph starting with "This is full of": (reword for clarity and conciseness) "For the teacher this means engaging far too often in injunctions" should read "For the teacher this means repeatedly engaging in injunctions"<br />
<br />
<br />
page xxxiv, paragraph starting with "the object-oriented": (add "a" or "its" for correctness) "uses as main program a static function," should read "uses a static function as its main program" OR "uses a static function as a main program"<br />
<br />
<br />
page xxxv: it seems like the spacing on this page is different from the other pages, i.e. there is more space in between lines. please check.<br />
<br />
<br />
page xxxv, paragraph starting with "Inconsistencies": (verb needed to complete the sentence) "why, along with full words like “static”, abbreviations such as “args” and “println”?" should read "why, along with full words like “static”, include abbreviations such as “args” and “println”?" OR "why, along with full words like “static”, require abbreviations such as “args” and “println”?"<br />
<br />
<br />
page xxxv, paragraph starting with "To cite": (comma needed for clarity) "motivating examples I was" should read "motivating examples, I was"<br />
<br />
<br />
page xxxv, paragraph starting with "the Java notion": (reword for correctness) "This is particularly useful to teach design" should read ""This is particularly useful for teaching design""<br />
<br />
<br />
page xxxvii: (page label typo) the page number is "xxxvi" but should read "xxxvii"<br />
<br />
<br />
page xxxvii, first paragraph: (ads is not a real word) "ads" should read "advertisements"<br />
<br />
<br />
page xxxvii, paragraph starting with "Java, C#": (add a comma for clarity and write "introductory" completely) "In any case no intro" should read "In any case, no introductory"<br />
<br />
<br />
page xxxviii: (page label typo) the page number is "xxxvi" but should read "xxxviii"<br />
<br />
<br />
page xl, paragraph starting with "Looking around": (change wording for clarity) "leads to identifying" should read "leads to the identification of"<br />
<br />
page xl, paragraph starting with "The first approach": (change wording for clarity) "probably nowadays the most common." should read "probably the most common today."<br />
<br />
same paragraph: (remove comma, since it is unnecessary and clutters the sentence): "of the chosen language, at the" should read "of the chosen language at the"<br />
<br />
page xlii, bulletpoint starting with "Fundamental data structures": (typo, missing the word "as") "structures such arrays," should read "structures such as arrays,"<br />
<br />
page xlii, paragraph starting with "The description of": NEEDS TO BE COMPLETED.<br />
<br />
page xlii, towards the bottom of the page: (reorder and reword for clarity) "It is an essential part of the abstraction-focused approach to make sure" should read "An essential part of the abstraction-focused approach is making sure"<br />
<br />
page xlii, paragraph starting with "Part III": (typo) "includes an detailed" should read "includes a detailed"<br />
<br />
page xlii, paragraph starting with "Part IV": (add "and" to complete the sentence) "agents (function objects), event-driven design." should read "agents (function objects), and event-driven design."<br />
<br />
page xlv, first paragraph: (typo) "appendices is" should read "appendices are"<br />
<br />
page xlv, second to last paragraph: (i suggest changing the second "online" for readability) "keep an online version of this section online," should read "keep an online version of this section on the web," OR SIMPLY "keep an updated version of this section online,"<br />
<br />
page xlvii, first paragraph: (reword for clarity) "and of course will have to be" should read "and will naturally need to be"<br />
<br />
page xlvii, bulletpoint starting wtih "chapter 8": (i THINK you should add a "the", but am not certain; please double-check) "of undecidability" should read "of the undecidability"<br />
<br />
page xlvii, bulletpoint starting with "In chapter 9": (reword for clarity) "9.6 about the difficulty" should read "9.6, regarding the difficulty"<br />
<br />
page xlvii, bulletpoint about chapter 10: (unnecessary comma) "on computers, depends" should read "on computers depends"<br />
<br />
page xlvii, bulletpoint about chapter 11: (add the word "the" for clarity) "I suggest covering at least sections up" should read "I suggest covering at least the sections up"<br />
<br />
page xlviii, bulletpoint about chapter 14: (i would add an "and" for clarity) "recursive syntax productions, recursive proofs." should read "recursive syntax productions, and recursive proofs."<br />
<br />
page xlviii, next sentence: (reorder for clarity, conciseness, and correctness) "The core material is the beginning of the chapter:" should read "The beginning of the chapter is the core material:"<br />
<br />
page xlviii, bulletpoint about chapter 16: (add commas for clarity) "plus 16.9 on the role of contracts which" should read "plus 16.9, on the role of contracts, which"<br />
<br />
page xlviii, bulletpoint about the appendices: (awkward wording, needs to be changed) "devote some time to e.g. Java" should read "devote some time to languages such as Java"<br />
<br />
page xlviii, final paragraph: (add "but" for clarity and correctness) "magic, with" should read "magic, but with"<br />
<br />
Stopped at Table of Contents<br />
</strike><br />
<br />
===1 The industry of pure ideas===<br />
<strike> page 5, section 1.1: ''Computers and related devices are called hardware, indicating that — although they are getting ever <br />
lighter — computers are the kind of machine that will hurt your feet. Programs **and all that relates to them** are by contrast<br />
called software, a word made up in the 1950s when programs emerged as topic of interest.''<br />
Comment: one may argue that hardware may relate to hardware (depending on the definition of the relation). <br />
As the point is to separate the two concepts, to avoid confusion I would drop **and all that relates to them**.<br />
-- MP, 8/2/2009<br />
<br />
page 11, picture caption: **(d) GPS navigation system**. For consistency with the iPhone, you may consider adding that it is a Garmin <br />
gps. <br />
-- MP, 8/2/2009<br />
<br />
page 13, towards the end: ''This book emphasizes throughout, along with practices that <br />
**make your programs good for the computer** — for example, designing programs so that they will run fast enough —, <br />
practices that make them good for human readers.''<br />
Remark: The way in which the sentence is formulated is not smooth and crystal clear to me. A suggestion could be: <br />
''This book emphasizes throughout, along with programming practices that put to good use a computer processing power, practices <br />
that make programs understandable by human readers.''<br />
-- MP 8/2/2009<br />
<br />
page 14, at the end of box Touch of folk history: This did not deter **the programmer**: “See the holes? They are the software.”<br />
Could be: This did not deter one of the programmers: “See the holes? They are the software.”<br />
-- MP 8/2/2009<br />
<br />
page 16, exercise 1-E.3, third bullet point: ''The exact set of letters does not**,** matter but'' <br />
Comment: Move the comma after the word ''matter''.<br />
-- MP 8/2/2009<br />
</strike><br />
<br />
Comments by Raphaël Meyer<br />
<strike><br />
Page 6, paragraph starting with "the immaterial": (replace semicolon with comma, since the clause after the comma is not a complete sentence) "steps; and the" should read "steps, and the"<br />
<br />
same paragraph: (replace multiple repetitions of "or" with commas) "You do not need wood or clay or iron or a hammer or anything that could" should read "You do not need wood, clay, iron, a hammer, or anything that could"<br />
<br />
Page 7, paragraph starting with "In any experience": (remove unnecessary "seems") "that state in which seems everything seems" should read "that state in which everything seems"<br />
<br />
Page 7, paragraph starting with "You cannot": (unnecessary comma; remove for flow) "yours, or someone" should read "yours or someone"<br />
<br />
Page 8, first paragraph: (reword for clarity and correctness) "but let us see their fundamental properties" should read "but let us take a look at their fundamental properties"<br />
<br />
Page 8, same paragraph: (reword for clarity) "fundamental properties, as they" should read "fundamental properties, since they"<br />
<br />
page 10, paragraph starting with "This is the human view": (replace comma with semicolon to make the sentence more readable) "manipulate information, they" should read "manipulate information; they"<br />
<br />
page 10, paragraph starting with "The data will be": (reword sentence; currently using akward wording) "It is the task of the communication devices" should read "The communication device's task is to"<br />
<br />
page 11, paragraph starting with "The familiar picture": (replace "really" with "essentially" to sound less casual) "which today are really pocket computers" should read "which today are essentially pocket computers"<br />
<br />
page 11, same paragraph: (replace "..." with "etc.") "(physics, weather prediction...)" should read "(physics, weather prediction, etc.)"<br />
<br />
page 12, paragraph starting with "The computers": (incorrect wording) "The computers you will use for exercises of this book" should read "The computers you will use for the exercises in this book<br />
<br />
page 12, paragraph starting with "The stored-program": (replace ";" with ",") "data; but this" should read "data, but this"<br />
<br />
page 12, paragraph starting with "The ability of computers": (reword for clarity and readability) "programs were going, through repeated self-modification, to become" should read "programs would, through repeated self-modification, become"<br />
<br />
page 12, final line: (unnecessary comma) "written program, whose execution might" should read "written program whose execution might"<br />
<br />
page 16, paragraph starting with "That is to say": (add "how" for correctness) "know to apply" should read "know how to apply"<br />
<br />
page 16, paragraph starting with "the problem calls": (redundant "etc."; not necessary since you already included the ...) "otherwise...' etc. is not" should read "otherwise ...' is not"<br />
<br />
</strike><br />
<br />
=== 2 Dealing with objects ===<br />
<strike>page 18, second line: ''The book**,** applies systematic typesetting conventions'' <br />
Comment: comma should be dropped<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, in box Touch of style: (sometimes bold or italics according to precise rules**)<br />
<br>Comment: I would add: (sometimes bold or italics according to precise rules that will be specified)<br />
<br>-- MP, 15/2/08<br />
<br />
page 18, line after box on class Preview: ''The first line says you are looking at a **small** “class”''<br />
<br>Comment: as the first line does not say that the class is "small", I would drop the word "small":<br />
''The first line says you are looking at a “class”''<br />
<br>-- MP, 15/2/08<br />
<br />
page 19, box title "**Magic?". Did you considered the title "Touch of magic?"? <br />
<br>-- MP, 15/2/08<br />
<br />
page 25, after the first code box: ''Paris.display''<br />
<br>Comment: you use the term "object", and then again many times in the same page. As you will define it on page 27, I would put a reference here, or give an informal definition,<br />
especially because you use it in the Touch of Semantics box (page 25) to define a feature call. <br />
<br>-- MP, 15/2/08<br />
<br />
page 27, sub-section "Objects you can and cannot kick", first bullet point, two lines before the end: ''...your foot. **(Buying this book does not<br />
entitle you to a refund of medical expenses.)**''. <br />
<br>Comment: punctuation before and after the parentheses (or parentheses themselves) is (are) misplaced. Suggestion: ''...your foot. Please be aware of the fact that buying this <br />
book does not entitle you to a refund of medical expenses.''. <br />
<br>-- MP, 15/2/08<br />
<br />
pages 27 and 28: Comment: there are many references to "**Notre-Dame**" (I counted 5), but the figure on page 27 shows "Saint-Michel" as metro station. I would keep Saint-Michel<br />
everywhere to avoid confusion (not everybody may know that the real stop is "Saint-Michel Notre-Dame")<br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: first bullet "**or any other specified by its index**"<br />
<br>Comment: you did not defined an index of a leg. Here you could drop the sentence fragment above without conceptually losing anything: ''Remove the first leg of the route, or the <br />
last leg, or any other.'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: second bullet: ''**for example a metro leg from Notre-Dame to Jussieu (4 stations, see map on the previous page); the route will be changed to involve 3 <br />
legs, 3 metro lines, and 8 stations; the result now starts at Louvre and ends at Jussieu.**''<br />
<br>Comment: where is Jussieu? The "map on the previous page" does not help, nor the one on page 24. <br />
<br>-- MP, 15/2/08<br />
<br />
page 28: last bullet list: third bullet: ''For example we can make Route1 start with a leg going from Opéra to Louvre;''<br />
<br>Comment: It would be nice to locate on a map Opéra.<br />
<br>-- MP, 15/2/08<br />
<br />
page 29: line 3: ''**With a remove query**, it would be one less.''<br />
<br>Comment: It should be something like: "If you remove a leg, the same query above would report one less." <br />
<br>-- MP, 15/2/08<br />
<br />
page 31: box "Definitions: Feature, Query, Command", second bullet: ''A feature that may **modify** an object is called a command''<br />
<br>Comment: you don't define "modify". At the bottom of page 28 there was a definition of "change" of an object. I would use the same word in both cases, <br />
or put a reference here to the previous definition, or repeat the definition. <br />
<br>-- MP, 15/2/08<br />
<br />
page 31, 4 lines before the end: ''are **defined** for you''<br />
<br>Comment: as how to "define" an object has not been defined, I would use ''are created for you'' instead.<br />
<br>-- MP, 15/2/08<br />
<br />
page 33, first line: "**Palsis**" should be "Palais"<br />
<br>-- MP, 15/2/08<br />
<br />
page 34, Exercise 2-E.2, 3 lines before the end. There is a parenthesis to drop.<br />
<br>-- MP, 15/2/08<br />
<br />
page 35, 3rd bullet; ''**If either of the previous two relations holds between two terms “relies on” also holds**''<br />
<br>Comment: a comma is missing: ''If either of the previous two relations holds between two terms, “relies on” also holds'' <br />
<br>-- MP, 15/2/08<br />
<br />
page 35, exercise 2-E.3, point 2. **my_paragraph_remove_last**.<br />
<br>Comment: my_paragraph_remove_last_word is a better name<br />
<br>-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.3, point 5. **my_paragraph.character_count (i)** seems a bit confusing example to me.<br />
<br>Comment: looking at the semantics, I would suggest my_paragraph.word (i), to get the i-th word in a paragraph; then we can apply to the resulting word feature <br />
''character_count'', a query that should be a feature of class WORD.<br />
-- MP, 15/2/08<br />
<br />
page 36, exercise 2-E.4 **Assume that you are building an MP3 player entirely software.** I am confused by the phrasing.<br />
<br>Comment: "Assume you are building a software model of a MP3 player." looks better to me.<br />
<br>-- MP, 15/2/08 <br />
</strike><br />
<br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 31, section 2.3 WHAT IS AN OBJECTS/Objects: a definition.<br />
second paragraph.<br />
replace:<br />
It is also s good<br />
by:<br />
It is also good<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
I don't see this, so I assume the sentence was removed.<br />
<br />
Comments by Raphaël Meyer<br />
<br><strike><br />
page 18, paragraph starting with "The first two lines": (unnecessary "to) "so all you have to do is to include" should read "so all you have to do is include"<br />
<br />
page 19, "Touch of Magic" box: ("specially" is an awkward word, consider replacing) "prepared specially for this" should read "prepared specifically/especially for this"<br />
<br />
page 19, same paragraph: (unnecessary comma) "concepts, and practice them" should read "concepts and practice them"<br />
<br />
page 19 final paragraph: (awkward comma) "line as here, to explain" should read either "line, as here, to explain" OR "line as here to explain"<br />
<br />
page 20, first paragraph: (incorrect grammar) "All we want the program to do is some display on the screen:" should read "All we want the program to do is display something on the screen:"<br />
<br />
page 20, final paragraph: (add comma for clarity) "avoid any confusion note" should read "avoid any confusion, note"<br />
<br />
page 21, paragraph starting with "Also note that": (typo) "Also note that do not actually need to type everything" should read "Also note that you do not actually need to type everything"<br />
<br />
Page 22, first paragraph: (typo) "The completion menu automatically appear" should read "The completion menu automatically appears"<br />
<br />
Page 22, same paragraph: (the following sentence is correct but very long and confusing; i suggest rewriting it if possible) "if at any point it does not show up by itself but you want to get it, to know the set of valid completions of what you typed so far and choose one from them, just type CTRL-Space". i would reword it as "if at any point you are looking for help and need this menu to appear with the list of valid completions, just type CTRL-Space"<br />
<br />
Page 22, paragraph starting with "You will now run": (awkward concept) "you will find more details of the interaction with EiffelStudio" (the interaction between Eiffelstudio and what? There cannot be the interaction with something; it must be the interaction of something with something else)<br />
<br />
Page 22, paragraph starting with "Click the Run button": (missing the word "and" to make the sentence complete) "looks like this —you will actually get" should read "looks like this — and you will actually get"<br />
<br />
page 28, paragraph starting with "All these operations": (add "and" for clarity and correctness) "route, hence" should read "route, and hence"<br />
<br />
page 28, final paragraph: (reword for correctness) "means that a command 'changes' an object" should read "means for a command to 'change' an object"<br />
<br />
page 30, paragraph starting with "Perhaps you find this": (add "and" to close the first half of the sentence) "next track, stop playing" should read "next track, and stop playing"<br />
<br />
page 30, paragraph starting with "The figure evokes": (grammar) should "yellow elliptic buttons on" read "yellow elliptical buttons on"?<br />
<br />
page 30, point 1 starting with "The object covers": (add a comma) "station “Louvre” etc." should read "station “Louvre”, etc."<br />
<br />
page 31, paragraph starting with "Examples of commands": (replace comma with "and") "such as Paris, spotlight" should read "such as Paris and spotlight"<br />
<br />
page 31, paragraph starting with "Queries and commands": (I think you need to add the word "how") "will learn to create" should read "will learn how to create"</strike><br />
<br />
<br />
<strike><br />
page 32, first paragraph: (missing the word "will) "We now look at some" should read "We will now look at some"<br />
<br />
page 32, same paragraph: (i would recommend starting a new sentence after the "Route1.origin" box. As it is written currently, the entire sentence is incorrect grammatically) i would suggest that "which is a feature call, like the calls to commands" be written "This is a feature call, like the calls to commands ..."<br />
<br />
page 32, paragraph starting with "which is a feature call": (add comma for clarity and correctness) "In this case since the feature is a query the call does" should read "In this case," since the feature is a query the call does"<br />
<br />
page 33, paragraph starting with "where some": (replace "it" with the noun for clarity) "because it needs it" should read "because it needs the value"<br />
<br />
page 33, same sentence. (in addition to previous recommendation, add "in order to" for clarity) "it needs it to do its job" should read "it needs it in order to do its job"<br />
<br />
page 33, final line: (add comma) "argument (separated by commas) although" should read "argument (separated by commas), although"<br />
<br />
page 34, third bulletpoint: (consider rewording for correctness) "results of applying" should read "results when applying"<br />
<br />
page 35, four bulletpoints: (need to have consistent formatting and style) the "For example" in each bulletpoint should always be followed by the same punctuation (either a ":", a "," or nothing.) There is currently no continuity in this list.<br />
<br />
page 35, paragraph starting with "In software for creating": (need parallel construction) "assume a class WORD that describes a notion of word, and a class PARAGRAPH, describing a notion of paragraph." should read "assume a class WORD that describes a notion of word, and a class PARAGRAPH that describes a notion of paragraph."<br />
<br />
page 35, same paragraph: (replace "say" with "determine") "PARAGRAPH, say whether" should read "PARAGRAPH, determine whether"<br />
</strike><br />
<br />
===3 Program structure basics===<br />
<strike>page 39, line 5 of section 3.3: "...natural languages, like English or French, that we use for ordinary communication."<br />
<br>Comment: some readers may not be using French for ordinary communication, not even English (in spite of the fact <br />
<br> that they are reading a book written in English). I would suggest not to commit to any language: <br />
<br>"...natural languages that we use for ordinary communication." <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>page 40 line 2: "In English or French you do not invent". Comment: again, I would choose a language-neutral approach: <br />
<br>In a natural language you do not invent..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: title. Same issue as above ("English"). I suggest:<br />
<br>"Putting some natural language into your programs"<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 40, box Touch of style: line1. "Natural language has a place in programs: in comments"). <br />
<br>Comment: maybe is also worth mentioning that natural language has a place also in class and feature names?<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, section "Levels of language description". In bullets 2 and 3 you use the terms "syntax rules", but in the picture<br />
<br> you use "syntactic rules". <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 46, picture: the picture of a tree on the right is not clear to me. It would be preferable to explain it or remove it altogether. <br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, box Touch of style, line 5: " ...; the few seconds that you might save by omitting**a letter**..."<br />
<br>Comment: this could be interpreted as: "a few seconds to type a single letter? I am not that slow!", so maybe it could be rephrased as:<br />
<br> " ...; the few seconds that you might save by omitting one or more letters in one or more identifiers..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, section Break and Indentation, line after the third bullet: "It makes no difference to the syntax..."<br />
<br>Comment: "It makes no difference to the Eiffel syntax..."<br />
<br>Marco P, 23/2/2009<br />
<br />
<br>Page 47, line 5 of the part in smaller font before the end of the page: "The “carriages” in question are not the horse-and-buggy kind, <br />
<br>although today they seems almost as old** — **a delightful and nostalgic reminder of the time when we typed our programs on typewriters. <br />
<br>The print head was lodged in a little mechanical “carriage”, which at the end of a line we would “return” to the leftmost<br />
<br>position to start typing the next line."<br />
<br>Comment: the sentence does not flow smoothly to me. A possibility could be: "... almost as old. They are instead a delightful and nostalgic remainder..."<br />
<br>Marco P, 23/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 43, section 3.5 NESTING AND THE SYNTAX STRUCTURE.<br />
in the gragh.<br />
replace:<br />
-- Show city info including a monument..<br />
by:<br />
-- Show city info including a monument.<br />
action:<br />
remove one dot.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 48, section 3-E.1 Vocabulary.<br />
in right margin.<br />
text:<br />
The definition of "class" may be less precise than the others.<br />
action:<br />
remove this text. It's copy/pasted from 2-E.1<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
Raphaël Meyer<br />
<strike><br />
page 39, paragraph starting with "Earlier on": (confusing end of the sentece) "program, to do something for us, which may change objects." should read "program, to do something for us, while maybe changing one or more objects."<br />
<br />
page 41, paragraph starting with "a typical": (typo) "with three component, each" should read "with three components, each"<br />
<br />
page 46, bottom of the page: (add the word "an") "an example of identifier" should read "an example of an identifier"<br />
</strike><br />
<br />
===4 The interface of a class ===<br />
<strike>page 50, first two lines: "As an example of a user interface, consider a Web browser as shown <br />
<br>(top part only) on the next page.<br />
<br>Comment: this was probably originally on the previous page, but now it is not, so has to be <br />
<br>fixed accordingly. Also, a general comment about the printscreens: they all seem blurry on my <br />
<br>monitor, and also when I print them. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 52, line after box with class definition: "In program texts..."<br />
<br>Comment: may be it is worth specifying "In Eiffel program texts..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 5: " We use Paris because it is the top tourist destination in the world..."<br />
<br>Comment: it would nice to put a ref on the side to reassure people that this is true <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>page 53, section 4.3, line 7: " it simply reads in an XML file describing..."<br />
<br>Comment: even if you briefly explain XML on the side, I would say that at this point detailing the <br />
<br>technology is not essential. I would just say: " it simply reads in a file describing..."<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 54, line 4 after the box: "...— but still far less precise and complete than what we expect from <br />
<br>the “requirements document” of a software project in industry. It is good enough for our current <br />
<br>purpose of discovering a few classes." <br />
<br>Comment: The last sentence seems to be missing a "Anyway" at the beginning, or a "though", like in:<br />
<br> "It is good enough, though, for our current purpose of discovering a few classes." <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 55, line 2: ";a route is made of legs from different lines."<br />
<br>Comment: ";a route is made of legs from potentially different lines." seems more precise.<br />
<br>Marco P. 25/2/2009<br />
<br>Page 55, box on Conventions. The term "library" is used here and immediately after the box. <br />
<br> Comment: I have found an explanation in the introduction. You might consider briefly define it again,<br />
<br>or having a ref as a side note, etc.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 58, line after box ""Programming time!": (in directory in the subdirectory 04_interface)"<br />
<br>Comment: looks like something is missing here: adirectory name?<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 60, picture. The "Line end" station, put alone on the right, looks a bit confusing to me. As<br />
<br>it does not seem essential to me to understand the text, you may consider removing it.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 61, after the code box: "Don’t even think of reading any further unless you understand these two lines<br />
<br>perfectly."<br />
<br>Comment: here the word line is used to mean line of text, and immediately before the box to mean metro line. <br />
<br>This may be slightly confusing, so I would specify "lines of code" or "in the box above" or the like. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 65: "as in non-programming uses of this concepts (“there is enough snow”, as in a condition to decide <br />
<br>whether you can go skiing) a condition either holds or not.)<br />
<br>Comment: maybe it is worth adding that in the given example we implicitly assume that we know <br />
<br>what the truth value is, and that if it is not true it has to be false, the so-called closed-world assumption. <br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 68, line 7: "The invariant, to be seen in the next section, will tell us that north_end must be equal<br />
<br>to i_th (count), so this clause is in fact redundant, but it doesn’t hurt."<br />
<br>Comment: as invariant has not been defined yet, I would rather move the sentence, appropriately rephrased, to<br />
<br>the next sub-section on class invariants. In general I think that back-referencing is easier to follow than forward-referencing.<br />
<br>Marco P. 25/2/2009<br />
<br />
<br>Page 71, New vocabulary: you might consider adding "library", in case you accepted a previous suggestion<br />
<br>Marco P. 25/2/2009<br />
</strike><br />
<br />
<br />
<strike><br />
from Draft 22.02, 23 August 08 19:15 (Santa Barbara)<br />
page 52, section 4.2 CLASSES.<br />
in sixth paragraph, second bullet.<br />
text:<br />
there some names such as Paris and Route1<br />
action:<br />
The 's' in 'such' should not be in italic.<br />
-- Eric Bezault, 12 December 2008<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
in the header comment of attribute `count'.<br />
text:<br />
-- Number of stations in this line.<br />
action:<br />
Remove the period.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 57, section 4.4 QUERIES, "How long is this line?".<br />
last word of the second to last paragraph.<br />
text:<br />
to which we will apply the feature count.<br />
action:<br />
`count' should be displayed in blue.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 60, section 4.4 QUERIES, "The stations of a line".<br />
last paragraph.<br />
text:<br />
denoting the ends of a line .<br />
action:<br />
put a colon instead of a period at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 61, section 4.4 QUERIES, "Properties of start and end lines".<br />
in the title itself.<br />
action:<br />
shouldn't it be: "Properties of start and end stations of a line"?<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
Our program will use it under the form<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 62, section 4.5 COMMANDS, "Build a line".<br />
text:<br />
you may add a station st at its end through<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We could of course add the information to the header comment, as in<br />
action:<br />
add a colon at the end of the line.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 64, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
We may omit the assertion tags and colons<br />
action:<br />
I think that tags are not optional anymore in ECMA Eiffel.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 65, section 4.6 CONTRACTS, "Preconditions".<br />
first paragraph after the Boolean definition.<br />
text:<br />
i >= 1 is unambiguously true or false<br />
action:<br />
The letter 'i' in "is" should be in black (it is currently in blue).<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 65, section 4.6 CONTRACTS, "Preconditions".<br />
text:<br />
as it appears in the interface<br />
action:<br />
I think I miss something on the logic to whether to add a colon or<br />
not at the end of line preceding a code snippet. Sometimes there is<br />
one, and sometimes there is none. So far I tried to systematically<br />
report when one was missing, but there are so many missing that I<br />
now realize that this must be on purpose. So I'll stop reporting that<br />
from now on, although I didn't discover yet why colons are added in some<br />
cases and not in others.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
end of page 71, section 4-E.5 "Postcondition vs invariant"<br />
action:<br />
The title says "Postcondition" but in the exercise text it is<br />
mentioned "routine's precondition".<br />
-- Eric Bezault, 7 March 2009<br />
<br />
=== 5 Just Enough Logic ===<br />
<strike><br />
Page 82, theorem box.<br />
<br>Remark: the theorem text seems to take for granted that in "e" one can replace at least an occurrence of u by v.<br />
<br>As explained in the proof sketch, it may be the case that u does not occur in e. For clarity, I would add to the theorem <br />
<br> text: "For any boolean expressions u, v and e, with u that can occur in e from 0 to n times,... " <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 82, box at bottom. Remark: here and in the following box, you use the notation "/XYZ/" to express a comment that you later use <br />
<br>also as a label. Have you considered using "--XYZ", the Eiffel notation, for consistency? After all it is valid Eiffel code. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 83, Proof after box about De Morgan's laws. Remark: you might consider having a simple exercise at the end of the chapter about<br />
<br>proving the theorem using the already seen principles. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 85, line 2: "...since the precedence rule making and bind tighter than or is arbitrary." Remark: it would be nice to have a reference<br />
<br>or some more detail here.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, sentence 6 in the list. Remark: In this list, as specified immediately before, you seem to be considering the case in which "a" is false. <br />
<br>Sentence 6 refers to the case in which "b" is true instead. I think it would be clearer if the sentence 6 is moved from the list to the end of the page, <br />
<br>as an example in which the consequent holds and yet this does not suffice to determine the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, lines 1 and 2 after the 6 sentences. Remark: depending on what you decided to do with the previous sentence (6), this should be changed.<br />
<br>In any case, if you leave it like it is, and don't explain what is explained at the end of the page about the consequent, it is not immediate to understand<br />
<br>why today's weather does not affect the truth of the implication.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 88, bottom line: "cases in which the consequent holds (I2), do not suffice to determine the truth of the implication as a whole."<br />
<br>Remark: I find the expression "truth of the implication as a whole" a bit confusing. Something like: "cases in which the consequent holds (I2),<br />
<br>do not suffice to determine all the cases in which the implication would be True." would be clearer for me. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 89, the picture is blurred. I cannot read the comic strip.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 90, last box, and 91, first line: same observation as for page 82 before (/REVERSE/)<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>3 lines after beginning of section 5.3: "This is all the more remarkable that modern logic was established..."<br />
<br>Remark: This is all the more remarkable in that modern logic was established..." maybe?<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 93, 6 lines from the bottom: "...like death in video games, where you can get new lives (as long as you continue paying)"<br />
<br>Remark: as you can have different mechanisms, "...like death in certain video games, where you can get new lives (as long as you continue paying)" <br />
<br>is slightly more precise.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 94line 2 and 3: "The second way would be to decide that and as we understand it in programming is not commutative any more (the same would, <br />
<br>for duality, hold of or)." Remark: a couple of commas seem to be missing. I suggest: "The second way would be to decide that and, as we understand it in<br />
<br>programming, is not commutative any more (the same would, for duality, hold of or)."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font 10 lines from the top: "Such improvement of execution speed, known as optimization, is generally not carried out not by programmers"<br />
<br> One "not" is redundant.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Text in small font close to the bottom, line 4 after the box: "An operator is “non-strict” on an operand if it may in some cases yield a meaningful result <br />
<br>even that operand does not have a defined value." Remark: I think a "when" is missing: "An operator is “non-strict” on an operand if it may in some cases <br />
<br>yield a meaningful result even when that operand does not have a defined value."<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 95, line 2: "The same holds for or else relative to or". Remark: for consistency with the previous case, it should be: "The same holds for or relative to or else"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 98, 2 lines after the second bullet: "If Stations8 denotes...". Remark: the name may induce some confusion: I would suggest Line8_stations.<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines 2 and 3 from the top: "This is not quite precise enough, however, because of the case of an empty set.". <br />
<br>Remark: as you explain the empty set case in detail later, I would put a forward reference here. <br />
<br>Probably a similar reference should go after the box at the bottom of page 98. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, 8 lines after the box: Remark: a comma is missing in the set definition, between 9 and 11. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 100, lines before U1 towards the end: "(compare with those for existential quantification, E2 and E1 above)" <br />
<br>Remark: you may consider replacing "above" with "in the previous page"<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Picture of exercise 5-E.11 is blurred.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 84, section 5.1 BOOLEAN OPERATIONS, "De Morgan’s laws"<br />
in the box "Theorems: Distributivity of boolean operators"<br />
text:<br />
(a or (b and c))<br />
action:<br />
`c' should be in blue, not in black.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 86, section 5.2 IMPLICATION, "Definition"<br />
paragraph after the truth table<br />
text:<br />
It’s the same as the table for or, with True and False values for b switched.<br />
action:<br />
I guess you meant "with True and False values for a switched"<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 90, section 5.2 IMPLICATION, "Getting a practical feeling for implication"<br />
in the second code snippet box<br />
text:<br />
(a implies b) = ((not ) implies (not a)) -- REVERSE<br />
action:<br />
the last parenthesis should not be in italic.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 92, section 5.3 SEMISTRICT BOOLEAN OPERATORS<br />
first 3 paragraphs (as well as in page 97 later in this chapter)<br />
action:<br />
in chapter 4, the function `i_th' returns a STATION, not a METRO_STATION.<br />
-- Eric Bezault, 7 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
V n: X | n.is_prime means that all members of x are prime numbers<br />
action:<br />
x should be in upper-case<br />
-- Eric Bezault, 8 March 2009<br />
<br />
<br />
from Draft 27.02, 3 March 09 16:55 (Zürich)<br />
page 100, section 5.4 PREDICATE CALCULUS, "Precise definition: universally quantified expression"<br />
text:<br />
(compare with those for existential quantification, E2_and E1_on the previous page):<br />
action:<br />
no underscore after E2 and E1<br />
-- Eric Bezault, 8 March 2009<br />
<br />
More comments by Raphaël Meyer (11 March 2009)<br />
<br />
<strike><br />
page 73: (It looks like the spacing here is bigger in between lines than on other pages; is this normal?)<br />
<br />
page 73, first paragraph: (reorder sentence for clarity) “All can, in principle, be deduced” should read “In principle, all can be deduced”<br />
<br />
page 73, same sentence: (specify what “All” refers to, since it’s not crystal clear) “In principle, all can be deduced” should read “In principle, all effects can be deduced” OR “In principle, all consequences can be deduced”<br />
<br />
page 75, final paragraph, second sentence: (Consider revising by splitting up the sentence into two separate sentences, separated by a period. As it is now, the sentence is too long and has too many commas and is therefore confusing and hard to read)<br />
<br />
page 76, paragraph starting with “This is called”: (reword for conciseness) “list all the possibilities for the values of the variables” should read “list all the possible values for the variables”<br />
<br />
page 76, same paragraph: (it seems as though the spacing between this paragraph and the next one, as well as the spacing between the next two, is unusually large. Please verify that this is normal)<br />
<br />
page 77, paragraph starting with “In ordinary”: (add comma to avoid ambiguity) “to hold one” should read “to hold, one”<br />
<br />
page 79, paragraph starting with “It is easy to see”: (reword to make the two phrases parallel) “for or, with two operands, there were 22 = 4 rows.” hould read “the table for or, with two operands, had 22 = 4 rows.”<br />
<br />
<br />
Page 79, very bottom of the page: (replace comma with a semicolon) “(not c)), all” should read “(not c)); all”<br />
<br />
</strike><br />
<br />
===6 Creating objects and executing systems===<br />
===7 Control structures===<br />
Corrections by Raphaël Meyer<br />
<br />
<strike>Page 142: the four bulletpoints are not parallel. bulletpoint 3 refers to its while the first two start with "the". the fourth one is completely different than the first 3.<br />
<br />
Page 143: addition box towards the top. there is an error in the calculation. the sum of the two numbers should be 729 (not 29)<br />
<br />
Page 144: paragraph underneath heading "Precision and explicitness: algorithms vs recipes": The word "follow" on the third line should be "following".<br />
<br />
Page 145: First paragraph that starts with "In German and French": At the end of the first sentence, I would say "heat the thing up at some point" rather than "heat up the thing at some point".<br />
<br />
The final sentence of the first paragraph is not grammatically correct: "Only the Italian version<br />
mentions this detail — 'cook according to the times given' — without which<br />
the pictures would be meaningless." I would say "Only the Italian version mentions this detail - cook according to the times given - which gives meaning to the pictures."<br />
<br />
Page 145: The paragraph that starts with "For algorithms, as opposed to informal recipes": The second clause should read "as opposed to for informal recipes"<br />
<br />
Page 147: In the first bulletpoint: The final sentence is a little long and confusing. I would change the second half of it to the following: "... software elements, this book tends to use the word system rather than the word 'program' (which may still suggest the idea of doing just one task)'"<br />
<br />
Page 147: The second bulletpoint: The first sentence is confusing. I would say "The<br />
description of the data structure—in the object-oriented approach of this book, the object structure — to which processing steps apply is as important to a program as the steps themselves."<br />
<br />
Page 148: Under the "sequence" bulletpoint, final sentence: "would executed" should be "would execute" or "would be executed"<br />
<br />
Page 150: final paragraph, bottom of the page, first sentence: "not any more get" should be "no longer receive" or "no longer be given"<br />
<br />
Page 151: Textbox with "Touch of Style" as its header: the bulletpoints are formatted strangely. Shouldn't the first line be aligned with the second line for each bullet?<br />
<br />
Page 152: Paragraph beginning with "Even on separate lines ...": "put two version of the same ..." should be "put two versions of the same ..."<br />
<br />
Page 153, first paragraph starting with "Note that the syntax ...": The sentence "but it is useful to allow it for when a sequence appears as part of a larger structure." is unclear. REvise the first part to clarify between "it" and "it".<br />
<br />
Page 154, textbox entitled "Correctness": the word "compound" in the second bulletpoint should be capitalized.<br />
<br />
Page 154, bottom of the page, final 3 lines: the formatting seems incorrect. The final sentence should all be on one line.<br />
<br />
Page 155, paragraph starting with "A typical example of loop": the sentence should read "A typical example of a loop ..."<br />
<br />
Page 155, middle of the page: There appears to be a diagram or picture missing next to the tagline "Highlighting a station"<br />
<br />
Page 157, first paragraph that starts with "This ensures that ...": the clause "the third step to I2 for i = 3" should read "the third step to I3 for i = 3 ..."<br />
<br />
PAge 158, last sentence of the paragraph starting with "the 'maximum' example ...": The last sentence reads "and the invariant INV (s), where s is a subset N1, N2, ..., Ni of DS, is<br />
that we have found the maximum of s." This should be reworded since it is not clear grammar.<br />
<br />
Page 158: first bulletpoint under "Note - in the general case ...": Typo: "sufficently" should be "sufficiently"<br />
<br />
Page 163: second bulletpoint underneath the paragraph starting with "The loop postcondition principle ... ": The fist part of the sentence reads "Sufficiently flexible to let us extend it from ..." I think it would be clearer if it read "Sufficiently flexible that we can extend it from ..."<br />
<br />
Page 164, textbox entitled "Loop Variant": Typo: "Afterexecution" should be "After execution"<br />
<br />
PAge 165, final paragraph that starts with "You may well feel ...": The third sentence reads "If you have ever try ..." but should read "If you have ever tried ...". Further, the sentence then reads "it might very well be the result of such ..." but should read "it might very well have been the result of such ..."<br />
<br />
Page 168, final paragraph starting with "... for successive values of i ...": The second sentence reads " ... used for iterating over object structures such as list." Is this correct grammar? Should it not be " ... used for iterating over object structures such as lists."?<br />
</strike><br />
<br />
===8 Routines, functional abstraction and information hiding===<br />
<strike>Page 211, section 8.4, lines 1 and 2 after the second box. "The first line gives the name of the routine, as well as its signature: <br />
<br>the list of its formal arguments, if any, and their types."<br />
<br>Remark: according to the ecma standard, page 38, the signature of a feature does not include the names of the arguments,<br />
<br>which seems to be suggested here. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", first bullet: <br />
<br>Remark: "Text View" should be "Basic Text View". That's how it is in EiffelStudio. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 213, section "Interface vs implementation", 3 lines from the bottom: <br />
<br>Remark: "Text View" should be "Basic Text View". Same as above. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 216, lines 6 to 9. "We saw how the signature of a procedure is characterized by a name and an optional list of formal arguments <br />
<br>with their types,". Remark: not consisted with th edefinition of signature in the ecma standard, page 38. The signature of a feature does not include <br />
<br>neither the arguments names nor the feature name. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, side note: "The format is a variant of XML"<br />
<br>Remark: to my understanding, it is plain XML, not "a variant" of XML. Of course adheres to its own XML schema, but this is how it usually is. <br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 219, end of text in small font: 'as in “Decision Problem”, Entscheidungsproblem'<br />
<br>Remark: may be Entscheidungsproblem should be double-quoted too, like in 'as in "Decision Problem”, or "Entscheidungsproblem"?'<br />
<br>Marco P. 26/2/2009<br />
<br />
<br>Page 221, Section 8.10, 5th bullet point from the start of the section: "A routine has a name, a signature defining the types of arguments and result<br />
<br>if any, a contract, and a body describing its algorithm."<br />
<br>It should probably made clearer that "if any" refers to both the types of argument and the result. Maybe this is the correct way to express this. <br />
<br>Please just doublecheck.<br />
<br>Marco P. 26/2/2009<br />
</strike><br />
<br />
===9 Variables, assignment and references===<br />
Corrections by Annie Meyer<br><strike><br />
Page 234<br />
<br />
<br />
We saw in the discussion of creation that an object, as it exists at run time in the<br />
memory of your computer, consists of a number of fields, some references,<br />
some expanded:<br />
<br />
some referenced, non?<br />
<br />
Page 242<br />
<br />
The principle shields client software from the these<br />
changes: <br />
<br />
retirer le the<br />
<br />
<br />
Page 243<br />
<br />
Itisnot OK, however, to let clients assign directly to it, as in the illegal<br />
Line8.index := new_value, since (among other problems) this would reveal<br />
it is an attribute.<br />
<br />
... this would reveal that it is ....<br />
<br />
Page 244<br />
<br />
A procedure such as set_a or go_ith which has as its principal effect to set the<br />
value of an attribute is called a setter procedure (or setter command).<br />
<br />
Rajouter un peu de ponctuation. ... which has, as its principal effet, to .....<br />
<br />
Why would ever need something like this since we clients can simply use index<br />
is the attribute is exported?<br />
<br />
Rajouter mots et punctuation<br />
<br />
Why would we ever ...... since we, clients, can<br />
<br />
Page 245<br />
<br />
Exporting an an attribute is legitimate and lets clients access (but not modify)<br />
the corresponding field values.<br />
<br />
Retirer un des an au debut de la phrase.<br />
<br />
<br />
To client authors, both<br />
kinds simply appear as queries<br />
<br />
Ajouter un . après queries<br />
<br />
Page 260<br />
<br />
and should handled in classes that deal with object structures in general.<br />
<br />
Should be handled non?<br />
<br />
Page 262<br />
<br />
that an operation that an operation that does not<br />
name a variable cannot affect associated properties.<br />
<br />
Retirer that an operation puisque c'est la deux fois.<br />
<br />
Page 263<br />
<br />
Fin de la page <br />
<br />
any manipulations that<br />
could cause sneaky aliasing and produce surprising effects.<br />
<br />
Pourquoi un s à manipulation?<br />
<br />
Page 264<br />
<br />
But the effect would<br />
probably worse,<br />
<br />
be worse<br />
<br />
Page 266<br />
<br />
<br />
make things more difficult since you cannot assign<br />
to a formal routine argument,<br />
<br />
Je ne comprends pas. Question de punctuation peut-être<br />
</strike><br />
<br />
===PART II: HOW THINGS WORK===<br />
===10 Just enough hardware===<br />
Corrections by Raphaël Meyer<br><strike><br />
<br />
page 269, final paragraph, first sentence: typo: "formating" should be "formatting"<br />
<br />
page 270, middle of the page: it seems like there should be a diagram or drawing next to the left-caption "A bit (low-tech version)", but there is nothing there.<br />
<br />
page 271, second to last paragraph starting with "Early on, the ...": is this formatting correct? Shouldn't this paragraph have the same formatting as the one below it? (or at least the bulletpoint above it?)<br />
<br />
page 272, second bulletpoint under "For the basic units:": "... is on the order of four billions" should read "is on the order of four billion"<br />
<br />
page 272, next paragraph: "For example if" should read "For example, if"<br />
<br />
page 272, same paragraph, sentence starting with "256 possibilities ...": "on your keyboard — ~, !, @ etc. —, the ..." should read "on your keyboard —, ~, !, @, etc., the ..."<br />
<br />
page 272, paragraph starting with "For languages ...": "such a Cyrillic, ..." should read "such as Cyrillic, ..."<br />
<br />
page 272, same paragraph: this does not make sense to me: "which uses two or more commonly four bytes for a character" ... consider revising/clarifying<br />
<br />
page 273, paragraph starting with "The starting position ...": "(in these cases one byte, four bytes and eight)" sounds awkward. It should either be written as "(in these cases one byte, four bytes and eight bytes)", or (worse) "(in these cases one byte, four and eight)"<br />
<br />
page 274, table: "4 billions" should be "4 billion"<br />
<br />
page 275, paragraph starting with "Having a binary interpretation ...": "1.44 megabyte" should read "1.44 megabytes"<br />
<br />
page 275, paragraph starting with "In most practical cases ...": "what’s a few millions?" should be "what’s a few million?"<br />
<br />
page 276, first bulletpoint under the paragraph starting with "These properties affect ...": "it reads it" ... I would specify at least one of the "it" to make the sentence more clear.<br />
<br />
page 278, paragraph starting with "Some programmers ...": "but this not necessarily true" should read "but this is not necessarily true"<br />
<br />
page 279, first paragraph, final sentence: it currently reads "Let’s see what memories can do for us.", but shouldn't it read "Let’s see what memory can do for us."?<br />
<br />
page 279, first paragraph under the "Persistence" heading: "powering off the memory unit will lose the data." is not correct. It should read something to the effect of "powering off the memory unit will result in a loss of data."<br />
<br />
page 279, second sentence of the paragraph that starts with "Words like ...": the sentence "As rough estimates in technology that is current at the time of writing:" is very confusing. Consider rewording.<br />
<br />
page 279, first bulletpoint underneath aforementioned sentenced: "The time to access a character might around 50 nanoseconds, ..." should read "The time to access a character might be around 50 nanoseconds, ..."<br />
<br />
page 280, paragraph underneath the "RAM" bulletpoint, final sentence: "such as disks presented below" should read "such as the disks presented below"<br />
<br />
page 280, "Core memory" bulletpoint, first sentence: "This term to points back ..." should read "This term points back ..."<br />
<br />
page 280, there is no photograph or diagram next to the caption "A memory chip" underneath the paragraph starting with "The photograph below ..."<br />
<br />
page 281, first bulletpoint starting with "Others are meant ...": The final sentence ends with a close parentheses that was never opened: "'Storage' is just a synonym for memory.)"<br />
<br />
page 281, next paragraph: "all rotating a speed of" should read "all rotating at a speed of"<br />
<br />
page 281, same paragraph: "If power is switched off the heads ..." should read "If power is switched off, the heads ..." for clarity.<br />
<br />
page 283, paragraph starting with "Computer operations ...": "Most architecture offer at most a few dozen registers" should read "Most architecture offers at most a few dozen registers"<br />
<br />
page 281, paragraph about halfway down the page: "The order of magnitude of typical access times at the time of writing are" should read "The orders of magnitude of typical access times at the time of writing are"<br />
<br />
page 284, paragraph starting with "The reason this policy ...": "... is that program typically use, ..." should read "is that programs typically use, ..."<br />
<br />
page 284, next paragraph: "each programs sees a" should read "each program sees a"<br />
<br />
page 284, same paragraph, same sentence: "contiunous" should be spelled "continuous"<br />
<br />
page 285, halfway down the page: "Computers offers instructions of three main kinds:" should read "Computers offer instructions of three main kinds:"<br />
<br />
page 285, final paragraph, final sentence: I believe "PowerPC" should read "Power PC" (it shows up 2 other times on page 285 as "Power PC")<br />
<br />
page 286, first paragraph, third sentence: "at much higher level of abstraction." should read "at a much higher level of abstraction."<br />
<br />
page 286, same paragraph, next sentence: once again, "PowerPC" should read "Power PC"<br />
<br />
page 286, first paragraph: since we are talking about hardware power (a thing) and not a person, I think the following sentence "hardware power, whose most popular formulation was first presented" should be changed to "hardware power, the most popular formulation of which was first presented"<br />
<br />
page 287, paragraph starting the "The basic Moore's Law": "as this is its the last section):" should read "as this is the last section):"<br />
<br />
page 288, first paragraph: "(turning off the computer loses the values)." should read "(turning off the computer results in a loss of values)."<br />
<br />
page 288, under "Further Reading": "John Markoff, has for many years covered ..." The comma (,) after "Markoff" is unnecessary.<br />
</strike><br />
<br />
===11 Describing syntax===<br />
All of chapter 11 done by Raphael Meyer<br />
<br />
<strike>page 293, bottom of the page on the right: the blurb starting with "We'll see an example ..." gets cut off at the end of the sentence, i.e. you can't tell what page number it is referring to.<br />
<br />
page 297, first paragraph, first sentence: "of specimens of each the constructs" should read "of specimens of each of the constructs"<br />
<br />
page 303, towards the top of the page: "we have to apply to another construct B" should read "we have to apply it to another construct B"<br />
<br />
page 304, Second bulletpoint underneath "Applying the same process again ...": "heads tail stop" should read "heads tails stop" to be consistent with the other bulletpoints<br />
<br />
page 314: underneath the "Touch of History" textbox: There is a sentence ("Another recent text, up to date on many important compiler techniques.") that is a bit out of place since it should come before the textbox, immediately underneath the Muchnick's book. Consider reformatting in some way.<br />
<br />
Finished on 3 Feb 2009 at page 316.<br />
</strike><br />
<br />
===13 Programming languages and tools===<br />
Corrections by Annie Meyer<br><strike><br />
Page 318<br />
<br />
Section manquante<br />
<br />
Survey of programming language styles<br />
<br />
Page 329<br />
<br />
The following figure shows a typical state of the EiffelStudio debugger.<br />
<br />
Je trouve cela genant que la figure soit a la page suivante.<br />
<br />
This dynamic view does not<br />
<br />
replace careful static analysis, since an execution is only one of a myriad possibilities, but complements it by giving you a practical, concrete feel for what happens at run time.<br />
<br />
A myriad of possibilities, non?<br />
<br />
Page 330<br />
<br />
To enter program modules and other software elements (such as design documents and other documentation), upi may use text editors—the programs that enable us to type and format documents.<br />
<br />
What is upi?<br />
<br />
Page 336<br />
<br />
Version control tools help you keep track of successive versions of an individual module: in our three-dimensional picture, it corresponds to a horizontal plane as shown, or in the case of a single developer to a horizontal line.<br />
<br />
A horizontal plane or an horizontal plane?<br />
<br />
...................................... Line?<br />
</strike><br />
<br />
===PART III: ALGORITHMS AND DATA STRUCTURES ===<br />
===13 Fundamental data structures, genericity, and algorithm complexity===<br />
<br />
<br />
<br />
Corrections by Stephan v S:<br />
<br />
<strike> p. 353, "naming conventions for features of reusable components" does not really belong under the bullet "Algorithm complexity"<br />
<br />
p. 357, "safety and flexibility," --> "safety and flexibility."<br />
<br />
p. 359, "non -generic" --> "non-generic".<br />
<br />
p. 360, "and hash tables —, all" --> "and hash tables — all"<br />
<br />
p. 361 top, "find if a part" --> "determine if a part" or "find out if a part"<br />
<br />
p. 361 middle, "G will denotes" --> "G will denote" or "G denotes"<br />
<br />
p. 369, "complexity. assessing" --> "complexity. Assessing"</strike><br />
<br />
<strike><br />
<br />
p. 370, "throws a dice to decide" --> "throws a die to decide"<br />
<br />
p. 370, "2^33 - 1" --> "2^31 - 1"<br />
<br />
p. 371, "People will think of (and test for) cases in which an array or other structure has items; then in an execution for some particular input data, the container happens to be empty, and everything blows up." --> "People will typically think of (and program for) cases in which an array or other structure has items, leading to errors in executions where it happens to be empty."<br />
<br />
p. 372, the blue overlay box in ARRAY's `make' is ill-aligned.<br />
<br />
p. 374, "For class ARRAY and others in this chapter the following notations, using brackets, are available:" --> "The following notations use brackets and are available for class ARRAY and others in this chapter:"<br />
<br />
p. 375, rephrase "In such cases including several occurrences of array elements, especially with mathematical operations involved, [5] is better and follows mathematical practice."<br />
<br />
p. 376, "execution a fixed lower and upper bounds," --> "execution fixed lower and upper bounds,"<br />
<br />
p. 377, "the very fast, O (1) cost of a standard" --> "the very fast O (1) cost of a standard"<br />
<br />
p. 378, "If after creation the bounds lower and upper do not change, or change only rarely, the implementation is highly efficient, since every access to the function, or modification of the function’s value for a certain index in the interval, is O (1) and very fast." --> "The implementation is very efficient, since every access to the function or modification of the value for a given index in the interval has O(1) complexity."<br />
<br />
p. 378, the last parenthesis of "(O (count))" should be black.<br />
<br />
p. 378 in the summary table, the word "indices" is used. "indexes" would be more consistent with the rest of the content.<br />
<br />
p. 379, "third of type PERSON, assumed to be an existing class" --> "third of type PERSON, which is assumed to be an existing class"<br />
<br />
p. 379, "as a data structure — the way arrays" --> "as a data structure — in the way arrays"<br />
<br />
p. 384 top, the figure is quite distorted.<br />
<br />
p. 385, "for non-empty list." --> "for non-empty lists."<br />
<br />
p. 385, "go_i_th (i: INTEGER" --> "go_i_th (i: INTEGER)"<br />
<br />
p. 386, "Iterating on a list" could also be "Iterating over a list"<br />
<br />
p. 386, "your_list." has a big blue full-stop<br />
<br />
p. 390, "bottom object is an instance of LINKED_LIST [T]" -- isn't it the top object in the picture?<br />
<br />
p. 391, in the figure at the bottom there is a small yellow strip in the `right' field of the new LINKABLE.<br />
<br />
p. 392, "this example illustrates the earlier discussion about the delicate nature of programming with references is delicate" --> "this example illustrates the delicate nature of programming with references mentioned before"<br />
<br />
p. 392, "with item value "La_Motte" at" --> "with item value "Lourmel" at"<br />
<br />
p. 394 top, "the first traversal takes n" --> "the first traversal takes count"<br />
<br />
p. 394, "overall number of iterations is count (count – 1) / 2" --> "overall number of iterations is count (count + 1) / 2"<br />
<br />
p. 395, reverse algorithm: c := c + 1 should be placed in the loop body, and `count' in the variant actually designates the original count upon routine entry. A local variable could be created to store its value.<br />
<br />
p. 396, the right arrows in the figure are quite low in the linkables, and the third and fourth linkables are quite far apart from each other.<br />
<br />
p. 397, code box at top: "go_i_th (count – 1)" --> "go_i_th (index – 1)". This code assumes "index - 1" is a valid argument for `go_i_th', i.e. that `back' was never called when index was 0. A test might be needed around the call to `go_i_th' to remove this restriction.<br />
<br />
p. 398, closing parenthesis needed in figure caption: "(Compare with the singly linked list in the figure)"<br />
<br />
p. 399 in the figure, the `index' arrow's base is purple and its head is pink.<br />
<br />
p. 400, "go_ith (i)," --> "go_i_th (i),"<br />
<br />
p. 400 in the figure, the '[' should be blue in "BI_LINKABLE [ARRAYED_LIST" .<br />
<br />
p. 404, "8 billions," --> "8 billion,"<br />
<br />
p. 405, "not (has (k)" --> "not (has (k))"<br />
<br />
p. 407, the "Comments" column in the table is unused.<br />
<br />
p. 408, "put (x: G; i: INTEGER): G" --> "put (x: G; i: INTEGER)"<br />
<br />
p. 408, "after putting a coin" --> "after inserting a coin"<br />
<br />
p. 410, last word: "this:." --> "this:"<br />
<br />
p. 412, "which ....; at" --> "which ...; at"<br />
<br />
p. 412, "underlies the run-time support of every modern programming language implementation" ... implementations of most functional programming languages do not use call stacks because of closures.<br />
<br />
p. 413 middle, there are random characters in the figure.<br />
<br />
p. 415, it is unclear what the arrow and "T" are denoting in the figure. Perhaps the "Top"?<br />
<br />
p. 415, "remove has the precondition is_empty" --> "remove has the precondition not is_empty"<br />
<br />
p. 416, in the top figure, "T" and "S" could be replaced by "Top" and "Growth direction" respectively. The same is true of "To" and "S" in the bottom figure.<br />
<br />
p. 417, there is also a "T" in the figure<br />
<br />
p. 418, in the first figure, "Producer" and "Consumer" are mangled. The same is true for the figure at the bottom of the page (this time "In" and "Ac").<br />
<br />
p. 419, the second figure has mangled annotations.<br />
<br />
p. 420, in the code box: "then grow end" --> "then rep.grow end"<br />
<br />
p. 424, "a single array can use two stacks" --> "a single array can host two stacks"<br />
<br />
p. 424, "make setting up the queue as empty of any items" --> "make setting up an empty queue"<br />
<br />
p. 424, "Reverting lists" --> "Reversing lists"<br />
<br />
</strike><br />
<br />
<br>Corrections by Annie Meyer<br><strike><br />
Page 358<br />
<br />
<br />
<br />
so are validity rules<br />
<br />
(also called static semantics) are defined for syntactically correct texts.<br />
<br />
<br />
<br />
Retirer un des deux are<br />
<br />
<br />
<br />
(Original figure on page 46.)<br />
<br />
<br />
<br />
Mettre sur deux lignes<br />
<br />
<br />
<br />
Page 361<br />
<br />
<br />
<br />
Many of their basic operations are the same: insert or remove an item, find if a particular item if present, find the number of items¼.<br />
<br />
<br />
<br />
............... item is present, .......<br />
<br />
<br />
<br />
One of the operations will we need for each kind of container is to find out whether a a container is empty (has no items).<br />
<br />
<br />
<br />
2 fois a<br />
<br />
<br />
<br />
Page 365<br />
<br />
<br />
<br />
Computers have big memories; there are few more stupid program events than hitting a fixed limit and not being able to reallocate the structure.<br />
<br />
Even our arrays will be resizable.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
Page 366<br />
<br />
<br />
<br />
It is not enough to measure concrete performance on specific examples and report that “on average item took 10 nanoseconds for arrays and 40 nanoseconds for linked lists”:<br />
<br />
<br />
<br />
On or an ? ou on average item X took ?<br />
<br />
<br />
<br />
Cette phrase n'est pas claire pour moi.<br />
<br />
<br />
<br />
Page 373<br />
<br />
<br />
<br />
For cases such as<br />
<br />
simple_array the choice of 0 or 1 as starting index is partly a matter of taste If you are like me you think of your thumb as the first finger on your hand, not the zeroth, and of your middle finger as the third, not the second.<br />
<br />
<br />
<br />
Il manque un point après taste et avant If de If you are like me<br />
<br />
<br />
<br />
<br />
<br />
Page 376<br />
<br />
<br />
<br />
To change the value of<br />
<br />
an item, the default mechanism is put (v, i) with the precondition we’ve seen:<br />
<br />
valid_index (i).<br />
<br />
<br />
<br />
with the precondition that we have seen serait mieux je pense.<br />
<br />
<br />
<br />
<br />
<br />
If you misestimate, you may be the<br />
<br />
algorithm will fail.<br />
<br />
<br />
<br />
Retirer you may be<br />
<br />
<br />
<br />
<br />
<br />
Unlike put, procedure force has no precondition and so is always applicable. If i falls outside of the interval lower..upper, it will call resize to accommodate the requested entry.<br />
<br />
<br />
<br />
Pourquoi lower n'est-il pas en bleu dans lower..upper et pourquoi n'y a-t-il que .. et pas ...<br />
<br />
<br />
<br />
<br />
<br />
Page 378<br />
<br />
<br />
<br />
An array of type ARRAY [G] represents a total function from the integer interval lower..upper to G.<br />
<br />
<br />
<br />
.. ou ... ?<br />
<br />
<br />
<br />
Page 391<br />
<br />
<br />
<br />
Deuxième boite. Il y a un x en noir au lieu de bleu<br />
<br />
<br />
<br />
Below is a picture of how class LINKED_LIST implements the command put_right, which as specified earlier must add an element to the right of the cursor without moving the cursor. For a linked list, it suffices to create a new LINKABLE cell and update the linking:<br />
<br />
<br />
<br />
<br />
<br />
Which, as specified earlier, must<br />
<br />
<br />
<br />
Les virgules manquent<br />
<br />
<br />
<br />
Tu pourrais aussi en rajouter une avant, without moving the cursor<br />
<br />
<br />
<br />
Page 396<br />
<br />
<br />
<br />
You should test your understanding of the reversal algorithm by writing its variants for other implementations studied next: arrayed lists and two-way lists<br />
<br />
<br />
<br />
. le point final manque.<br />
<br />
<br />
<br />
<br />
<br />
The complexity is O (1) for operations that need only perform operations at the cursor position: put_right, remove_right.<br />
<br />
<br />
<br />
... operations that need only to perform ....<br />
<br />
<br />
<br />
Le to manqué<br />
<br />
<br />
<br />
Operations that may need to traverse the list are O (count). This is the case, as we already saw independently of the choice of implementation, for search and has.<br />
<br />
<br />
<br />
<br />
<br />
...independently of the choice of implementation ...<br />
<br />
<br />
<br />
Pourquoi of the choice?<br />
<br />
<br />
<br />
<br />
<br />
The procedure reverse as just seen is also O (count). This is also the complexity of general cursor movement, go_i_th, as well as finish (implemented as go_i_th (count).<br />
<br />
<br />
<br />
Deux fois also. Retire celui de la deuxième phrase <br />
<br />
<br />
<br />
<br />
<br />
Page 397<br />
<br />
<br />
<br />
which is O (n) (with a a previous attribute you can perform one back in O (1), but only one, invalidating the value of previous, so this not very useful).<br />
<br />
<br />
<br />
Deux fois a with a a previous<br />
<br />
<br />
<br />
<br />
<br />
Page 398<br />
<br />
<br />
<br />
The manager (Roger Osmond) asked a senior developer to check the code, uncovering that it was performing back operations again and again — on instances of LINKED_LIST. Replacing this by TWO_WAY_LIST yielded an instant speedup factor of 23 (that is, the code ran twenty-three times faster). The programmers lived happily ever after, and never a single time did they raise their voices again about the speed of the generated code.<br />
<br />
<br />
<br />
Pourquoi mentionner le nom du manager? Ce n'est pas comme si c'était Tony Hoare ou Knuth que tout le monde connait.<br />
<br />
<br />
<br />
Page 399<br />
<br />
<br />
<br />
ARRAY such as item and put. Internally, as shown in the figure, lower is 1, so as a result of the array invariant capacity = upper –- lower + 1 the upper bound lower is capacity.<br />
<br />
<br />
<br />
upper –- lower Il y a un problème avec le trait entre ces deux mots.<br />
<br />
<br />
<br />
<br />
<br />
Page 400<br />
<br />
<br />
<br />
Then an arrayed list provides the benefits of arrays both in space (no need for reference fields such as right and left in the earlier solutions) and also speed if some random access will be needed;<br />
<br />
<br />
<br />
both in space ..... and in speed plutot que also ou also in speed<br />
<br />
<br />
<br />
Page 404<br />
<br />
<br />
<br />
You may use it form example to declare a hash table of objects representing persons, indexed by their names, as<br />
<br />
<br />
<br />
For example le m est en trop.<br />
<br />
<br />
<br />
Page 405<br />
<br />
<br />
<br />
If<br />
<br />
you are too far below the real need, you will just pay for one more resizing (automatic, of course) at run time<br />
<br />
<br />
<br />
Ajoute un . après time<br />
<br />
<br />
<br />
Page 408<br />
<br />
<br />
<br />
then to retrieve an item you have no any influence on which one you will get; the basic query is<br />
<br />
<br />
<br />
Je ne comprends pas cette phrase<br />
<br />
<br />
<br />
Page 409<br />
<br />
<br />
<br />
The next two sections covers stacks and queues.<br />
<br />
<br />
<br />
Retirer le s a covers<br />
<br />
<br />
<br />
Page 410<br />
<br />
<br />
<br />
Figure manquante ?<br />
<br />
<br />
<br />
Page 411<br />
<br />
<br />
<br />
the –<br />
<br />
operators applies to the previous two operands,<br />
<br />
<br />
<br />
Retirer le s a operator<br />
<br />
<br />
<br />
Page 412<br />
<br />
<br />
<br />
Consider a programming language, Eiffel or any other, where a routine can call a routine, which can call a routine, which ¼.; at execution this yields a call chain:<br />
<br />
<br />
<br />
Pourquoi ajouter ...., Eiffel or any other, ?<br />
<br />
<br />
<br />
<br />
<br />
Page 415<br />
<br />
<br />
<br />
In class ARRAY the number of items is known as both count and capacity, with an invariant stating they are equal.<br />
<br />
<br />
<br />
Stating that they are equal, non?<br />
<br />
<br />
<br />
This should not be confused with the count of stacks, which gives the number of stack items—in the arrayed implementation, the number of array positions occupied by stack elements.<br />
<br />
<br />
<br />
Cette phrase me semble bizarre.<br />
<br />
<br />
<br />
<br />
<br />
Of course, the available memory is limited in the end, so you still have to ensure the total size of your data structures remains within control.<br />
<br />
<br />
<br />
.... to ensure that the total size of your ....<br />
<br />
<br />
<br />
Je trouve que c'est mieux de mettre that. Je trouve que ca rend la phrase plus facile à lire.<br />
<br />
<br />
<br />
<br />
<br />
Page 418<br />
<br />
<br />
<br />
<br />
<br />
a assembly line producing cars from parts,<br />
<br />
<br />
<br />
n missing an assembly line<br />
<br />
<br />
<br />
(with the obvious implementation of remove as out_index := out_index + 1 and put (v) as in_index := in_index + 1; rep [in_index] := v, where rep is an array), since we would quickly run out of space after a few put even if, as a result of one or more remove space remains unused at the beginning of the array:<br />
<br />
<br />
<br />
ajouter une , après remove sur la dernière ligne.<br />
<br />
<br />
<br />
<br />
<br />
When we increment in_index in the highlighted instruction, we do it modulo capacity: i \\ j is the integer remainder of i by j, as i // j is their integer quotient.<br />
<br />
<br />
<br />
Après capacity faut-il : ou ; ?<br />
<br />
<br />
<br />
Page 421<br />
<br />
<br />
<br />
As we have seen, a common need on such structures, it to apply a certain operation repeatedly to all these objects.<br />
<br />
<br />
<br />
.....structures, it ??? to apply ....<br />
<br />
<br />
<br />
Il manqué un mot.<br />
<br />
<br />
<br />
Page 422<br />
<br />
<br />
<br />
Apply an to all items until the first one that satisfies, or does not satisfy, a certain condition.<br />
<br />
<br />
<br />
Apply an ????? to all items<br />
<br />
<br />
<br />
Il manque un mot.<br />
<br />
<br />
<br />
Page 423<br />
<br />
<br />
<br />
Dispensers let you access, insert and remove elements at only one place. A Last-In First-Out policy yields stacks, First-In First-Out yields queues.<br />
<br />
<br />
<br />
Peux-tu verifier que c'est bien cela que tu veux dire. Ce n'est pas une critique mais comme c'est important et que je ne comprends pas assez pour juger je veux juste être sure.<br />
</strike><br />
<br />
===14 Recursion and trees===<br />
The following notes are from Raphaël Meyer <br><strike><br />
<br />
page 427, paragraph starting with "For our immediate purpose ...": "and Conditional, in turn involves ... " should read "and Conditional in turn involves ..."<br />
<br />
page 428, "Touch of History" textbox: "played the key role" is generally stated this way: "played a key role"<br />
<br />
page 440, second paragraph, first sentence: "Any node C other than the root fall into" should read "Any node C other than the root falls into"<br />
<br />
page 443, top of the page, first paragraph: "an assigner command for the the corresponding" should read "an assigner command for the corresponding"<br />
<br />
page 443, final paragraph: it would be clearer and easier to read if commas were added, like so: rather than "Traversals such as preorder which always go as deep into a tree before trying other nodes are also known as depth-first." ... instead it should read "Traversals such as preorder, which always go as deep into a tree before trying other nodes, are also known as depth-first.<br />
<br />
page 445, paragraph starting with "Our example binary ...": the final clause of this sentence doesn't make sense to me nor does it seem complete. "... all the values in the left subtree are less than the root value, 35, all those in the right subtree are greater, and again recursively in every subtree." Consider revising the final clause.<br />
<br />
page 447, middle of the page: it seems to me that the O in "O (h)" should be bolded instead of italicized, right?<br />
<br />
page 454, first paragraph underneath "Minimax" heading: "of backtracking algorithm," should read "of the backtracking algorithm,"<br />
<br />
page 454, paragraph starting with "A primitive evaluation": "to be worth three as much" should read "to be worth three times as much"<br />
<br />
page 455, paragraph starting with "Each player uses": "alternatively represent moves" should read "alternatively represent the moves"<br />
<br />
page 455, paragraph starting with "In the figure": "choose, among the moves available from the current position (three in the figure) the" should read "choose, among the moves available from the current position (three in the figure), the"<br />
<br />
page 455, M2: "The value of an internal node from which the moves are Maxi’s are the maximum" should read "The value of an internal node from which the moves are Maxi’s is the maximum"<br />
<br />
page 458, final paragraph: "the adversary, which uses ..." should read "the adversary, who uses"<br />
<br />
page 460, paragraph in the middle of the page: "Each player now stops exploring its alternatives whenever it finds" should read "Each player now stops exploring his alternatives whenever he finds"<br />
<br />
page 460, paragraph starting with "Minimax and alpha-beta": "defined by a large search spaces" should read "defined by large search spaces"<br />
<br />
page 462, paragraph starting with "We have seen": "Others such hanoi" should read "Others such as hanoi"<br />
<br />
page 464, bulletpoint starting with "the body of Hanoi": "first argument. and also" should read "first argument, and also"<br />
<br />
page 466, paragraph starting with "The value for ...": "Yet it has not obvious variant" should read "Yet it has no obvious variant"<br />
<br />
page 471, paragraph starting with "here and in subsequent steps": "and each Fi+1 for i > 0, is defined as h (Fi)" should read "and each Fi+1 for i > 0 is defined as h (Fi)"<br />
<br />
page 472, first paragraph starting with This immediately justifies": "never gets any more pair," should read "never gets any more pairs,"<br />
<br />
page 475, second paragraph: "notion of recursion variant." should read "notion of a recursion variant."<br />
<br />
page 480, third bulletpoint towards the bottom of the page: "activation record at top of the stack" should read "activation record at the top of the stack"<br />
<br />
page 480, final paragraph: "of recursion in a high-level language we have learned" needs a comma. it should read "of recursion in a high-level language, we have learned"<br />
<br />
page 481, paragraph starting with "(Instead of a full-fledged ...": "the context of a call: number of disks" should read "the context of a call: the number of disks"<br />
<br />
page 483, point 2: "exclusively on the local." should read "exclusively on the local variable."<br />
<br />
page 486, paragraph starting with "This simplification applies": "in the first case you must pop the other values (count, x, y, z), in the second you don’t." should read "in the first case you need to pop the other values (count, x, y, z), in the second you don’t."<br />
<br />
page 487, second bulletpoint. The first sentence is a run-on. Consider revising.<br />
<br />
page 489, point H3: there is an open parentheses "(" but it is never closed.<br />
<br />
page 490, fourth bulletpoint: "Any loop can be expressed into an equivalent recursive form" should read "Any loop can be expressed in an equivalent recursive form"<br />
<br />
page 493, problem 14-E.9: "This exercise requires a mathematical analysis," can be written "This exercise requires mathematical analysis,"<br />
<br />
page 494, problem 14-E.12: the problem ends with a closed parentheses ")" that was never opened.<br />
<br />
page 494, problem 14-E.13: "(Only you have solve the previous exercise.)" should read "(Only if you have solve the previous exercise.)" or "(Only when you have solve the previous exercise.)"<br />
<br />
page 494, problem 14-E.15: "This exercise requires a basic knowledge of linear algebra" should read "This exercise requires basic knowledge of linear algebra"<br />
<br />
page 494, problem 14-E.15: "and B a vector." should read "and B is a vector."<br />
</strike><br />
<br />
Comments by Annie<br />
<br />
<br />
<strike><br />
Page 425<br />
<br />
<br />
<br />
... still doing very well thank you, is an example of a structure defined recursively, in the following sense:<br />
<br />
<br />
<br />
Je retirerais le "thank you"<br />
<br />
<br />
<br />
L'exemple est vraiment bien trouve c'est très spirituel mais le thank you gache un peu les choses.<br />
<br />
<br />
<br />
<br />
<br />
Page 427<br />
<br />
<br />
<br />
as in a Laughing Cow scheme.<br />
<br />
<br />
<br />
Pourquoi a et pas the ?<br />
<br />
<br />
<br />
Page 429<br />
<br />
<br />
<br />
A man put a pair of rabbits in a place surrounded on all sides by a wall.<br />
<br />
How many pairs of rabbits can be produced from that pair in a year if every month each pair begets a new pair which from the second month on becomes productive?<br />
<br />
<br />
<br />
A man put or puts?<br />
<br />
<br />
<br />
Page 430<br />
<br />
<br />
<br />
There are indeed many such problems. One that concentrates many of the interesting properties of recursion with the least irrelevant detail arises from an attractive puzzle: the Tower of Hanoi.<br />
<br />
<br />
<br />
Trop de many tu peux remplacer le deuxième par plenty<br />
<br />
<br />
<br />
Page 431<br />
<br />
<br />
<br />
When all is over, the tower<br />
<br />
and the Brahmins will fall, and it will be the end of the worlds.<br />
<br />
<br />
<br />
... the end of the worlds ou the end of the world<br />
<br />
<br />
<br />
Page 434<br />
<br />
<br />
<br />
send an SMS to the cell<br />
<br />
phone of the appropriate priest or an email to her Blackberry, directing her to move a disk from source to target. For the rest of us you can write move as a procedure that displays a one-disk-move instruction in the console:<br />
<br />
<br />
<br />
Ton histoire de pretre, pretresse avec le her me parait bizarre.<br />
<br />
<br />
<br />
Page 436<br />
<br />
<br />
<br />
Recursion also shares<br />
<br />
properties with a loop solution, since it approximates the solution to the whole problem by solutions covering part of the data, but it is more general, since each step may combine more than one such partial solution.<br />
<br />
<br />
<br />
Deux fois since. Tu peux remplacer le deuxième pas as<br />
<br />
<br />
<br />
<br />
<br />
Page 443<br />
<br />
<br />
<br />
In practice it is convenient to specify replace as an assigner command for the the corresponding query, by changing the declarations of this query to<br />
<br />
item: G<br />
<br />
making it possible to write bt.item := x rather than bt.put (x).<br />
<br />
<br />
<br />
Retirer le deuxième the a la fin de la première ligne.<br />
<br />
<br />
<br />
Page 454<br />
<br />
<br />
<br />
• It is a two-player game. We assume two players called Minnie and Maximilian, the latter familiarly known as Maxi.<br />
<br />
<br />
<br />
• To evaluate the situation at any time during a game, you have an evaluation function with a numerical value, devised so that a lower value is better for Minnie and a higher one for Maxie.<br />
<br />
<br />
<br />
C'est Maxi pas Maxie<br />
<br />
<br />
<br />
<br />
<br />
Page 455<br />
<br />
<br />
<br />
Each player uses the minimax strategy to choose, from a game position, one of the legal moves. The tree model represents possible games; successive levels of the tree alternatively represent the moves of each player.<br />
<br />
<br />
<br />
<br />
<br />
This assumption of symmetry is essential to the minimax strategy, which performs a depth-first traversal of the tree of moves to assign a value to every node:<br />
<br />
<br />
<br />
Tu es sur de vouloir utiliser le mot "minimax" sans le mettre en bleu dans le texte.<br />
<br />
<br />
<br />
M2 The value of an internal node from which the moves are Maxi’s is the maximum of the values for the node’s children.<br />
<br />
<br />
<br />
????? Je ne comprends pas cette phrase. Il manque quelque chose mais je ne sais pas quoi.<br />
<br />
<br />
<br />
<br />
<br />
Page 457<br />
<br />
<br />
<br />
The auxiliary functions worst and better are there to switch between Minnie’s and Maxie’s viewpoints: the player is minimizing for any odd level l and maximizing for any even l.<br />
<br />
<br />
<br />
un e en trop a Maxi, devrait etre Maxi's<br />
<br />
<br />
<br />
<br />
<br />
Dans la marge<br />
<br />
<br />
<br />
<br />
<br />
To avoid the repeated<br />
<br />
use of the TUPLE<br />
<br />
type,you may instead<br />
<br />
define a small class<br />
<br />
GAME_RESULT with<br />
<br />
integer attrbutes value<br />
<br />
and choice.<br />
<br />
<br />
<br />
Ajouter un espace après la , et devant you<br />
<br />
<br />
<br />
Ajouter un i a attributes<br />
<br />
<br />
<br />
<br />
<br />
Page 489<br />
<br />
<br />
<br />
Il y a une marque noire dans la marge de gauche.<br />
<br />
<br />
<br />
Page 491<br />
<br />
<br />
<br />
Our litte language is called WASO (acronym for With Abstract Syntax<br />
<br />
Only) and has the following properties:<br />
<br />
<br />
<br />
Ajoute un l pour little<br />
<br />
<br />
<br />
<br />
<br />
From this class and the rules [] and [13] defining the function graph in the bottom-up interpretation of recursion, write a program that produces the i-th approximation of the graph, Hi, for any i. The algorithm may use loops, but it may not use recursion.<br />
<br />
<br />
<br />
Est-ce normal que après the rules [] soit vide.<br />
</strike><br />
<br />
===15 Devising and engineering an algorithm: Topological Sort===<br />
<strike><br />
<br />
In section 16.1, just after the first figure: <br />
Money, Pass, Map, Louvre, Orsay<br />
Money, Pass, **Louvre, Map**, Orsay<br />
Money, Map, Pass, Louvre, Orsay<br />
<br />
The second one is wrong. -- Luchin Doblies, 1.12.2008.<br />
<br />
<br />
Section 16.3, topic "Cycles in the constraints", line 4-5:<br />
"A topological sort program gets its input **in the form individual ordering constraints**, ..." <br />
<br />
Missing "of": "in the form of" -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Loop", second last line of the code-square:<br />
if “Any elements remain” then-- Report cycle:<br />
cycle_found := True<br />
“Insert these elements into **cyclist**”<br />
end<br />
<br />
I believe cyclist should be plural, "cyclists". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.4, topic "The Candidates", second page, line 4: <br />
"What concrete **date** structure should we use for candidates?"<br />
<br />
"date structure" instead of "data structure". -- L.D., 1.12.2008<br />
<br />
<br />
Section 16.7, second line:<br />
"..., such as the "<“ relation on numbers."<br />
<br />
The quotes do not match in font. -- L.D., 1.12.2008<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br><strike><br />
page 499, in the "Definition: Relation" text box: (unnecessary dash): "set A (short for binary relation)—is a set of" can simply be written "set A (short for binary relation) is a set of"<br />
<br />
page 505 first paragraph starting with "The relation ...": (extra s) "Our relations on points" should be "Our relation on points"<br />
<br />
pages 508 and 509, entire pages: (formatting): it seems like there is excessive space in between paragraphs on these pages. is that normal?<br />
<br />
page 512, bottom of the page: (missing word "the") "As new exit condition, we’ll simply have" should be "As the new exit condition, we’ll simply have"<br />
<br />
page 514, in the code, feature "Access", sorted "List": (missing word "be") "the elements that can ordered in that way" should read "the elements that can be ordered in that way"<br />
<br />
page 517, paragraph starting with "For our first attempt": (missing word "do") "(declared secret, as all .." should read "(declared secret, as do all ...)"<br />
<br />
page 519, bottom of the page: (missing comma) "For example the" should read "For example, the"<br />
<br />
page 520, formatting: why is there so much white (empty) space on this page?<br />
<br />
page 522, paragraph starting with "we must also": (the "do" is unnecessary) "if you do want to do that" should read "if you want to do that"<br />
<br />
page 523, paragraph starting with "There remains T1": (need to add "that" to sentence for clarity) "or report there isn’t any" should read "or report that there isn’t any"<br />
<br />
page 525, towards the top: (formatting) shouldn't there actually be a piggy bank here, rather than just text saying that there should be a piggy bank?<br />
<br />
page 533, "Touch of Heuristics" textbox: (need to remove the "s" on "structures") "into an internal data structures carefully" should read "into an internal data structure carefully"<br />
</strike><br />
<br />
===PART IV: OBJECT-ORIENTED TECHNIQUES ===<br />
<br />
===16 Inheritance===<br />
====Corrections by Raphaël Meyer====<br />
<strike>page 541, paragraph starting with "Order is what science ...": I think that "seek" here should be "seeks", since you are essentially talking about "science": therefore, "that science, and with it engineering, seek systematic" should be "that science, and with it engineering, seeks systematic"<br />
<br />
Page 545, middle of the page: (missing diagram) there should be a diagram here but there isn’t.<br />
<br />
<br />
<br />
Page 545, paragraph starting with “If the class”: (“do” should be “does”) “If the class do not exist” should read “If the class does not exist”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “From now on”: (missing comma) “from its parents if any.” Should read “from its parents, if any.”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “How then can”: (awkward wording) “(let the tooltip guide you to find it):” should read either “(let the tooltip help you find it):” or “(use the tooltip as a guide while finding it):”<br />
<br />
<br />
<br />
Page 546, paragraph starting with “the result looks like”: (“comments” needs to be “comment”) “note a new kind of comments, here” should read “note a new kind of comment, here”<br />
<br />
<br />
<br />
Page 547, paragraph starting with “Accumulating features”: (extra s needs to be removed) “inheritance mechanisms’s” should read “inheritance mechanisms’”<br />
<br />
<br />
<br />
Page 548, bottom of the page, small paragraph starting with “Remember that”: (typo) “(atrributes, local variables)” should read “(attributes, local variables)”<br />
<br />
<br />
<br />
Page 548, bottom of the page, paragraph starting with “’Polymorphism’ is the …”: (awkward wording) “with dynamic binding to be studied next” should read “with dynamic binding (to be studied next)” or alternatively “with dynamic binding, to be studied next.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As the definition notes”: (missing word in sentence) “not only from assignment but from argument passing” should read “not only from assignment but also from argument passing.”<br />
<br />
<br />
<br />
Page 549, last sentence of the paragraph starting with “where the actual”: (wording needs to be changed and typo) “that have not be devised yet” should read “that have not yet been devised”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “In spite of its”: (awkward wording) “meaning, from its Greek roots, ‘ability’” should read “in Greek, ‘ability’”<br />
<br />
<br />
<br />
Page 549, same paragraph: (awkward wording) “polymorphism involves neither any run-time change of objects nor any creation of objects with different types.” Should read “polymorphism involves neither run-time object changes nor the creation of objects with different types.”<br />
<br />
<br />
<br />
Page 549, paragraph starting with “As a matter of fact”: (bad wording) “As a matter of fact you” should read “In fact you”<br />
<br />
<br />
<br />
Page 550, paragraph starting with “We will not explore”: (bad wording) “ambiguity over” should read “ambiguity regarding”<br />
<br />
page 550, paragraph starting with "But then plymorphism": (bad wording) "possibility of my_vehicle_for_today itself being polymorphic" should read "possibility that my_vehicle_for_today is polymorphic"<br />
<br />
page 551, paragraph starting with "is of type Vehicle": (awkward sentence structure that leaves the sentence unclear) "vehicle type, and you don’t know. Nor do you need to know, since" should be divided differently. I would write "vehicle type. You don’t know which particular type it is, but don't need to know since"<br />
<br />
page 551, paragraph starting with "Just calm down": (add the word "to" for clarity and sentence structure) "if it is, subject it to" should read "if it is, to subject it to"<br />
<br />
page 553, paragraph starting with "As you have probably": (missing word "of") "to the type flexibility" should read "to the type of flexibility"<br />
<br />
page 554, paragraph starting with "A consequence of the": (rewording: it is better to suggest that you have used descendant, rather than the chapter, therefore this needs to be rewritten) "(which has enabled this chapter to use just “descendant” so far)" should read "(which has enabled me to only use “descendant” so far in this chapter)"<br />
<br />
page 554, paragraph starting with "All this just to": (typo, I don't know what "sas" means, I can't recommend another word): "it is the one we sas, but"<br />
<br />
page 555, bottom half of the page underneath "Looking up the list of features": missing diagram.<br />
<br />
page 556, paragraph starting with "We say that": (missing s on "features") "two kinds of feature" should read "two kinds of features"<br />
<br />
page 557, towards the bottom of the page: (add the word "that" for clarity): "The reason move_next is" should read "The reason that move_next is"<br />
<br />
page 558, paragraph starting with "This prohibits us": (add comma for clarity) "or VEHICLE, for example in create my_vehicle_for_today with the" should read "or VEHICLE, for example in create my_vehicle_for_today, with the"<br />
<br />
page 558, paragraph starting with "Because creation", end of second sentence: (typo: the comma should be a semicolon, and "This" should not be capitalized) "view), This" should read "view); this"<br />
<br />
page 558, paragraph starting with "Eiffel allows you": ("feature" is missing an s) "any deferred feature." should read "any deferred features."<br />
<br />
page 558, bulletpoint starting with "the EiffelBase library": (missing word) "LINEAR (structures that can traversed one-way)" should read "LINEAR (structures that can be traversed one-way)"<br />
<br />
page 558, bulletpoint starting with "The Eiffelvision graphics library": ("feature" should be plural) "concrete kinds of figure" should read "concrete kinds of figures"<br />
<br />
page 558, very bottom of the page: (offers should be offer) "notably Java and C#, offers a language" should read "notably Java and C#, offer a language"<br />
<br />
pages 558-559, sentence starting with "It is like a class": (tense is wrong) "It is like a class where all features would be deferred (and would not have any contracts)" should read "It is like a class where all features are deferred (and do not have any contracts)"<br />
<br />
page 565, paragraph starting with "All this discussion": (clarity/style issue) "It does not address well the" should read "It does not effectively address the"<br />
<br />
page 566, paragraph starting "Such references": (missing the word "the") "the concept of stored-program computer:" should read "the concept of the stored-program computer:"<br />
<br />
page 567, paragraph starting with "You can trace in the figure": The second sentence in this paragraph ("Following the ...") is not a complete sentence. Please revise.<br />
<br />
page 567, bottom paragraph starting with "Explanation:" : (period should be a comma) "C routine. which we apply" should read "C routine, which we apply"<br />
<br />
page 568, paragraph starting with "The time overhead": ("bound" should be "bind"): "to bound it by a" should read "to bind it by a"<br />
<br />
page 569, paragraph starting "The above code": ("an" should be "a") "than an starting address" should read "than a starting address"<br />
<br />
page 570, paragraph starting with "In these cases": (wrong word order) "programmer mistakenly to assume" should read "programmer to mistakenly assume"<br />
<br />
page 570, paragraph starting with "The rule to remember": (formatting) "is that dynamic binding" should read "is that dynamic binding" i.e. the "d" needs to be bolded as well.<br />
<br />
page 570, paragraph starting with "These observations complete": (typo: "into" should be "to") "if you want to get into the" should read "if you want to get to the"<br />
<br />
page 571, paragraph starting with "You will also": (sentence missing a "that" or a "the" to make it complete) "This will also reveal that heir may" should read "This will also reveal that that/the heir may"<br />
<br />
page 573, towards the bottom of the page: (incomplete sentence; revision needed because the sentence does not end coherently) "In other words, T, as a subcontractor, is breaching the contract to which the original contractor S, the only known to clients such as C."<br />
<br />
page 575, final sentence of paragraph starting with "When writing a deferred": (unnecessary comma that distorts meaning of the sentence) "which descendants may refine, but never contradict." should read "which descendants may refine but never contradict."<br />
<br />
page 576, paragraph starting with "The Contract": (sentence missing "as") "specify, broadly or narrowly as you wish," should read "specify, as broadly or narrowly as you wish,"<br />
<br />
page 578, paragraph starting with "Inheritance is specialization": (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "vehicles specialize the notion of moving object," should read "vehicles specialize the notion of a moving object,"<br />
<br />
page 578, same paragraph, same sentence: (I think you should add an "a" to this sentence since you are writing in language here without any mention of code): "taxis specialize the notion of vehicle." should read "taxis specialize the notion of a vehicle."<br />
<br />
page 581, paragraph starting with "but not,": (add a "with" for clarity and correctness) "but not, of course, a1.first_f, since" should read "but not, of course, with a1.first_f, since"<br />
<br />
page 581, paragraph starting with "but not,": (reorder words for clarity) "the above two calls would" should read "the two calls above would"<br />
<br />
page 582, paragraph starting with "Apart from": (incorrect wording) "renaming is useful to get" should read "renaming helps you get"<br />
<br />
page 585, second bulletpoint: (replace "itself" with "it too") "A list is a special kind of “chain”and itself has more" should read "A list is a special kind of “chain”and it too has more"<br />
<br />
page 586, paragraph starting with "Sorting algorithms": (add "that" for clarity) "assuming what we are" should read "assuming that what we are"<br />
<br />
page 588, bulletpoint starting with "If you define": (shouldn't "operation" be plural here?) "it provides all the required operation" should read "it provides all the required operations"<br />
<br />
page 588, paragraph starting with "to specify that": ("parameters" should be singular) "an actual generic parameters," should read "an actual generic parameter,"<br />
<br />
page 589, paragraph starting with "constrained genericity": (wrong word order) "Other language approaches are possible to the problem discussed here" should read "Other language approaches to the problem discussed here are possible"<br />
<br />
page 590, first bulletpoint: (sentence missing the word "at") "you cannot introduce it a higher level" shuold read "you cannot introduce it at a higher level"<br />
<br />
page 593, first bulletpoint: (add comma for clarity and flow) "if the object test appears as the condition of an if the scope" should read "if the object test appears as the condition of an if, the scope"<br />
<br />
page 596, paragraph starting with "In such cases": (add comma for clarity) "If you are discriminating between a whole range of types you are" should read "If you are discriminating between a whole range of types, you are"<br />
<br />
page 596, paragraph starting with "Assume for example": (sentence missing the word "the") "with facility for flashing" should read "with the facility for flashing"<br />
<br />
page 597, two bulletpoint at the top of the page: revision needed - they should both speak of "can" or both speak of "could", but should not be left as they are right now (i.e. the first bulletpoint speaks of "can" and the second of "could")<br />
<br />
page 597, paragraph starting with "As another example": (typo) "a program formater," should read "a program formatter,"<br />
<br />
page 598, paragraph starting with "The features are not": (missing words) "better collect them in a" should read "it is better to collect them in a"<br />
<br />
page 602, first small paragraph at the top of the page: (add word "but" to make the sentence complete) "comments, not relevant" shuold read "comments, but not relevant"<br />
<br />
page 603, last bulletpoint: (consider revising this sentence; it does not seem to make grammatical sense) "the type of any object to which a variable may be come attached at run time"<br />
<br />
page 603, same bulletpoint: (add a comma for clarity) "This ensures that in any assignment or argument passing the type" should read "This ensures that in any assignment or argument passing, the type"<br />
<br />
page 606, bulletpoint starting with "A conditional": (unclear sentence, consider revising) "A conditional if the form" should read "A conditional is of the form"<br />
<br />
page 606, step 1 at the bottom of the page: (Capitalize first word) "1. using" should read "1. Using"<br />
<br />
page 606, step 1 at the bottom of the page: (replace the comma with a "but") "not using multiplication, using Euclid’s algorithm" should read "not using multiplication but using Euclid’s algorithm<br />
<br />
page 607, paragraph starting with "Check the output": there is an open-parenthesis that is not closed anywhere. Please close it.<br />
</strike><br />
<br />
<br />
<br />
===17 Operations as objects: agents and lambda calculus===<br />
(Comments by Annie Meyer)<br />
<strike>Page 653<br />
<br />
It has been particularly successful for Graphical User Interfaces (GUI), which we’ll use as our primary example.<br />
<br />
Tu avais dit que tu voulais retirer toutes les contractions. <br />
<br />
<br />
Page 654<br />
<br />
Welcome to the modern world. If you write a program with a GUI, you let users choose, at each step, what they want to do, out of many possibilities — including some unrelated your program, since a user may go to another window, for example to answer an email.<br />
<br />
Unrelated to your program ? le to manque<br />
<br />
Page 655<br />
<br />
Figure à ajouter<br />
<br />
but this suffers from all the problems we have seen with multiple-choice algorithm structures (as part of the justification for dynamic binding): it’s big and complex, and highly sensitive to any change in the setup.We want a simpler and more stable architecture, which we won’t have to update each time there is a new control.<br />
<br />
Ajouter un espace apres setup. et We<br />
<br />
Page 656<br />
<br />
Such a system might have<br />
sensors monitoring temperature, pressure, humidity; any new recording, or just those exceeding some preset values, may trigger an event which some elements of the software are prepared to handle.<br />
<br />
Deux fois some <br />
<br />
Tu peux remplacer le deuxième par other<br />
<br />
Page 657<br />
<br />
Usually there’s more:<br />
when and where did Columbus sail? What were the cursor coordinates? But in some cases all that matters is that the event occurred, as with a timeout event indicating that a previously set deadline has passed.<br />
<br />
<br />
it’s an operation that makes information (the arguments a, b, c) available to a software element (the feature f ).<br />
<br />
<br />
<br />
Page 658<br />
<br />
The term “argument” highlights the similarity with routines. Pushing this similarity further, we’ll assume that the arguments are grouped in an ordered list, like the arguments in a call x.f (a, b, c).<br />
<br />
<br />
<br />
The notification model is more flexible and we’ll assume it from now on.<br />
<br />
<br />
<br />
before it’s triggered the<br />
event does not exist, and afterwards it’s too late to subscribe to it!<br />
<br />
<br />
<br />
after you’ve spotted the headline on<br />
<br />
<br />
Page 659<br />
<br />
Although we might define an event type for each key on the keyboard, it’s more attractive to use a single “key press” event type of signature [CHARACTER], where the argument is the key code.<br />
<br />
<br />
<br />
<br />
As always when you are hesitating about introducing a class, the criterion is “is this a meaningful data abstraction, with a set of well-understood operations applicable to all instances?”. Here:<br />
<br />
Il y a un point en trop avant Here:<br />
<br />
If we decided to build a class to represent a particular event type, its instances would be events of that type; but they have no useful features.<br />
True, each event has its own data (the arguments), but there’s no meaningful operation on the event other than accessing such data.<br />
<br />
<br />
<br />
Page 660<br />
<br />
E3 At any time, a publisher can trigger an event. This will cause execution of actions registered by subscribers for the event’s type. These actions will can use the event’s arguments<br />
<br />
c'est will ou can? La phrase est terminée ou pas?<br />
<br />
<br />
Page 661<br />
<br />
E2 A subscriber is any element that needs to handle such GUI events; it registers the routines it wants to execute in response For example you may register, for the mouse click event type on a button that says “OK” in a file saving dialog, a routine that saves the file.<br />
<br />
Il manqué un point avant For example<br />
<br />
the other way around it’s more a matter<br />
of methodology, and we will see how various architectural solutions fare against this criterion.<br />
<br />
<br />
<br />
Page 662<br />
<br />
It is not possible (points 1, 5) to subscribe to an event; as we have seen, the event does not exist until it has been raised, and when it has been raised that’s too late. (Nice idea, though: wouldn’t you like to subscribe retroactively to the event “IBM’s shares rise by at least 5%”?) A subscriber subscribes to an event type — to declare that it wishes to be notified of any event of that type raised during execution.<br />
<br />
<br />
<br />
“A subscriber can handle multiple events from multiple publishers” (point<br />
2): this might seem to suggest some sophisticated concurrent computation scheme, where a subscriber catches events from various places at once, but<br />
<br />
in reality is just a mundane observation: a given subscriber may register for<br />
<br />
several event types, and several publishers may trigger events of a given type.<br />
<br />
In reality it is just ......, le it manque non?<br />
<br />
<br />
Point 5 states that when “an event” has multiple subscribers, each will handle it synchronously (meaning right away, blocking further processing) when “an event” is raised. Read literally, this would suggest that two<br />
<br />
“events” are involved! That’s not the idea: the sentence is simply trying to<br />
<br />
say that when multiple subscribers have registered for a certain event type, they handle the corresponding events synchronously. It uses a single word, in the same breath, with two different meanings.<br />
<br />
Je continue à te signaler les contractions si tu veux les retirer.<br />
<br />
Page 663<br />
<br />
Definition: Context<br />
In event-driven design, a context is a boolean expression specified by a subscriber at registration time, but evaluated at triggering time, such that the<br />
<br />
registered action will only be executed if it the evaluation yields True.<br />
<br />
Un mot en trop "it"?<br />
<br />
Page 665<br />
<br />
you’ll have to add some program text, often called “glue code”; the less of it the better.<br />
The last requirement is critical to the quality of a system’s architecture, especially when the goal is to build user interfaces: you shouldn’t have to design the core of an application differently because of a particular interface.<br />
<br />
<br />
Page 671<br />
<br />
it’s easy to ease the<br />
restrictions later if you find that new classes need the features.<br />
<br />
Page 672<br />
<br />
We’ll call such descendants<br />
“subscriber classes” and their instances “subscribers”.<br />
<br />
Page 673<br />
<br />
<br />
With handle as written above you woll only find them at run time, through the tests<br />
Will?<br />
on the size and element types of args; that’s too late to do anything serious about the issue, as reflected by the rather lame “Do nothing, or report error” above: doing nothing means ignoring an event (is that what we want, even if the event is somehow deficient since it doesn’t provide the right arguments?); and if we report an error, report it to whom? The message should be for the developers — us! — but it’s the poor end user who will get it.<br />
<br />
Pourquoi "poor" end user? Je trouve ce mot inutile. <br />
<br />
Page 674<br />
<br />
The only missing part of the Observer pattern’s implementation is the body of the publish procedure in PUBLISHER, although I hope you have already<br />
<br />
composed it in your mind. It’s where the pattern gets really elegant:<br />
<br />
<br />
Subscribers directly subscribe to publishers. This causes undesirable coupling between the two sides: subscribers shouldn’t have to know which<br />
<br />
Page 676<br />
<br />
it’s also much simpler. The key<br />
boost comes from the agent and tuple mechanisms.<br />
<br />
<br />
We won’t have PUBLISHER or<br />
SUBSCRIBER classes any more, but just one class — yes, a single class solves the entire problem — called EVENT_TYPE.<br />
<br />
Page 677<br />
<br />
<br />
Of course we’ll explore the implementation too, as I am sure you’ll want to see it. (It will actually be more fun if you try to devise it yourself first.)<br />
<br />
One of the advantages is that<br />
you don’t need to worry about when to create the object; whichever part of the execution first uses left_click will (unknowingly) do it.<br />
We’ll see in just a moment where this declaration of the event type should appear; until then let’s assume that subscriber and publisher classes both have access to it.<br />
<br />
Page 678<br />
<br />
Whenever the context is relevant — subscribers don’t just subscribe to an event type as in [41], but to events occurring in a context, as in [42]—the proper architectural decision is to declare the relevant event types in the corresponding context classes.<br />
<br />
For events that are relevant independently of any context information, declare the event type in a generally accessible class.)<br />
<br />
Parenthèse ou pas? Ou une en trop ou une manquante.<br />
<br />
Page 680<br />
<br />
In an environment with manual memory<br />
reclamation (C, C++), it’s even worse. In either case we have a source of “memory leak”: as execution fails to return unneeded space, memory occupation continues to grow.<br />
<br />
Page 682<br />
<br />
MVC revisited<br />
One of the consequences of the last design is to simplify the overall architecture suggested by the Model-View-Controller paradigm. The Controller part is “glue code” and it’s good to keep it to the strict minimum.<br />
<br />
Page 683<br />
<br />
This solution achieves complete uncoupling between model and view; in a typical application the controller will still be still a small component, achieving<br />
<br />
still 2 fois <br />
<br />
<br />
(So from the order of events it’s really the “Subscribe-Publish” paradigm.)<br />
<br />
<br />
Page 685<br />
<br />
you<br />
shouldn’t use client elsewhere if the conditions are the same. Consistency is also particularly important for an API, to ensure that once programmers have learned to use a certain group of classes they can expect to find similar conventions in others.<br />
Such tasks can be carried out to improve existing designs, an activity known as refactoring. It’s indeed a good idea always to look at existing software critically, but prevention beats cure. <br />
<br />
<br />
Touch of Methodology:<br />
Assessing software architectures<br />
When examining possible design solutions for a given problem, discuss alternatives critically. The key criteria, are: reliability, extendibility, reusability, and simplicity.<br />
<br />
Pourquoi une , avant are?<br />
<br />
<br />
18.8 FURTHER READING<br />
<br />
Il n'y a pas de consistence dans les espaces entre les articles ou livres cites et les commentaires que tu ajoutes. <br />
<br />
Le plus simple serait de rajouter des espaces plutôt de d'en retirer car sinon cela va modifier la pagination puisque la page 688 est blanche.<br />
</strike><br />
<br />
===18 Event-driven design===<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<strike><br />
page 656, paragraph starting with "where read_line": (need to delete the word "it") "read_line if it there are" should read "read_line if there are"<br />
<br />
page 656, final sentence of paragraph starting with "Consider the screen": (remove "or any other, such as" because it is not necessary) "to click the button, or any other, such as selecting a menu" should read "to click the button, or to select a menu"<br />
<br />
page 657, top: screenshot missing.<br />
<br />
page 659, bulletpoint starting with "Certain": (I think a comma, rather than a semicolon, is sufficient here) "events; or" should read "events, or"<br />
<br />
page 659, text next to "Definitions" box: (add "an" for clarity) "Remember that an event is defined as operation to be executed." should read "Remember that an event is defined as an operation to be executed."<br />
<br />
page 661, bulletpoint starting with "for an event type": (add a comma for clarity and flow) "without arguments the signature" should read "without arguments, the signature"<br />
<br />
page 661, paragraph starting with "In our model, then": (add a comma for clarity) "“Delete all?”) is an object" should read "“Delete all?”), is an object"<br />
<br />
page 662, top paragraph: (add an "s" on "wood") "get us out of the wood" should read "get us out of the woods"<br />
<br />
page 663, point E2: (add a hyphen to clarify that you are referring to the dialogue, not the file) "file saving dialog" should read "file-saving dialog"<br />
<br />
page 665, paragraph starting with "Even though that": (replace "that" with "it") "Even though that was not event-driven programming" should read "Even though it was not event-driven programming"<br />
<br />
page 665, same sentence: (add comma for clarity) "such as do_if which" should read "such as do_if, which"<br />
<br />
page 666, bulletpoint starting with "Any event triggered": (replace "and" with "or" since this is a "for example" list) "changes, and a security system" should read "changes, or a security system"<br />
<br />
page 666, bulletpoint starting with "The subscribers": (replace "they" with the actual noun to avoid using "them" in reference to two different nouns in the same sentence) "where they come from" should read "where these event types come from"<br />
<br />
page 667, paragraph starting with "While the application": (add an "and" to the list of functions) "computes salaries, updates" should read "computes salaries, and updates"<br />
<br />
page 670, paragraph starting with "A side comment": (I would finish this sentence with a colon, since it is not a complete sentence and is only intended as a lead-in to the next sentence) "serving as general advice. Too" should read "serving as general advice: Too"<br />
<br />
page 670, end of the same paragraph: (I would replace "it" with something a little more specific, since you could just be referring to "each symbol", which is not the case) "and document it." should read "and document your work"<br />
<br />
page 670, paragraph starting with "A design pattern": (the final sentence ends awkwardly; consider revising) "them independently: 'best practices'" should read "them independently as 'best practices'"<br />
<br />
page 671, first paragraph: (this paragraph has several colons and semicolons, so I suggest removing the semicolon in the first sentence to make it a little easier to read as a whole. In addition I think breaking it up another way may be more logical. My suggestion is listed here) "good; we will analyze its limitations. But you should" should read "good. We will analyze its limitations, but you should"<br />
<br />
page 673, final sentence of first paragraph: (specify where the exercise is) "it is the subject of an exercise." should read "it is the subject of an exercise at the the end of this chapter."<br />
<br />
page 673, paragraph starting with "Apart from subscribers": (shouldn't there be a "to" here?) "which indeed need to subscribe and unsubscribe the corresponding objects" should read "which indeed need to subscribe and unsubscribe to the corresponding objects"<br />
<br />
page 674, paragraph starting with "To subscribe to": (similar issue as above. I may be misunderstanding this but I am pointing it out for your review to be certain) "to subscribe the current object" should read "to subscribe to the current object"<br />
<br />
page 674, paragraph starting with "each observer": (add "any" for clarity) "accessing arguments if any" should read "accessing any arguments"<br />
<br />
page 675, paragraph starting with "With handle": (I suggest spelling out what "them" is for clarity since it costs nothing) "you will only find them at run time" should read "you will only find these errors at run time"<br />
<br />
page 675, paragraph starting with "It was noted": (change wording to clarify which programs the designer is in charge of) "outside, not those" should read "outside rather than those"<br />
<br />
page 677, bulletpoint starting with "The last problem": (Is this the last problem you are going to talk about, or are you referring to the "previous" problem?) "The last problem" should read "The previous problem" OR "The problem mentioned in the previous bulletpoint"<br />
<br />
page 677, paragraph starting with "All these problems": (I think this sentence would be more correct if the first half were in the present tense) "All these problems have not prevented designers" should read "All these problems do not prevent designers"<br />
<br />
Page 679, paragraph starting with "This defines": (typo) "that’s where once come in handy" should read "that’s where once comes in handy"<br />
<br />
Page 680, bulletpoint starting with "Note, however": (add "are" for clarity; i know it could be left out but the sentence will flow better if you include it) "and the corresponding features such as left_click just ordinary" should read "and the corresponding features such as left_click are just ordinary"<br />
<br />
Page 680, final sentence of the paragraph starting with "Whenever the context": (should "once" in this sentence be highlighted in blue? I was not sure about this so I wanted to flag it just in case) "The once mechanism ensures"<br />
<br />
Page 681, second sentence at the top: (Unclear what this sentence means; please revise) "It remains to see the implementation of EVENT_TYPE."<br />
<br />
Page 681, paragraph starting with "(where, as before)": (add comma for flow and clarity) "for a better one look up" should read "for a better one, look up"<br />
<br />
page 681, same paragraph: (remove comma) "but simply agents, with a precise type" should read "but simply agents with a precise type"<br />
<br />
page 682, second paragraph: (typo) "The solution just describes" should read "The solution just described"<br />
<br />
page 682, paragraph starting with "If you apply"; (I suggest rewording this sentence for clarity) "you should be aware of a performance issue, leading to potentially disastrous 'memory leaks' but easy to avoid" should read "you should be aware of a performance issue that can/could lead to potentially disastrous 'memory leaks' but is easy to avoid"<br />
<br />
page 683, paragraph starting with "Subscribing through": (add comma for correctness) "(agent p) ensures" should read "(agent p), ensures"<br />
<br />
page 686, second bulletpoint: ("this" is more appropriate) "At that stage" should read "At this stage"<br />
<br />
page 687, paragraph starting with "Such tasks": (move the word "always") "It is indeed a good idea always to look" should read "It is indeed a good idea to always look"<br />
<br />
page 687, "Touch of Methodology" box: (remove comma for correctness) "The key criteria, are" should read "The key criteria are"<br />
<br />
page 688, bulletpoint starting with "the observer": (missing the word "an"?) "the action to be executed in response to event" should read "the action to be executed in response to an event"<br />
<br />
page 688, next bulletpoint: ("allows" should be "allow") "Agents, constrained genericity and tuples allows" should read "Agents, constrained genericity and tuples allow"<br />
<br />
page 688, next bulletpoint: (remove comma) "architectures, and" should read "architectures and"<br />
</strike><br />
<br />
=== PART V: TOWARDS SOFTWARE ENGINEERING===<br />
===19 Introduction to software engineering===<br />
Corrections by Raphaël Meyer (10 March 2009)<br />
<br />
<strike><br />
page 698, bulletpoint starting with "Quality constraints": (all the other bulletpoints in this list start with a colon; I would suggest starting this bulletpoint with the same style) "Quality constraints as discussed next;" should read "Quality constraints (discussed next):"<br />
<br />
page 698, bulletpoint starting with "Quality constraints": (add an "and" or "or" to make the sentence flow better) "correct results, will perform" should read "correct results, and will perform"<br />
<br />
page 698, bulletpoing starting with "Duration constraints": (remove unnecessary comma) "kept operational, and regularly updated" should read "kept operational and regularly updated"<br />
<br />
page 699, paragraph starting with "The term 'maintenance': (add "or") "a coffee machine, a house." should read "a coffee machine, or a house."<br />
<br />
page 700, first paragraph: (since you mention "programming" earlier in the sentence, I think this word needs to be modified. I realize that the corresponding bulletpoint/section is called "Implement", but consider revising nonetheless) "(“Implement”, the second part)." should read "(“Implementing”, the second part)."<br />
<br />
page 700, "Manage" paragraph: ("a" is unnecessary) "ensuring a smooth interaction" should read "ensuring smooth interaction"<br />
<br />
page 700, very bottom of the page: (the second to last sentence is awkward, since it has three phrases separated by 2 semicolons. Consider revising using only one semicolon and a period, or one semicolon and a comma)<br />
<br />
Page 701, sentence starting with "Issues of software": (consider revising wording for clarity) "Issues of software engineering involve two complementary aspects" should read "There are two complimentary aspects of software engineering issues"<br />
<br />
page 701, first bulletpoint under previous sentence: (typo) "software projects adds" should read "software projects add"<br />
<br />
page 701, same bulletpoint: (add "and") "documentation, installation" should read "documentation, and installation"<br />
<br />
page 701, final bulletpoint: (replace "inasmuch" with "as long as") "are only useful inasmuch as they allow" should read "are only useful as long as as they allow"<br />
<br />
page 702, first paragraph: (need to add "that" to make the two clauses of the sentence parallel) "imagine you are" should read "imagine that you are"<br />
<br />
page 702, same sentence: (now, make the second part of the sentence in the same tense) "and that you track" should read "and that you are tracking"<br />
<br />
page 702, next sentence: (add "or"): "200, 0?" should read "200, or 0?"<br />
<br />
page 703, "Robustness" bulletpoint: (make all three portions of the sentence the same verb tense) "a sensor malfunctions" should read "a sensor malfunctioned"<br />
<br />
page 704, "Ease of Use" bulletpoint: (change "for" to "in") "is a novice for some tools and an expert in others" should read "is a novice in some tools and an expert in others"<br />
<br />
page 704, same bulletpoint: (reword for clarity) and "each of us, for each of the system in which we are an expert, was a novice once" should read "each of us was once a novice in the systems at which we are now an expert."<br />
<br />
page 704, next sentence: (typo) "Ease of use" should read "Ease of us"<br />
<br />
page 704, last two bulletpoints: (each of the previous bulletpoints started with a word and then a colon; these two do not. Consider revising)<br />
<br />
page 704, paragraph starting with "Some product qualities": (add "the" for paralellism) "the software controlling brakes or the air bag" should read "the software controlling the brakes or the air bag"<br />
<br />
page 704, paragraph starting with "Descriptions": (incomplete sentence sentence after a semicolon, revise) "the user'; the term that has acquired almost mythical connotations" should read "the user', a term that has acquired almost mythical connotations"<br />
<br />
page 704, final bulletpoint: (add hyphen for correctness) "information hiding," should read "information-hiding,"<br />
<br />
page 705: (the spacing seems to be greater in between lines on this page than on other pages. Please confirm that this is normal.)<br />
<br />
page 705, final bulletpoint: (add comma for flow and clarity) "software components you can" should read "software components, you can"<br />
<br />
page 706, first paragraph: (add "that" for clarity and correctness) "you to ensure your software" should read "you to ensure that your software"<br />
<br />
page 706, paragraph starting with "From the global": (reword for clarity) "the relevant product factors are the external ones just discussed as they are relevant to customers" should read "the external product factors just discussed are the most relevant to customers."<br />
<br />
page 706, "Production speed" bulletpoint: (reword for correctness) "in a short time." should read "in a short amount of time."<br />
<br />
page 707, second bulletpoint: (reorder wording) "the inclusion in the process of mechanisms and procedures" should read "the inclusion of mechanisms and procedures in the process"<br />
<br />
page 707, next sentence: (replace comma with semicolon) "decreed and attempted, it" should read "decreed and attempted; it"<br />
<br />
page 707, "Predictability" bulletpoint: (typo) "time,." should read "time."<br />
<br />
page 707, "Reproducibility" bulletpoint: (add "an" to keep the clause parallel) "not assembly-line" should read "not an assembly-line"<br />
<br />
page 707, next sentence: (replace "no one" with "none" or "no software",because "no one" suggests a person or human being, which in this case is not right) "no one will ever achieve"<br />
<br />
page 707, final bulletpoint: (reword for clarity and correctness) "the inclusion in the process specification of mechanisms to qualify and improve the process itself" should read "the inclusion of mechanisms to qualify and improve the process within the process itself."<br />
<br />
page 707, final sentence: (typo) "adapting it a result" should read "adapting it to a result"<br />
<br />
page 708, first sentence: (add parentheses for clarity and readability) "as CMMI studied next" should read "as CMMI (studied next)"<br />
<br />
page 708, paragraph starting with "one of the characteristics": (missing a space after "essential") "where it’s not essential—" should read "where it’s not essential —"<br />
<br />
page 709, second bulletpoint: (add "and" to complete the sentence) "usage, security" should read "usage, and security"<br />
<br />
page 709, same bulletpoint: “impact on the system’s environment and consequences” should read “the impact on a system’s environment and the consequences”<br />
<br />
page 709, paragraph starting with “Documentation”: (add comma for flow and clarity) “for users it may” should read “for users, it may”<br />
<br />
page 710, first bulletpoing: (phrase can be shortened) “at the level of implementation,” should read “at the implementation-level,”<br />
<br />
page 710, paragraph starting with “It has become”: (awkwardly worded sentence; consider revising) “It has become a common practice, reflective perhaps of the lack of rigor of process model definitions, to represent them in graphical form.” should read “It has become common practice to represent them in graphical form, which perhaps reflects the lack of rigor of process model definitions.”<br />
<br />
Page 712, first line of text underneath the graphic: (the top of this line of text is partly covered up by the graphic. This needs to be fixed)<br />
<br />
Page 712, next sentence: (add comma for clarity and flow) “becomes untenable the” should read “becomes untenable, the”<br />
<br />
Page 712, same sentence: (remove comma and replace “which” with “that”) “shipping a prototype, which” should read “shipping a prototype that”<br />
<br />
Page 713, paragraph starting with “the tasks appearing”: (add “or” for correctness) “insufficient contracts, imperfect” should read “insufficient contracts, or imperfect”<br />
<br />
Page 713, next sentence: (replace “as well as” with “while also”) “as well as providing” should read “while also providing”<br />
<br />
Page 714, second bulletpoint: (remove unnecessary comma which only makes the sentence confusing) “Collaboration, between developers” should read “Collaboration between developers”<br />
<br />
Page 714, “Small increments” bulletpoint: (“rather than waiting … and running) “and run the risks” should read “and running the risk”<br />
<br />
Page 714, next bulletpoint: (awkward and confusing wording; consider rewording) “to force making the thinking process explicit” should read “to make the thinking process explicit” or “to ensure and explicit thinking process”<br />
<br />
Page 714, paragraph starting with “The original”: (typo) “at time” should read “at the time”<br />
<br />
Page 715, first bulletpoint: (typo) “to be build” should read “to be built”<br />
<br />
Page 715, paragraph starting with “this is a short”: (remove comma and reword for clarity and flow) “advice, and when writing requirements to follow the recommended structure, widely used in practice” should read “advice and to follow the recommended structure, widely used in practice, when writing requirements.”<br />
<br />
Page 715, next sentence: (replace semicolons with commas, and add the word “and”) “introduction; overall description; specific requirements” should read “introduction, overall description, and specific requirements”<br />
<br />
Page 715, next sentence: (add the word “and”) “dependencies; apportioning” should read “dependencies; and apportioning”<br />
<br />
Page 715, next sentence: (since you say “including”, I don’t think “in particular” is necessary here, especially since it just makes the sentence confusing) “including in particular sections” should read “including sections”<br />
<br />
Page 716, first paragraph: (typo) “do the requirement cover” should read “do the requirements cover”<br />
<br />
Page 716, paragraph starting with “note the terminology”: (add “in” for correctness) “as each of these examples” should read “as in each of these examples”<br />
<br />
Page 717, last paragraph: (add comma for clarity) “if they cannot implement the required functionalities the” should read “if they cannot implement the required functionalities, the”<br />
<br />
Page 717, same paragraph: (replace semicolon with a comma) “the purse strings); and the head” should read “the purse strings), and the head”<br />
<br />
Page 719, final paragraph: (typo) “Too often, requirements document fail” should read “Too often, requirements documents fail”<br />
</strike><br />
<br />
<br />
Corrections by Raphaël Meyer, 10 March 2009<br />
<br />
<strike><br />
Page 720, first paragraph: (replace comma with semicolon) “standard, they” should read “standard; they”<br />
<br />
Page 720, paragraph about “complete”: (reorder wording for correctness) “The answer could only refer” should read “The answer could refer only”<br />
<br />
Page 721, paragraph starting with “note the difference”: (add “ while” for correctness and flow) “the requirements document, correctness” should read “the requirements document, while correctness”<br />
<br />
Page 722, paragraph about being “Traceable”: (In the second sentence, I think it would flow better and make more sense if the phrase “in all software …,” was at the end) i.e. it should read “What this means … keeping track of individual … in all software products …”, with no commas.<br />
<br />
Page 722, paragraph about “verifiable”: (typo) “It useless” should read “It is useless”<br />
<br />
Page 722, same paragraph: (typo – the quotation after “form” needs to be removed) “of the form”” should read “of the form”<br />
<br />
Page 722, same paragraph: (add the word “but” for correctness and flow) “2 seconds, for” should read “2 seconds, but for”<br />
<br />
Page 722, paragraph about “Interfaced”: (reference to “its” is incorrect because we don’t know what “it” is) “specify its” should read “specify the system’s”<br />
<br />
Page 723, first paragraph: (awkward wording; I suggest rewording) “should specify, for each functionality and constraint, its importance relative to” should read “should specify the importance of each functionality and constraint relative to”<br />
<br />
Page 723, paragraph starting with “The first rule”: (I suggest adding a word for readability) “the first time and every time.” Should read “the first time and every time thereafter.”<br />
<br />
Page 723, next sentence: (consider revising; a sentence with three different ideas separated by two semicolons is a bit awkward)<br />
<br />
Page 725, “insufficiently thorough” bulletpoint: (incorrect comma should be removed) “which remove the symptom, but not” should read “which remove the symptom but not”<br />
<br />
Page 725, towards the bottom of the page: (typo) “Recent research has is taking test automation even further” should read “Recent research has taken test automation even further” OR “Recent research is taking test automation even further”<br />
<br />
Page 727, paragraph starting with “For unit testing”: (add the noun instead of the pronoun since you already mentioned something else in between) “assess their applicability to your development” should read “assess the applicability of the components to your development”<br />
<br />
Page 727, next sentence: (add a hyphen for correctness) “the just noted EiffelStudio” should read “the just-noted EiffelStudio”<br />
<br />
Page 728, first big paragraph: (unnecessary comma) “during a meeting, whose purpose” should read “during a meeting whose purpose”<br />
<br />
Page 730, first paragraph: (should be “attention to”) “increased attention on the risks” should read “increased attention to the risks” OR “increased focus on the risks”<br />
<br />
Page 730, paragraph starting with “All these features”: (shouldn’t the word here be “language”, without the “s”?) “modern programming languages technology” should read “modern programming language technology”<br />
<br />
Page 731, paragraph starting with “Some Companies”: (add comma for correctness and flow) “dEtermination)” should read “dEtermination),”<br />
<br />
Page 731, last paragraph: (add “and”) “language-neutral, tool-neutral” should read “language-neutral, and tool-neutral”<br />
<br />
Page 732, bulletpoint about “Systems Engineering”: (unnecessary comma) “which has its own process, involving” should read “which has its own process involving”<br />
<br />
Page 732, final sentence: (“being assessed” sounds more correct to me) “and getting assessed” should read “and being assessed”<br />
<br />
Page 733, paragraph starting with “As the examples indicate”: (I think this would be better with an “and”) “the goal is a specification, the practice” should read “the goal is a specification and the practice”<br />
<br />
Page 734, “Managed” paragraph: (I think you should add an “and” to finish the list) “involved; there’s” should read “involved; and there’s”<br />
<br />
Page 735, first paragraph: (once again, add “and” or “or”) “reliability, service quality” should read “reliability, or service quality”<br />
<br />
Page 736, paragraph starting with “At IBM Fred Brooks”: (typo) “one of the first example” should read “one of the first examples”<br />
<br />
<br />
Page 736, next book: (typo) “for writing requirements document” should read “for writing requirements documents” OR “for writing a requirements document”<br />
<br />
Page 738, bulletpoint starting with “System Requirements”: (typo – add an “s” on “requirement”) “structuring requirements document.” Should read “structuring requirements documents.”<br />
</strike><br />
<br />
=== PART VI: APPENDICES===<br />
===A Using the EiffelStudio environment===<br />
===B Eiffel syntax specification===<br />
===C An introduction to C++ (from material by Nadia Polikarpova)===<br />
<br />
<strike>p. 770, Section "Derived types": "since it is possible to assigned a dereferenced" --> "since it is possible to assign a dereferenced"<br />
-- Stephan 18/2/2009<br />
<br />
p. 777, "a::x" --> "A::x"<br />
-- Stephan 18/2/2009<br />
<br />
p. 780, "trying to access a non-existen object" --> "trying to access a non-existing object"<br />
-- Stephan 18/2/2009<br />
<br />
p. 782, in "exception through throw ()).", the full-stop should be black (not blue)<br />
-- Stephan 18/2/2009<br />
<br />
p. 783 top, "If no matching try block" --> "If no matching catch block"<br />
-- Stephan 18/2/2009<br />
<br />
p. 789 bottom, "assert b" --> "assert b;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 793 top, "Blocks correspond to Eiffel compound and consists of" --> "Blocks correspond to Eiffel compounds and consist of" or "Blocks correspond to Eiffel compound statements and consist of"<br />
-- Stephan 18/2/2009<br />
<br />
p. 794, top box: "for (init_statement expression;" --> "for (init_statement; expression;"<br />
-- Stephan 18/2/2009<br />
<br />
p. 798 top, in "a fraction part, an e symbol, followed by an optionally signed": the e symbol is also optional.<br />
-- Stephan 18/2/2009</strike><br />
<br />
===D An introduction to Java (from material by Marco Piccioni)===<br />
<br />
Comments by Stephan v S:<br />
<br />
<strike><br />
General comment: check the indentation style of code in boxes!<br />
<br />
p. 717, second last bullet: "O-O part of the type system does not include basic types" is wrong. The O-O part of the type system also includes classes that "box" primitive types. One can write a valid Java program using only integer literals (i.e. numbers) and class Integer.<br />
<br />
p. 718, in the box at the bottom, the "}" should be removed after "... Other class declarations ... }".<br />
<br />
p. 719, bottom, just before "Program execution": "package originating with our group (domain name se.ethz.ch)" --> "package from an institution with domain name se.ethz.ch might be called". This is consistent with "names that start with the institution’s..."<br />
<br />
p. 720 in the box: "... Code" is indented very deeply<br />
<br />
p. 720 first paragraph of "The Java type system": "hierarchy stands a class called Object" --> "hierarchy is class Object"<br />
<br />
p. 720 second paragraph of "The Java type system": "affects basic types" --> "concerns basic types"<br />
<br />
p. 721 just before the box at the bottom: "contains examples of all" --> "contains examples of members".<br />
<br />
p. 721 in box right at the bottom: "Constant" --> "Constant field"<br />
<br />
p. 721 in box right at the bottom & in box of p. 720 top: find a consistent indentation style for // comments.<br />
<br />
p. 722 in the box at top: the closing brace "}" of constructor "D() {" should be properly indented. <br />
<br />
p. 722 right at bottom: "directly access to fields" --> "directly access fields"<br />
<br />
p. 723 first line: "This flies in the face of information hiding principles" --> "This is against information hiding principles.<br />
<br />
p. 723 first paragraph: the blue "and" should maybe be black and italicized.<br />
<br />
p. 723 first paragraph of "Static members": "Another of the Java concepts" --> "Another Java concept"<br />
<br />
p. 724 in the boxes, the indentation style should be consistent with others used in Touch of Class.<br />
<br />
p. 724, 5 lines from the bottom: "of the same number" --> "or the same number"<br />
<br />
p. 726, in I8: "Execute all non-static block initializers are executed." --> "Execute all non-static block initializers"<br />
<br />
p. 727 in the top box: "Defines an array of integers" --> "Declares an array of integers"<br />
<br />
p. 727 in the second box: a semicolon should be added after the statement "arr = new int[size]"<br />
<br />
p. 727 second line after the third box: "be careful to note" --> "note". Later in the same sentence: "will be that of" --> "will be"<br />
<br />
p. 727 right after the third box, the sentence should rather read: "The expression arr.length (length is a read-only field) yields the number of elements in arr; note that after the above allocation its value will be equal to size."<br />
<br />
p. 728 third line: arithmetic overflow does not cause an exception. Marco verified this.<br />
<br />
p. 728, in the paragraph after the second block: "The finally part is executed in all cases, exception or not" --> "The finally part will be executed irrespective of whether an exception occurred or not"<br />
<br />
p. 729 last paragraph: arithmetic overflows will not trigger exceptions.<br />
<br />
p. 731 in the first box: a semicolon should follow "super(m)"<br />
<br />
p. 732 in the first box of "Genericity": the highlighted section cuts away the characters in the formal generic parameters. In this same box, "Class declaration" --> "Class body"<br />
<br />
p. 733 right after the first box: "this could be a function" --> "this could be a method"<br />
<br />
p. 734 in the top box: should the `case' statements be indented?<br />
<br />
p. 735 in the last box: "for(variable: collection)" --> "for (variable: collection)"<br />
<br />
p. 737 in the discussion of nested classes: it's a more standard practice to emulate multiple inheritance through delegation and not through nested classes. The standard solutions looks like this (referring to p. 738 top): create an interface Q and a class T that implements it. Let R extend P and implement Q. An instance of T is referenced by a private field of R, and calls to methods of Q are directly delegated to this instance. The advantage of this solution is that R conforms to both P and Q, and that T can also be extended in a subclass, whereas nested classes cannot be inherited from.<br />
<br />
p. 739 bottom box: there should be a semicolon after "perform(e.args)", and the closing brace "}" for the `build' method is missing.<br />
<br />
p. 740 in the discussion of listeners, "encumber our system with a new class fulfilling a local role only" - this is not the only solution: U can implement ClickListener, making a new class unnecessary.<br />
<br />
p. 740, second paragraph: "class that inherits from ClickListener" --> "class that implements ClickListener"<br />
<br />
p. 742, third line after the first box: "and it must come at the end" --> "and it must be at the end"<br />
<br />
p. 743 in the second box: should "x.getAnnotations" not be "x.getAnnotations()"?<br />
<br />
p. 744 in the "Operators" box: "==" --> "+=" in "Assignment:"</strike><br />
<br />
Corrections by Raphaël Meyer (6 March 2009)<br />
<br />
<br />
<strike><br />
page 718, paragraph starting with "Java Programs": (reword for clarity and correctness) "which however are an organizational concept, not a language mechanism)." should read "which are not a language mechanism but instead an organizational concept)."<br />
<br />
page 718, paragraph starting with "packages": "allow organizing classes" should read "allow you to organize"<br />
<br />
page 719, paragraph starting with "in their third role": (change "as" to "that") "conflicts as may arise" should read "conflicts that may arise"<br />
<br />
page 719, paragraph startin with "The package mechanism": (reword for correctness) "components being listed in reverse order" should read "listing components in reverse order"<br />
<br />
page 722, bulletpoint starting with "protected": (reword for correctness) "but no other classes" should read "but not to any other classes"<br />
<br />
page 722, very bottom of page: (reword to make sense) "This means that you can directly access to" should read "This means that you have direct access to"<br />
<br />
page 723, first paragraph: (add a hyphen) "information hiding principles" should read "information-hiding principles"<br />
<br />
page 723, same paragraph: (add words for clarity and correctness) "methodological practice of never exporting fields, keeping them private instead and equipping each of them with a getter function and a setter procedure." should read "methodological practices of never exporting fields, keeping the fields private instead and equipping each of them with a getter function and a setter procedure."<br />
<br />
page 723, paragraph starting with "To use": "and will use" should read "and you will use"<br />
<br />
page 723, same paragraph: (reorder words for correctness) "To denote the current object (Current in Eiffel) use the keyword this." should read "Use the keyword this to denote the current object (Current in Eiffel)."<br />
<br />
page 723, paragraph starting with "java": (reword and make certain nouns plural) "any non-static method or field (since it would" should read "any non-static methods or fields (since they would"<br />
<br />
page 723, paragraph starting with "The main program": (reword for correctness) "which defines execution as creating an object and calling a creation procedure on it" should read "which defines execution as the creation of an object and a call to create a procedure on it"<br />
<br />
page 724, paragraph starting with "Another difference": (reword for clarity and correctness) "whose members would all be" should read "whose members are all"<br />
<br />
page 725, first pagraph: (add comma to separate ideas) "inheritance overloading" should read "inheritance, overloading"<br />
<br />
page 725, paragraph starting with "a new expression": (put "had" in the present tense) "Class D indeed had two constructors" should read "Class D indeed has two constructors"<br />
<br />
page 725, same sentence: (replace ";" with ",") "one with no arguments; one with" should read "one with no arguments, and one with"<br />
<br />
page 726, point I8: (sentence does not make sense; revise) "Execute all non-static block initializers are executed."<br />
<br />
page 726, paragraph starting with "Step I9": (reorder sentence for correctness) "the Java rule that every object creation must invoke, in addition to a constructor of the given class (possibly the default constructor), a parent constructor" should read "the Java rule that every object creation must invoke a parent constructor in addition to a constructor of the given class (possibly the default constructor),"<br />
<br />
page 726, first bulletpoint under previous paragrah: (simplify wording) "The text of the local constructor" should read "The local constructor text"<br />
<br />
page 726, same bulletpoint: (change wording for clarity) "so this will cause a call" should read "so this will result in a call"<br />
<br />
page 726, next bulletpoint: (add "in" for parallel construction, and remove the ",") "the parent, or its default" should read "the parent or in its default" (additional note: you might want to replace "its" with "the parent's" to make this more clear)<br />
<br />
page 727, paragraph starting with "Array access": (incomplete sentence; revise) "You may assign to an array element, as in"<br />
<br />
page 728, first paragraph: (replace "are" with "include") "Typical causes of exceptions are" should read "The typical causes of exceptions include"<br />
<br />
page 728, same paragraph: (reword for clarity and conciseness) "It is also possible in Java to trigger a developer exception explicitly through" should read "You can also explicitly trigger a developer exception in Java through"<br />
<br />
page 728, paragraph starting with "where e": (run on sentence; please revise) "where e is of an exception type, which should be a descendant of the Throwable library class; more commonly, it is a descendant of Exception, one of the two heirs of Throwable, intended for programmer exceptions."<br />
<br />
page 728, paragraph startin with "If execution": (reword and reorder for clarity and correctness) "If execution of the try block triggers an exception of one of the types listed" should read "If an exception of one of the types listed is triggered upon execution of the try block"<br />
<br />
page 728, same sentence: (reword and remove "here") "here ET1, ET2, ¼ execution immediately transfers (without completing the try block) to the corresponding catch block." should read "the execution of ET1, ET2, ¼ immediately transfers to the corresponding catch block without completing the try block." (this sentence is still confusing and does not appear to be a complete sentence.)<br />
<br />
page 728, next paragraph: "Occurrence of an exception creates an exception object, accessible to the program in the corresponding catch clause through the specified exception name, such as e." - this is very unclear and should be written "An exception object is created each time an exception occurs; this object is accessible to the program in the corresponding catch clause through the specified exception name, such as e."<br />
<br />
page 728, next sentence: (reword for clarity) "This makes it possible to access such properties as the human-readable name of the exception and the state of the call stack," should read "This allows you to acces such properties as the exception's human-readable name or the state of the call stack,"<br />
<br />
page 729, paragraph starting with "These techniques": (i suggest reordering for better flow) "to defeat the purpose of the mechanism by writing a perfunctory catch clause that pacifies the compiler but does nothing" should read "to write a perfunctory catch clause that pacifies the compiler but does nothing, thereby defeating the purpose of the mechanism"<br />
<br />
page 729, same paragraph, second to last sentence: (change to present tense) "did not retain checked exceptions" should read "does not retain checked exceptions"<br />
<br />
page 730, paragraph starting with "the redefinition": (use "cannot" instead of "may not") "The overriding method may not be static" should read "The overriding method cannot be static"<br />
<br />
page 730, next paragraph: (reword for clarity and change the first comma to a ";") "You have to be careful about keeping an identical signature, since any change in type or number of arguments would be considered overloading and so would not produce a compilation error" should read "You have to be careful about keeping an identical signature; any change in type or number of arguments will be considered overloading, and therefore no compilation error will be produced"<br />
<br />
page 730-731: (paragraph spacing) it appears that the line spacing on page 731 is greater than on page 730. please confirm.<br />
<br />
page 734, paragraph starting with "To obtain": (reorder words for clarity) "If you omit them control will flow, when a branch terminates, to the next branch" should read "If you omit them, when a branch terminates control will flow to the next branch"<br />
<br />
page 734, same paragraph: (remove comma) "if conditionals, and loops" should read "if conditionals and loops"<br />
<br />
page 735, towards the bottom of the page: (typo) "The langauge" should read "The language"<br />
<br />
page 735, very bottom of the page: there is a close-parentheses ")" that was never opened. i think it needs to be deleted.<br />
<br />
page 736, paragraph starting with "Java has no": (add "the" for clarity) "such as C# delegates" should read "such as the C# delegates"<br />
<br />
page 737, paragraph starting with "For a long time": (reword for correcness) "succeeds to demonstrate" should read "succeeds in demonstrating"<br />
<br />
page 741, paragraph starting with "java provides": (reword for clarity, conciseness, and correctness) "converting values between values of different primitive types" should read "converting between different primitive type values"<br />
<br />
page 741, paragraph starting with "You can use": the grammar in this paragraph is incorrect. There should be a period (".") after "float to double", then "You" should be capitalized, and then the semicolon after "1=s" should be a comma.<br />
<br />
page 743, paragraph starting with "Java uses": (remove second "all") "all break characters (blanks, tabs, new lines) are all equivalent" should read "all break characters (blanks, tabs, new lines) are equivalent"<br />
<br />
page 743, next paragraph: (reword for clarity and correctness)"but may not start with a digit, include / or –." should read "but can neither start with a digit nor include / or –."<br />
<br />
page 743, paragraph starting with "Comments": ("specially" is not a word) "specially" should read "specifically"<br />
</strike><br />
<br />
finished chapter on 4 March 2009.<br />
<br />
===E An introduction to C# (from material by Benjamin Morandi)===<br />
<strike> p. 742, 4th line from the bottom: "reclaims an object;." --> "reclaims an object."<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, 2nd line from the top: "No overloading here;" --> "There is no overloading here" or "Destructors may not be overloaded"<br />
-- Stephan 16/2/2009<br />
<br />
p. 743, Last line of text: "use at your own risk" --> "use them at your own risk"<br />
-- Stephan 16/2/2009<br />
<br />
p. 744, Get consistency among "One-dimensional array" and "Two dimensional arrays", i.e. use "Two-dimensional array"<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, There is a black line in the margin next to the top box.<br />
-- Stephan 16/2/2009<br />
<br />
p. 746, "C [G, H –> T create make end" --> "C [G, H –> T create make end]"<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, in "do {statements} while (condition)", the first curly brace should be blue.<br />
-- Stephan 16/2/2009<br />
<br />
p. 748, "Typical causes of exception" --> "Typical causes of exceptions"<br />
-- Stephan 16/2/2009<br />
<br />
page 756: Title of "INHERITANCE" section should be de-capitalized like in "Inheritance" for consistency with other section titles.<br />
-- MP 14/2/2009<br />
<br />
p. 757, Just before B.5: "if (exp is T)" --> "if (exp is U)"<br />
-- Stephan 16/2/2009<br />
<br />
p. 760, "The rest as before ...]" --> "The rest as before ...}"<br />
-- Stephan 16/2/2009<br />
<br />
p. 761, "returns into an array" --> "returns in an array" or "returns an array of attributes"<br />
-- Stephan 16/2/2009<br />
</strike><br />
<br />
Corrections by Raphaël Meyer<br />
<br />
<strike><br />
page 746, final line: (formatting) the word "consumers" is surrounded by quotes, but one of them is on the line above. these quotation marks should be on the same line as the word itself.<br />
<br />
page 748, paragraph starting with "A member": (modify word "fields" to make it match up with other points in the list) "property (fields equipped" should read "property (field equipped"<br />
<br />
</strike><br />
<br />
=== New appendix D - From C++ to C ===<br />
<br />
<strike> p. 801 bottom, "compilers, including for Eiffel" --> "compilers, including Eiffel compilers" or "compilers, including ones for Eiffel"<br />
-- Stephan 18/2/2008</strike><br />
<br />
=== Typos reported by Ernst Leisi (no chapter numbers given) ===<br />
<strike> (Second version [the one with 910 pages])<br />
<br />
<br />
s. 51 - What this tells us is that the objects our programs manipulate classify ... sounds kind of strange... the objects our programs<br />
themselves naturally into certain classes<br />
<br />
<br />
s. 59 - Line8.i_th (2) is “La_Motte” and so on. ... there is no La_Motte on the picture<br />
<br />
<br />
<br />
s. 61 - Line8.remove_all_remove_all_segments ... why two times remove_all ?<br />
<br />
<br />
<br />
s. 69 - invariant (where * denotes multiplication: ... missing " ) "<br />
<br />
<br />
<br />
s. 84 - (a = b) or (c and ((not d) = e))) ... the last " ) " is one too much or there should be one at the beginning ( " ( " )<br />
<br />
<br />
<br />
s. 97 - Line8.i_th (2)).is_exchange ... " ) " in both examples<br />
<br />
<br />
<br />
s. 98 - mathematicians often use a period “.” or a comma “,”; ... the last -> " <- is not written with normal "style" :O<br />
<br />
<br />
<br />
s.100 - {3, 7, 911, 13, 15}: ... missing " , " between 9 and 11<br />
<br />
<br />
<br />
s.111 - The first thing we need in our class is a feature representing the line to be built. ... "We call it (the feature) fancy_line... but the feature is " build_a_line " i guess<br />
We call it fancy_line.<br />
<br />
<br />
s.121 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.125 - instruction as executed by clients is jot just create stop1 ... jot ? ^^<br />
<br />
<br />
<br />
s.125 - line_exists: s /= Void ... line_exists: l /= Void<br />
<br />
<br />
<br />
s.128 - 1 • he precondition of its creation procedure. ... missing " T "<br />
<br />
<br />
<br />
s.132 - One immediate question is how > you will you < specify the root class and root creation procedure of a system.<br />
<br />
<br />
<br />
s.134 - This is true of unqualified calls: ... true for ?<br />
<br />
<br />
<br />
s.136 - made of components to be developed autonomously and combined in may different ways. ... many<br />
<br />
<br />
<br />
s.141 - 687 + 42 = 29 ... 729<br />
<br />
<br />
<br />
s.146 - It is the control structure we have been using implicitly in all the examples so far, ... they would be executed (i guess)<br />
since we have been writing instructions under the assumption that they would<br />
executed in the order given.<br />
<br />
s.151 - full.extend (metro_1)] ... " ] "<br />
<br />
<br />
<br />
s.152 - this is true in both its “” and its “”. ... its what?<br />
<br />
<br />
<br />
s.162 - Afterexecution ... After execution<br />
<br />
<br />
<br />
s.163 - If you have ever try to use a program only to see it “hang”, it might very ... tried<br />
<br />
<br />
<br />
s.171 - Of course this convention is not there by accident, but intended ... to ensure ?<br />
precisely ensure that the typical iteration scheme on a list<br />
<br />
<br />
s.183 - chosen by the programmer, who lets the compiler maps them to memory ... lets the compiler map them<br />
locations.<br />
<br />
<br />
s.192 - part of the loop, The loop correctness rules ... , T<br />
<br />
<br />
<br />
s.195 - interations ... (maybe iteration?)<br />
<br />
<br />
<br />
s.195 - In the discussion of data structures.we will see that it is possible, without ... " . " ... " constrol " ... " to to "<br />
new constrol constructs, to to define powerful iterators applicable to a wide <br />
range of object structures.<br />
<br />
s.197 - In addition, as yo may have ... you<br />
<br />
<br />
<br />
s.199 - The rationale for this policy—which may appear surprising at first—is that a ... " lists " maybe ?!<br />
Multi-branch explicitly list a set of expected cases and their desired treatment.<br />
<br />
<br />
s.208 - The last example of our study of conditionals provide a good case for defining ... " provides "<br />
a “functional abstraction” in the form of a routine.<br />
</strike><br />
<br />
=== Comments on the overall text ===<br />
Annie Meyer 6 March 2009:<br />
<br />
Page 53. Il manque une ligne noire en bas pour terminer la figure, non?<br />
<br />
Page 60. La Motte c'est La Motte-Picquet-Grenelle. Pourquoi est-ce raccourci?<br />
<br />
Page 67. La figure n'est pas jolie (la première) Voir figure parfaites pages 125, 129, 130<br />
<br />
Page 112. Figure pas parfaite.<br />
<br />
Page 113. Figure pas parfaite.<br />
<br />
Page 115. Figure manquante.<br />
<br />
Page 117. Figure pas parfaite.<br />
<br />
Page 120. "<br />
<br />
Page 122. "<br />
<br />
Page 132. Figure manquante.<br />
<br />
Page 135. "<br />
<br />
Page 147. Sous la photo de 2005 il y a une date 1976. Il doit manquer quelque chose, non?<br />
<br />
Page 155. Figure pas parfaite.<br />
<br />
Page 203. Figure pas parfaite.<br />
<br />
Page 316. Image manquante.<br />
<br />
Page 325. Pourquoi la ligne courbe n'est-elle pas parfaite comme les autres?<br />
<br />
Page 390. Figure pas parfaite.<br />
<br />
Page 405. Je ne suis pas une fan de tes courbes.<br />
<br />
Page 408. that_person.name la couleur n'est pas bien appliqué.<br />
<br />
Page 444. Presque parfaite mais celle de la page 447 est parfaite. Ce sont les mêmes, non?<br />
Celle de la page 451 est parfaite aussi.<br />
<br />
Page 491. Toujours les courbes.<br />
<br />
Page 500 et 507. "<br />
<br />
Page 502. "<br />
<br />
Page 505. "<br />
<br />
Page 545. Pas parfaites les deux boites.<br />
<br />
Page 547. Une figure semble manquer.<br />
<br />
Page 557. "<br />
<br />
Page 619. C'est normal le petit rond?<br />
<br />
Page 637. Courbe à nouveau.<br />
<br />
Page 657. Copie d'écran manquante.<br />
<br />
Page 708. Quelques paragraphes manquent.<br />
<br />
Page 773. Bizarre le grand blanc sous la boite.</div>Bmeyerhttps://dev.eiffel.com/index.php?title=GSOC_Application&diff=12398GSOC Application2009-03-12T22:16:31Z<p>Bmeyer: /* What steps will you take to encourage contributors to interact with your community before, during, and after the program? */</p>
<hr />
<div>__NOTOC__<br />
[[Soc_2009|Our Google Summer of Code project ideas]]<br />
<br />
Link ID: eiffel<br />
<br />
Group Name: Eiffel Software<br />
<br />
Home Page URL: http://www.eiffel.com<br />
<br />
Public Email: ...<br />
<br />
<br />
===Description===<br />
<br />
<br />
====Scope====<br />
This project involves contributions to the EiffelStudio open-source development environment, based on the Eiffel language and Design by Contract.<br />
<br />
====EiffelStudio====<br />
EiffelStudio is a complete development environment available on numerous platforms. The mechanisms include a compiler for the Eiffel language using innovative incremental compilation technology (the "Melting Ice"), browsing, debugging, metrics, diagrams (UML or BON) with full roundtrip capabilities between text and graphics, automatic test generation, automatic test synthesis from failures etc. The EiffelStudio source consists of over 1.5 million source lines of code in Eiffel, complemented by about 100,000 lines of C for the runtime. While this is a large amount of code, with a long history, the simplicity of the Eiffel language and its modular structures make it possible for newcomers to start contributing after a surprisingly short amount of time.<br />
<br />
====Eiffel: method and language====<br />
The Eiffel language is distinguished by the following properties:<br />
*Full object-oriented model (not a hybrid with pre-O-O approaches).<br />
*Genericity (constrained and unconstrained), inheritance (single and multiple).<br />
*Design by Contract mechanisms (preconditions, postconditions, class invariants) for: analysis and design of reliable system; specification; automatic documentation; testing and debugging; control of the exception and inheritance mechanisms.<br />
*Agents (closures, i.e. high-level function objects, with the power of lambda calculus).<br />
*Designed for garbage collection and for highly efficient executables (performance comparable to C or C++).<br />
<br />
In addition, Eiffel is not just a language but a method of software development emphasizing software engineering principles such as: seamless development (covering the full lifecycle, not just implementation, in a consistent way); reversibility; uniform access; open-closed principle; command-query separation. These principles are developed in the book "Object-Oriented Software Construction" (Bertrand Meyer, 2nd edition, Prentice Hall), one of the all-time best-sellers in computer science, Jolt Award winner. The consequence for students is that using Eiffel for the Google Summer of Code means the ability not only to produce programs but to learn a software engineering discipline that will help them throughout their career.<br />
<br />
===Why is your group applying to participate? What do you hope to gain by participating?===<br />
<br />
For Eiffel Software, the major benefit of participating in the Google Summer of Code is to draw attention to the open-source EiffelStudio IDE and the possibility of triggering innovative developments to it.<br />
<br />
While many people are intellectually drawn to the power and elegance of Eiffel, in particular to the concepts of Design by Contract, few of them are aware that this is an open-source project with a ready infrastructure to support those who want to contribute. Many of these people are students in universities.<br />
<br />
In April 2007, Eiffel Software officially released the entire contents of EiffelStudio as open source. Almost two years after opening the source code to the community at large, there have been some major contributions to the tool such as the Eiffel Testing Framework. Some others are still work in progress (SCOOP, schema evolution, proofs, ...). We expect this project will raise more awareness of Eiffel and EiffelStudio, both in academia and in the open-source community at large. leading to new exciting contributions.<br />
<br />
For students, there are several potential benefits from participating in this project:<br />
<br />
*Learning modern high-quality software development in depth. Eiffel is widely recognized as one of the purest and most elegant implementations of object-oriented concepts and modern software engineering practices. Even people who program in other languages testify that practicing serious programming in Eiffel has made them better designers and programmers.<br />
<br />
*The concepts of Design by Contract are increasingly recognized as essential to the production of reliable software. Eiffel is the "native language" of Design by Contract and an excellent opportunity to understand the concepts in depth.<br />
<br />
*Working on EiffelStudio is a rare opportunity to contribute to a large open-source system, used for professional developments in a variety of industrial and academic applications, and make a difference. The architecture is such that even a student can bring a significant contribution over a summer of development.<br />
<br />
===What is the main public mailing list for your group?===<br />
http://groups.eiffel.com<br />
<br />
===Where is the main IRC channel for your group?===<br />
irc://irc.freenode.net/#eiffelstudio<br />
<br />
===What criteria do you use to select the members of your group? ===<br />
The most important conditions are:<br />
*The member should be an expert object-oriented developer, with proven design/architecture as well as implementation skills.<br />
*He or she should be thoroughly familiar with the architecture of EiffelStudio, and have contributed to it before.<br />
*They should have some project management experience, and be used to working with students and young engineers.<br />
*Finally, they must understand the purpose of the Google Summer of Code and agree with its objectives.<br />
<br />
We have identified a group of such people who will be available as mentors. Some of them are at Eiffel Software. We also will rely on other experienced contributors to EiffelStudio, external to the company, who have expressed interest. Some are Eiffel programmers who contribute to the technology on their spare time. The group of prospective members also includes two researchers from the Chair of Software Engineering at ETH Zurich (the Swiss Federal Institute of Technology), which has extensive experience with Eiffel and has already made major contributions to EiffelStudio, in particular in the area of automated contract-based testing.<br />
<br />
===Has your group participated previously?===<br />
No<br />
<br />
===If your group has not previously participated, have you applied in the past?===<br />
We applied last year. However we had not had the time to review the details of the Summer of Code program in depth and our application was judged not precise enough. After it was rejected we were able to discuss in detail with Google representatives what was missing in the application; we prepared the present one on the basis of that discussion, making sure we addressed the criticism received.<br />
<br />
===What license does your organization use?===<br />
Most of EiffelStudio uses the Gnu Public License, GPL v2.<br />
<br />
Some libraries use the Eiffel Forum License, EFLv2. This is a very simple, liberal open-source license whose [http://www.gnu.org/licenses/eiffel-forum-license-2.html text is available here]<br />
<br />
===What is the URL to the ideas list of your organization?===<br />
http://dev.eiffel.com/soc_2009<br />
<br />
===What is the main development mailing list for your group?===<br />
We use a forum at http://eiffelstudio.origo.ethz.ch/forum/13<br />
<br />
===What is the application template you would like contributors to your organization to use.?===<br />
We will not provide a template as we want students to be imaginative in the way they present themselves to us.<br />
<br />
===What is your plan for dealing with disappearing contributors?===<br />
<br />
We will interview all candidates personally to ascertain:<br />
*Their dedication to the project<br />
*Their motivation for participating<br />
*Their competence in software development (the interview will include a mini-exam on programming and software engineering to test this objectively)<br />
<br />
We will only accept candidates who do well on all three points.<br />
<br />
Every candidate will have to write a project plan describing the goals, the milestones, the criteria for success. The description of goals will have to be prioritized, so that in case of difficulties the corresponding project will produce a subset of the optimal result rather than no usable outcome.<br />
<br />
The mentors will establish an explicit communication schedule with their mentees, with regular checkpoints. The project plan will be a working document (Google Docs) shared with the mentor, to allow for frequent feedback and updates, and a comparison of goals with achievements.<br />
<br />
The Eiffel approach uses a "cluster model" (see Bertrand Meyer, "Object-Oriented Software Construction", 2nd edition, Prentice Hall, chapter 28), an incremental model in which code appears early in the process. This means that it is essentially impossible with such a model to "hand-wave" one's way through the project by producing (say) numerous UML diagrams and then not implementing them. This incremental nature of the process will enable mentors to check that the students are actually progressing, and to intervene if they are not.<br />
<br />
Another highlight of the Eiffel approach is of course the reliance on clearly defined APIs, expressed through contracts. Contract provide a much more precise specification of functionality than ordinary approaches. The student developers will be required to provide contracts for both implemented parts and parts to be implemented. This means that even if a contributor drops out in spite of all the preceding precautions, he or she will leave behind, for the parts not yet implemented, a precise description of the expected functionality, making it easier for someone else to take over.<br />
<br />
===What is your plan for dealing with disappearing members?===<br />
<br />
Some members are employees of Eiffel Software and the mentoring will be part of their duties. Others will be selected among people who have proved their professionalism, competence and dedication through their actual contributions to released open-source products. <br />
<br />
We will put in place a members mailing list and require that members inform each other of the progress of the students they mentor. This means that in the case of a mentor becoming unexpectedly unavailable (illness etc.) another can take over. To be even more proactive we are considering a system of "pair mentoring" where each student has a primary and a secondary mentor, who both know what he or she is doing.<br />
<br />
===What steps will you take to encourage contributors to interact with your community before, during, and after the program?===<br />
<br />
All projects will be required to have a standard setup, through [http://origo.ethz.ch Origo] or a similar framework, providing them automatically with Wiki pages, a forum, a configuration management (Subversion) repository, signup management etc., plus a Google Docs shared document as noted above.<br />
<br />
In addition, the user list at groups.eiffel.com is highly active and provides an excellent sounding board for Eiffel programmers requesting general help from other Eiffel programmers.<br />
<br />
===What will you do to ensure that your accepted contributors stick with the project after the program concludes?===<br />
<br />
We will publicize the results in the Eiffel community, which highly values individual contributions. Working with Eiffel is fun and productive, we trust it will keep students motivated to contribute even further after the completion of the Google summer of code 2009.<br />
<br />
We also think that this could bring excellent opportunities for students for future work with Eiffel Software or its customers especially if they demonstrate commitment and creativity during the project.<br />
<br />
===Please select your backup group administrator===</div>Bmeyerhttps://dev.eiffel.com/index.php?title=GSOC_Application&diff=12397GSOC Application2009-03-12T22:15:53Z<p>Bmeyer: /* What is your plan for dealing with disappearing contributors? */</p>
<hr />
<div>__NOTOC__<br />
[[Soc_2009|Our Google Summer of Code project ideas]]<br />
<br />
Link ID: eiffel<br />
<br />
Group Name: Eiffel Software<br />
<br />
Home Page URL: http://www.eiffel.com<br />
<br />
Public Email: ...<br />
<br />
<br />
===Description===<br />
<br />
<br />
====Scope====<br />
This project involves contributions to the EiffelStudio open-source development environment, based on the Eiffel language and Design by Contract.<br />
<br />
====EiffelStudio====<br />
EiffelStudio is a complete development environment available on numerous platforms. The mechanisms include a compiler for the Eiffel language using innovative incremental compilation technology (the "Melting Ice"), browsing, debugging, metrics, diagrams (UML or BON) with full roundtrip capabilities between text and graphics, automatic test generation, automatic test synthesis from failures etc. The EiffelStudio source consists of over 1.5 million source lines of code in Eiffel, complemented by about 100,000 lines of C for the runtime. While this is a large amount of code, with a long history, the simplicity of the Eiffel language and its modular structures make it possible for newcomers to start contributing after a surprisingly short amount of time.<br />
<br />
====Eiffel: method and language====<br />
The Eiffel language is distinguished by the following properties:<br />
*Full object-oriented model (not a hybrid with pre-O-O approaches).<br />
*Genericity (constrained and unconstrained), inheritance (single and multiple).<br />
*Design by Contract mechanisms (preconditions, postconditions, class invariants) for: analysis and design of reliable system; specification; automatic documentation; testing and debugging; control of the exception and inheritance mechanisms.<br />
*Agents (closures, i.e. high-level function objects, with the power of lambda calculus).<br />
*Designed for garbage collection and for highly efficient executables (performance comparable to C or C++).<br />
<br />
In addition, Eiffel is not just a language but a method of software development emphasizing software engineering principles such as: seamless development (covering the full lifecycle, not just implementation, in a consistent way); reversibility; uniform access; open-closed principle; command-query separation. These principles are developed in the book "Object-Oriented Software Construction" (Bertrand Meyer, 2nd edition, Prentice Hall), one of the all-time best-sellers in computer science, Jolt Award winner. The consequence for students is that using Eiffel for the Google Summer of Code means the ability not only to produce programs but to learn a software engineering discipline that will help them throughout their career.<br />
<br />
===Why is your group applying to participate? What do you hope to gain by participating?===<br />
<br />
For Eiffel Software, the major benefit of participating in the Google Summer of Code is to draw attention to the open-source EiffelStudio IDE and the possibility of triggering innovative developments to it.<br />
<br />
While many people are intellectually drawn to the power and elegance of Eiffel, in particular to the concepts of Design by Contract, few of them are aware that this is an open-source project with a ready infrastructure to support those who want to contribute. Many of these people are students in universities.<br />
<br />
In April 2007, Eiffel Software officially released the entire contents of EiffelStudio as open source. Almost two years after opening the source code to the community at large, there have been some major contributions to the tool such as the Eiffel Testing Framework. Some others are still work in progress (SCOOP, schema evolution, proofs, ...). We expect this project will raise more awareness of Eiffel and EiffelStudio, both in academia and in the open-source community at large. leading to new exciting contributions.<br />
<br />
For students, there are several potential benefits from participating in this project:<br />
<br />
*Learning modern high-quality software development in depth. Eiffel is widely recognized as one of the purest and most elegant implementations of object-oriented concepts and modern software engineering practices. Even people who program in other languages testify that practicing serious programming in Eiffel has made them better designers and programmers.<br />
<br />
*The concepts of Design by Contract are increasingly recognized as essential to the production of reliable software. Eiffel is the "native language" of Design by Contract and an excellent opportunity to understand the concepts in depth.<br />
<br />
*Working on EiffelStudio is a rare opportunity to contribute to a large open-source system, used for professional developments in a variety of industrial and academic applications, and make a difference. The architecture is such that even a student can bring a significant contribution over a summer of development.<br />
<br />
===What is the main public mailing list for your group?===<br />
http://groups.eiffel.com<br />
<br />
===Where is the main IRC channel for your group?===<br />
irc://irc.freenode.net/#eiffelstudio<br />
<br />
===What criteria do you use to select the members of your group? ===<br />
The most important conditions are:<br />
*The member should be an expert object-oriented developer, with proven design/architecture as well as implementation skills.<br />
*He or she should be thoroughly familiar with the architecture of EiffelStudio, and have contributed to it before.<br />
*They should have some project management experience, and be used to working with students and young engineers.<br />
*Finally, they must understand the purpose of the Google Summer of Code and agree with its objectives.<br />
<br />
We have identified a group of such people who will be available as mentors. Some of them are at Eiffel Software. We also will rely on other experienced contributors to EiffelStudio, external to the company, who have expressed interest. Some are Eiffel programmers who contribute to the technology on their spare time. The group of prospective members also includes two researchers from the Chair of Software Engineering at ETH Zurich (the Swiss Federal Institute of Technology), which has extensive experience with Eiffel and has already made major contributions to EiffelStudio, in particular in the area of automated contract-based testing.<br />
<br />
===Has your group participated previously?===<br />
No<br />
<br />
===If your group has not previously participated, have you applied in the past?===<br />
We applied last year. However we had not had the time to review the details of the Summer of Code program in depth and our application was judged not precise enough. After it was rejected we were able to discuss in detail with Google representatives what was missing in the application; we prepared the present one on the basis of that discussion, making sure we addressed the criticism received.<br />
<br />
===What license does your organization use?===<br />
Most of EiffelStudio uses the Gnu Public License, GPL v2.<br />
<br />
Some libraries use the Eiffel Forum License, EFLv2. This is a very simple, liberal open-source license whose [http://www.gnu.org/licenses/eiffel-forum-license-2.html text is available here]<br />
<br />
===What is the URL to the ideas list of your organization?===<br />
http://dev.eiffel.com/soc_2009<br />
<br />
===What is the main development mailing list for your group?===<br />
We use a forum at http://eiffelstudio.origo.ethz.ch/forum/13<br />
<br />
===What is the application template you would like contributors to your organization to use.?===<br />
We will not provide a template as we want students to be imaginative in the way they present themselves to us.<br />
<br />
===What is your plan for dealing with disappearing contributors?===<br />
<br />
We will interview all candidates personally to ascertain:<br />
*Their dedication to the project<br />
*Their motivation for participating<br />
*Their competence in software development (the interview will include a mini-exam on programming and software engineering to test this objectively)<br />
<br />
We will only accept candidates who do well on all three points.<br />
<br />
Every candidate will have to write a project plan describing the goals, the milestones, the criteria for success. The description of goals will have to be prioritized, so that in case of difficulties the corresponding project will produce a subset of the optimal result rather than no usable outcome.<br />
<br />
The mentors will establish an explicit communication schedule with their mentees, with regular checkpoints. The project plan will be a working document (Google Docs) shared with the mentor, to allow for frequent feedback and updates, and a comparison of goals with achievements.<br />
<br />
The Eiffel approach uses a "cluster model" (see Bertrand Meyer, "Object-Oriented Software Construction", 2nd edition, Prentice Hall, chapter 28), an incremental model in which code appears early in the process. This means that it is essentially impossible with such a model to "hand-wave" one's way through the project by producing (say) numerous UML diagrams and then not implementing them. This incremental nature of the process will enable mentors to check that the students are actually progressing, and to intervene if they are not.<br />
<br />
Another highlight of the Eiffel approach is of course the reliance on clearly defined APIs, expressed through contracts. Contract provide a much more precise specification of functionality than ordinary approaches. The student developers will be required to provide contracts for both implemented parts and parts to be implemented. This means that even if a contributor drops out in spite of all the preceding precautions, he or she will leave behind, for the parts not yet implemented, a precise description of the expected functionality, making it easier for someone else to take over.<br />
<br />
===What is your plan for dealing with disappearing members?===<br />
<br />
Some members are employees of Eiffel Software and the mentoring will be part of their duties. Others will be selected among people who have proved their professionalism, competence and dedication through their actual contributions to released open-source products. <br />
<br />
We will put in place a members mailing list and require that members inform each other of the progress of the students they mentor. This means that in the case of a mentor becoming unexpectedly unavailable (illness etc.) another can take over. To be even more proactive we are considering a system of "pair mentoring" where each student has a primary and a secondary mentor, who both know what he or she is doing.<br />
<br />
===What steps will you take to encourage contributors to interact with your community before, during, and after the program?===<br />
<br />
All projects will be required to have a standard setup, through [http://origo.ethz.ch Origo] or a similar framework, providing them automatically with Wiki pages, a forum, a configuration management (Subversion) repository, signup management etc. In addition, the user list at groups.eiffel.com is highly active and provides an excellent sounding board for Eiffel programmers requesting general help from other Eiffel programmers.<br />
<br />
===What will you do to ensure that your accepted contributors stick with the project after the program concludes?===<br />
<br />
We will publicize the results in the Eiffel community, which highly values individual contributions. Working with Eiffel is fun and productive, we trust it will keep students motivated to contribute even further after the completion of the Google summer of code 2009.<br />
<br />
We also think that this could bring excellent opportunities for students for future work with Eiffel Software or its customers especially if they demonstrate commitment and creativity during the project.<br />
<br />
===Please select your backup group administrator===</div>Bmeyerhttps://dev.eiffel.com/index.php?title=GSOC_Application&diff=12396GSOC Application2009-03-12T22:13:32Z<p>Bmeyer: /* What criteria do you use to select the members of your group? */</p>
<hr />
<div>__NOTOC__<br />
[[Soc_2009|Our Google Summer of Code project ideas]]<br />
<br />
Link ID: eiffel<br />
<br />
Group Name: Eiffel Software<br />
<br />
Home Page URL: http://www.eiffel.com<br />
<br />
Public Email: ...<br />
<br />
<br />
===Description===<br />
<br />
<br />
====Scope====<br />
This project involves contributions to the EiffelStudio open-source development environment, based on the Eiffel language and Design by Contract.<br />
<br />
====EiffelStudio====<br />
EiffelStudio is a complete development environment available on numerous platforms. The mechanisms include a compiler for the Eiffel language using innovative incremental compilation technology (the "Melting Ice"), browsing, debugging, metrics, diagrams (UML or BON) with full roundtrip capabilities between text and graphics, automatic test generation, automatic test synthesis from failures etc. The EiffelStudio source consists of over 1.5 million source lines of code in Eiffel, complemented by about 100,000 lines of C for the runtime. While this is a large amount of code, with a long history, the simplicity of the Eiffel language and its modular structures make it possible for newcomers to start contributing after a surprisingly short amount of time.<br />
<br />
====Eiffel: method and language====<br />
The Eiffel language is distinguished by the following properties:<br />
*Full object-oriented model (not a hybrid with pre-O-O approaches).<br />
*Genericity (constrained and unconstrained), inheritance (single and multiple).<br />
*Design by Contract mechanisms (preconditions, postconditions, class invariants) for: analysis and design of reliable system; specification; automatic documentation; testing and debugging; control of the exception and inheritance mechanisms.<br />
*Agents (closures, i.e. high-level function objects, with the power of lambda calculus).<br />
*Designed for garbage collection and for highly efficient executables (performance comparable to C or C++).<br />
<br />
In addition, Eiffel is not just a language but a method of software development emphasizing software engineering principles such as: seamless development (covering the full lifecycle, not just implementation, in a consistent way); reversibility; uniform access; open-closed principle; command-query separation. These principles are developed in the book "Object-Oriented Software Construction" (Bertrand Meyer, 2nd edition, Prentice Hall), one of the all-time best-sellers in computer science, Jolt Award winner. The consequence for students is that using Eiffel for the Google Summer of Code means the ability not only to produce programs but to learn a software engineering discipline that will help them throughout their career.<br />
<br />
===Why is your group applying to participate? What do you hope to gain by participating?===<br />
<br />
For Eiffel Software, the major benefit of participating in the Google Summer of Code is to draw attention to the open-source EiffelStudio IDE and the possibility of triggering innovative developments to it.<br />
<br />
While many people are intellectually drawn to the power and elegance of Eiffel, in particular to the concepts of Design by Contract, few of them are aware that this is an open-source project with a ready infrastructure to support those who want to contribute. Many of these people are students in universities.<br />
<br />
In April 2007, Eiffel Software officially released the entire contents of EiffelStudio as open source. Almost two years after opening the source code to the community at large, there have been some major contributions to the tool such as the Eiffel Testing Framework. Some others are still work in progress (SCOOP, schema evolution, proofs, ...). We expect this project will raise more awareness of Eiffel and EiffelStudio, both in academia and in the open-source community at large. leading to new exciting contributions.<br />
<br />
For students, there are several potential benefits from participating in this project:<br />
<br />
*Learning modern high-quality software development in depth. Eiffel is widely recognized as one of the purest and most elegant implementations of object-oriented concepts and modern software engineering practices. Even people who program in other languages testify that practicing serious programming in Eiffel has made them better designers and programmers.<br />
<br />
*The concepts of Design by Contract are increasingly recognized as essential to the production of reliable software. Eiffel is the "native language" of Design by Contract and an excellent opportunity to understand the concepts in depth.<br />
<br />
*Working on EiffelStudio is a rare opportunity to contribute to a large open-source system, used for professional developments in a variety of industrial and academic applications, and make a difference. The architecture is such that even a student can bring a significant contribution over a summer of development.<br />
<br />
===What is the main public mailing list for your group?===<br />
http://groups.eiffel.com<br />
<br />
===Where is the main IRC channel for your group?===<br />
irc://irc.freenode.net/#eiffelstudio<br />
<br />
===What criteria do you use to select the members of your group? ===<br />
The most important conditions are:<br />
*The member should be an expert object-oriented developer, with proven design/architecture as well as implementation skills.<br />
*He or she should be thoroughly familiar with the architecture of EiffelStudio, and have contributed to it before.<br />
*They should have some project management experience, and be used to working with students and young engineers.<br />
*Finally, they must understand the purpose of the Google Summer of Code and agree with its objectives.<br />
<br />
We have identified a group of such people who will be available as mentors. Some of them are at Eiffel Software. We also will rely on other experienced contributors to EiffelStudio, external to the company, who have expressed interest. Some are Eiffel programmers who contribute to the technology on their spare time. The group of prospective members also includes two researchers from the Chair of Software Engineering at ETH Zurich (the Swiss Federal Institute of Technology), which has extensive experience with Eiffel and has already made major contributions to EiffelStudio, in particular in the area of automated contract-based testing.<br />
<br />
===Has your group participated previously?===<br />
No<br />
<br />
===If your group has not previously participated, have you applied in the past?===<br />
We applied last year. However we had not had the time to review the details of the Summer of Code program in depth and our application was judged not precise enough. After it was rejected we were able to discuss in detail with Google representatives what was missing in the application; we prepared the present one on the basis of that discussion, making sure we addressed the criticism received.<br />
<br />
===What license does your organization use?===<br />
Most of EiffelStudio uses the Gnu Public License, GPL v2.<br />
<br />
Some libraries use the Eiffel Forum License, EFLv2. This is a very simple, liberal open-source license whose [http://www.gnu.org/licenses/eiffel-forum-license-2.html text is available here]<br />
<br />
===What is the URL to the ideas list of your organization?===<br />
http://dev.eiffel.com/soc_2009<br />
<br />
===What is the main development mailing list for your group?===<br />
We use a forum at http://eiffelstudio.origo.ethz.ch/forum/13<br />
<br />
===What is the application template you would like contributors to your organization to use.?===<br />
We will not provide a template as we want students to be imaginative in the way they present themselves to us.<br />
<br />
===What is your plan for dealing with disappearing contributors?===<br />
<br />
We will interview all candidates personally (whenever possible with a voice interview) to ascertain:<br />
*Their dedication to the project<br />
*Their motivation for participating<br />
*Their competence in software development (we will run a mini-exam to test this objectively)<br />
<br />
We will only accept candidates who do well on all three points.<br />
<br />
Every candidate will have to write a project plan describing the goals, the milestones, the criteria for success. The description of goals will have to be prioritized, so that in case of difficulties the corresponding project will produce a subset of the optimal result rather than no usable outcome.<br />
<br />
The mentors will establish an explicit communication schedule with their mentees, with regular checkpoints.<br />
<br />
The Eiffel approach uses a "cluster model" (see Bertrand Meyer, "Object-Oriented Software Construction", 2nd edition, Prentice Hall, chapter 28), an incremental model in which code appears early in the process. This means that it is essentially impossible with such a model to "hand-wave" one's way through the project by producing (say) numerous UML diagrams and then not implementing them. This incremental nature of the process will enable mentors to check that the students are actually progressing, and to intervene if they are not.<br />
<br />
Another highlight of the Eiffel approach is of course the reliance on clearly defined APIs, expressed through contracts. Contract provide a much more precise specification of functionality than ordinary approaches. The student developers will be required to provide contracts for both implemented parts and parts to be implemented. This means that even if a contributor drops out in spite of all the preceding precautions, he or she will leave behind, for the parts not yet implemented, a precise description of the expected functionality, making it easier for someone else to take over.<br />
<br />
===What is your plan for dealing with disappearing members?===<br />
<br />
Some members are employees of Eiffel Software and the mentoring will be part of their duties. Others will be selected among people who have proved their professionalism, competence and dedication through their actual contributions to released open-source products. <br />
<br />
We will put in place a members mailing list and require that members inform each other of the progress of the students they mentor. This means that in the case of a mentor becoming unexpectedly unavailable (illness etc.) another can take over. To be even more proactive we are considering a system of "pair mentoring" where each student has a primary and a secondary mentor, who both know what he or she is doing.<br />
<br />
===What steps will you take to encourage contributors to interact with your community before, during, and after the program?===<br />
<br />
All projects will be required to have a standard setup, through [http://origo.ethz.ch Origo] or a similar framework, providing them automatically with Wiki pages, a forum, a configuration management (Subversion) repository, signup management etc. In addition, the user list at groups.eiffel.com is highly active and provides an excellent sounding board for Eiffel programmers requesting general help from other Eiffel programmers.<br />
<br />
===What will you do to ensure that your accepted contributors stick with the project after the program concludes?===<br />
<br />
We will publicize the results in the Eiffel community, which highly values individual contributions. Working with Eiffel is fun and productive, we trust it will keep students motivated to contribute even further after the completion of the Google summer of code 2009.<br />
<br />
We also think that this could bring excellent opportunities for students for future work with Eiffel Software or its customers especially if they demonstrate commitment and creativity during the project.<br />
<br />
===Please select your backup group administrator===</div>Bmeyerhttps://dev.eiffel.com/index.php?title=GSOC_Application&diff=12395GSOC Application2009-03-12T22:13:14Z<p>Bmeyer: /* What criteria do you use to select the members of your group? */</p>
<hr />
<div>__NOTOC__<br />
[[Soc_2009|Our Google Summer of Code project ideas]]<br />
<br />
Link ID: eiffel<br />
<br />
Group Name: Eiffel Software<br />
<br />
Home Page URL: http://www.eiffel.com<br />
<br />
Public Email: ...<br />
<br />
<br />
===Description===<br />
<br />
<br />
====Scope====<br />
This project involves contributions to the EiffelStudio open-source development environment, based on the Eiffel language and Design by Contract.<br />
<br />
====EiffelStudio====<br />
EiffelStudio is a complete development environment available on numerous platforms. The mechanisms include a compiler for the Eiffel language using innovative incremental compilation technology (the "Melting Ice"), browsing, debugging, metrics, diagrams (UML or BON) with full roundtrip capabilities between text and graphics, automatic test generation, automatic test synthesis from failures etc. The EiffelStudio source consists of over 1.5 million source lines of code in Eiffel, complemented by about 100,000 lines of C for the runtime. While this is a large amount of code, with a long history, the simplicity of the Eiffel language and its modular structures make it possible for newcomers to start contributing after a surprisingly short amount of time.<br />
<br />
====Eiffel: method and language====<br />
The Eiffel language is distinguished by the following properties:<br />
*Full object-oriented model (not a hybrid with pre-O-O approaches).<br />
*Genericity (constrained and unconstrained), inheritance (single and multiple).<br />
*Design by Contract mechanisms (preconditions, postconditions, class invariants) for: analysis and design of reliable system; specification; automatic documentation; testing and debugging; control of the exception and inheritance mechanisms.<br />
*Agents (closures, i.e. high-level function objects, with the power of lambda calculus).<br />
*Designed for garbage collection and for highly efficient executables (performance comparable to C or C++).<br />
<br />
In addition, Eiffel is not just a language but a method of software development emphasizing software engineering principles such as: seamless development (covering the full lifecycle, not just implementation, in a consistent way); reversibility; uniform access; open-closed principle; command-query separation. These principles are developed in the book "Object-Oriented Software Construction" (Bertrand Meyer, 2nd edition, Prentice Hall), one of the all-time best-sellers in computer science, Jolt Award winner. The consequence for students is that using Eiffel for the Google Summer of Code means the ability not only to produce programs but to learn a software engineering discipline that will help them throughout their career.<br />
<br />
===Why is your group applying to participate? What do you hope to gain by participating?===<br />
<br />
For Eiffel Software, the major benefit of participating in the Google Summer of Code is to draw attention to the open-source EiffelStudio IDE and the possibility of triggering innovative developments to it.<br />
<br />
While many people are intellectually drawn to the power and elegance of Eiffel, in particular to the concepts of Design by Contract, few of them are aware that this is an open-source project with a ready infrastructure to support those who want to contribute. Many of these people are students in universities.<br />
<br />
In April 2007, Eiffel Software officially released the entire contents of EiffelStudio as open source. Almost two years after opening the source code to the community at large, there have been some major contributions to the tool such as the Eiffel Testing Framework. Some others are still work in progress (SCOOP, schema evolution, proofs, ...). We expect this project will raise more awareness of Eiffel and EiffelStudio, both in academia and in the open-source community at large. leading to new exciting contributions.<br />
<br />
For students, there are several potential benefits from participating in this project:<br />
<br />
*Learning modern high-quality software development in depth. Eiffel is widely recognized as one of the purest and most elegant implementations of object-oriented concepts and modern software engineering practices. Even people who program in other languages testify that practicing serious programming in Eiffel has made them better designers and programmers.<br />
<br />
*The concepts of Design by Contract are increasingly recognized as essential to the production of reliable software. Eiffel is the "native language" of Design by Contract and an excellent opportunity to understand the concepts in depth.<br />
<br />
*Working on EiffelStudio is a rare opportunity to contribute to a large open-source system, used for professional developments in a variety of industrial and academic applications, and make a difference. The architecture is such that even a student can bring a significant contribution over a summer of development.<br />
<br />
===What is the main public mailing list for your group?===<br />
http://groups.eiffel.com<br />
<br />
===Where is the main IRC channel for your group?===<br />
irc://irc.freenode.net/#eiffelstudio<br />
<br />
===What criteria do you use to select the members of your group? ===<br />
The most important conditions are:<br />
*The member should be an expert object-oriented developer, with proven design/architecture as well as implementation skills.<br />
*He or she should be thoroughly familiar with the architecture of EiffelStudio, and have contributed to it before.<br />
*They should have some project management experience, and be used to working with students and young engineers.<br />
*Finally, they must understand the purpose of the Google Summer of Code and agree with its objectives.<br />
<br />
We have identified a group of such people who will be available as mentors. Some of them are at Eiffel Software. We also will rely on other experienced contributors to EiffelStudio, external to the company, who have expressed interest. Some are Eiffel programmers who contribute to the technology on their spare time. The group of prospective members also includes two researchers from the Chair of Software Engineering at ETH Zurich (the Swiss Federal Institute of Technology), which has extensive experience with Eiffel and has already made major contributions to EiffelStudio, in particular in the area of automated testing.<br />
<br />
===Has your group participated previously?===<br />
No<br />
<br />
===If your group has not previously participated, have you applied in the past?===<br />
We applied last year. However we had not had the time to review the details of the Summer of Code program in depth and our application was judged not precise enough. After it was rejected we were able to discuss in detail with Google representatives what was missing in the application; we prepared the present one on the basis of that discussion, making sure we addressed the criticism received.<br />
<br />
===What license does your organization use?===<br />
Most of EiffelStudio uses the Gnu Public License, GPL v2.<br />
<br />
Some libraries use the Eiffel Forum License, EFLv2. This is a very simple, liberal open-source license whose [http://www.gnu.org/licenses/eiffel-forum-license-2.html text is available here]<br />
<br />
===What is the URL to the ideas list of your organization?===<br />
http://dev.eiffel.com/soc_2009<br />
<br />
===What is the main development mailing list for your group?===<br />
We use a forum at http://eiffelstudio.origo.ethz.ch/forum/13<br />
<br />
===What is the application template you would like contributors to your organization to use.?===<br />
We will not provide a template as we want students to be imaginative in the way they present themselves to us.<br />
<br />
===What is your plan for dealing with disappearing contributors?===<br />
<br />
We will interview all candidates personally (whenever possible with a voice interview) to ascertain:<br />
*Their dedication to the project<br />
*Their motivation for participating<br />
*Their competence in software development (we will run a mini-exam to test this objectively)<br />
<br />
We will only accept candidates who do well on all three points.<br />
<br />
Every candidate will have to write a project plan describing the goals, the milestones, the criteria for success. The description of goals will have to be prioritized, so that in case of difficulties the corresponding project will produce a subset of the optimal result rather than no usable outcome.<br />
<br />
The mentors will establish an explicit communication schedule with their mentees, with regular checkpoints.<br />
<br />
The Eiffel approach uses a "cluster model" (see Bertrand Meyer, "Object-Oriented Software Construction", 2nd edition, Prentice Hall, chapter 28), an incremental model in which code appears early in the process. This means that it is essentially impossible with such a model to "hand-wave" one's way through the project by producing (say) numerous UML diagrams and then not implementing them. This incremental nature of the process will enable mentors to check that the students are actually progressing, and to intervene if they are not.<br />
<br />
Another highlight of the Eiffel approach is of course the reliance on clearly defined APIs, expressed through contracts. Contract provide a much more precise specification of functionality than ordinary approaches. The student developers will be required to provide contracts for both implemented parts and parts to be implemented. This means that even if a contributor drops out in spite of all the preceding precautions, he or she will leave behind, for the parts not yet implemented, a precise description of the expected functionality, making it easier for someone else to take over.<br />
<br />
===What is your plan for dealing with disappearing members?===<br />
<br />
Some members are employees of Eiffel Software and the mentoring will be part of their duties. Others will be selected among people who have proved their professionalism, competence and dedication through their actual contributions to released open-source products. <br />
<br />
We will put in place a members mailing list and require that members inform each other of the progress of the students they mentor. This means that in the case of a mentor becoming unexpectedly unavailable (illness etc.) another can take over. To be even more proactive we are considering a system of "pair mentoring" where each student has a primary and a secondary mentor, who both know what he or she is doing.<br />
<br />
===What steps will you take to encourage contributors to interact with your community before, during, and after the program?===<br />
<br />
All projects will be required to have a standard setup, through [http://origo.ethz.ch Origo] or a similar framework, providing them automatically with Wiki pages, a forum, a configuration management (Subversion) repository, signup management etc. In addition, the user list at groups.eiffel.com is highly active and provides an excellent sounding board for Eiffel programmers requesting general help from other Eiffel programmers.<br />
<br />
===What will you do to ensure that your accepted contributors stick with the project after the program concludes?===<br />
<br />
We will publicize the results in the Eiffel community, which highly values individual contributions. Working with Eiffel is fun and productive, we trust it will keep students motivated to contribute even further after the completion of the Google summer of code 2009.<br />
<br />
We also think that this could bring excellent opportunities for students for future work with Eiffel Software or its customers especially if they demonstrate commitment and creativity during the project.<br />
<br />
===Please select your backup group administrator===</div>Bmeyerhttps://dev.eiffel.com/index.php?title=GSOC_Application&diff=12394GSOC Application2009-03-12T22:11:38Z<p>Bmeyer: /* Why is your group applying to participate? What do you hope to gain by participating? */</p>
<hr />
<div>__NOTOC__<br />
[[Soc_2009|Our Google Summer of Code project ideas]]<br />
<br />
Link ID: eiffel<br />
<br />
Group Name: Eiffel Software<br />
<br />
Home Page URL: http://www.eiffel.com<br />
<br />
Public Email: ...<br />
<br />
<br />
===Description===<br />
<br />
<br />
====Scope====<br />
This project involves contributions to the EiffelStudio open-source development environment, based on the Eiffel language and Design by Contract.<br />
<br />
====EiffelStudio====<br />
EiffelStudio is a complete development environment available on numerous platforms. The mechanisms include a compiler for the Eiffel language using innovative incremental compilation technology (the "Melting Ice"), browsing, debugging, metrics, diagrams (UML or BON) with full roundtrip capabilities between text and graphics, automatic test generation, automatic test synthesis from failures etc. The EiffelStudio source consists of over 1.5 million source lines of code in Eiffel, complemented by about 100,000 lines of C for the runtime. While this is a large amount of code, with a long history, the simplicity of the Eiffel language and its modular structures make it possible for newcomers to start contributing after a surprisingly short amount of time.<br />
<br />
====Eiffel: method and language====<br />
The Eiffel language is distinguished by the following properties:<br />
*Full object-oriented model (not a hybrid with pre-O-O approaches).<br />
*Genericity (constrained and unconstrained), inheritance (single and multiple).<br />
*Design by Contract mechanisms (preconditions, postconditions, class invariants) for: analysis and design of reliable system; specification; automatic documentation; testing and debugging; control of the exception and inheritance mechanisms.<br />
*Agents (closures, i.e. high-level function objects, with the power of lambda calculus).<br />
*Designed for garbage collection and for highly efficient executables (performance comparable to C or C++).<br />
<br />
In addition, Eiffel is not just a language but a method of software development emphasizing software engineering principles such as: seamless development (covering the full lifecycle, not just implementation, in a consistent way); reversibility; uniform access; open-closed principle; command-query separation. These principles are developed in the book "Object-Oriented Software Construction" (Bertrand Meyer, 2nd edition, Prentice Hall), one of the all-time best-sellers in computer science, Jolt Award winner. The consequence for students is that using Eiffel for the Google Summer of Code means the ability not only to produce programs but to learn a software engineering discipline that will help them throughout their career.<br />
<br />
===Why is your group applying to participate? What do you hope to gain by participating?===<br />
<br />
For Eiffel Software, the major benefit of participating in the Google Summer of Code is to draw attention to the open-source EiffelStudio IDE and the possibility of triggering innovative developments to it.<br />
<br />
While many people are intellectually drawn to the power and elegance of Eiffel, in particular to the concepts of Design by Contract, few of them are aware that this is an open-source project with a ready infrastructure to support those who want to contribute. Many of these people are students in universities.<br />
<br />
In April 2007, Eiffel Software officially released the entire contents of EiffelStudio as open source. Almost two years after opening the source code to the community at large, there have been some major contributions to the tool such as the Eiffel Testing Framework. Some others are still work in progress (SCOOP, schema evolution, proofs, ...). We expect this project will raise more awareness of Eiffel and EiffelStudio, both in academia and in the open-source community at large. leading to new exciting contributions.<br />
<br />
For students, there are several potential benefits from participating in this project:<br />
<br />
*Learning modern high-quality software development in depth. Eiffel is widely recognized as one of the purest and most elegant implementations of object-oriented concepts and modern software engineering practices. Even people who program in other languages testify that practicing serious programming in Eiffel has made them better designers and programmers.<br />
<br />
*The concepts of Design by Contract are increasingly recognized as essential to the production of reliable software. Eiffel is the "native language" of Design by Contract and an excellent opportunity to understand the concepts in depth.<br />
<br />
*Working on EiffelStudio is a rare opportunity to contribute to a large open-source system, used for professional developments in a variety of industrial and academic applications, and make a difference. The architecture is such that even a student can bring a significant contribution over a summer of development.<br />
<br />
===What is the main public mailing list for your group?===<br />
http://groups.eiffel.com<br />
<br />
===Where is the main IRC channel for your group?===<br />
irc://irc.freenode.net/#eiffelstudio<br />
<br />
===What criteria do you use to select the members of your group? ===<br />
The most important conditions are:<br />
*The person should be an expert object-oriented developer, with design/architecture as well as implementation skills.<br />
*He or she should be thoroughly familiar with the architecture of EiffelStudio, and have contributed to it before.<br />
*They should have some project management experience, and be used to working with students and young engineers.<br />
*Finally, they must understand the purpose of the Google Summer of Code and agree with its objectives.<br />
<br />
We have identified a group of such people who will be available as mentors. Some of them are at Eiffel Software. We also will rely on other experienced contributors to EiffelStudio, external to the company, who have expressed interest. Some are Eiffel programmers who contribute to the technology on their spare time. We will also have one or two people from the Chair of Software Engineering at ETH Zurich (the Swiss Federal Institute of Technology), which has extensive experience with Eiffel and has already made major contributions to EiffelStudio, in particular in the area of automated testing.<br />
<br />
===Has your group participated previously?===<br />
No<br />
<br />
===If your group has not previously participated, have you applied in the past?===<br />
We applied last year. However we had not had the time to review the details of the Summer of Code program in depth and our application was judged not precise enough. After it was rejected we were able to discuss in detail with Google representatives what was missing in the application; we prepared the present one on the basis of that discussion, making sure we addressed the criticism received.<br />
<br />
===What license does your organization use?===<br />
Most of EiffelStudio uses the Gnu Public License, GPL v2.<br />
<br />
Some libraries use the Eiffel Forum License, EFLv2. This is a very simple, liberal open-source license whose [http://www.gnu.org/licenses/eiffel-forum-license-2.html text is available here]<br />
<br />
===What is the URL to the ideas list of your organization?===<br />
http://dev.eiffel.com/soc_2009<br />
<br />
===What is the main development mailing list for your group?===<br />
We use a forum at http://eiffelstudio.origo.ethz.ch/forum/13<br />
<br />
===What is the application template you would like contributors to your organization to use.?===<br />
We will not provide a template as we want students to be imaginative in the way they present themselves to us.<br />
<br />
===What is your plan for dealing with disappearing contributors?===<br />
<br />
We will interview all candidates personally (whenever possible with a voice interview) to ascertain:<br />
*Their dedication to the project<br />
*Their motivation for participating<br />
*Their competence in software development (we will run a mini-exam to test this objectively)<br />
<br />
We will only accept candidates who do well on all three points.<br />
<br />
Every candidate will have to write a project plan describing the goals, the milestones, the criteria for success. The description of goals will have to be prioritized, so that in case of difficulties the corresponding project will produce a subset of the optimal result rather than no usable outcome.<br />
<br />
The mentors will establish an explicit communication schedule with their mentees, with regular checkpoints.<br />
<br />
The Eiffel approach uses a "cluster model" (see Bertrand Meyer, "Object-Oriented Software Construction", 2nd edition, Prentice Hall, chapter 28), an incremental model in which code appears early in the process. This means that it is essentially impossible with such a model to "hand-wave" one's way through the project by producing (say) numerous UML diagrams and then not implementing them. This incremental nature of the process will enable mentors to check that the students are actually progressing, and to intervene if they are not.<br />
<br />
Another highlight of the Eiffel approach is of course the reliance on clearly defined APIs, expressed through contracts. Contract provide a much more precise specification of functionality than ordinary approaches. The student developers will be required to provide contracts for both implemented parts and parts to be implemented. This means that even if a contributor drops out in spite of all the preceding precautions, he or she will leave behind, for the parts not yet implemented, a precise description of the expected functionality, making it easier for someone else to take over.<br />
<br />
===What is your plan for dealing with disappearing members?===<br />
<br />
Some members are employees of Eiffel Software and the mentoring will be part of their duties. Others will be selected among people who have proved their professionalism, competence and dedication through their actual contributions to released open-source products. <br />
<br />
We will put in place a members mailing list and require that members inform each other of the progress of the students they mentor. This means that in the case of a mentor becoming unexpectedly unavailable (illness etc.) another can take over. To be even more proactive we are considering a system of "pair mentoring" where each student has a primary and a secondary mentor, who both know what he or she is doing.<br />
<br />
===What steps will you take to encourage contributors to interact with your community before, during, and after the program?===<br />
<br />
All projects will be required to have a standard setup, through [http://origo.ethz.ch Origo] or a similar framework, providing them automatically with Wiki pages, a forum, a configuration management (Subversion) repository, signup management etc. In addition, the user list at groups.eiffel.com is highly active and provides an excellent sounding board for Eiffel programmers requesting general help from other Eiffel programmers.<br />
<br />
===What will you do to ensure that your accepted contributors stick with the project after the program concludes?===<br />
<br />
We will publicize the results in the Eiffel community, which highly values individual contributions. Working with Eiffel is fun and productive, we trust it will keep students motivated to contribute even further after the completion of the Google summer of code 2009.<br />
<br />
We also think that this could bring excellent opportunities for students for future work with Eiffel Software or its customers especially if they demonstrate commitment and creativity during the project.<br />
<br />
===Please select your backup group administrator===</div>Bmeyerhttps://dev.eiffel.com/index.php?title=GSOC_Application&diff=12393GSOC Application2009-03-12T22:10:59Z<p>Bmeyer: /* Why is your group applying to participate? What do you hope to gain by participating? */</p>
<hr />
<div>__NOTOC__<br />
[[Soc_2009|Our Google Summer of Code project ideas]]<br />
<br />
Link ID: eiffel<br />
<br />
Group Name: Eiffel Software<br />
<br />
Home Page URL: http://www.eiffel.com<br />
<br />
Public Email: ...<br />
<br />
<br />
===Description===<br />
<br />
<br />
====Scope====<br />
This project involves contributions to the EiffelStudio open-source development environment, based on the Eiffel language and Design by Contract.<br />
<br />
====EiffelStudio====<br />
EiffelStudio is a complete development environment available on numerous platforms. The mechanisms include a compiler for the Eiffel language using innovative incremental compilation technology (the "Melting Ice"), browsing, debugging, metrics, diagrams (UML or BON) with full roundtrip capabilities between text and graphics, automatic test generation, automatic test synthesis from failures etc. The EiffelStudio source consists of over 1.5 million source lines of code in Eiffel, complemented by about 100,000 lines of C for the runtime. While this is a large amount of code, with a long history, the simplicity of the Eiffel language and its modular structures make it possible for newcomers to start contributing after a surprisingly short amount of time.<br />
<br />
====Eiffel: method and language====<br />
The Eiffel language is distinguished by the following properties:<br />
*Full object-oriented model (not a hybrid with pre-O-O approaches).<br />
*Genericity (constrained and unconstrained), inheritance (single and multiple).<br />
*Design by Contract mechanisms (preconditions, postconditions, class invariants) for: analysis and design of reliable system; specification; automatic documentation; testing and debugging; control of the exception and inheritance mechanisms.<br />
*Agents (closures, i.e. high-level function objects, with the power of lambda calculus).<br />
*Designed for garbage collection and for highly efficient executables (performance comparable to C or C++).<br />
<br />
In addition, Eiffel is not just a language but a method of software development emphasizing software engineering principles such as: seamless development (covering the full lifecycle, not just implementation, in a consistent way); reversibility; uniform access; open-closed principle; command-query separation. These principles are developed in the book "Object-Oriented Software Construction" (Bertrand Meyer, 2nd edition, Prentice Hall), one of the all-time best-sellers in computer science, Jolt Award winner. The consequence for students is that using Eiffel for the Google Summer of Code means the ability not only to produce programs but to learn a software engineering discipline that will help them throughout their career.<br />
<br />
===Why is your group applying to participate? What do you hope to gain by participating?===<br />
<br />
For Eiffel Software, the major benefit of participating in the Google Summer of Code is to draw attention to the open-source EiffelStudio IDE and the possibility of contributing innovative developments to it.<br />
<br />
While many people are intellectually drawn to the power and elegance of Eiffel, in particular to the concepts of Design by Contract, few of them are aware that this is an open-source project with a ready infrastructure to support those who want to contribute. Many of these people are students in universities.<br />
<br />
In April 2007, Eiffel Software officially released the entire contents of EiffelStudio as open source. Almost two years after opening the source code to the community at large, there have been some major contributions to the tool such as the Eiffel Testing Framework. Some others are still work in progress (SCOOP, schema evolution, proofs, ...). We expect this project will raise more awareness of Eiffel and EiffelStudio, both in academia and in the open-source community at large. leading to new exciting contributions.<br />
<br />
For students, there are several potential benefits from participating in this project:<br />
<br />
*Learning modern high-quality software development in depth. Eiffel is widely recognized as one of the purest and most elegant implementations of object-oriented concepts and modern software engineering practices. Even people who program in other languages testify that practicing serious programming in Eiffel has made them better designers and programmers.<br />
<br />
*The concepts of Design by Contract are increasingly recognized as essential to the production of reliable software. Eiffel is the "native language" of Design by Contract and an excellent opportunity to understand the concepts in depth.<br />
<br />
*Working on EiffelStudio is a rare opportunity to contribute to a large open-source system, used for professional developments in a variety of industrial and academic applications, and make a difference. The architecture is such that even a student can bring a significant contribution over a summer of development.<br />
<br />
===What is the main public mailing list for your group?===<br />
http://groups.eiffel.com<br />
<br />
===Where is the main IRC channel for your group?===<br />
irc://irc.freenode.net/#eiffelstudio<br />
<br />
===What criteria do you use to select the members of your group? ===<br />
The most important conditions are:<br />
*The person should be an expert object-oriented developer, with design/architecture as well as implementation skills.<br />
*He or she should be thoroughly familiar with the architecture of EiffelStudio, and have contributed to it before.<br />
*They should have some project management experience, and be used to working with students and young engineers.<br />
*Finally, they must understand the purpose of the Google Summer of Code and agree with its objectives.<br />
<br />
We have identified a group of such people who will be available as mentors. Some of them are at Eiffel Software. We also will rely on other experienced contributors to EiffelStudio, external to the company, who have expressed interest. Some are Eiffel programmers who contribute to the technology on their spare time. We will also have one or two people from the Chair of Software Engineering at ETH Zurich (the Swiss Federal Institute of Technology), which has extensive experience with Eiffel and has already made major contributions to EiffelStudio, in particular in the area of automated testing.<br />
<br />
===Has your group participated previously?===<br />
No<br />
<br />
===If your group has not previously participated, have you applied in the past?===<br />
We applied last year. However we had not had the time to review the details of the Summer of Code program in depth and our application was judged not precise enough. After it was rejected we were able to discuss in detail with Google representatives what was missing in the application; we prepared the present one on the basis of that discussion, making sure we addressed the criticism received.<br />
<br />
===What license does your organization use?===<br />
Most of EiffelStudio uses the Gnu Public License, GPL v2.<br />
<br />
Some libraries use the Eiffel Forum License, EFLv2. This is a very simple, liberal open-source license whose [http://www.gnu.org/licenses/eiffel-forum-license-2.html text is available here]<br />
<br />
===What is the URL to the ideas list of your organization?===<br />
http://dev.eiffel.com/soc_2009<br />
<br />
===What is the main development mailing list for your group?===<br />
We use a forum at http://eiffelstudio.origo.ethz.ch/forum/13<br />
<br />
===What is the application template you would like contributors to your organization to use.?===<br />
We will not provide a template as we want students to be imaginative in the way they present themselves to us.<br />
<br />
===What is your plan for dealing with disappearing contributors?===<br />
<br />
We will interview all candidates personally (whenever possible with a voice interview) to ascertain:<br />
*Their dedication to the project<br />
*Their motivation for participating<br />
*Their competence in software development (we will run a mini-exam to test this objectively)<br />
<br />
We will only accept candidates who do well on all three points.<br />
<br />
Every candidate will have to write a project plan describing the goals, the milestones, the criteria for success. The description of goals will have to be prioritized, so that in case of difficulties the corresponding project will produce a subset of the optimal result rather than no usable outcome.<br />
<br />
The mentors will establish an explicit communication schedule with their mentees, with regular checkpoints.<br />
<br />
The Eiffel approach uses a "cluster model" (see Bertrand Meyer, "Object-Oriented Software Construction", 2nd edition, Prentice Hall, chapter 28), an incremental model in which code appears early in the process. This means that it is essentially impossible with such a model to "hand-wave" one's way through the project by producing (say) numerous UML diagrams and then not implementing them. This incremental nature of the process will enable mentors to check that the students are actually progressing, and to intervene if they are not.<br />
<br />
Another highlight of the Eiffel approach is of course the reliance on clearly defined APIs, expressed through contracts. Contract provide a much more precise specification of functionality than ordinary approaches. The student developers will be required to provide contracts for both implemented parts and parts to be implemented. This means that even if a contributor drops out in spite of all the preceding precautions, he or she will leave behind, for the parts not yet implemented, a precise description of the expected functionality, making it easier for someone else to take over.<br />
<br />
===What is your plan for dealing with disappearing members?===<br />
<br />
Some members are employees of Eiffel Software and the mentoring will be part of their duties. Others will be selected among people who have proved their professionalism, competence and dedication through their actual contributions to released open-source products. <br />
<br />
We will put in place a members mailing list and require that members inform each other of the progress of the students they mentor. This means that in the case of a mentor becoming unexpectedly unavailable (illness etc.) another can take over. To be even more proactive we are considering a system of "pair mentoring" where each student has a primary and a secondary mentor, who both know what he or she is doing.<br />
<br />
===What steps will you take to encourage contributors to interact with your community before, during, and after the program?===<br />
<br />
All projects will be required to have a standard setup, through [http://origo.ethz.ch Origo] or a similar framework, providing them automatically with Wiki pages, a forum, a configuration management (Subversion) repository, signup management etc. In addition, the user list at groups.eiffel.com is highly active and provides an excellent sounding board for Eiffel programmers requesting general help from other Eiffel programmers.<br />
<br />
===What will you do to ensure that your accepted contributors stick with the project after the program concludes?===<br />
<br />
We will publicize the results in the Eiffel community, which highly values individual contributions. Working with Eiffel is fun and productive, we trust it will keep students motivated to contribute even further after the completion of the Google summer of code 2009.<br />
<br />
We also think that this could bring excellent opportunities for students for future work with Eiffel Software or its customers especially if they demonstrate commitment and creativity during the project.<br />
<br />
===Please select your backup group administrator===</div>Bmeyer