\relax \@writefile{toc}{\contentsline {chapter}{\numberline {1}From Scheme to Java}{1}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {1.1}Introduction}{1}} \@writefile{toc}{\contentsline {section}{\numberline {1.2}What is an Object?}{1}} \newlabel{object}{{1.2}{1}} \@writefile{toc}{\contentsline {section}{\numberline {1.3}Java Mechanics}{3}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.1}Notation and Syntax}{3}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.2}Java Expressions}{3}} \newlabel{Expressions}{{1.3.2}{3}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.3}Precedence of Operations}{6}} \newlabel{precedence}{{1.3.3}{6}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.4}Java Statements}{8}} \newlabel{statement}{{1.3.4}{8}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.5}The Structure of Java Programs}{9}} \newlabel{structure}{{1.3.5}{9}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.6}Printing Object Values}{12}} \newlabel{toString}{{1.3.6}{12}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.7}Defining Constants}{13}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.3.8}Capitalization and Commenting Conventions}{14}} \@writefile{toc}{\contentsline {section}{\numberline {1.4}Java Data Types}{15}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.4.1}Primitive Types}{15}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.4.2}Object Types}{17}} \@writefile{toc}{\contentsline {section}{\numberline {1.5}Java Class Definitions}{18}} \newlabel{class}{{1.5}{18}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.5.1}Defining Classes to Represent Compound Data}{18}} \newlabel{dataDef}{{1.5.1}{18}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.5.2}Constructors}{19}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.5.3}Defining Instance Methods}{20}} \@writefile{toc}{\contentsline {section}{\numberline {1.6}The Union and Composite Patterns}{22}} \newlabel{composite}{{1.6}{22}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.6.1}Member Hoisting}{27}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.6.2}The Composite Pattern}{30}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.6.3}Defining Instance Methods for a Composite Class}{32}} \newlabel{CompositeMethod}{{1.6.3}{32}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.6.4}Conditional Statements}{36}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.6.5}Blocks}{36}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.6.6}Singleton Pattern}{37}} \@writefile{toc}{\contentsline {section}{\numberline {1.7}Basic Program Design}{38}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.7.1}The Design Recipe}{38}} \@writefile{toc}{\contentsline {subsubsection}{Data Analysis and Design}{38}} \newlabel{design}{{1.7.1}{38}} \@writefile{toc}{\contentsline {subsubsection}{Contract and Header}{39}} \@writefile{toc}{\contentsline {subsubsection}{Examples}{39}} \@writefile{toc}{\contentsline {subsubsection}{Template}{40}} \@writefile{toc}{\contentsline {subsubsection}{Body}{40}} \@writefile{toc}{\contentsline {subsubsection}{Test}{40}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.7.2}An Extended Example: Lists}{41}} \newlabel{designEx}{{1.7.2}{41}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.7.3}Type Predicates and Type Casts in Java}{44}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.7.4}A Sample IntList Program}{46}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.7.5}Inheritance and the Composite Pattern}{48}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.7.6}Overriding {\tt \relax \fontsize {10.95}{13.6}\selectfont \abovedisplayskip 11\p@ plus3\p@ minus6\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 9\p@ plus3\p@ minus5\p@ \parsep 4.5\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip equals}}{50}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.7.7}Helper Methods, Packages, and Visibility}{51}} \newlabel{visibility}{{1.7.7}{51}} \@writefile{toc}{\contentsline {section}{\numberline {1.8}Unit Testing in Java}{53}} \newlabel{test}{{1.8}{53}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.8.1}Tests Should Check Themselves}{53}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.8.2}Tests Should be an Integral Part of the Coding Process}{54}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.8.3}Write The Tests First}{54}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.8.4}Unit Testing and JUnit}{55}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.8.5}Conclusion}{57}} \@writefile{toc}{\contentsline {section}{\numberline {1.9}Interfaces}{57}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.9.1}Multiple Inheritance}{58}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.9.2}Implicit Polymorphism}{59}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.9.3}Interface Types}{60}} \@writefile{toc}{\contentsline {section}{\numberline {1.10}Using Classes and Interfaces to Enforce Invariants}{62}} \@writefile{toc}{\contentsline {section}{\numberline {1.11}The Command Pattern}{63}} \newlabel{Command}{{1.11}{63}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.11.1}Static Members of Classes}{69}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.11.2}Complete Java Programs}{71}} \@writefile{toc}{\contentsline {subsubsection}{A Complete Java Program}{71}} \@writefile{toc}{\contentsline {section}{\numberline {1.12}Loose Ends}{72}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.12.1}Local variables}{72}} \newlabel{localvar}{{1.12.1}{72}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.12.2}Casts and Static Type Checking}{73}} \newlabel{typechecking}{{1.12.2}{73}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.12.3}Exceptions as Errors}{75}} \newlabel{Exceptions}{{1.12.3}{75}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.12.4}Name and Method Overloading}{77}} \newlabel{overloading}{{1.12.4}{77}} \@writefile{toc}{\contentsline {section}{\numberline {1.13}The Visitor Pattern}{78}} \newlabel{visitors}{{1.13}{78}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.13.1}Interpreting Arithmetic Expressions}{78}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.13.2}Openness in Data Design}{82}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.13.3}Polymorphic Visitors}{84}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.13.4}Polymorphic Visitors with Arguments}{87}} \@writefile{toc}{\contentsline {section}{\numberline {1.14}Unusual Situations versus Runtime Errors}{88}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.14.1}A Motivating Example}{89}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.14.2}Using Java Exceptions}{91}} \@writefile{toc}{\contentsline {subsection}{\numberline {1.14.3}Exception Handling}{94}} \newlabel{catch}{{1.14.3}{94}} \@writefile{toc}{\contentsline {chapter}{\numberline {2}Object-Oriented Data Structures}{97}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {2.1}Sequences}{97}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.1}Arrays}{97}} \newlabel{Arrays}{{2.1.1}{97}} \@writefile{toc}{\contentsline {subsubsection}{Recipes for Processing Arrays}{99}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.2}Lists}{103}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.3}Immutable Sequences}{103}} \newlabel{immutable}{{2.1.3}{103}} \@writefile{toc}{\contentsline {subsubsection}{Linked Representation}{104}} \@writefile{toc}{\contentsline {subsubsection}{Contiguous Representation}{108}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.4}Mutable Sequences}{110}} \@writefile{toc}{\contentsline {subsubsection}{Singly-linked Mutable List Representation}{110}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.5}List Containers}{111}} \newlabel{containers}{{2.1.5}{111}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.6}Quasi-Functional Lists}{114}} \@writefile{toc}{\contentsline {subsubsection}{Nested Classes vs. Inner Classes}{118}} \newlabel{nested}{{2.1.6}{118}} \@writefile{toc}{\contentsline {subsubsection}{Mutable Visitors}{119}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.7}Extended Mutable Lists}{120}} \@writefile{toc}{\contentsline {subsubsection}{Formulating Traditional Linked Lists as Objects}{121}} \@writefile{toc}{\contentsline {subsubsection}{Spaghetti References (akin to spaghetti code)}{128}} \@writefile{toc}{\contentsline {subsubsection}{The Iterator Pattern}{128}} \newlabel{Iterator}{{2.1.7}{128}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.8}An Implementation}{130}} \@writefile{toc}{\contentsline {subsubsection}{BiLists and Their Iterators}{134}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.9}Alternate Representations of Lists}{140}} \@writefile{toc}{\contentsline {subsubsection}{Arrays}{140}} \@writefile{toc}{\contentsline {subsection}{\numberline {2.1.10}Hybrid Representations of Sequences}{141}} \@writefile{toc}{\contentsline {chapter}{\numberline {3}Graphical User Interfaces}{142}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {3.1}GUI Programming}{142}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Model-View-controller Pattern}{143}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}How to Write a View}{144}} \@writefile{toc}{\contentsline {paragraph}{Warning}{145}} \@writefile{toc}{\contentsline {paragraph}{Coding the View Class}{146}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.3}How to Write a Simple Model}{149}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.4}How to Write a Controller}{150}} \@writefile{toc}{\contentsline {section}{\numberline {3.2}What is Concurrent Programming?}{152}} \@writefile{toc}{\contentsline {subsubsection}{Synchronized methods and statements}{157}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}Deadlock}{159}}