Software development today depends on a variety of programming
models, concepts, languages, pragmatics, and environments. The
ability to choose from this variety of aspects critically
determines whether a programmer can solve real life programming
tasks successfully and efficiently.
Aim
The overall aim of the course is to provide the necessary
knowledge in programming models, concepts, languages, and
environments used in today's software construction such as in
web-based systems, embedded systems, communication systems,
distributed systems, just to name a few.
More specifically, after the course, students should be
able to:
- know basic characteristics and key concepts of common
programming models (object-oriented, imperative, functional, and
concurrent programming models) and know about common programming
languages that implement these models.
- analyze programming tasks and identify aspects of these tasks
that make them suited for the above mentioned programming
models.
- apply object-oriented programming concepts from Java in C++:
classes, inheritance, object-based polymorphism, and exceptions.
- understand and apply the concepts of C++ as a language
following the object-oriented and imperative programming model:
parameter passing, pointers and references, explicit memory
management, overloading, parametric polymorphism through
templates.
- configure, compile, and interface to software libraries in C++.
- design, structure, debug, test, and profile medium-sized
programs in C++.
- apply basic functional programming techniques in Erlang:
recursion, pattern matching, list processing.
- understand and identify safety and liveness properties of
concurrent programs.
- apply mutual exclusion, message ordering, and concurrency
adaptors as common synchronization patterns in concurrent
programs.
- structure concurrent applications into communicating and
cooperating concurrent abstractions.
Synopsis
- Programming models and languages: imperative programming,
object-oriented programming, functional programming,
concurrent programming. Introduction to key properties, benefits,
and application areas.
- Programming in C++: differential approach to Java. Key
differences. Relation to C. Basics: data types, control
structures, objects, classes, inheritance, object-based
polymorphism. Advanced: parameter passing, references, pointers
and explicit memory management, parametric polymorphism with
templates.
- Concurrent programming: paradigms (shared data structures
versus message passing), techniques and concepts (safety,
liveness, concurrency control, services).
- Functional and concurrent programming in Erlang: recursion,
list processing, pattern matching, message sending, safety
(mutual exclusion), liveness (concurrency adaptors, message
ordering).
- Pragmatics: development tools and environments, testing,
debugging, profiling.
Prerequisites
Knowledge corresponding to 2I1080, 2I1081.
Requirements
Approved written exam (TEN1; 4.5hp) and approved lab assignments
(LAB1; 3hp).
Required Reading
- Joe Armstrong, Robert Virding, Claes Wikström, Mike Williams,
Concurrent programming in ERLANG, Prentice Hall, 1993.
Available electronically
from the Erlang webpages.
- Mark Allen Weiss, C++ for Java
Programmers, Pearson Prentice Hall, 2004.
Additional reading material can be found under resources.
Schedule
The schedule is available in Daisy or here.
KTH Study Handbook
Entry for ID1218.
Contact
You can reach Christian Schulte, the course responsible, easily
by email. In urgent cases
you can also uses other forms of
getting in touch.
Christian Schulte, last modified
Fri Aug 28 13:36:22 2009