Concepts and Semantics of Programming Languages 2. Modular and Object-oriented Constructs with OCaml, Python, C++, Ada and Java