In this second introduction lecture, we focus on the core concepts of so called imperative and object-oriented programming languages.
We will start with the core abstractions in machine code and show how these abstractions are lifted in imperative programming languages. We pay special attention to the notion of types in such languages. You will learn about static and dynamic type checking, type equivalence, and polymorphic type systems.
In a next step, we discuss the core abstractions in object-oriented programming languages. We revisit types in the context of these abstractions. You will learn about inheritance, method overloading and overriding, and static and dynamic dispatch.