CSE 331 Summer 2018

CSE 331 Summer 2018

Software Design and Implementation


Course Information

Meetings:

Lecture MWF 1:10 pm - 2:10 pm GUG 218
Section AA Thu 1:10 pm - 2:10 pm MGH 074
Section AB Thu 1:10 pm - 2:10 pm ARC 160

Contact:

Office Hours:

Mon 2:10 pm - 3:30 pm CSE 216 Leah Perlmutter Instructor
Tues 5:00 pm - 6:00 pm CSE 5th floor breakout Joyce Zhou TA
Wed 10:30 am - 11:30 am CSE 006 Jong Ho Lee TA
Wed 3:30 pm - 5:30 pm CSE 5th floor breakout Frank Qin TA
Thurs 11:00 am - noon CSE 5th floor breakout Frank Qin TA
Thurs 5:30 pm - 7:30 pm CSE 5th floor breakout Matt Xu, Haiqiao Chen TA
Fri 2:00 pm - 3:00 pm CSE 023 Wei Liao TA
Fri 5:00 pm - 6:00 pm CSE 5th floor breakout Joyce Zhou TA

Administrative:

Course Materials

Lectures

Mon Jun 18 L1 Introduction
Wed Jun 20 L2 Hoare Logic: Basics
Fri Jun 22 L3 Hoare Logic: Loops
Mon Jun 25 L4 Specifications
Wed Jun 27 L5 Abstract Data Types (ADTs)
Fri Jun 29 L6 Representation Invariants
Mon Jul 2 L7 Abstraction Functions
Wed Jul 4 Holiday
Fri Jul 6 L8 Testing
Mon Jul 9 L9 Design
Wed Jul 11 L10 Equals and Hashcode
Fri Jul 13 L11 Equals and Hashcode (See L10)
Mon Jul 16 Midterm
Wed Jul 18 L12 Subtyping and Subclassing
Fri Jul 20 L13 Assertions and Exceptions
Mon Jul 23 L14 Generics 1
Wed Jul 25 L15 Generics 2
Fri Jul 27 L16 Debugging
Mon Jul 30 L17 Callbacks and Observers
Wed Aug 1 L18 Graphics and GUIs
Fri Aug 3 L19 GUI Events
Mon Aug 6 L20 Design Patterns 1
Wed Aug 8 L21 Design Patterns 2
Fri Aug 10 Kendra Yourtee: (Interviewing Demystified)
Mon Aug 13 L22 System Development
Wed Aug 15 L23 Wrapup

Sections

Thu Jun 21 S1 Hoare Logic, Git
Thu Jun 28 S2 Loop Reasoning, Project Setup in Eclipse
Thu Jul 5 S3 ADTs and HW4
Thu Jul 12 S4 Graphs, Testing, and HW5
Thu Jul 19 S5 HW6 and Interfaces
Thu Jul 26 S6 Subtyping, Dijkstra’s, and HW7
Thu Aug 2 S7 MVC and HW8
Thu Aug 9 S8 Design Patterns
Thu Aug 16 S9 Final Review

Assignments

Wed Jun 20 10:00 PM Homework 0
Mon Jun 25 10:00 PM Homework 1
Mon Jul 2 10:00 PM Homework 2
Thu Jul 5 10:00 PM Homework 3
Thu Jul 12 10:00 PM Homework 4
Thu Jul 19 10:00 PM Homework 5
Thu Jul 26 10:00 PM Homework 6
Thu Aug 2 10:00 PM Homework 7
Thu Aug 9 10:00 PM Homework 8
Thu Aug 16 10:00 PM Homework 9

Reading Schedule and Quizzes

PP: Pragmatic Programmer

EJ: Effective Java (3rd edition EJ3 or 2nd edition EJ2)

Quiz schedule:

