Course Outline

Lecture 1. The variety of programming languages. Abstraction, programming in the large, software engineering. Compilers and interpreters. Syntax and semantics. Context-free grammars.
Readings: Sethi, chapters 1 and 2.
class notes (powerpoint) class notes (pdf)
Lecture 2. Imperative languages. An overview of Ada95. Control structures: conditionals, loops, case statements.
Readings: Sethi, chapter 3, Barnes, chapters 2 and 3, chapter7.
class notes (powerpoint) class notes (html)
Lecture 3. Data types and their representation. Strong typing. Static vs. dynamic typing. Type declarations, type equivalence. Subtypes and derived types in Ada95. Numeric types, scalar types.
Readings: Sethi, chapter 4, Barnes, chapter 6, Stroustrup, chapter 4.
class notes (powerpoint)
Lecture 4. Composite types: arrays, records, variants and unions. Strings. Pointers, access types and dynamic allocation.
Readings: Barnes, chapters 8 and 10 (up to section 10.3), Stroustrup chapter 5.
class notes (powerpoint)
Lecture 5. Subprograms, functions, procedures, methods. Parameter passing, scope and visibility. Block structure and static scoping. Nested procedures, implementation issues.
Readings: Sethi, chapter 5, Barnes, chapter 9, Stroustrup chapter 7.
class notes (powerpoint)
Lecture 6. Program structure: Modules, packages, and interfaces. Abstract types and information hiding.
Readings: : Sethi chapter 6, Barnes chapter 11, Stroustrup chapter 8-10.
class notes (powerpoint)
Lecture 7. Object oriented programming: Objects, classes, data and function members, constructors and destructors.
Readings: Sethi chapter 7, Stroustrup chapter 10.
class notes (powerpoint)
Lecture 8. language summary: C++: inheritance, dynamic dispatching, polymorphism. Multiple inheritance.
Readings: the rest of Stroustrup (:-)!)
class notes (powerpoint)
Lecture 9. Generic programming and templates in Ada95 and C++. Containers and Iterators.
Readings: Barnes chapter 17, Stroustrup chapter 13, 18.
class notes (powerpoint)
Lecture 10. Exception handling. Concurrent programmming: threads, tasks, synchronization, communication. Concurrency in Ada (Java to follow).
Readings: : Sethi chapter 12, Barnes chapter 18.
class notes (powerpoint)
Lecture 11. Functional programming: LISP and Scheme. The LISP interpreter.
Readings: : Sethi chapter 8 and 10, the Scheme report.
Pointers to Scheme.
class notes (powerpoint)
Lecture 12. Functional programming in ML: type inference, first-class functions.
Readings: : Sethi chapter 9, end of chapter 4.
class notes (powerpoint)
Lecture 13. Language summary: Java
Readings: your favorite Java text.
Lecture 14. Prototyping and scripting. A modern hybrid language: Python.
Readings: online documentation.
class notes (powerpoint)