Class: Tuesdays and Thursdays, 3:30-4:45pm, WWH 102
Instructor: Robert Grimm, firstname.lastname@example.org
Office hours: Wednesdays, 2-3pm, 715 Broadway, room 711
TA: Ilya Rosenberg, account ilya in domain cs nyu edu
Office hours: Tuesdays, 5-6pm, 715 Broadway, room 1207
Grader: Theo Burry, email@example.com
[ Overview | Assignments | Syllabus | Compilers and Tools ]
Object-oriented programming is an undergraduate course on, ahem, object-oriented programming. The course covers how to structure large-scale software systems through object-oriented design, i.e., how to think about structuring such systems, patterns, i.e., how to leverage cookbook-like receipes that have worked for others, and programming, i.e., how to write the actual code. Object-oriented programming is powerful and popular, but, if abused, can also lead to unnecessarily complex and/or slow programs. Consequently, the primary goal of this course is to develop an appreciation for the benefits and costs of object-oriented programming. To this end, lectures introduce relevant concepts and assignments provide students with an opportunity to get their own hands muddy and to deepen their understanding.
Textbooks. We use both Java and C++ as programming languages. As a result, we rely on two required textbooks:
Exams. This course has both a mid-term, during class on 10/25/05, and a final exam.
Grading policy. The final grade is, approximately, composed of 40% for the assignments, 30% for the midterm, and 30% for the final exam. However, you cannot get an A if you hand in any assignment past the due date and time.
A word on academic integrity: Please familiarize yourself with the departmental statement on academic integrity. In accordance with departmental policy, any instance of academic dishonesty will result in an automatic F for the entire course.
Mailing list. Be sure to subscribe to the class mailing list v22_0470_001_fa05. Please send any questions to this list and not just the instructor and/or grader.
javadoctools. If you prefer to use an integrated development environment (IDE), make sure the IDE of your choice is installed and you know how to use it.
javac, the Java compiler,
java, the Java virtual machine,
javadoc, the API documentation creator, and
javap, the Java disassembler; the API documentation; some differences between JDK 1.4 and 1.5 including the new
forloop and typed lists, e.g.,
toString()(which is inefficient and buggy without parentheses), the implementation of each node's
eval()method, and the implementation of the actual arithmetic operations. For the latter, we restructured
Valueas an abstract base class and moved the implementation of arithmetic operations into the class.
Valueinto an interface again; implementing exponentiation; adding a precondition to
integerValue(); introducing the visitor design pattern.
SwingUtilities.invokeLater(), and long-lasting operations.
iterator()method in terms of
get(); the implementation of our tree model adapter; the integration with our GUI.
make/Makefilefor your OS.
FloatValueand includes a make file that works on both Mac OS X and Cygwin (modulo
Eval.h; the binary operator class
Eval::BinaryOperatorand its concrete subclasses in
Eval::FloatValueas a node. We also fixed our reference-counting garbage collector.
reinterpret_cast, and old-style casts (bad!). We also started adding support for casts to
Ptr<T>and improved support for the injection operator. We also reviewed memory layout in our evaluator.
Consistent with the first textbook, we use the latest version of Java, Java 2 Platform Standard Edition 5.0, née JDK 1.5. Sun provides implementations for Windows, Linux, and Solaris. Apple provides an implementation for Mac OS X 10.4. Note that the API documentation for JDK 1.5 typically needs to be downloaded and installed separately (in the case of OS X 10.4, from the Apple Developer Connection). Further note that Apple's release does not replace version 1.4.2 shipping with OS X 10.4. Rather, you need to explicitly set your Terminal's path for version 1.5.0; this script may help.
For C++, we are standardizing on gcc, the GNU Compiler Collection, as a compiler. It is the default compiler for both Linux and Mac OS X. For Windows, you need a Unix environment, such as Cygwin. You are welcome to use a different compiler, but your assignments must compile and run with gcc.
You may find the following tools and resources useful:
make, the Java Makefile above, and Cygwin on Windows.