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

W2 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

W4 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

W5 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.