Generic Programming - Function Overloading - Definition - Examples - How can a function be overloaded? - Variable Number of Arguments - Binding of names - Case studies in C, C++, Java, Python/Ruby - Generic Types - OCaml wildcards - Java Generics and Wildcards - Differences and Similarities - super vs extends - C++ Templates - Type constraints vs concepts - how do templates differ from Java generics? - Nameless Procedures (Lambdas and Closures) - Case studies in various languages - language evaluation criteria - Closures in C++ with capture lists - How to differentiate between a Lambda and Closure Coroutines - Definition of re-entrant - Generators - Definition - Python example - Recursive Generators - Two possibilities of re-entrant behavior: - "Returning" values from a coroutine - "Sending" values from a coroutine Object Oriented Programming - Definitions - Abstract Data Type - Class, Subclass, Superclass - Object - Components - Constructors and Destructors - Accessor Methods - Mutator Methods - Properties - Naming Encapsulations - Terms: - Interface - Abstract Class - Inheritance - Multiple Inheritance - Final/Sealed Class - Visibility - Dynamic Binding - Class Instance Records - Contents - Virtual Tables / VTables - Reflection - Definition - "Metaprogramming" - Design Issues Event-Driven Programming - Terms - Event - Event Handler - Event trigger - Event-Driven Architecture - Know the steps - Trace through an example (Provided code) Exceptions - Definition - Terms - Raising - Handling - Continuing - Fatal Exception - Aborting/Terminating - Exceptional Control Flow definition / example - Exception Handlers - Writing them in Java or C++ or Python or OCaml - try vs catch/except/with vs finally vs else - Language evaluation criteria for exception programming Cumulative Material (At least 30% of the exam) - OCaml - Tail Recursion - Tuples - Higher Order Functions - Variants - Recursive Types - Folding - Stages of Compilation (Approx 10 points) - Project-Centric - Axiomatic Semantics - Weakest Precondition - Parameters - Actual Passing Modes - For each be able to trace an example! - Pass-by-Value - Pass-by-Result - Pass-by-Value-Result - Pass-by-Reference - Pass-by-Name - Passing Arrays - Decay - definition - Multidemensional & single-dimension in C/C++ - Control Structures - break - continue - goto - usage + design -- is it a good idea to have/use these?