CS330, Fall 2019

CS330 Outline

Fall 2019

Upcoming Events
1 Pre-OO: ADTs & Classes
1.1 Course Overview 08/25/2019 - 08/27/2019

Overview

This module introduces you to the course organization, policies, and mechanics. We review the structure of the course website.

We take a brief look at the major themes and areas of emphasis that we will cover this semester.

Activities
  1. text Read: syllabus.
  2. text Read: communications policy.
  3. event Attend or watch the orientation session 08/27/2019, 7:30PM EDT
  4. “Meet and Greet” Forum (optional, in Blackboard)
1.2 ADTs 08/28/2019 - 08/31/2019

Overview

This module covers the notion of ADTs from the a design perspective. We motivate the notion of ADTs as a design principle, and move towards ADTs as a contract.

Activities
  1. lecture Read lecture notes: Designing for ADTs
  2. text Read: Booch, chapter 1 & chapter 2, up to “The Meaning of Hierarchy”
  3. lecture Read lecture notes: ADTs
1.3 Implementing ADTs with classes 09/01/2019 - 09/07/2019

Overview

This module discusses the implementation of ADTs using C++ classes. This includes mechanics (e.g., Constructors and Destructors) and best practices (in the form of a checklist).

Everything in this module is review from CS250. If it seems unfamiliar, or if you find yourself struggling unduly with the assignment at the end of this module, you may need to go back and do some serious reviewing.

Activities
  1. lecture Read lecture notes: Implementing ADTs in C++ Classes
  2. text Read C++ text as needed
  3. lecture Read lecture notes: Copying and Moving Data
  4. video A C++ Class Designer's Checklist
  5. asst Do assignment: C++ ADTs Due: 09/07/2019
1.4 From C++ to Java 09/08/2019 - 09/18/2019

Overview

