Object-Oriented Software Engineering
Fall 2001


Professor: Glenn D. Blank   Office: 328 Packard Lab
Phone: 610-758-4867  Hours: TWTh 2:45-3:45PM 
E-mail: glenn.blank@lehigh.edu   Web: http://www.cse.lehigh.edu/~glennb

Course Description: Design and construction of modular, reusable, extensible and portable software using statically typed object-oriented programming languages (Eiffel, C++, Java). Abstract data types; genericity; multiple inheritance; use and design of software libraries; persistence and object-oriented databases; impact of OOP on the software life cycle.

Prerequisites
: some familiarity with the C++ programming language and data structures
Texts
(first two strongly recommended; others available on reserve Fairchild-Martindale library or via the web):
      Martin Fowler, UML Distilled, Addison-Wesley, 1999.
      Deitel and Deitel.  How to Program: Java, 5th edition. Prentice-Hall, 2001.  Good, popular resource for examples and explanations of Java code.
      Bruce Eckel, Thinking in Java, 2nd edition, Prentice Hall, 2000.   IMO, a better written book for more experienced programmers.
          (This book is available on the web: http://www.mindview.net/Books/TIJ/.)
      Bruce Eckel, Thinking in C++, 2nd edition, Prentice Hall, 2000.
          (Also available on the web: http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html).
      Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Design Patterns, Addison-Wesley, 1995.
      Bruce Eckel, Thinking in Design Patterns, preliminary version, http://www.mindview.net/Books/TIPatterns/.
      Pete Thomas & Ray Weedon, Object-Oriented Programming in Eiffel, Addison Wesley, 1995.
      Bertrand Meyer, Object-Oriented Software Construction, Prentice Hall, 1997, 2nd edition, 1998.
      Peter Coad & Jill Nicola, Object-Oriented Programming, Yourdon Press, 1993.
      Scott Meyers, Effective C++, 2nd Edition, Addison-Wesley, 1997.
      Shari Pfleeger, Software Engineering: Theory and Practice, 2nd Edition, Prentice-Hall, 2001.
Requirements
:
      Undo analysis, and analysis, design and implementation of "fruit" problem: 20%
      Inquiry-based research exercises and online post-test: 10%
      Project: substantial software development in Java or C++, 70%, apportioned by points as follows:
                  Analysis and design: 30 points
                  Program implementation and testing: 30 points
                  Customer (requests a project, works with analyst, evaluates product; kudos for representing an outside customer): 10 points
                  Librarian (tracks documentation, project schedules and minutes, test data, deliverables and maintenance manuals): 10 points
                  Project manager (coordinates team participants by roles, manages schedules and resources and meetings): 10 points
                  Subcontractor (works on a specified part of another project, negotiated with team and project manager): 10 points
            Every student must participate on an analysis/design and on a programming/testing team (2 per team).
            Every student must participate as either customer, librarian, project manager or subcontractor.
            Customer and analyst/designers may not work on the same project.
            Analyst/designers and programmers may not work on the same project.
            Subcontractors may be hired for specific tasks by either an analysis/design or programming/testing team.
            Each team will evaluate other teams in terms of criteria to be determined, probably using CourseInfo surveys.
            I will also review and modify student evaluations.
            Projects should tackle non-trivial problems (they may be prototypes), i.e., with at least a dozen distinct
            classes of objects and exploit inheritance and dynamic binding.  Project ideas:
                     Games (Monopoly, Battleship, Othello, children’s board games, etc.)
                     Simulation systems (network configuration, finite state machine, OS, SimCity variants,
                     Blocks world (an AI program responding to simple commands by moving blocks on a screen)
                     Virtual reality systems, specialized language interpreters, etc.
            Requirements, analysis and design specifications due at dates specified during semester.
Extra credit: seminar presentation on a topic related to the course (i.e., interesting issues with project, research topics)

Syllabus

Week

Topics

Readings (assignments and project activities dates (tentative)

1

Software quality & life cycles

Thomas&Weedon ch 1, B. Meyer ch 3-4

2

Classes & inheritance in C++

Eckel C++, ch 1 and 15 (customer proposals Thurs, 9/6)

3

Requirements and use cases

Fowler&Scott, ch 1-3 (negotiate customer and analysis teams, Tues, 9/11)

4

Object-oriented analysis

Coad&Nicola ch 1, Fowler 5 (project requirements, use cases Fri, 9/28)

5

Abstract Data Types

Thomas&Weedon chapters 3&8 (undo, fruit analysis, Tues 10/2)

6

Object-oriented design

Thomas&Weedon ch 15; Coad&Nicola ch 2 (project analysis, 10/12)

7

Java

Deitel and Deitel or Eckel, Java (fruit design, date TDB)

8

Java AWT and Swing

Deitel and Deitel or Eckel, Java

10

Issues for inheritance

B. Meyer, ch 20, 24; Eckel C++ ch 22 (project design, date TBD)

11

Idioms and patterns

S. Meyers; Gamma Design Patterns (fruit implementation, date TBD)

11

C++ templates & libraries

Eckel C++, ch 17-21

12

Code reviews, testing, delivery

Pfleeger, ch 8-10

13

Java Beans; persistence

Eckel Java, ch 14-15, appendix A

14

Project presentations

(project prototypes)