Week 1: Introduction & OOP Recap
W1 OOM Introduction & OOP Recap
- Software Complexity
- Understand the paradox of simple rules leading to complex outcomes.
 
 - Software Development Life Cycle
- Familiarize yourself with the Waterfall model.
 
 - OOP Basics (Recap from Spriha’s Lecture)
- Objects and Classes: Basics of object-oriented programming.
 - Abstraction: Hiding complex implementation details.
 - Inheritance: Deriving new classes from existing ones.
 - Polymorphism: Ability to process objects differently based on their class.
 - Encapsulation: Bundling data with methods that operate on the data.
 
 
Week 2: OO Design Principles
- Quality Attributes: Functionality, Reliability, Usability, Efficiency, Maintainability.
 - Use Cases: Writing and understanding use cases in textual format.
 - OO Analysis and Design: Identifying objects, classes, relationships, and interactions.
 - Design Principles: DRY, KISS, YAGNI, Separation of Concerns, Principle of Least Astonishment, Law of Demeter, GRASP, SOLID principles.
 
Week 3: Refactoring and Code Smells
W3 Refactoring and code smells
- Refactoring: When and how to refactor, principles of refactoring.
 - Code Smells: Types and how to address them, including Bloaters, OO Abusers, Change Preventers, Dispensables, Couplers.
 
Week 4: Unified Modelling Language
- UML: Conversion of code or problems into appropriate UML diagrams, including Class Diagrams, Sequence Diagrams, Use Case Diagrams, etc.
 
Week 5: Design Patterns
- Factory Method, Abstract Factory, Singleton, Decorator, Adapter, Facade, Proxy, Observer, Strategy Patterns:
- Understand the purpose of each design pattern.
 - Recognize situations for their application.
 - Ability to implement simple code snippets or draw UML diagrams for these patterns.
 
 
Sample Paper Highlights
- Functional vs Non-Functional Requirements: Examples of each for an e-commerce platform.
 - Class Extensions and Abstract Classes: Understanding class hierarchies in Java.
 - OO Design Violations: Identifying violations of OO design principles like SRP, OCP, DIP, ISP, LSP.
 - Code Smells in Practice: Recognizing and addressing code smells in given scenarios.
 - UML Diagrams: Drawing state diagrams for real-world scenarios.
 - Design Patterns Application: Identifying problems with current approaches and suggesting design pattern solutions.
 
Study Tips
- Focus on understanding the principles behind each concept rather than memorizing definitions.
 - Practice drawing UML diagrams for various scenarios, as this seems to be a significant part of your exam.
 - Review examples of code smells and refactoring techniques, as these are practical skills that your exam will test.
 - Understand the application of design patterns by practicing with code snippets or examples from the lectures.