COMP 373: Objects, Frameworks, and Patterns¶
Object-orientation continues to be a dominant approach to software development. This advanced programming-intensive course studies object-oriented analysis, design, and implementation from a design patterns perspective.
You need to have knowledge of Java, C# or a similar object-oriented language, data structures, and fair sophistication with OOP - some experience with designing interacting, cooperating classes that would come in an intermediate discussion of software patterns. Software engineering is recommended but not required like the background listed above.
Object-oriented programming has become the dominant software development paradigm of the 1990s. This course assumes familiarity with the main constituents of the object-oriented methodology:
- OOP = abstraction + inheritance + polymorphism
Building on this foundation, the course studies three major topics:
First, the course discusses patterns, reusable solutions to recurring software design problems. Common design patterns such as Composite, Decorator, and Command typically involve several classes related by composition and inheritance.
Next, the course examines how object-oriented language features such as composition, encapsulation, inheritance, and dynamic binding can be implemented. These features are studied in the context of an interpreter for a simplified object-oriented language.
Finally, the course explores programming with reusable components. Specifically, the standard features of component architectures are discussed: properties, events, methods, and persistence, and introspection.
This course is heavily project-oriented. Students study each major topic in the context of a substantial programming project. The reuse of existing class libraries and software components is emphasized.
Grading will be based upon the following components: programming projects, quizzes, in-class exams, and the final exam.
Proficiency in the use of object-oriented languages, frameworks, and patterns; advanced understanding of key language mechanisms such as delegation, inheritance, polymorphism, and reflection; familiarity with object-oriented modeling and development tools and test-driven development.