SOLID
- Dart kursu
- Uzman
- Ders 35/47
- 5 dk
SOLID prensiplerini öğrenirsin.
SOLID
SOLID, beş tasarım ilkesidir: Single Responsibility (tek sorumluluk), Open/Closed (açık/kapalı), Liskov (değiştirme), Interface Segregation (arayüz ayrıştırma), Dependency Inversion (bağımlılık tersine).
Single Responsibility: her sınıf tek bir iş yapar. Report veriyi taşır, ReportPrinter çıktı üretir. Bir değişiklik tek sınıfı etkiler.
Dependency Inversion: üst katman alt katmana değil, arayüze bağımlı olur. OrderService somut StripePayment'e değil PaymentService arayüzüne bağımlıdır.
Open/Closed ilkesi
Open/Closed: sınıflar genişletmeye açık, değiştirmeye kapalıdır. Yeni davranış mevcut kodu değiştirilmeden, yeni bir alt sınıf veya arayüz uygulamasıyla eklenir.
Örnek: PaymentService arayüzüne CryptoPayment eklemek, OrderService'i değiştirmez. Sınıf kapalı kalır; sistem açık kalır.
Bu ilke, kalıtım ve polimorfizmi kullanır. Somut sınıflar yerine arayüzler tanımlarsın; yeni davranış yeni bir sınıfla gelir.
Uygulama Report ve ReportPrinter tanımla
Bir Report sınıfı tanımla: final String title; final String content; Report(this.title, this.content);. Bir ReportPrinter sınıfı tanımla: String format(Report r) => '${r.title}: ${r.content}';. main içinde final report = Report('Aylık', 'Satışlar arttı'); yarat; final printer = ReportPrinter(); yarat ve print(printer.format(report)); ekle.
Başlangıç kodu
void main() {
// Report sınıfını tanımla (title, content alanları)
// ReportPrinter sınıfını tanımla (format metodu)
// bir report ve bir printer yarat; format ile yazdır
}Örnek çözüm
class Report {
final String title;
final String content;
Report(this.title, this.content);
}
class ReportPrinter {
String format(Report r) => '${r.title}: ${r.content}';
}
void main() {
final report = Report('Aylık', 'Satışlar arttı');
final printer = ReportPrinter();
print(printer.format(report));
}Beklenen çıktı
Aylık: Satışlar arttı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Liskov değiştirme
class SavingsAccount ____ Account { }
class SavingsAccount extends Account { }
Açıklama: alt sınıf extends ile üst sınıfın yerine geçer (Liskov).
2 SOLID ilkelerini eşleştir
| Kavram | Anlamı |
|---|---|
S |
Tek sorumluluk |
O |
Açık/kapalı |
L |
Liskov değiştirme |
I |
Arayüz ayrıştırma |
D |
Bağımlılık tersine |
3 Single Responsibility Principle ne der?
- Her sınıf bir arayüz uygulamalı
- Her sınıf genişletilebilir olmalı
- Her sınıf kapalı olmalı
- Her sınıf tek bir iş yapmalı Doğru cevap
Açıklama: her sınıf tek bir sorumluluğa sahip olmalıdır.