Open
Solid Principles


Dünya standartlarında yazılım geliştirmek için uymamız gereken 5 prensip vardır.

  • Single Responsibility Principle
  • Open/Closed Principle
  • Liskov ‘s Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle

1- Single-Responsibility Principle(Tek Sorumluluk Prensibi) : Bir Sınıfın ya da fonksiyonun,metodun tek bir görevi, sorumluluğu olmalıdır. ana görevi değilse yapmasına gerek yoktur

2- Open-Closed Principle(Açık Kapalı Prensibi) . İnterface ve abstract sınıflar kullanılarak istenen eklemeler yapılabilir. Geliştirilmeye açık ancak değiştirmeye kapalı

3 — Liskov Substitution Principle ( Liskov’un Yerine geçme Prensibi) : Bir ana sınıftan ya da sınıflardan türetilen sınıfların bir üst hiyerarşideki sınıfların yerine geçmesidir

4- Interface Segregation Principle ( Arayüz Ayrımı Prensibi) : Arayüzde o an sadece kullanılacak olan eklentilerin ekli olması gerektiğini savunur.Gerek değilse kullanma.

Dependency Inversion Principle ( Bağımlılıkların Terslenmesi Prensibi)

Dependency Inversion Principle ( Bağımlılıkların Terslenmesi Prensibi): bağımlılıkların azaltılması, Varlıklar(Alt sınıflar ve Üst sınıflar) somut olmayan soyutlamalara bağlı olmalıdır. örneğin Generiz List <T> kullanmak yerine ICollection kullanmak.

Robert Cecil Martin tarafından ortaya sürülmüştür.

Robert Cecil Martin

Amaç: ileride istenecek değişimlere açık olup yazılımın esnek, yeniden kullanılabilir, sürdürülebilir,kod tekrarını önlemek ve anlaşılır olmasını sağlamaktır.

S — Single-responsibility principle

: Bir sınıfın yalnızca bir işi olmalıdır.

O — Open-closed principle

: Bir sınıf özelliklerini korumu ları ve değişikliğe izin vermememlidir.

L — Liskov substitution principle

:alt sınıfları, türedikleri (üst) sınıfların yerine kullanabilmeliyiz.

I — Interface segregation principle

:Sorumlulukları tek bir arayüze toplamak yerine birden fazla arayüz oluşturmalıyız.

D — Dependency Inversion Principle

:Sınıflar arası bağımlılıklar olabildiğince az olmalıdır

Single Responsibility:Tek Sorumluluk Prensibi. Daha az sorumluluk daha yalın yapılara göre sebep verecektir. Bu da kod anlaşılırlığını kolaylaştırır.Örn; Bir User sınıımızda, Propertiler ve metotları var. property ve metotları ayrı sınıflarda tanımlamamız gerekir. User metodunun içinde varsayalım adres bilgileri mevcut, bu da kötü örnektir bunun için de ayrı bir sınıf oluşturup User sınıfına Address propertisinden bir değişken atarız. Address için iki sınıf tanımlarız .Bunlar, entity ve ilgili entitiye parametre veren bir metot olur.
Open-Closed Principle:Açık Kapalı Prensibi Değiştirilemez ama geliştirilebilir. Bu prensip sürdürüleilir ve tekrar kullanılabiir prensibidir. Open tarafı- Gereksinimler değiştiğinde, bunları karşılayabilmesi için yeni davranışlar eklenebilir olmasıdır.Closed tarafı - Temel özelliklerini asla değiştirmemelidir.
> Liskov substitution principle :Liskov’un Yerine geçme Prensibi. alt sınıfları, üst sınıfların yerine kullanabilmeliyiz
Interface Segregation:Arayüz Ayrımı Prensibi. Interface kullanırken, kullanımlarına göre birden fazla interface ile implement etmeliyiz.İhtiyaç duymadıkları bir interface'i kullanmaya zorlamamalıyız. Örn; Animal interface mizde metot kuralları tanımlayacağız. Koşmak, Havlamak, uçmak metodları tanımladık. Şimdi bir köpek sınıfı oluştursak uçmak imza metodunu boşuna kullanmış olacağız böylelikle sağlıklı bir implement sağlamamış olacağız.Bundan dolayı interface oluştururken koşabilme, Uçabilme, Havlayabilme özelliklerini kendi metotlarını içeren şekilde ayrı interfaceler olarak tanımlarız. public interface Flyable { void fly(); } public interface Runnable { void run();}
Dependency Inversion: Bağımlılıkların Terslenmesi Prensibi. Bağımlılık en aza indirgenmelidir.Üst sınıflar, alt seviyeli sınıflara bağlı olmamalıdır.Her ikisi de soyut kavramlar üzerinden yönetilebilmelidir.alt class'larda yapılan bir değişiklik base class'ları etkilememelidir.
02.02.2020