Building on foundations introduced in CS 2100, examines program design at increasing scales of complexity. Reviews abstraction, encapsulation, inheritance, and interfaces in statically-typed object-oriented languages. Presents a comparative approach to software design patterns and paradigms, including object-oriented and functional programming. Fosters a deeper understanding of the principles of program design, including interface design, test-driven development, graphical design notations, reusable software components, and open-source ecosystems. Illustrates the impact of design-time decisions on software correctness, including accessibility, changeability, performance, reusability and privacy. Students collaborate throughout the semester to design and implement a large software project.
Est 70 minutes
Est 55 minutes
Required preparation
Optional preparation
Est 45 minutes
Est 48 minutes
Est 45 minutes
Est 60 minutes
Est 55 minutes
Est 60 minutes
Est 55 minutes
Est 60 minutes
Est 60 minutes
Est 55 minutes
Est 45 minutes
Est 55 minutes
Est 45 minutes
Est 55 minutes
Est 60 minutes
Est 55 minutes
Est 40 minutes
Est 50 minutes
Est 40 minutes
Est 40 minutes
Est 50 minutes
Est 60 minutes
Est 55 minutes
Est 55 minutes
Est 43 minutes
Est 60 minutes
Est 45 minutes
Est 45 minutes
Est 50 minutes
Est 55 minutes
Est 50 minutes
Est 50 minutes
Est 55 minutes
Est 50 minutes
Est 50 minutes
Est 0 minutes