Search result: Catalogue data in Autumn Semester 2014
Computer Science Master | ||||||
Focus Courses | ||||||
Focus Courses in Software Engineering | ||||||
Focus Core Courses Software Engineering | ||||||
Number | Title | Type | ECTS | Hours | Lecturers | |
---|---|---|---|---|---|---|
252-0237-00L | Concepts of Object-Oriented Programming | W | 6 credits | 3V + 2U | P. Müller | |
Abstract | Course that focuses on an in-depth understanding of object-oriented programming and compares designs of object-oriented programming languages. Topics include different flavors of type systems, inheritance models, encapsulation in the presence of aliasing, object and class initialization, program correctness, reflection | |||||
Objective | After this course, students will: Have a deep understanding of advanced concepts of object-oriented programming and their support through various language features. Be able to understand language concepts on a semantic level and be able to compare and evaluate language designs. Be able to learn new languages more rapidly. Be aware of many subtle problems of object-oriented programming and know how to avoid them. | |||||
Content | The main goal of this course is to convey a deep understanding of the key concepts of sequential object-oriented programming and their support in different programming languages. This is achieved by studying how important challenges are addressed through language features and programming idioms. In particular, the course discusses alternative language designs by contrasting solutions in languages such as C++, C#, Eiffel, Java, Python, and Scala. The course also introduces novel ideas from research languages that may influence the design of future mainstream languages. The topics discussed in the course include among others: The pros and cons of different flavors of type systems (for instance, static vs. dynamic typing, nominal vs. structural, syntactic vs. behavioral typing) The key problems of single and multiple inheritance and how different languages address them Generic type systems, in particular, Java generics, C# generics, and C++ templates The situations in which object-oriented programming does not provide encapsulation, and how to avoid them The pitfalls of object initialization, exemplified by a research type system that prevents null pointer dereferencing How to maintain the consistency of data structures | |||||
Literature | Will be announced in the lecture. | |||||
Prerequisites / Notice | Prerequisites: Mastering at least one object-oriented programming language (this course will NOT provide an introduction to object-oriented programming); programming experience | |||||
252-0239-00L | Software Verification | W | 6 credits | 3V + 2U | B. Meyer, C. A. Furia, S. Nanz | |
Abstract | This course surveys some of the main approaches to software verification, including axiomatic semantics, abstract interpretation, model checking, and testing. | |||||
Objective | After successfully taking this course, students will have a theoretical and practical understanding of: * The principles behind fundamental software verification techniques, including Hoare-style axiomatic semantics, abstract interpretation, model checking, and testing. * Application of the principles to the construction of verification tools, in particular program provers. * Research challenges in these areas. | |||||
Content | The idea of software verification has been around for decades, but only recently have the techniques become mature enough to be implemented and be applicable in practice. Progress has been made possible by the convergence of different techniques, originally developed in isolation. This course embraces this diversity of approaches, by surveying some of the main ideas, techniques, and results in software verification. These include in particular: * Axiomatic semantics, which provides a foundation of program correctness proofs by supplying a rigorous semantics of programs. * Abstract interpretation, which provides a general framework to express and design static techniques for program analysis. * Model checking, which provides efficient techniques for the exhaustive exploration of state-based models of programs and reactive systems. * Testing, which provides the counterpart to exhaustive techniques by defining dynamic analyses to detect programming mistakes and correct them. To demonstrate some of the techniques in practice, the course will offer a practical project requiring the application of verification tools to illustrative examples. | |||||
Literature | Axiomatic semantics: * Michael Huth and Mark Ryan. Logic in Computer Science: Modelling and Reasoning about Systems, second edition. Cambridge University Press, 2004 * Aaron Bradley and Zohar Manna. The Calculus of Computation. Springer, 2007. * David Gries. The Science of Programming. Springer, 1981. * Bertrand Meyer. Introduction to the Theory of Programming Languages. Prentice Hall, 1990. * Flemming Nielson and Hanne Riis Nielson. Semantics with Applications: An Appetizer. Springer, 2007. * Krzysztof R. Apt, Frank S. de Boer, Ernst-Rüdiger Olderog. Verification of Sequential and Concurrent Programs. Springer, 2009. Abstract interpretation: * Flemming Nielson, Hanne Riis Nielson, Chris Hankin: Principles of Program Analysis, Springer, ISBN 3-540-65410-0. * Neil D. Jones, Flemming Nielson: Abstract Interpretation: a Semantic-Based Tool for Program Analysis Model checking and real-time: * Edmund M. Clarke, Orna Grumberg, and Doron A. Peled. Model Checking. MIT Press, 2000. * Carlo A. Furia, Dino Mandrioli, Angelo Morzenti, and Matteo Rossi. Modeling Time in Computing. Monographs in Theoretical Computer Science. An EATCS series. Springer, 2012. Testing: * Mauro Pezzè and Michal Young: Software Testing and Analysis: Process, Principles and Techniques, Wiley, 2007. * Paul Ammann and Jeff Offutt: Introduction to Software Testing, Cambridge University Press, 2008. | |||||
263-2800-00L | Design of Parallel and High-Performance Computing | W | 7 credits | 3V + 2U + 1A | T. Hoefler, M. Püschel | |
Abstract | Advanced topics in parallel / concurrent programming. | |||||
Objective | Understand concurrency paradigms and models from a higher perspective and acquire skills for designing, structuring and developing possibly large concurrent software systems. Become able to distinguish parallelism in problem space and in machine space. Become familiar with important technical concepts and with concurrency folklore. |
- Page 1 of 1