CS 220 -- Software Design II
Section 01 Location: |
Lecture: Cowley 301 Lab: Wing 016 |
Section 01 Time: |
8:50--9:45 AM Monday, Tuesday, Wednesday, Friday |
Section 02 Location: |
Lecture: Cowley 301 Lab: Wing 016 |
Section 02 Time: |
9:55--10:50 AM Monday, Tuesday, Wednesday, Friday |
Professor: |
David Mathias |
Email: |
dmathias AT uwlax DOT edu |
Office hours - Virtual Only: |
Monday: 11:00--12:00
Wednesday: 2:15--3:15
Friday: 11:00--12:00 |
Office Hour Link: |
Zoom Link for Office Hours |
Section 01 Syllabus: |
PDF format |
Section 02 Syllabus: |
PDF format |
Textbooks: |
Think Java, 2nd edition, by Allen B. Downey and Chris Mayfield.
The text is freely available on the publisher's website:
Green Tea Press -- Think Java
If you prefer, you may purchase a hardcopy. |
|
Think Data Structures, by Allen B. Downey.
The text is freely available on the publisher's website:
Green Tea Press -- Think Data Structures
If you prefer, you may purchase a hardcopy. |
Resources: |
A few (possibly) useful items for students in CS220 |
Course Description
This is a second course in the design of programs. Emphasis is placed on data abstraction and its application in design. Definitions of abstract data types are examined. The following structures are examined as methods for implementing data abstractions: recursion, generics, stacks, queues, strings, and various linked lists. Students will be expected to write several programs using these techniques in a modern programming language.
Topics
- Abstract classes and interfaces
- File I/O
- Abstract data types
- Fundamental data structures: arrays, linked lists, stacks, queues, and maps
- Recursion
- Searching and sorting
- Program efficiency and asymptotic notation
Course Objectives
By the end of the course, students shall be able to:
- Write well-designed code involving inheritance, overloading, and overriding.
- Write code involving multi-dimensional arrays.
- Understand abstraction vs. implementation and choose between alternative linear container representations.
- Write and read code involving exceptions, including \code{try} blocks, \code{throw} instructions, and \code{throws} qualifiers.
- Understand the relationship between files and directories in a hierarchical file directory system and name files with both relative and absolute names.
- Understand the distinction between binary and text files, select between them, and translate data of each type to the equivalent other type.
- Read and write code using the following classes: File, DataInputStrem, DataOutputStream, BufferedReader, PrintWriter, Scanner.
- Read recursive definitions; read and write recursive methods, both void and non-void.
- Design programs involving the template design pattern and use Javainterfaces and abstract classes to implement this pattern.
- Trace the behavior of code using static, dynamic and automatic memory, understanding the usage of each.
- Read and write code implementing singly and doubly linked lists including traversal, item insertion and removal algorithms, sentinel cells, and pre-pointers.
- Read and write code involving inner private classes; understand their utility for implementing linked lists in the style of java.util.LinkedList.
- Read and write code implementing stacks and queues.
- Read and write code involving the following Java classes: java.lang.Comparable, java.util.Collection, java.util.List, java.util.Iterator.
- Perform simple counting analyses on linear, polynomial and logarithmic algorithms.
- Develop programs involving all of the following algorithms: binary search, linear search (for both arrays and lists), merge sort, quicksort.
- Interpret and utilize object type conformance and subtype polymorphism.
- Read, write, and use generic classes.
Evaluation
- 35% -- Programming Assignments
- 15% -- Labs
- 25% -- Midterm
- 25% -- Final Exam
Programming Assignments
The largest single component of your grade in this course is outside-of-class programming assignments. The only way to learn how to program is by programming. You will not be successful in this class unless you write your own code. I encourage you to study with others and to discuss concepts and ideas with classmates. However, you must write and submit your own work.
- Programs are due at 11:59 PM on the due date. There is a long and proud tradition of programs being due at that time. You are, of course, welcome to submit well before the deadline.
- Late submissions are accepted up to 48 hours after they are due. Up to 24 hours late, there is a 20% penalty. Up to 48 hours late, there is a 50% penalty. Programs will not be accepted more than 48 hours after they are due.
- Include, at the top of every program file you submit, a block comment with the following information (in this order): your name, the assignment number, the due date, and a brief description of the assignment.
- You must comment your code thoroughly and effectively You will be tempted to skip this. Resist that temptation. Good commenting is critical.
- Adhere to the coding conventions we discuss in class. I don't care that your uncle's wife's cousin told you to do things a different way. There are many ways to format code and I don't claim that my way is the one and only right way but it will be much easier for us to talk about code if we all use a common format.
Closed Labs
On day-to-be-determined of most weeks, we will meet in Wing 016 where you will complete a short programming assignment designed to be completed within about an hour. While completion of the assignment is the goal, you may not always get there. Full credit is assigned for making a good faith effort to solve the problem.
Additional Information
Additional information relevant to the course is available on the syllabus: Section 01 syllabus and Section 02 syllabus.