A course that provides an understanding about object-oriented programming approach which includes classes, objects,
inheritance, interfaces, and object-oriented collection class libraries for abstract data types.

It compares and contrasts procedural/functional approach to object-oriented programming approach. This also covers
designing, coding, testing, and debugging programs using OOP concepts like abstraction, encapsulation, inheritance, and
polymorphism.

The students are expected to demonstrate their ability to apply important object-oriented programming concepts and develop
a program with qualities related to object orientation, namely cohesion, minimal coupling, modifiability, and extensibility as
well as a few elementary object-oriented design patterns.