The goal of this course is to provide the most practical knowledge and experience for real-world software development (not covered in the Computer Science major core courses: C211, C212, C311, and C343). The primary elements are:
object-oriented design and implementation technique
project development using modern software development practices
teamwork and presentation skills
This course provides an introduction to the theory and practice of object-oriented analysis, design, and programming technique. 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 and other software development tools, that support documentation, unit testing, and collaboration.
This 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.
| Name | Office [1] | Phone [2] | Office hours [3,4] | |
| Prof. Chris Haynes | chaynes | LH230F | 855-3376 office |
TBA |
| Saurabh Ajmera | sajmera | TBA | TBA | TBA |
[1] Lindley Hall (LH) is the first building north of Rawles Hall. LH230 is the suite at the south end of the second floor.
[2] Please limit home calls to 9am-5pm.
[3] No appointments are needed to see us during office hours. Don't ask for an appointment, just come. We'll be there. First-come first-served, but let us know if you are waiting so we don't keep you waiting too long. If office hours don't work for you, appointments can be made at other times.
[4] TBA is To Be Announced
| Course | Cr | Section | Time | Room |
| C322 | 4 | 13641 | MW 8-9:15 | LH115 |
| C322 | Lab | 13642 | F 9:30-11:00 | LI503 |
Object-Oriented Design & Patterns, 2nd Ed., by Cay Horstmann, Wiley, 2006.
Additional readings from the Web as assigned.
The core of the course is team projects taking about two-thirds of the semester. Aspects of individual project work are reviewed regularly by the instructors, the class, and other project teams. Quality, not quantity, of code and documentation is most important.
Each team will make regular written progress reports and both interim and final projects reports in class.
Elements of software quality include:
1. Non-object-oriented language features 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. Application frameworks B. input/output C. graphic user interface D. collections E. use of generics 7. 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 8. Object-oriented design patterns A. creational patterns B. structural patterns C. behavioral patterns D. combinations of patterns 8. Design methodologies A. class-responsibility-collaborator cards B. use-case scenarios C. state diagrams D. sequence diagrams E. refactoring 10. Development practices A. software life cycle B. top-down and bottom-up design C. waterfall model D. extreme programming E. coding style conventions 11. Object-oriented design principles A. open-closed principle B. encapsulate what varies C. single Responsibility Principle D. Liskov substitution principle E. program to an interface, not an implementation