Readings

 

Barbara Liskov and John Guttag, Program Development in Java: Abstraction, Specification, and Object-Oriented Design, Addison-Wesley, 2001.

Liskov’s book gives you motivation and explanation of why and how one designs the abstractions we will be covering in this course. The book takes a more informal approach but comes with very nice explanations and examples. Reading it will help you understand the course material and see it from a different perspective.


Peter Sestoft, Java Precisely, Second Edition, MIT Press, 2005.

Sestoft’s book gives you a very concise but accurate explanation of Java programming language. It covers many topics you may not have seen and elucidates those you have already used. Get into a habit of re-reading sections as we cover the related topics and use it as an initial refresher of what you know about Java as we start the semester.


Joshua Bloch, Effective Java, Second Edition, Addison-Wesley, 2008.

The readings from this book will help to improve your Java programming. This book describes the effective style of programming in Java, highlighting the techniques that use Java effectively. It is an invaluable reference for anyone programming in Java and the issues it addresses apply to programs written in other languages as well.


Outline

Below is a preliminary outline of weekly topics and reading assignments. The outline will be updated throughout the semester.


  1. Week 1: Monday, May 5, 2014 - Thursday, May 8, 2014

  2. -Topics

  3. -Introduction to Course

  4. -Review of Java

  5. -Recipe

  6. -Abstraction

  7. -Abstraction Barrier and Interchangeable Parts

  8. -Testing

  9. -Debugging

  10. -Procedural Abstraction

  11. -Readings

  12. -Recipe to translate an algebraic specification into Java

  13. -Bloch - Item 44

  14. -Liskov - Chapter 1: Introduction

  15. -Liskov - Chapter 2: Review of Objects in Java

  16. -Bloch - Item 47

  17. -Bloch - Item 41

  18. -Bloch - Items 8-11, 13-15, 38, 40, 45, 56

  19. -Liskov - Chapter 10: Testing and Debugging

  20. -Liskov - Chapter 3: Procedural Abstraction

  21. Week 2: Monday, May 12, 2014 - Thursday, May 15, 2014

  22. -Topics

  23. -Factory method pattern

  24. -Exceptions

  25. -Procedural Abstraction

  26. -Maps

  27. -Data Abstraction

  28. -Iterators

  29. -Readings

  30. -Liskov - Chapter 4: Exceptions

  31. -Bloch - Items 1, 4, 5, 57-65

  32. -Liskov - Chapter 5: Data Abstraction

  33. -Bloch - Item 46

  34. -Liskov - Chapter 6: Iteration Abstraction

  35. Week 3: Monday, May 19, 2014 - Thursday, May 22, 2014

  36. -Topics

  37. -Abstraction function and rep invariant

  38. -Binary Search Trees

  39. -Total order

  40. -Comparators

  41. -Stress Testing

  42. -Asymptotic notation

  43. -Optimization

  44. -hashCode

  45. -Midterm Review

  46. -Readings

  47. -To Be Announced

  48. -Optional Readings

  49. -Duane Bailey. Data Structures in Java, for the Principled Programmer, 2nd Edition McGraw Hill 2003.
    PDF available online at http://www.cs.williams.edu/javastructures/Welcome.html
    Chapters 12 (Binary Trees) and 14 (Search Trees)
    Note that implementations in book are mutable whereas our implementations of BST are immutable.

  50. -T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, Introduction to Algorithms, MIT Press and McGraw-Hill, 3rd edition edition, 2009.
    Online access available through Northeastern library
    Chapter 12 (Binary Search Trees), Chapter 3 (Growth of Functions)
    Note that implementations in book are mutable whereas our implementations of BST are immutable.

  51. Week 4: Monday, May 26, 2014 - Thursday, May 29, 2014

  52. -Topics

  53. -Midterm

  54. -Red-Black Trees

  55. -Refactoring

  56. -Software Qualities

  57. -Reliability Testing

  58. -hashCode improvement

  59. -Readings

  60. -Chris Okasaki, “Red-black trees in a functional setting,” Journal of Functional Programming, 9(4), pages 474-477, July 1999.

  61. -Bloch - Item 46

  62. -Optional Readings

  63. -T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, Introduction to Algorithms, MIT Press and McGraw-Hill, 3rd edition edition, 2009.
    Online access available through Northeastern library
    Chapter 13 (Red-Black Trees)
    Note that implementations in book are mutable whereas our implementations of RBT are immutable.

  64. Week 5: Monday, June 2, 2014 - Thursday, June 5, 2014

  65. -Topics

  66. -Visitor Pattern

  67. -Parameterized Types/Generics

  68. -Code Reviews

  69. -Polymorphic Abstractions

  70. -Type Hierarchy

  71. -Benchmarking

  72. -Software Process

  73. -Requirements

  74. -Readings

  75. -Bloch - Item 46

  76. -Bloch - Items 23-29

  77. -Liskov - Chapter 8: Polymorphic Abstractions

  78. -Liskov - Chapter 7: Type Hierarchy

  79. -Liskov - Chapter 9: Specifications

  80. -Liskov - Chapter 11: Requirements Analysis

  81. -Liskov - Chapter 12: Requirements Specifications

  82. Week 6: Monday, June 9, 2014 - Thursday, June 12, 2014

  83. -Topics

  84. -Design

  85. -Polymorphism

  86. -Reuse

  87. -Design Patterns

  88. -Implementation

  89. -Final Exam Review

  90. -Readings

  91. -Liskov - Chapter 13: Design

  92. -Liskov - Chapter 14: Between Design and Implementation

  93. -Liskov - Chapter 15: Design Patterns

  94. Week 7: Monday, June 16, 2014 - Thursday, June 19, 2014

  95. -Topics

  96. -To Be Announced

  97. -Final Exam

  98. -Readings

  99. -To Be Announced



Supplemental Readings

  1. -The Java Tutorial contains a succinct discussion of static members and the relationship between classes and objects.