Spring 2011 (Section 3, 12916; Section 4,12917: 4 credits)
JMU
Syllabus


Description: A computer program is a set of instructions that a computer can execute. Programming is the process of creating a computer program. This course is about programming in object-oriented programming languages and covers both introductory and advanced topics. It also provides an introduction to elementary abstract data types such as lists, stacks, and queues.
Textbook: The primary textbook for this course is:

Gaddis, Tony (2008) Starting Out with Java , Pearson Education , Boston, MA.
(Order from amazon , order from Barnes and Noble , compare at bigwords , compare at CampusBooks4Less , or search eFollett )

You are expected to complete all reading assignments before the first day they are discussed in class.
Outline: This course is organized as follows (though specific topics and dates may change):
Part I: Review and Preparation to Move Ahead
1/10 Lab: (1) Skills: The BASH Shell and Questions About Typographic Conventions
1/11 Overview , Arithmetic Operators , Relational&Logical Operators , Decisions , Repetition and Nested Loops 2, 3, 4.1-4.9
1/12 Lab: (2) Experience with Objects
1/13 Using Classes and Objects and References 3.1-3.8
1/17 Lab: No Lab - Martin Luther King, Jr. Day
1/18 Exceptions 12.1-12.2
1/19 Lab: (3) Experimenting with Exception Handling
1/20 Input/Output Basics and File System Basics 4.10
1/24 Lab: (4) Experimenting with I/O
Part II: Fundamentals of Object-Oriented Programming
1/25 Software Design Goals
1/26 Lab: (5) Skills: Using a Debugger
1/27 Developing Classes 6
1/31 Lab: (6) Gaining Experience Designing Classes
2/1 More on Developing Classes and Developing Enumerated Types 9
2/2 Lab: (7) Experimenting with Enumerated Types
2/3 Specialization (Derived Classes and Inheritance) 11.1-11.3
2/7 Lab: (8) Experimenting with Specialization
2/8 Accessibility/Visibility Revisited 11.4-11.6
2/9 Lab: (9) Experimenting with Accessibility/Visibility
2/10 Polymorphism through Inheritance 11.7
2/14 Lab: (10) Experimenting with Polymorphism through Inheritance
2/15 No Lecture - Assessment Day
2/16 Lab: (11) Experimenting with Sophisticated Enumerated Types
2/17 Examination 1
Part III: Advanced Techniques
2/21 Lab: (12) Skills: Documentation Tools
2/22 Abstract Classes 11.8
2/23 Lab: (13) Experimenting with Abstract Classes
2/24 Interfaces 11.9
2/28 Lab: (14) Experimenting with Interfaces
3/1 Polymorphism through Interfaces
3/2 Lab: (15) Experimenting with Polymorphism through Interfaces
3/3 Designing with Abstract Classes and Interfaces
3/14 Lab: (16) Questions About Abstract Classes and Interfaces
3/15 Recursive Algorithms I 15
3/16 Lab: (17) Gaining Experience Tracing Recursive Methods
3/17 Recursive Algorithms II
3/21 Lab: (18) Experimenting with Recursion
3/22 Testing
3/23 Lab: (19) Experimenting with Testing I
3/24 Creating Exception Classes and Packages
3/28 Lab: (20) Experimenting with Testing II
3/29 Review
3/30 Lab: (21) Gaining Experience with Creating Exception Classes
3/31 Examination 2
4/4 Lab: (22) Skills: Using the JAR Utility
Part IV: Introduction to Collections and Abstract Data Types
4/5 Multi-Dimensional Arrays 8.1-8.10
4/6 Lab: (23) Gaining Experience with Arrays of Arrays
4/7 Using Collections I 8.13
4/11 Lab: (24) Experimenting with Collections I
4/12 Using Collections II
4/13 Lab: (25) Experimenting with Collections II
4/14 Stacks and Queues
4/18 Lab: (26) Questions About Stacks and Queues
Part V: A Brief Glimpse of Some Things To Come
4/19 An Introduction to User Interfaces
4/20 Lab: (27) Experimenting with User Interfaces
4/21 An Introduction to 2D Graphics
4/25 Lab: (28) Experimenting with 2D Graphics
4/26 An Introduction to Animation
Part VI: Final Exam
4/27 Lab: In-Lab Programming Portion of the Final Exam
4/28 Review for the Written Portion of the Final Exam
5/4 Final Exam (6:00PM-8:00PM, Room 159)

You are expected to come to class prepared to ask and answer questions on the topics above. Attendance is not mandatory but is strongly encouraged.

Grading: Final grades will be based on your performance on: 1 first exam (15% total) , 1 second exam (20% total) , 1 final exam (25% total) , several programming assignments (30% total) and several labs (10% total). Note: Students who do not earn 60% of the points on the final exam will receive a letter grade no higher than D+ for the course.
Programming Assignments: 7 programming assignments will be assigned during the semester.
Programming Assignment 1 , Due: 1/31 11:00PM (Review)
Programming Assignment 2 , Due: 2/14 11:00PM (Implementing Simple Classes)
Programming Assignment 3 , Due: Stubs 2/22, Implementation 2/28 at 11:00PM, Drivers with Hardcopy (Designing and Implementing Classes)
Programming Assignment 4 , Due: Design (in UML) 3/15, Implementation 3/21 at 11:00PM (Abstract Classes and Interfaces)
Programming Assignment 5 , Due: 3/28 11:00PM (Recursion)
Programming Assignment 6 , Due: 4/15 5:00PM (Arrays of Arrays)
Programming Assignment 7 , Due: 4/26 1:00AM - No Late Submissions (Collections)

Make sure you read and understand all of the policies related to programming assignments.

Laboratory Exercises: There will be two lab periods every week. During most lab periods you will be given a step-by-step exercise to complete. Some laboratory exercises will be experimental in nature (i.e., help you "discover" various things), some will help you gain experience with things you already know, and some will help you improve your programming-related skills (rather than knowledge).
Office Hours: You may meet with Prof. Bernstein during his scheduled office hours or you may schedule an appointment with him. The lab assistant for the 1:25 section is Ben Jerauld (jeraulbk@dukes.jmu.edu) and the lab assistant for the 2:30 section is Ryan Reid (reid3rm@dukes.jmu.edu). You can get help from any of the lab assistants during scheduled lab hours.
Course Policies: Your are responsible for reading, understanding, and following all course policies.

Copyright 2011