Object-oriented programming 1000-212cPO
- https://moodle.mimuw.edu.pl/course/view.php?id=2190 (term 2024L)
- https://moodle.mimuw.edu.pl/course/view.php?id=2763 (term 2025L)
Lecture:
- Introduction to object-oriented programming, the concept of classes, UML,
- Java syntax (identifiers, literals, basic statements, reference and value types, arrays, GC, new, null, ref/val, methods, parameters, documentation),
- Encapsulation, constructors, and initialization,
- Inheritance, abstract classes, interfaces, polymorphism,
- Checked and unchecked exceptions,
- Generics,
- Collections,
- Design patterns with examples (Singleton, Factory, Adapter, Decorator, Observer, and others),
- Input/Output (I/O),
- Regular expressions,
- Optional: GUI (Graphical User Interface),
- Optional: combining with functional programming, JVM, object-oriented programming in other languages (C++ or Python).
Laboratory:
- Compilation, Java Virtual Machine (JVM), packages, IDE, documentation,
- Class interfaces (arrays wrapped in a class, queue/stack, graph),
- Imperative programming and arrays, stack/queue classes, lists,
- Tools: git, debugger, possibly others such as SpotBugs,
- Expressions,
- Checked and unchecked exceptions,
- Separation of responsibilities between classes, loose coupling, high cohesion,
- JUnit,
- Generics,
- Collections – using existing ones,
- Collections – creating new ones,
- Lambdas and java.util.stream.
- Design patterns,
- Tools, e.g., Maven or Google Guava.
Type of course
Requirements
Course coordinators
Learning outcomes
Knowledge – the graduate knows and understands:
- The theoretical foundations in the areas of programming, computational complexity, selected programming languages and paradigms, and software engineering (K_W02).
- Selected programming paradigms and languages (including object-oriented) and the concept of a virtual machine at a general level, as well as object-oriented design and programming methods (encapsulation and information hiding, classes and subclasses, inheritance, polymorphism, class hierarchies) at a detailed level (W_W09).
- Software engineering methods, including design (design patterns, object-oriented analysis and design), the use of APIs, and software development tools and environments (K_W10).
Skills – the graduate is able to:
- Acquire information from literature, knowledge bases, the Internet, and other reliable sources, integrate and interpret it, as well as draw conclusions and formulate opinions (K_U02).
- Write, run, and test programs in a selected development environment (K_U05).
- Independently plan and implement their own lifelong learning (K_U09).
- Complete an IT project, in particular, design and implement a simple IT system using appropriate methods, techniques, and tools; effectively participate in software inspection; and use at least one popular version control system (K_U16).
- Perform a requirements analysis for an IT system and design software according to object-oriented methodology, particularly using design patterns (K_U17).
Social Competences – the graduate is ready to:
- Critically evaluate their own knowledge and received content (K_K01).
- Work with respect for intellectual honesty in their own actions and those of others; adhere to the rules of professional ethics and demand this from others; and care for the achievements and traditions of the IT profession (K_K02).
- Recognize the importance of knowledge in solving cognitive and practical problems, search for information in literature, and seek expert opinions (K_K03).
Assessment criteria
The final grade for the course is determined by the number of points earned from the laboratory classes, the class test, and the exam. Detailed grading rules are outlined on the course page on the faculty's Moodle platform.
Bibliography
1. J. Gosling, B. Joy, G. Steele, G. Bracha, A. Buckley, D. Smith, G. Bierman; The Java Language Specification; https://docs.oracle.com/javase/specs/.
2. G. Booch, J. Rumbaugh, I. Jacobson, The Unified Modeling Language User Guide (2nd Edition), Addison-Wesley Professional, 2005.
3. E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley Professional, 1st ed., 2005.
4. C. Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Prentice Hall, 3rd ed., 2004.
5. B. Eckel, On Java 8, https://leanpub.com/onjava8, 2021.
6. J. Bloch, Effective Java, Addison-Wesley Professional, 3rd ed., 2017.
7. C. Horstmann, Core Java for the Impatient, Addison-Wesley Professional, 4th ed., 2024.
Additional information
Additional information (registration calendar, class conductors, localization and schedules of classes), might be available in the USOSweb system: