The course is devoted to object-oriented programming and the Java programming language, as well as to the basics of object-oriented analysis and design. The course provides an overview of other object-oriented languages and a view of software development paradigms as such, reuse, and design patterns. The course touches aspect-oriented programming and the AspectJ language, too. The course requires basic knowledge of procedural programming.