**COURSE TIMES:**

- Section 2: Tuesday and Thursday, 2:00 PM - 3:15 PM, ECS-143

**PREREQUISITES:**
Programming I (COP-2210, or equivalent) and Discrete Math (MAD-2104).
You
**must**
drop the course
if you haven't gotten a C or better in a basic programming course.
Basic program development skills and debugging skills are
assumed.
**This course is lots of work.
If you are thinking about taking an extra course,
you are strongly encouraged to pick another semester
in which to do it.
**

**INSTRUCTOR:**
Prof. Mark Allen Weiss

**OFFICE HOURS:**
You are free to stop by my office (ECS-355) any time you can find me.
My office hours represent a time when I am (more or less)
guaranteed to be available.
This semester this is
Tuesday and Thursday, 9:45 - 10:45 PM and
after 3:15 PM.
You can also contact me by email
to
.
My office phone is FIU-2036.

**LANGUAGES AND PLATFORMS:**
This course will be conducted in Java 5.

**TEXTBOOK:**
The course text is
*Big Java*, by Cay Horstmann.

**COURSE GRADING:**
Grades will be based on several programs,
five exams, and a final.
Only the last program will be graded, and it will be a large assignment.
The other programs will not be graded, but if you don't do them, passing
the exams will be hopeless, and it will much harder to complete the
last program.
Each exam is worth 100 points.
The final program and final exam will each be worth 200 points.
I will drop the lowest and highest of the four
regular exams (but only if doing so actually improves your average).

I reserve the right to change the method of assigning grades,
including changing the number of assignments or exams,
but
**in no case will a curve be applied**.

**COURSE OUTLINE**

- Reference Types
**REVIEW**- What is a Reference?
- Basics of Objects and References
- Strings
- Arrays
- Exception Handling
- Input and Output

- Writing Classes
**REVIEW**- A Simple Example
- Constructors
- Basic Methods
- Additional Constructs:
`this`,`toString`,`equals` - Packages andd import directives

- Inheritance
- What is Inheritance?
- Designing Hierarchies
- Multiple Inheritance
- The Interface
- Fundamental Inheritance in Java
- Implementing Generic Components Using Inheritance
- Implementing Generic Components Using Java 1.5 Generics
- The Functor (Function Objects)

- Recursion
- What is Recursion?
- Background: Proofs by Mathematical Induction
- Basic Recursion
- Divide-and-Conquer Algorithms
- Backtracking

- Inner Classes and Implementation of ArrayList
- Iterators and Nested Classes
- Iterators and Inner Classes
- The AbstractCollection Class
- StringBuilder
- Implementation of ArrayList with an Iterator

- Stacks and Queues
- Implementations
- Applications
- The java.util.Stack Class

- Linked Lists
- Basic Ideas
- Java Implementation

- Introduction to the Java Collections Library
- List
- Set
- Map

- Master the design and implementation of classes using inheritance and polymorphism
- Master the use and implementation of interfaces
- Be exposed to writing recursive methods
- Be familiar with the implementation of Linked List data structures
- Be familiar with the Stack and Queue data structures
- Be exposed to the Java Collections interface
- Master analyzing problems and writing Java program solutions to those problems