refactor: change folder structure

This commit is contained in:
2025-07-18 13:02:13 +03:30
parent 835f833927
commit 3c05411a29
1329 changed files with 116 additions and 38 deletions
@@ -0,0 +1,128 @@
# Session 5: Interfaces and Object-Oriented Relationships
## 📝 Overview
In this session, we explored:
- The concept and syntax of **Interfaces** in C#
- Implementation of interfaces in real scenarios
- Comparison of **Abstract Classes vs Interfaces**
- Key OOP relationships: **Inheritance**, **Composition**, **Aggregation**, **Association**, and **Dependency**
- Applying these relationships in a **Library Management System**
## 📚 Topics Covered
### Interfaces in C#
> Interfaces define contracts that classes must fulfill. They enable loose coupling and multiple inheritance in C#.
- Syntax: `interface IMyInterface { void Method(); }`
- Implementation: `class MyClass : IMyInterface`
- All members are `public` and `abstract` by default
- Cannot contain fields
- Supports multiple inheritance
### Interface Example
````c#
interface IDisplayer { void Display(); }
class Test : IDisplayer {
public void Display() => Console.WriteLine("Hello from interface!");
}
### Abstract Class vs Interface
|Feature|Abstract Class|Interface|
|---|---|---|
|Implementation Allowed?|Yes|No|
|Multiple Inheritance|No|Yes|
|Constructors|Yes|No|
|Fields|Yes|No|
|Use Case|Partial abstraction|Full abstraction|
### OOP Relationships
#### Inheritance (IS-A)
- A class inherits members from another class.
- Promotes reusability.
```c#
class Person { }
class Student : Person { }
````
#### Composition (PART-OF)
- Objects are composed of other objects.
- Strong lifecycle dependency.
```c#
class Engine { }
class Car { Engine engine = new Engine(); }
```
#### Association (HAS-A)
- Loose relationship between objects.
- Both can exist independently.
```c#
class Teacher { }
class School {
public void AddTeacher(Teacher t) { }
}
```
#### Aggregation (WEAK-PART-OF)
- Special association where one object "owns" another but the owned object can exist independently.
```c#
class Address { }
class Student {
public Address address;
}
```
#### Dependency
- Temporary usage of one class by another.
```c#
class Printer { void Print(string msg) => Console.WriteLine(msg); }
class Report { void Generate(Printer p) => p.Print("Report"); }
```
### Applied Example: Library Management System
A real-world example combining all relationships:
- **Person → Member/Librarian** (Inheritance)
- **Library → Bookshelf → Book** (Composition)
- **Member ↔ LibraryCard** (Association)
- **Member → Address** (Aggregation)
- **Report.Generate(Printer)** (Dependency)
✔ See full code snippet [here](https://chatgpt.com/c/68715298-27f8-8010-a29b-8f6e457f6179#) or review it during the live session.
## 🧪 Practice Tasks
- Implement an `IVehicle` interface in two different classes.
- Use composition to build a `Computer` with `CPU`, `RAM`, and `HardDrive`.
- Demonstrate aggregation with `Employee` and `Address`.
- Create an association between `Doctor` and `Patient`.
- Write a class `Order` that depends on `PaymentProcessor`.
## 🙏 Acknowledgments
Sources:
- StackOverflow
- GeeksforGeeks
- C# Corner
- Medium
- ChatGPT Assistance (2025 sessions)