Final Exam: Notes
The final exam will be given in the usual class time and place on Tuesday,
May 12. Open book, open notes.
The exam will cover the programming languages C++, Java, Ada, Scheme, and ML,
and the theoretical material discussed in class. I will not ask about any
other programming languages. I do not expect you to know
minutiae or obscure features of these programming languages. I do expect you
to know the important features. I expect you to be able to read, modify or
correct, and write code in all these languages; again, I will not deduct for
Note: The exam will be rather long. Therefore it is EXTREMELY IMPORTANT
to use GOOD TEST TAKING STRATEGY. That is, first answer the problems that
you can answer easily and quickly, and then go to the problems that are going
to take you more work. Do not waste a lot of time at the beginning trying to
figure out a problem that you find difficult. The answers do not have to be
in order in your exam booklet.
The following issues were discussed in class but will not be on the exam:
Complex generic type descriptors (e.g. < T super ...> or
< T extends ...>) in Java, free variables in closures, user-defined
types in ML, Prolog.
- Lexical and dynamic scoping
- Memory management:
- Structure of activation records on the control stack.
- Procedure calling and returning protocols
- Locating variables and objects at run time.
- Garbage collection.
- Parameter passing: Pass by value, pass by reference, pass by value-restore.
- Macros and inline compilation.
- Static vs. dynamic typing.
- Base types and constructors.
- Variant records
- User defined types
- Subtype relation
- Casting, coercion, conversion, overloading.
- Implementation of various types: records, arrays, objects, pointers.
- Dangling pointer problem.
- Object-oriented programming
- Method inheritance
- Static and dynamic dispatching. Vtables.
- Abstract methods and interfaces.
- Programming in the large. Modules (packages). Information hiding.
Abstract data types.
- Concurrency and synchronization. (I will not ask about the implementation.)
- Generics/templates and type polymorphism.
- Exception handling. (I will not ask about the implementation.)
- Passing functions as parameters in C++, Scheme, ML.
- Functional programming in Scheme and ML. Functions as first-order objects.
- Recursive programs
- Lists in Scheme and ML.
- Type inference in ML.