<?xml version="1.0"?>
<!-- ?xml-stylesheet type="text/xsl" href="TrainingCatalog.xsl"? -->
<!DOCTYPE course SYSTEM "TrainingCatalog.dtd">
<course title="Thinking in Objects">
  <keywords>
    <keyword>object-oriented training</keyword>
	<keyword>c++</keyword>
	<keyword>java</keyword>
	<keyword>object-oriented</keyword>
	<keyword>object oriented</keyword>
	<keyword>o-o</keyword>
	<keyword>design</keyword>
	<keyword>software</keyword>
	<keyword>programming</keyword>
	<keyword>training</keyword>
  </keywords>
  <subtitle>Accelerated Technical Training for Programmers</subtitle>
  <overview>
    <p>
	Are you getting ready to tackle an object-oriented
	software development project?
	Are you at home with conventional procedural
	design approaches but new to object-oriented design?
	Are you still uncomfortable with O-O terminology?
	Would mastery of the new O-O techniques and tools
	like UML, CRC cards, use-cases, encapsulation, and
    sequence diagrams help you to be more effective in your work?
	If so, this course is for you.
	</p>
	<p>
	Design problems are presented, and sample solutions
	are shown (both diagrammatically and in Java) and
	solution techniques are practiced.
	You will apply the techniques yourself, and your
	work will be reviewed with the instructor and
	discussed with the class.
	</p>
	<p>
	In two intense days, you will
	acquire the terminology of this new
	software design paradigm, and you will be able to apply
	the most popular and widely-used techniques for creating
	and documenting object-oriented designs.
	</p>
  </overview>
  <duration units="days">2</duration>
  <courseware>
    <description>workbook, 250 pages, spiral-bound</description>
    <url>http://www.keller.com/tio</url>
  </courseware>
  <format>
	<description>Emphasis on practical skills</description>
	<description>Lots of exercises, practice sessions, and discussion</description>
	<description>Instructor-led and classroom-based</description>
	<description>The materials for this class are available on the web</description>
  </format>
  <audience>
	<description>
      Thinking in Objects is for experienced software designers making
	  the transition to modern object-oriented paradigms and methods.
	</description>
  </audience>
  <prerequisites minimum="3">
    <prerequisite>
      You have experience designing software.
    </prerequisite>
    <prerequisite>
      You have done some programming (in any language.)
    </prerequisite>
    <prerequisite>
      You face an object-oriented software design project in your job.
    </prerequisite>
  </prerequisites>
  <contents>
    <chapter title="Chapter 1: Housekeeping"/>
    <chapter title="Chapter 2: Why Objects?"/>
    <chapter title="Chapter 3: The Vocabulary of O-O"/>
    <chapter title="Chapter 4: Below the Waterline:  O-O Design"/>
    <chapter title="Chapter 5: Describing Requirements with Use Cases"/>
    <chapter title="Chapter 6: Identifying Potential Classes"/>
    <chapter title="Chapter 7: Finding the Core Classes"/>
    <chapter title="Chapter 8: Assigning Responsibilities to Classes"/>
    <chapter title="Chapter 9: CRC Cards"/>
    <chapter title="Chapter 10: Identifying Relationships and Developing the Class Diagram"/>
    <chapter title="Chapter 11: Using Sequence Diagrams to Specify Dynamic Behavior"/>
    <chapter title="Chapter 12: Iterative Construction"/>
    <chapter title="Chapter 13: Construction"/>
    <chapter title="Chapter 14: Other Developments in Objects"/>
    <chapter title="Chapter 15: Conclusion"/>
    <chapter title="Appendix A: Design Patterns"/>
    <chapter title="Appendix B: Architectural Patterns"/>
  </contents>
  <objectives>
	<objective>Explain and apply the object-oriented paradigm</objective>
    <objective>Design and use classes, objects, inheritance,
	  superclasses, subclasses, container classes, and polymorphism</objective>
	<objective>Apply techniques of modularity, reusability, and
	  encapsulation</objective>
	<objective>Reduce costs of programming</objective>
	<objective>Develop object-oriented designs with state of the
	  art techniques including use-cases, class lists,
	  assignment of responsibilities to and collaborations
	  among classes, and dynamic behavior analysis</objective>
	<objective>Design and use constructors and other methods</objective>
	<objective>Do domain analysis and responsibility-driven design</objective>
	<objective>Recognize and apply design patterns</objective>
	<objective>Express designs in Unified Modeling Language (UML),
	  Class, Responsibilities, and Collaborations (CRC) cards,
	  use-case diagrams, class diagrams, and sequence diagrams</objective>
  </objectives>
  <method>
	<description>
	  Examples of object-oriented designs are presented,
	  including a bank account,
	  an automated teller machine,
	  an electronic checkbook,
	  a waiting line simulation,
	  a room scheduling system,
	  an appointment system,
	  a quick sort,
	  and more.
	</description>
	<description>
	    You also develop object-oriented designs of your own,
	    applying principles discussed in class.
    </description>
  </method>
  <references>
	<reference>
	  Bellin and Simone,
	  The CRC Card Book,
	  Addison-Wesley Object Technology Series, 1997,
	  paperback, 260 pages, ISBN 0201895358, $29.00,
	</reference>
	<reference><url>http://www.keller.com/tio/tio-references.html</url></reference>
  </references>
  <setup>
	<requirement>classroom</requirement>
	<requirement>a PC for the instructor</requirement>
	<requirement>Microsoft PowerPoint</requirement>
	<requirement>a data projector</requirement>
	<requirement>connection to the Internet</requirement>
	<url>http://www.keller.com/tio/</url>
  </setup>
  <site>
	The course can be taught in your classroom,
	anywhere in the world.
  </site>
  <travel>
    Travel outside the San Francisco Bay Area requires
	reimbursement of the instructor's travel expense.
  </travel>
</course>

