SOLID Nedir?
Solid Prensipleri
Yazılım geliştirmede Object-Oriented Design (Nesne Yönelimli Tasarım) esnek, ölçeklenebilir, bakımı yapılabilir ve yeniden kullanılabilir kod yazmaya geldiğinde çok önemli bir rol oynar. OOP Prensipleri Nedir?
SOLID prensipleri, yazılım geliştirme ve özellikle nesne yönelimli programlama (OOP) alanında önemli bir rol oynar. SOLID prensipleri, yazılımın esnek, sürdürülebilir, okunabilir ve yeniden kullanılabilir olmasını sağlamak için geliştirilen bir dizi tasarım prensibidir.
Bu prensipler, Robert C. Martin tarafından ortaya atılmış ve “Bob Amca” olarak da bilinir.
SOLID prensipleri, sıkı bağlantıyı(tight coupling) azaltmaya ve gevşek bağlantıyı(loose coupling) kullanmaya yardımcı olur.
- Sıkı bağlantı, bir sınıfın veya modülün diğer sınıflara veya modüllere güçlü bir şekilde bağımlı olduğu durumları ifade eder. Bu durumda, bir değişiklik yapmak veya bir sınıfı değiştirmek diğer bağımlı sınıfları etkileyebilir ve büyük bir kod değişikliği gerektirebilir. Kodunuzda bundan kaçınmanız gerekir.
- Gevşek bağlantı ise bir sınıfın veya modülün dışarıdan bağımlılıkları azaltıldığında veya soyutlanarak bağımsız hale getirildiğinde ortaya çıkar. Bu durumda, bir sınıfın veya modülün içinde yapılan değişiklikler diğer bağımlı bileşenlere çok az veya hiç etki etmez. Bu, kodunuzdaki değişiklikleri en aza indirir, kodun daha yeniden kullanılabilir, bakımı yapılabilir, esnek ve kararlı olmasına yardımcı olur.
Yazılım geliştirme alanında “Solid” terimi, SOLID prensiplerine atıfta bulunur. SOLID, yazılım tasarımı ve kodlama için kullanılan beş temel prensibi ifade eder.
(S) Single Responsibility Principle
Bir sınıfın değişmek için tek bir nedeni olmalıdır, yani bir sınıfın yalnızca bir işi olmalıdır.
Bu, sınıflarımızı tasarlarken, sınıfımızın yalnızca 1 görev veya işlevden sorumlu olduğundan emin olmamız gerektiği anlamına gelir ve bu görevde/işlevsellikte bir değişiklik olduğunda, ancak o zaman o sınıfın değişmesi gerekir.
- Bir uygulama, her biri bu ilkeye uyan birden fazla sınıfa sahip olduğunda, uygulanabilir olan daha sürdürülebilir ve anlaşılması daha kolay hale gelir.
- Uygulamanın kod kalitesi daha iyidir, dolayısıyla daha az hataya sahiptir.
- Test senaryolarını test etmek ve yazmak çok daha basittir.
(O) Open-Closed Principle
Nesneler veya varlıklar, yeni davranışlar eklemey veya genişleme için açık, ancak değişiklik için kapalı olmalıdır.
Bu, bir sınıfın, sınıfın kendisini değiştirmeden genişletilebilir olması gerektiği anlamına gelir.
İlke, sınıf, modüller, işlevler vb. gibi yazılım varlıklarının; bir sınıf davranışını değiştirmeden genişletebilmelidir. Bu ilke, daha iyi kararlılık, sürdürülebilirlik sağlamak için mevcut kodu değiştirilmiş moddan ayırır ve kodunuzdaki gibi koddaki değişiklikleri en aza indirir.
(L) Liskov Substitution Principle
Türetilmiş veya alt sınıflar, temel veya üst sınıfların yerine kullanılabilir olmalıdır.
Yani, bir sınıfın bir üst sınıfın yerine geçtiğinde, programın beklenen şekilde çalışmaya devam etmesi gerektiğini ifade eder. Bu prensip, alt sınıfların, miras aldıkları üst sınıfların davranışlarını koruması ve uygun şekilde genişletmesi gerektiğini vurgular.
(I) Interface Segregation Principle
Bir arayüzü kullanacak olan istemcinin, kendisiyle ilgili olmayan metotlara zorlanmaması gerektiği belirtir. İstemci, sadece ihtiyaç duyduğu metotlara erişim sağlamalıdır.
Burada asıl amacınız, İstemci, sadece ihtiyaç duyduğu metotlara erişim sağlamalıdır. Bu prensip, arayüzlerin tek bir istemciye özel hale getirilmesini ve gereksiz bağımlılıkların önlenmesini amaçlar.
(D) Dependency Inversion Principle
Varlıklar soyutlamalara bağlı olmalıdır, somutlamalara değil. Üst düzey modülün alt düzey modüle bağlı olmaması gerektiğini, ancak soyutlamalara bağlı olması gerektiğini belirtir.
Bu ilke ayrıştırmaya izin verir.
Bu, yüksek bir modül veya sınıfın düşük seviyeli modüllere veya sınıfa daha fazla bağımlı olması durumunda, kodunuzun sıkı bir bağlantıya sahip olacağını ve bir sınıfta değişiklik yapmaya çalışırsanız, üretimde riskli olan başka bir sınıfı bozabileceğini belirtir.