Fall 2024 (Section 4, 82915) - 3 credit hours
JMU CS159 - Advanced Programming
Help Policies Solutions Study-Aids Tools
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.
Textbook: There are three official textbooks for this course, all of which are available on-line. They are: Think Java (denoted by D&M below), Patterns for Beginning Programmers (denoted by B below), and The Java Tutorials (denoted by J below). However, there are many other good textbooks that you can use to replace these readings or supplement them.
Outline: This course is organized as follows (though specific topics and dates may change).

Readings are listed in the right-most column.

Topics to Understand Completely Before the First Meeting
Fundamentals Algorithms , Programming and The Programming Process
Patterns Updating , Swapping , Accumulators , Indicators and Indicator Methods B 1,2,14,6,7
Part I: Object-Oriented Programming Fundamentals
8/21 Data Types and Variables , Literals and The Assignment Operator D&M 2.1-2.3, 3.7
8/23 An Introduction to: Classes and UML Class Diagrams D&M 11.1-11.4, 4.1-4.4, 4.8-4.9
8/26 Arithmetic Operators , Logical Operators , Relational Operators and Arithmetic on a Circle D&M 2.5-2.7, 5.1, 5.5 and B 1-3
Extra Help Designing Classes
8/28 Using Objects and Classes , Using Strings and Using Members in Classes and D&M 2.8, 6.7-6.11
8/30 Arrays and Console I/O D&M 7.1-7.5, 3.1-3.5, 3.10
9/2 Lab: (1) Using VSCode to Check Syntax and Style Java Programming
9/4 Lab: (2) Using VSCode to Execute Programs
Lab: (3) Submitting Assignments to Gradescope
9/6 Conditions and Decisions and Repetition and Looping D&M 5-6
Extra Help Gaining Experience Using Objects
Extra Help Gaining Experience with Static Attributes and Methods
9/9 Programming Patterns: Conformal Arrays , Segmented Arrays , Look-up Arrays and Truncation B 17, 18, 15, 5
9/11 Developing Enumerated Types and ArrayList Basics J (enum)
Extra Help Experimenting with Enumerated Types
9/13 Programming Patterns: Overloaded Methods and Chained Mutators B 25
9/16 Exceptions and Packages J (Exceptions) and J (Packages)
9/18 Examination 1
9/20 Basics of Testing and Debugging , JUnit and JaCoCo/EclEmma JUnit
9/23 Lab: (4) Unit Testing in VSCode
9/25 Lab: (5) Using the VSCode Debugger
9/27 Objects and References
Extra Help Experimenting with References - Objects
9/30 Arrays and References and Parameter Passing D&M 12-13
Extra Help Experimenting with References - Arrays
10/2 Programming Patterns: Accumulator Arrays , Interval Membership and Missing Values B 14,16,27
10/4 File System Basics and Input/Output Basics J (I/O)
10/7 Programming Patterns: Delimiting Strings , Dynamic Formatting and Pluralization B 22-24
10/9 Examination 2
Part II: Intermediate Object-Oriented Programming
10/11 Specialization/Generalization (Derived Classes and Inheritance) J (Subclasses)
Extra Help Experimenting with Specialization
10/14-10/21 Polymorphism through Inheritance J (Polymorphism)
Extra Help Experimenting with Polymorphism through Inheritance
10/23 Interfaces and Polymorphism through Interfaces J (Interfaces)
Extra Help Experimenting with Interfaces and Experimenting with Polymorphism through Interfaces
10/25 Abstract Classes J (Abstract)
Extra Help Experimenting with Abstract Classes
10/28 Designing with Abstract Classes and Interfaces
10/30 Stack Traces and Developing Exception Classes
Part III: Recursion
11/1 Recursive Algorithms/Thinking Recursively D&M 8
Extra Help Experimenting with Recursion
11/4 Programming with Recursion
11/6 Examination 3
11/8 Lab: (6) Tracing Recursive Methods
Part IV: Introduction to Collections
11/11 Parameterized Classes/Interfaces Generics
11/13 Collections J (Collections)
Extra Help Experimenting with Collections
11/15 The Iterator Pattern and The Composite Pattern
11/18 Arrays of Arrays (a.k.a. Multi-Dimensional Arrays) D&M 15
Extra Help Experimenting with Arrays of Arrays
11/20 Subarrays Pattern and Neighborhoods Pattern B 19, 20
Part V: Preparing to Move Ahead
11/22 Designing with Constructors and Factories and Course Evaluations
12/2-12/4 Static Nested Classes and Inner Classes , Local Classes , Anonymous Classes and Lambda Expressions Nested
12/6 No Lecture - Extra Office Hours
Part VI: Final Examination
12/11 Final Examination (8:00-10:00)

