CSCI 209: Software Development (Fall 2020)

CSCI 209: Software Development


General Information


Professor: Simon D. Levy
Lecture: MWF 1:00-2:00 pm Parmly 405
Office: Parmly 407B
E-mail: simon.d.levy@gmail.com
Office Hours: MWF 2:00-5:30, and by appointment

 


Objectives

After taking this course, you should be able to

    • Develop complex programs using a statically typed programming language
    • Perform such tasks as constructing class diagrams in UML, generating program documentation, generating unit tests, refactoring program code, and exercising version control
    • Structure software systems using concepts such as interfaces, encapsulation, inheritance, generic collections, and polymorphism
    • Use several design patterns to solve problems
    • Construct event-driven programs with graphical user interfaces

Textbooks

The book listed below are required. All are available to W&L students via Safari Books. We will have additional readings from journal articles and books on reserve in the Science Library.

    • Horstmann, Core Java for the Impatient, 1st Edition
    • Horstmann, Core Java Volume I — Fundamentals, 10th Edition
    • Bell and Beer, Introducing GitHub: A Non-Technical Guide, 2nd edition
    • Beck, JUnit Pocket Guide: Quick Look-up and Advice
    • Burnette, Eclipse IDE Pocket Guide: Using the Full-Featured IDE

Brief Overview

This course introduces the concepts, tools, and techniques used in software development. Topics include

    • The software life cycle
    • Advanced concepts of object-oriented analysis and design
    • APIs and program documentation
    • Systematic testing
    • Design patterns
    • The use of the Unified Modeling Language
    • Refactoring code during maintenance
    • Extreme programming, pair programming, and rapid prototyping
    • Event-driven programming and graphical user interfaces
      multithreading

Classroom work will consist of lecture and discussion. Written work will consist of several team-based programming projects, homework exercises that employ tools used in software development, and a comprehensive final exam.


Grading

The written work for the course will consist of

    • Two in-class  exams (25% of grade)
    • Individual programming projects (50% of the grade)
    • Team programming project (25% of grade)

The grading scale will be 93-100 A; 90-92 A-; 87-89 B+; 83-86 B; 80-82 B-; 77-79 C+; 73-76 C; 70-72 C-; 67-69 D+; 63-66 D; 60-62 D-; below 60 F.


Honor System

All exams will be done without books or notes and without assistance from other people. You may NOT work with another person on the homework assignments. Start each assignment well before it is due so that if you have trouble with it, you can get help from me during office hours.


Accommodations

Washington and Lee University makes reasonable academic accommodations for qualified students with disabilities. All undergraduate accommodations must be approved through the Office of the Dean of the College. Students requesting accommodations for this course should present an official accommodation letter within the first two weeks of the (fall or winter) term and schedule a meeting outside of class time to discuss accommodations. It is the student’s responsibility to present this paperwork in a timely fashion and to follow up about accommodation arrangements. Accommodations for test-taking should be arranged with the professor at least a week before the date of the test or exam.


Homework Assignments

Perhaps the most important aspect of the course is the homework assignments you do. Note that this counts for a substantial part of your course grade. Homeworks will be due in your private github repository on 11:59 PM of the due date. No late work or other forms of submission will be accepted. Serious problems (health / family / personal emergencies) that interfere with attendance / homework should be handled through the Office of the Dean.


Tentative Schedule

Monday

Wednesday

Friday

24 Aug
Week 1
Course Outline Basic Java syntax and semantics I/O and numbers
31 Aug
Week 2
Primitive and reference types

Equality and comparisons

Strings and arrays

Classes and methods Preconditions, postconditions, exceptions, and javadoc

Due:  Project1

07 Sep
Week 3
Packages

 

GUIs with BreezySwing Collections and interfaces
14 Sep
Week 4
File processing File processing  

Due:  Project2

project2.zip

21 Sep
Week 5
Exam #1

Exam 1 discussion

 

Inheritance and composition

 

28 Sep
Week 6
Abstract classes Iterators Graphics and GUIs

Due: Project #3

command.txt

05 Oct
Week 7
Numeric I/O and handing errors with dialogs Loading images from files  

Due: Project #4

project4.zip

12 Oct
Week 8
Design patterns: iterator, composite, and decorator

 

The strategy pattern
19 Oct
Week 9
 

 

 

 

Review

Due: Project5 project5.zip

26 Oct
Week 10
Exam #2  

The strategy pattern: comparisons and layouts

The strategy pattern: map, filter, and reduce
02 Nov
Week 11
Linked structures

 

The singleton pattern I

 

The singleton pattern II

 

09 Nov
Week 12
Tools: JUnit Refactoring and extreme programming

DueProject6a

FreeCellApp

Working with jar files

 

16 Nov
Exam Week
DueProject6b

Lecture Notes

0-Introduction

1-I/O and Numbers

2-Equality, Comparisons, Types, Strings, and Arrays

3-Java Classes and Methods

4-Error Handling, Exceptions, and Documentation

5-Packages

6-Easy GUIs with BreezySwing

7-Collections and Interfaces

8-File Processing

Study to here for Exam #1


9-Inheritance and Composition

10-Abstract Classes

11-Iterators

12-GUIs, Model View Controller, and Layouts

13-Graphics and GUIs

14-Numeric Input, Error Handling, and Standard Popup Dialogs

15-Displaying Images from Files

17-Design Patterns: Iterator, Composite, and Decorator

18-The Strategy Pattern: Comparisons and Layouts

Study to here for Exam #2


19-The Strategy Pattern: Map, Filter, and Reduce

20-The Strategy Pattern: Streams, HOFs, and Lambdas

21-The Adapter Pattern

22-The Proxy Pattern

23-The Singleton Pattern: Introduction

24-The Singleton Pattern and Recursive Data

25-Unit Testing

26-Refactoring

27-Working with Jar Files

Getting Started with Eclipse

Getting Started with GitHub