SOLID Principles

Solid prensipleri. C#, Java gibi nesne tabanlı programlama dillerini belirli prensiplere bağlı kalarak daha etkin kullanabilir, yaptığımız uygulamaları geliştirmeye daha açık, esnek, anlaşılır ve kolay yönetilebilir bir hale getirebiliriz. Solid, Bunları sağlayabilmeyi amaçlayan pratikleri ifade eder ve içerdiği prensiplerin baş harflerinden oluşur.

  • (S) Single Responsibility Principle

Tek sorumluluk prensibi. Her class’ın, her methodun sadece tek bir yaptığı iş vardır. Genişleyebilir, tekrar kullanılabilir ve test edilebilir yapılar kurmak için tek sorumluluk ilkesini dikkate almamız gerekir.

  • (O) Open/Closed Principle

Açık kapalı prensibi. Gelişime açık, değişime kapalılık. Yazılım geliştirirken kullandığımız nesnelerin gelişime açık, değişime kapalı olması prensibidir.

  • (L) Liskov’s Substitution Principle

Liskov un yerine geçme prensibi. Alt sınıftan türetilmiş sınıfın temel aldığı sınıfın yerine geçmesini ve türetilmiş sınıfın alt sınıfın davranışını etkilememesi gerektiğini belirtir.

  • (I) Interface Segregation Principle

Arayüz ayrıştırma prensibi. Bir çok nesne için tek interface kullanarak, ihtiyaç duyulmayan yetenekleri kullanmaya zorlamak yerine, özelleştirilmiş birden çok interface kullanmayı tercih etmemiz gerektiğini söyler. Interface uygulanacağı (implement) tüm sınıflarda desteklenmeyen metotlar içeriyorsa bu durumda Interface imizi böleriz ve birbirinden türeyen interface ler oluşturabiliriz.

  • (D) Dependency Inversion Principle

Bağımlılığı tersine çevirme prensibi. Buna göre üst seviye nesneler alt seviye nesnelere doğrudan bağımlı olmamalıdır. Alt sınıflarda yapılan değişiklikler üst sınıfları etkilememelidir. Nesneleri birbirinden soyutlama yaparak bu durumu sağlayabiliyoruz.

Loosely Coupled

Gevşek bağlılık. Yazılım içerisinde bulunan nesnelerin birbirlerine gevşek bağlı yapılır ve geliştirmeye açık halde tasarlanmış olur.

Refactoring

Yeniden düzenleme. Uygulama kodlarını işlevlerini bozmadan yeniden düzenleme işlemidir. Daha önce yazılmış kodlar üzerinden refactoring yaparak yazılım prensiplerine uygunluğu arttırma sağlanabilir.

Boxing

Kutulama. Değer tipli (value type) değişkenin object (nesne, obje) yada herhangi bir interface tipine dolaylı (implicitly) olarak dönüştürülmesi işlemidir. Bu işlem normal bir atama işlemine göre 20 kat daha uzun sürer.
Gerekli olmayan durumlarda kullanılması uygulamaları yavaşlatabilir.

int i = 1;
object a = i;

Unboxing

Kutudan çıkarma. Object tipinin direk (explicit) olarak değer tipine (value type) dönüştirilmesi işlemi veya interface tipinden bu interface i implement eden tiplere dönüştirilmesi işlemidir. Bu işlem normal bir atama işlemine göre 4 kat daha uzun sürer. Gerekli olmayan durumlarda kullanılması uygulamaları yavaşlatabilir.

int i = 1;
object a = i;
int j = (int)a;

Implicit – Implicitly

Dolaylı, örtük. Bir veri tipini herhangi bir dönüştürme (convert) işlemi olmadan başka bir veri tipine atama yapılması işlemidir. Bu yöntem veri tipleri içerisinde uygun implicit operatörü içeren veri tipleri arasında uygulanabilir. Bu yöntem kullanılarak gereksiz atamaları ortadan kaldırılabilir. Bazı durumlarda beklenmeyen sonuçları doğurabileceğinden sonuçlar izlenmelidir. Kendi oluşturduğumuz nesneler içerisine implicit operatörü ek leyerek dönüştürme işlemleri için kullanabiliriz.

int i = 1;
object a = i;

Explicit – Expilictly

Açık, açıkça. Veri tiplerini dönüştürme işlemlerinin doğrudan yapıldığı yöntemdir. Bu uygulamada çevrim işlemini belirtmek gerekir. Bu yöntem veri tipleri içerisinde uygun explicit operatörü içeren veri tipleri arasında uygulanabilir. Kendi oluşturduğumuz nesneler içerisine explicit operatörü ekleyerek dönüştürme işlemleri için kullanabiliriz.

object a = i;
int j = (int)a;