Objectives Test 2 -- Sebesta Chapters 5-9, 12

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