Attendance at lectures is not mandatory but is strongly encouraged. You are expected to come to class prepared to ask and answer questions. Hence, you should complete the readings on a topic before it is discussed in lecture.

The syllabus includes extra help activities. These are optional self-guided, lab-like activities. It is recommended that you complete these activities but you need not submit anything and they do not contribute to your final grade (though completing them will, most likely, help you on exams/quizzes/assignments).

Dates that start with 'Lab:' will take place in the "lab" room.

Grading: Final grades will be based on your performance on: exam 1 (10%) , exam 2 (15%) , exam 3 (20%) , the final exam (20%) , several homework assignments (5% total) , several programming assignments (20% total) and several quizzes (10% total).
Homework Assignments: 5 homework assignments will be assigned during the semester. Note that their due dates are subject to change.
HW1 ; Due: 9/8 11:00PM(Getting Started)
HW2 ; Due: 9/15 11:00PM(Objects and Classes)
HW3 ; Due: 9/22 11:00PM(Classes and Enumerated Types)
HW4 ; Due: 9/29 11:00PM(Unit Testing)
HW5 ; Due: 10/5 11:00PM(Objects and References)

Make sure you read and understand all of the policies related to homework assignments. homework assignments may not be submitted after the due date/time (in other words, you will receive a grade of 0 on any one that is not submitted on time).

Programming Assignments: 4 programming assignments will be assigned during the semester. Note that their due dates are subject to change.
Programming Assignment 1 ; Due: 10/21 (Mon.) 11:00PM (I/O and Specialization)
Programming Assignment 2 ; Due: 11/3 11:00PM (Interfaces, Abstract Classes, and Polymorphism)
Programming Assignment 3 ; Due: 11/17 11:00PM (Recursion)
Programming Assignment 4 ; Due: 12/4 (Wed.) 11:00PM (Collections)

Make sure you read and understand all of the policies related to programming assignments. Programming assignments may not be submitted after the due date/time (in other words, you will receive a grade of 0 on any programming assignment that is not submitted on time).

Quizzes: 11 quizzes will be assigned during the semester. Note that their due dates are subject to change.
Quiz 0; Due: 8/26 11:00PM(Using Eclipse to Check Syntax and Style)
Quiz 1; Due: 8/20 11:00PM(Operators)
Quiz 2; Due: 9/2 11:00PM(Classes and Objects)
Quiz 3; Due: 9/4 11:00PM(Developing Classes)
Quiz 4; Due: 9/9 11:00PM(Loops)
Quiz 5; Due: 9/23 11:00PM(Classes and Enums)
Quiz 6; Due: 9/30 11:00PM(Exceptions)
Quiz 7; Due: 10/7 11:00P(References)
Quiz 8; Due: 10/28 11:00PM(Specialization and Inheritance)
Quiz 9; Due: 11/4 11:00PM(Intermediate OOP Concepts)
Quiz 10; Due: 11/20 11:00PM(Collections)

Make sure you read and understand all of the policies related to homework assignments. quizzes may not be submitted after the due date/time (in other words, you will receive a grade of 0 on any one that is not submitted on time).

Office Hours: You may meet (either face-to-face or virtually, depending on the situation and schedule) with Prof. Bernstein during his scheduled office hours or you may schedule an appointment with him. You may get help from the lab assistants as described on the Department Wiki .
Contact Information: Prof. Bernstein's contact information is available on the contact page of his WWW site.
Course Policies: Your are responsible for reading, understanding, and following all course policies.

Copyright 2024