Course Outline -------------- Overall Outline of Topics (subject to revision) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - organization, motivation, introduction (1 week) - what makes software good? - requirements: functional vs. nonfunctional - the importance of testing - basics of object-oriented programming (2 weeks) - semantics: reference vs. value, equality vs. identity - types and classes: relationships, polymorphism - code organization: member access, packages/namespaces - agile development process (1 week) - overview - testing - refactoring - continuous integration and delivery - object-oriented design principles (2 weeks) - overview - SOLID - designing with interfaces - agile object-oriented modeling (2 weeks) - main UML diagrams: class, state machine, sequence - archetypes and colors - software design patterns (2 weeks) - key patterns from HFDP - key idioms from EJ3e - concurrent programming (3 weeks) - events - threads - sharing - distributed programming (1 week) - overview and principles - connecting to web services Typical structure of a weekly session ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - EJ3e or HFDP topics - project discussion and related topics - pair/group presentation or other activity Typical assignments over a two-to-three-week period ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - reading - listening to SE Radio episodes - programming project