30 Aralık 2019 Pazartesi

SOLID - D : Dependency Inversion Principle

Butun projelerde maalesef ust sinif nesneler ve alt sinif nesneler birbiri ile bagimlidir , ve biz alt sinif nesnede bir degisiklige gittigimizde bu buna bagimli olan ust sinif nesnelerimizi de  etkiler.Bu basimiza buyuk sorunlar acabilir.Iste bagimliliklarin terslenmesi ile bu soruna cozum bulunmaya calisilmistir.Ust sinif ile alt sinif arayuzler yardimiyla baglandiginda cok daha iyi bir yapi kurulabilir.
























Goruldugu gibi burada Phone sinifi veritabanindan bilgi ceken sinifa bagimli bir durumda bunu nasil DIP prensibine uygun hale getirebiliriz?










































Arayuz olusturulup bunu PhoneDatabase sinifina implement edildi.Bu arayuz kullanildi.Phone sinifinin son hali yukaridaki gibidir.

27 Aralık 2019 Cuma

SOLID - I : Interface Segregation Principle

Bir sinifa arayuzu implement ettigimizde o arayuzun tum metotlarini da implement etmis oluyoruz ve bu o sinifin bazi fonksiyonlara ihtiyaci yoksada orada olmak zorunda.Iste burada bizim tasarimimizda o arayuzu parcalara bolerek gereksiz kullanimin onune gecmis oluruz.


Soyle bir muzik baglanti arayuzu olsun.












Bir Hoparlor sinifimiz bunu implement ettiginde tum baglantilari yapabiliyor.














 Yeni bir BluetoothHoparlor geldi ve baglanti gerekiyor.Buna da arayuzu implemet ediyoruz ama bir sorun var; bu hoparlorde rca girisi olmadigindan o metodu bos birakmak zorundayiz.









Hersey cok iyiyken MuzikSeti sinifi geldi MuzikSeti sadece rca ile baglanabiliyor.Diger iki metot bos kaldi.Hal boyle olunca arayuzde bir degisiklige gitmeliyiz .Arayuzu ayirmak.
Uc farkli arayuz olusturalim.











Uc ayri arayuze bolduk.













Siniflarin son hali asagidaki gibi olmustur.
































SOLID - L : Liskov Substitution Principle

Bu prensipte alt siniftan olusan nesnelerin ust siniftaki ile yer degistirildiginde ayni tepkiyi vermesi beklenmektedir.Asagidaki gibi siniflar olsun;



Soyut sinif









Ev telefonunun fotograf cekme ozelligi olmadigindan hata firlatiyor.















Burada t2 icin hersey sorunsuz ama t1 nesnesi icin isler pek iyi gitmiyor.Cunku bize hata firlatacak bu istemedigimiz birsey.Ust sinifiyla ayni tepkiyi veremedi.








Fotograf cekmeyi interface ile ayirip, soyut siniftan da metodu kaldirip  AkilliTelefon sinifina arayuzu ipmlement etmeliyiz.







26 Aralık 2019 Perşembe

SOLID - O : Open Closed Principle

Open Closed Principle`nin amaci sistemin degisime kapali ama gelismeye acik olmasidir.Nedir bu?
Yazilimin surekli sabit kalmasi pek olasi birsey olmayabilir, iste bu sebeple yeni eklentiler yeni ozellikler eklenmek istenebilir , ama eklerken onceden yazdigimiz yerlerin degismesini istemeyiz burdaki degisim budur.OPC`nin dedigi gelisme; yeni ekledigimiz kisimlar oyle olmali ki yerine direk oturmalidir eski siniflarimizda degisiklik olmadan yeni ozellikler icin yeni kodlar ekleyerek gelisimi saglamamiz.Bir ornekle durumu anlasir kilalim.




Burdaki gibi bir yapimiz olsun market, ogrenci olanlara bir indirim uygulasin.Bir sure sonra ogretmen olanlara da bir indirim uygulanmak istensin.







Yeni ekleyecegimiz Ogretmen sinifini olusturduk buraya kadar bir problem yok.






Ama burada indirim hesalayan eski sinifimizi da degistirmek zorunda kaldik.Bu degisime kapali gelisime acik prensibine uymayan, bizimde istemedigimiz birsey.



Bunun icin soyut Profil sinifini olusturduk ve diger siniflarimizi buradan turettik.

















Indirim sinifimizdaki metodun parametresinide Profil tipinde kullandigimizda , artik her yeni gelen durum icin , ornegin doktor icin bir indirimde bu sinif etkilenmeyecek sadece yeni ekledigimiz sinifi soyut siniftan turetip metodunu doldurmamiz yeterli olacaktir.
Not :Interface ile de bunu uygulayabilirdik.







SOLID - S : Single Responsibility Principle

Bu prensipte amac yazilimimizdaki bilesenlerimizin sadece bir tane sorumlulugu yerine getirmesi.Bilesenler;  siniflar, metotlar olabilir.Yani ornegin ogrenci bilgileri icin bir sinifimiz olsun burada veri kaydetme islemi yapmak tek sorumluluk prensibine aykiridir, Ogrenci sinifiyla yuksek bagliligi olmayan durumlarda bunu baska siniflar halletmelidir.


































Yapiyi su sekilde degistirirsek;

















Ogrenci sinifinin son hali boyle olacaktir.