Cok tembel bir insan oldugumu ara sira dusunurum ama yaptigim islere bazen soyle bir donup baktigimda gercekten tembel bir insan oldugumu goruyorum. Nesneye yonelik programlamayi ogrenmenin cok guzel bir yolu oldugunu dusundugumden GoF kitabinda yer alan tasarim kaliplarini teker teker anlatmak icin 2006 nin mart ayinda yola cikmisim. Aradan bir yildan fazla bir zaman gecmesine ragmen alti ustu 23 kaliptan sadece 9 tanesini anlatabilmisim. Yilda 9 kalip dersek 23 - 9 = 14 , 14 / 9 =~ 2 yil daha bitmeyecek bu kaliplar. Asagida son durum itibariyle hangi kalibin anlatildigini hangisinin anlatilmadigini gosteren bir liste var. Eger bu iki yillik sureyi kisaltmak konusunda yardimci olabilecek arkadaslar varsa listede anlatilmayan kaliplardan istediklerini secmekte ozgurler
bu listeden benim tembel biri oldugum acik secik belli oluyor ama isin bir de iyi tarafina bakmam gerekirse en azindan basladigim bir isi bitirmek konusunda azimliymisim :p
Bir nesneye, nesneyi değiştirmeden yeni sorumluluklar eklenmesini sağlar. Alt sınıflama yapmadan nesnelerin işlevlerinin geliştirilmesini olası kılar.
Elimizde varolan bir sinifa yeni ozellikler eklemek istedigimizi dusunelim. Aklimiza gelen ilk cozum elimizde varolan siniftan istedigimiz ozelliklere sahip yeni bir sinif olusturmak olur. Bircok durumda bu dogru ve gecerli bir yoldur ama bazi durumlarda kas yapayim derken goz cikartabilirsiniz. Bir diger yol ise varolan sinifa hic dokunmadan yeni tanimlanacak baska bir sinif sayesinde eldeki sinifin ozelliklerini istenilen duzeye getirmektir.
Mesela soyle bir ornekle aciklamaya calisayim. Saat uretimi yapan bir fabrikada belirtilen paremetrelere uygun olarak saat uretimi yapan bir makineye program yazmak istediginizi dusunun. Uretimini yapabileceginiz saat tipleri su sekilde olsun.
Calar saat
Duvar saati
Kol Saati
Cep saati
Bu saatlerin analog, dijital, hem analog hem de dijital cesitlerinin oldugunu dusunelim. Bu durumda olusturulacak sinif hiyerarsisi yaklasik olarak soyle olabilir.
Bir kullanıcı(nesnel) isteğinin birden fazla nesne tarafından değerlendirilerek karşılanmaya çalışılmasına olanak sağlar. kullanıcı tek arayüz üzerinden isteğini iletir. İstek zincire bağlı nesneler tarafından sıra ile ele alınarak karşılanmaya calışılır. İstek karşılanana dek zincir üzerinde bir nesneden diğerine aktarılır. Zaman içinde zincire yeni nesneler eklenmesi ya da çıkarılması mümkündür. Kullanıcı bu tür değişikliklerden arayüz sayesinde etkilenmez.
Asım kredi karti aldigi gunden beri harcamalarini kontrol altina alamaz oldu. Sanki kredi kartiyla bedava alisveris yapiyormus gibi her pos cihazim var diyen kisiye kredi kartiyla kosuveriyor. Ay sonu ekstre gelincede yine kredi kartiyla onune cikan ilk eczaneye dalip en etkilisinden bir agri kesici alip susuz yutuyor. hem de pespese bir kac tane.
Asım ‘ın kredi kartindan dolayi cektigi iskenceler sadece bununla sinirlida degil ustelik. (more…)
iki hafta once pespese yasanan elektrik arizalarindan dolayi modem sizlere omur oldu. garantiye gitti geldi bizde bu firsattan yararlanarak bol bol uyuduk, filmler izledik ve yeniden onlinem artik…
bu sure icerisinde net ve delphi alemine kisitli bir zaman ayirmak zorunda kaldim. tabi bir de malum ramazandayiz. iftar, sahur, davetler falan derken zaman su gibi akip gecti. su demisken bu ramazanda nedense fazla susuyorum(!) ben…
nete ayirabildigim bu kisitli zaman icerisinde forumda yer alan bilesenlerdeki degisiklikleri takip etmek gibi bir konuya gozup carpti. tasarim kaliplarinda bu gibi durumlar icin kullanilabilecek bazi ornekler mevcut. mesela Observer.
bu gibi bir durumda aklimiza gelen ilk cozum soyle olacaktir.
degisiklikleri takip edecegim TEdit, TCheckBox gibi bilesenlerin OnChange olaylarinda Global bir Boolean degiskenin degerini set etmek. Ardından form kapanırken bu degiskenin degerini kontrol edip kullanicinin bu bilesenlerde her hangi bir degisiklik yapip yapmadigini kontrol etmek. ilk basta cazip bir cozum yolu gibi gorunsede bilesen sayisi arttikca ve bazi bilesenlerin onChange olaylarina degisik kodlar yazmak istedigimiz zaman basimizi agritabilecek bir durum. ustelik bu cozum hicte nesnesel bir cozum olmadigindan birim testi yazmak gibi bir durum da soz konusu olmayacak. kisacasi pratik bir cozum gibi gorunsede hicte saglam ve mantikli bir cozum degil. bunun yerine daha nesneye dayali bir cozum gelistrimemeiz lazim. simdi bu cozumu inceleyelim.
Lokantaya gidip yemek yedikten sonra hesabi odemek icin kredi kartinizi uzattiniz. Lokanta sahibi de kredi kartinizi kullanarak banka hesabinizdan yediginiz yemegin (karniyarik, pilav, salata ve su) ucretini banka hesabinizdan cekti. simdi burda insan sormaz mi salata yerine neden cacik yemedin diye. ne diyorum ben ya ! acliktan kafamda karisti toparlayalim. burda kredi kartinin rolu nedir ? bankayla iletisim kurmanizi saglayan bir aracidir bir vekildir bir proxydir. amaca ulasmak icin bir aractir. banka hesabiniza kolay yoldan erismenin bir yoludur. kapitalizmin kucagina dusmus insanlarin daha kolay para harcamalarini temin etmek icin gelistirilmis plastik bir paradir. sifreleri olanlari da vardir, flexi olanlari da. insanlari intihara goturen cesitleri de vardir bunlarin. yine konudan saptik galiba.
Karmaşık ve/veya pahalı sınıflardan nesne yaratırken, yeni nesnelerin baştan yaratılması yerine, mevcutlarından örnekleyerek yaratılmasını sağlar. Bu sayede yeni nesneler kolayca ve kaynaklar gereksiz yere meşgul edilmeden yaratılırlar.