Objectives Test 2 -- Sebesta Chapters 5-9, 12
Be able to (with the help of one page hand-written notes)
-
LISP -- use car, cdr, cons, null, nil atom, eq, define lambda to
predict output form functions. In Scheme use eq?, null?, list?.
-
Distinguuish Lisp, Scheme, Haskell, ML from one another by salient features.
Define a functional programming language and indicate why Scheme is not
purely functional.
-
articulate at least 4 design issues surrounding names (identifiers)
-
characterize variables by six attributes
-
discuss the positive and negative aspects of aliasing
-
articulate different binding times with program actions
-
distinguish static and dynamic binding and cite language exemplars, advantages
and disadvantages
-
categorize scalar variable by their lifetimes
-
distinguish among static, stack-dynamic, explicit heap-dynamic and implicit
heap-dynamic variables
-
give examples of strong typing and counter examples and discuss the merits
of each
-
show that you understand static and dynamic scoping by identifying the
visibility of variables in sample programs
-
define initialization and give examples
-
discuss named constants
-
discuss fundamental semantic issues of variables, and binding times : static
variables, stack-dynamic variables, explicit heap-dynamic variables, implicit
heap-dynamic variables
-
discuss and produce examples of coercion, declarations, elaboration
-
discuss pointer issues: pointer variables issues, allocation, deallocation,
dangling pointers, dangling references, tombstones, garbage collection
-
identify characteristics and implementation issues surrounding user-defined
types, sets, arrays, records, etc., array component selection mechanisms,
variant (discriminant and non-discriminant) records
-
define and apply precedence, evaluation order, associativity, complex assignment
statements (multiple target, multiple targets, conditional targets), short
circuit evaluation, operator oeverloading
-
discuss control mechanisms for selection and repetition (including implementation
issues)
-
distinguish between procedures and functions, flat files
-
parameter passing, techniques -- call by reference, call by value, call
by value result, and call by name.
-
discuss main ideas of Dijkstra's "GOTO
Considered Harmful" from CACM
-
discuss activation records -- how storage allocation differs between single
activation records and multiple ar's.
-
discuss elements of object-oriented languages: inheritance, polymorphism,
encapsulation, information hiding, interacting objects, class, subclass,
dynamic binding, method, message, object, scope resolution
-
predict output from C++ programs which contain inheritance and virtual
methods
-
identify categories of OO languages -- derived and pure
-
identify salient OOP features of C++, Java, Smalltalk, Ada 95, and Eiffel
-
distinguish multiple versus single inheritance and know which languages
support them.
-
distinguish C++ constructors from Javascript constructors.