In this course we will be using two of the most widely used OOPLs (Object-Oriented Programming Languages) – C++ and Java. Everyone enrolled in this course should be quite familiar with C++ already (although if it has been a while since your last C++ course or if your grades in that course were marginal (below B), now would be a good time to go back and review.

Most students in this course will be unfamiliar with Java, however, so we will take a little time to build up familiarity with it. There’s a lot of hands-on work (“labs”) in this section because the issue is really not so much “learning” Java as “getting comfortable” with it.

Activities
  1. lecture Read lecture notes: Java - First Impressions for a C++ Programmer
  2. cs382 Do Java lesson Hello World: Commentary
  3. lab Do lab activity: Write Once, Run Anywhere
  4. cs382 Do Java lesson Translating Java Code
  5. lab Do lab activity: Java Projects in Eclipse
  6. cs382 Do Java lesson Language Basics: Commentary
  7. cs382 Do Java lesson Numbers and Strings: Commentary
  8. cs382 Do Java lesson Exceptions: Commentary

  9. lab Do lab activity: Lab: Throwing and Catching Exceptions
  10. cs382 Do Java lesson Basic I/O: Commentary
  11. lab Do lab activity: Refactoring Java Code in Eclipse
  12. lab Do lab activity: Debugging Java with Eclipse
  13. cs382 Do Java lesson Classes and Objects: Commentary
  14. cs382 Do Java lesson Packages: Commentary
  15. lecture Read lecture notes: A Class Designer's Checklist for Java
  16. asst Do assignment: Java ADTs Due: 09/18/2019

2 OOA&D: Workflows, Models, & Classification
2.1 Classification 09/21/2019 - 09/28/2019

Overview

This module discusses workflows and overall process of OOA, with a focus on class discovery and documentation.

Activities
  1. lecture Read lecture notes: The Object-Oriented Philosophy
  2. lecture Read lecture notes: A Model-Driven Approach to Analysis and Design
  3. text Read: Booch, chapter 2 (remainder), chapter 3, up to 3.2, chapter 4

  4. lecture Read lecture notes: Discovering and Documenting Classes
  5. video Example: Starting a Domain Model
2.2 Relationships 09/29/2019 - 10/05/2019

Overview

This module discusses the intermediate stages of analyzing an Object Oriented System. UML class diagrams are introduced , combining classes and the relationships among them.

The first Design Assignment is assigned during this section. You (and optionally your group) when follow the design process for an instructor selected domain.

Activities
  1. text Read: Fowler, chapter 3, chapter 5: “Interfaces and Abstract Classes”, “Qualified Associations”, “Template (Parameterized) Class”, “Visibility”

  2. lecture Read lecture notes: UML Class Relationship Diagrams

  3. lecture Read lecture notes: Example: Class Relationship Diagrams (Domain Model)

  4. asst Do assignment: Domain Models Due: 10/11/2019

2.3 OOA&D: Use Cases 10/06/2019 - 10/11/2019

Overview

This module continues the discussion of design and UML. This includes modeling scenarios (partially and fully) through use cases, interaction diagrams, and sequence diagrams.

The second design assignment is assigned during this module. You (and your group) will extend your Early Elaboration Assignment solution in this exercise.

Activities
  1. text Read: Fowler, chapter 9

  2. lecture Read lecture notes: Use Cases

  3. text Read: Booch, chapter 5, section 5.8.

  4. text Read: Fowler, chapter 4
  5. lecture Read lecture notes: Sequence Diagrams

  6. lecture Read lecture notes: Example: Further Elaboration on Automated Assessments

  7. asst Do assignment: Asst: Analysis Model Due: 10/27/2019

  8. exam Take the exam: Midterm Exam, covers all material to the end of this module except sequence diagrams 10/15/2019 - 10/16/2019

3 Object Oriented Programming (OOP)
3.1 Inheritance, Subtyping, and Dynamic Binding 10/16/2019 - 10/22/2019

Overview

A programming language is considered object-oriented if it supports inheritance, subtyping, and dynamic binding. This module discusses these three ideas as they manifest in C++ and Java, setting us up to do actual object-oriented programming.

Activities
  1. lecture Read lecture notes: Inheritance: The is-a relation
  2. cs382 Do Java lesson Inheritance in Java: Commentary
  3. text Read C++ text as needed
  4. lecture Read lecture notes: Dynamic Binding: Class-Appropriate behavior
  5. lecture Read lecture notes: The Variant Behavior Pattern
  6. video Making Inheritance Work: C++ Issues
3.2 Abstract Inheritance 10/23/2019 - 11/29/2019

Overview

This module continues our discussion of inheritance by exploring the idea of abstract classes and “pure” inheritance.

Activities
  1. lecture Read lecture notes: Abstract Classes
  2. cs382 Do Java lesson Abstract Classes and Interfaces: Commentary
  3. lecture Read lecture notes: Multiple Inheritance, Interfaces, and Abstract Classes
  4. text Read C++ text as needed
  5. asst Do assignment: OOP & Dynamic Binding Due: 11/19/2019

3.3 SOLID OOD 10/30/2019 - 11/09/2019

Overview

SOLID is an acronym for a collection of principles considered to contribute to effective Object-Oriented Design:

  • Single Responsibility
  • Open-Closed Principle
  • Liskov Substitutability
  • Interface Segregation
  • Dependency Inversion
Activities
  1. text Read: Martin: Agile Principles, Patterns, and Practices in C# chapters 8–12

  2. lecture Read lecture notes: SOLID Design

  3. lecture Read lecture notes: OOD Design Patterns
4 Applying OOP
4.1 Graphic User Interfaces 11/10/2019 - 11/19/2019

Overview

In this module we discuss GUIs and how

  • objects are used to define a graphical interface
  • to handle user interaction (e.g., clicking a button) through Listeners
Activities
  1. lecture Read lecture notes: Functors - Objects That Act Like Functions
  2. text Read: Java Tutorial: Creating a GUI with JFC/Swing
  3. lecture Read lecture notes: Example: Building a Java GUI
  4. asst Do assignment: (You can start the assignment listed in the next module upon completing the readings for this one. You won’t be able to complete all of the tasks for it, however.)
4.2 Multi-Threading 11/20/2019 - 12/06/2019

Overview

In this module we discuss the use of Java threads. We briefly cover the principles of multi-threading (parallelism).

We conclude the discussion in the context of the running SpreadSheet example.

5 Exams and Special Events
Activities
  1. event Classes Start 08/25/2019
  2. event Fall Break 10/12/2019 - 10/15/2019
  3. exam Take the exam: Midterm Exam 10/15/2019 - 10/16/2019
  4. event Thanksgiving Break 11/27/2019 - 12/01/2019
  5. event Last day of classes 12/06/2019
  6. exam Take the exam: Final Exam 12/08/2019 - 12/10/2019

All times in this schedule are given in Eastern Time.

Symbol Key
lecture Lecture:
slides Slides :
event Event or important date
text Reading
lab Do lab:
asst Assignment:
exam Exam
cs382 Java lesson
construct Under construction: