16 weeks, two lectures each L 1 L 2 L 3 L 4 L 5 L 6 L 7 L 8 L 9 L 10 L 11 L 12 C 13 C 14 C 15 C 16 C 17 C 18 C 19 C 20 C 21 C 22 C 23 C 24 P 25 P 26 P 27 P 28 P 29 P 30 P 31 P 32 Goal: Let them experience first dynamic properties of the programming language and then also the static ones. Of course: Lots of programming. A Basic Algorithmic understanding (Assume given base types, int, bool, float, string) Understanding base types understanding equality. Floating point precision Programming with state Loops Branching B User defined types Classes: Trees Objects (as records) Programming with user defined types. Generics Taxonomies Subclassing to define data. Polymorphism Representation invariants Object oriented features. Encapsulation Equality of objects, cloning. Objects as references. C Algorithmic design techniques (assumes given base types) Functional abstraction (leads to methods) Recursion Divide and conquer Search, Sorting, Constructor methods. Contracts. Inheritance, multiple inheritance, constructor order Virtual method lookup D Code Organization Implementation abstraction Interfaces State of the art description languages UML, etc. Packages Class Libraries, how to use them, how to find stuff.. Maybe, implement your own. Abstract datatypes. (doubly linked list, red black trees) Encapsulation. Properties. Contracts revisited. E Thread programming Processor abstraction. Thread scheduling Monitors. Synchronization. Fairness Deadlock Examine your code. F Reflection Interpreter abstraction Tester. Inspectors. Write an interpreter for an domain specific language (pocket calculator) G Advanced programming paradigms Inner Classes H Design Patterns Nature of Design Patterns Decorator Pattern Listener Pattern I Communication structures Exception Method calls Streams J Graphical user interfaces. Model Design Techniques View Graphical algorithms Control Introduction to the libraries K Under the hood Java Byte Code Java Virtual machine L Programming Project Simple board game. Quarto, Connect 4, Backgammon.