Explores concepts and techniques for design and construction of reliable and maintainable software systems in modern high-level languages; program structure and design; program-correctness approaches, including testing; and event-driven programming (e.g., graphical user interface). Includes substantial project and software-team experience. Prerequisite: CSE 143.
This course explores concepts and techniques for the design and construction of reliable and maintainable software systems in modern high-level languages. The prerequisite for this course is CSE 143, and we assume that you come to the course with significant experience in either Java, C++, or a similar object-oriented language. Core topics include:
* program structure and design, particularly object-oriented design * object-oriented features of Java such as inheritance, interfaces, polymorphism, and generics * types, classes, abstract data types (ADTs), subtyping * deeper Java coverage, e.g. exceptions, reflection, threading, enumerations, collections, packages, annotations * object-oriented design patterns * unit testing, debugging, and other approaches for program correctness * code documentation via comments, Javadoc, and related techniques * learning and using a large application programmer interface (API) * using various software tools such as development environments (IDEs), testing frameworks, and version control * event-driven programming using graphical user interfaces in the standard Java AWT and Swing libraries * working in groups, including a significant group programming project at the end of the course
Student learning goals
General method of instruction
Class assignments and grading