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 |
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 |
05 Oct Week 7 |
Numeric I/O and handing errors with dialogs | Loading images from files |
Due: Project #4 |
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
Due: Project6a |
Working with jar files
|
16 Nov Exam Week |
Due: Project6b |
Lecture Notes
2-Equality, Comparisons, Types, Strings, and Arrays
4-Error Handling, Exceptions, and Documentation
Study to here for Exam #1
12-GUIs, Model View Controller, and Layouts
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
23-The Singleton Pattern: Introduction