Quiz Due Date Link to Quiz Assignment
Thurs Jun 21, 10:00 PM Quiz1 PP: Preface, 1, 2, 5, 21, 31, 35, 44
(PP titles: The Cat Ate My Source Code, Software Entropy, Your Knowledge Portfolio, Design by Contract, Programming by Coincidence, Evil Wizards, It’s all writing)
————
Thurs Jun 28, 10:00 PM Quiz2 PP: 4
(PP title: Good-Enough Software;)
EJ3: 12, 15, 16, 17, 50, 56
(EJ2: 10, 13, 14, 15, 39, 44)
(EJ titles: Always override toString, Minimize the accessibility of classes and members, In public classes use accessor methods not public fields, Minimize mutability, Make defensive copies when needed, Write doc comments for all exposed API elements)
————
Thurs July 5, 10:00 PM Quiz3 PP: 7, 8, 33, 34, 43
(PP titles: The Evils of Dupication, Orthogonality, Refactoring, Code that’s Easy to Test, Ruthless Testing)
EJ3: 51, 52
(EJ2: 40, 41)
(EJ titles: Design Method Signatures Carefully, Use Overloading Judiciously)
————
Thurs July 12, 10:00 PM Quiz4 PP: 26
(PP title: Decoupling and the Law of Demeter)
EJ3: 10, 11, 13, 14, 57, 58, 62, 68
(EJ2: 8, 9, 11, 12, 45, 46, 55, 56)
(EJ titles: Obey the general contract when overriding equals, Always override hashCode when you override equals, Override clone judiciously, Consider implementing Comparable, Minimize the scope of local variables, Prefer for-each loops to traditional for loops, Avoid strings where other types are more appropriate, Adhere to generally accepted naming conventions)
————
Thurs July 19 n/a No reading this week. Dedicate your time to Homework 5 :)
————
Thurs July 26, 10:00 PM Quiz5 PP: 22, 23, 24
(PP title: Dead Programs Tell No Lies, Assertive Programming, When to Use Exceptions)
EJ3: 49, 18, 19, 20, 22, 23, 40, 64, 69, 70, 71, 72, 73, 74, 77
(EJ2: 38, 16, 17, 18, 19, 20, 36, 52, 57, 58, 59, 60, 61, 62, 65)
(EJ titles: Check parameters for validity, Favor composition over inheritance, Design and document for inheritance or else prohibit it, Prefer interfaces to abstract classes, Use interfaces only to define types, Prefer class hierarchies to tagged classes, Consistently use the Override annotation, Refer to objects by their interfaces, Use exceptions only for exceptional conditions, Use checked exceptions for recoverable conditions and runtime exceptions for programming errors, Avoid unnecessary use of checked exceptions, Favor the use of standard exceptions, Throw exceptions appropriate to the abstraction, Document all exceptions thrown by each method, Don’t ignore exceptions)
————
Thurs Aug 2, 10:00 PM Quiz6 EJ3: 26, 27, 28, 29, 30, 31
(EJ2: 23, 24, 25, 26, 27, 28)
(EJ titles: Don’t use raw types in new code, Eliminate unchecked warnings, Prefer lists to arrays, Favor generic types, Favor generic methods, Use bounded wildcards to increase API flexibility)
————
Thurs Aug 9, 10:00 PM Quiz7 PP: 18, 27, 29
(PP titles: Debugging, Metaprogramming, It’s just a view)
————
Thurs Aug 16, 10:00 PM Quiz8 EJ3: 1, 2, 3, 4, 6, 7
(EJ2: 1, 2, 3, 4, 5, 6)
(EJ titles: Consider static factory methods instead of constructors, Consider a builder when faced with many constructor parameters, Enforce the singleton property with a private constructor or an enum type, Enforce noninstantiability with a private constructor, Avoid creating unnecessary objects, Eliminate obsolete object references)

Exams

Below are some links to past exams. The overlap between previous offerings of the course and this quarter isn’t always exact, so you should not worry too much about questions on topics we haven’t covered. In some quarters, the second exam was a full-length final exam, in others it was a second exam intended to be the same difficulty as the midterm.

Midterm: Monday, July 16, 2018, 1:10 - 2:10 PM (in class)

Final: Friday, August 17, 2018, 1:10 - 2:10 pm (in class)

The 18su final will cover only the second half of course material.

Resources

CSE 331 Tools Docs

CSE 331 Concepts Docs

Additional Resources