This course builds on the fundamental programming skills from prerequisite courses to explore advanced concepts used in modern object oriented software design to create software that is robust, reusable, and extensible in varying problem domains. Cadets gain confidence in their abilities to model, implement, and test solutions to demanding programming problems.