This course provides a thorough introduction to the theory and practice of object-oriented design and programming technique, with emphasis on the effective utilization of interfaces and libraries in Java. A substantial part of the course is devoted to projects that employ modern software development practices that include, in addition to object-orientation and team work, use of a professional integrated development environment (Eclipse) and software tools that support documentation, unit testing, revision control, and system building.
This is the first offering of a new course that may be used to fulfill the B.S. degree advanced course distribution requirement in the programming languages area (middle digit 2).
Catalog description: C322 Object-Oriented Software Methods (4 cr.) P: C212 or permission of the instructor. Includes design and implementation of complex software systems, and applications exploiting the object-oriented paradigm. Selection and effective utilization of libraries and interfaces.
Schedule
| Course | Cr | Section | Time | Room | Instructor |
| C322 | 4 | 27543 | TR 11:15-12:30 | LH115 | Haynes C |
| C322 | Lab | 27546 | F 9:30-11:00 | LI 503 | Haynes C |
Texts
Topics will be ordered and interleaved as appropriate, and some may be presented in lab time. 1. Non-object-oriented Java and using built-in objects A. primitive types B. control constructs C. static methods and variables D. message passing E. strings, console I/O F. exceptions 2. Defining simple classes A. instance variables B. instance methods C. static vs. instance variables and methods D. self-reference E. constructors 3. Interfaces and polymorphism A. interface definition and use B. subtyping C. casting D. overloading 4. Object-oriented design relationships A. instantiation (is-a relationship) B. aggregation (has-a relationship) C. UML class diagrams 5. Inheritance A. method inheritance and overriding B. variable inheritance and shadowing C. dynamic method dispatch D. abstract classes 6. Generics A. type abstraction B. type instantiation C. type inference D. wildcards E. bounded types 7. Application frameworks B. input/output C. graphic user interface D. collections 8. Software development tools A. integrated development environment (IDE) projects and views B. debuggers: breakpoints, stepping, inspection, and watches C. shared archives and version control D. code refactoring and exploration E. project build automation F. beans 9. Object-oriented design patterns A. observer pattern B. decorator pattern C. factory and builder patterns D. singleton pattern E. command pattern F. adapter and facade patterns G. template pattern H. iterator and composite patterns I. state pattern J. proxy pattern K. bridge pattern L. prototype and memento patterns M. chain of responsibility pattern N. flyweight pattern O. interpreter and visitor patterns P. mediator pattern 10. Design methodologies A. class-responsibility-collaborator cards B. use-case scenarios C. state diagrams D. sequence diagrams E. refactoring 11. Development practices A. software life cycle B. top-down and bottom-up design C. waterfall model D. extreme programming E. coding style conventions 12. Introduction to distributed computing A. sockets B. serialization C. remote procedure calls D. remote method invocation 13. Project reports