COMP 212 - 01 – INTERMEDIATE PROGRAMMING SYLLABUS

RICE UNIVERSITY - FALL 1999

INSTRUCTOR: Dr. Dung X. Nguyen (pronounced "Zung Gwen", it’s Vietnamese!)

OFFICE and PHONE: DUNCAN HALL (DH) 3097, 713-527-8101 X3835

OFFICE HOURS: MW 11 AM – 1 PM, F 11 AM – 12 PM+ by appointments, and whenever I am around

E-MAIL: dxnguyen@cs.rice.edu

TEXT BOOKS:

1. Required: The Java Programming Language, 2nd edition, by Arnold and Gosling, Addison-Wesley, 1998. James Gosling is the creator of Java. This book does not cover all the topics of the course and will be used only as a reference for Java syntax and semantics.

2. Suggested: Design Patterns Elements Of Reusable Object-Oriented Software, by Gamma, Helm, Johnsson, and Vlissides, Addison-Wesley, 1995. This is the bible of the pattern community. It predates Java. The authors are affectionately referred to as the Gang of Four (GoF). All examples are written in C++ and/or Smalltalk. It is hard to read if you are not familiar with these two languages. The "pattern language" used in this book also requires a lot of getting used to. I have learned so much from this book, and I am still reading it and learning from it. There is a version on CD-ROM which is cheaper (and perhaps, more versatile). I strongly recommend it.

COURSE PREREQUISITE:

Comp 210 – programming concepts and design recipes taught in Comp 210 will serve as part of the foundation of object-oriented programming (OOP).

COURSE DESCRIPTION

This course provides the transition from the functional paradigm (Comp 210) to the object-oriented paradigm. It introduces OOP using Java as the implementation language. It emphasizes proper formulation and abstraction of the problem domain in the programming process in order to build programs that are robust, flexible, and extensible. It teaches how design patterns help formulate and implement abstractions in effective and elegant ways.

The course covers data structures and algorithms to manipulate them that are essential to programming, such as lists, stacks, queues, trees, tables, and graphs. These structures are implemented as systems of cooperating objects using appropriate design patterns. The course will also cover both stream I/O and event-driven I/O. Since the textbook does not systematically present these topics, additional lecture notes will be provided.

Programming assignments are designed to help understand how the above concepts are implemented and used in various situations. These assignments constitute as an integral part of the course.

COURSE OBJECTIVES

Upon successful completion of the course, the students should know:

COURSE SCHEDULE

There are basically 14 weeks of classes. I intend to present the following topics in the following order. The time allocated to each topic is only approximate.

Weeks 1-5: Transition from functional to object-oriented programming: primitive types, String type, classes, fields, methods, constructors, UML diagrams, abstract classes, interfaces, inheritance, polymorphism, functional lists and the composite pattern, static fields, static methods, the singleton pattern, the visitor pattern, the interpreter pattern, exception handling.

Week 6: Graphical User Interface and Event-driven programming, strategy pattern, command pattern, the Model-View-Controller (MVC) paradigm.

Weeks 7-12: Common data structures, mutable lists and the state pattern, stacks, queues, binary trees, binary search trees, self-balancing trees, adapter pattern, decorator pattern, arrays, searching and sorting, quick sort, merge sort, heap sort, bucket sort, template pattern, iterator pattern, priority queues, hashing, complexity analysis.

Weeks13-14: Graphs and dynamic programming, graph searches, topological sort, minimum spanning trees, shortest path, dynamic programming.

The above schedule should be viewed as tentative only. There are a lot of materials to cover, and I may not be able to cover them all, as stated in the schedule. I will vary the pace of the class and change the presentation order of the topics according to how fast the class is absorbing the materials as a whole. If we work hard together, we will cover everything. Please feel free to fit to give me feedback on how the class is coming along. I want you to all succeed and I need your help.

GRADING

The course grade will be based on the programming assignments, homework assignments, class participation and exams. Class works will be given in class from time to time. Assignments’ due dates and rules will be clearly stated at the time they are given. No make-up exams will be given unless there is a legitimate excuse such as proof of medical emergency.

Programming assigments: 45%

3 midterm exams: 45% (15% each)

Homework and class work: 10%

I reserve the right to make slight modification of the above weighting.