Arda Çetinkaya Yazılım ve arada kendim ile ilgili karaladıklarım…

EVENT ve DELEGATE

/ Leave a comment / ~ 2 dakikada okuyabilirsiniz.

Nedir bu Event?
Event, olay,hadise,vaka,aktivite olarak çeşitli Türkçe kelimeler ile tanımlanabilir. Bir programda da aslında tam olarak böyle. Event, bir programın belli bir aktivitesi olarak adlandırabiliriz. Event’lerin gerçekleşmesini sağlayan çeşitli durumlar vardır,bu durumlara tetik diyoruz. Kısaca olayların gerçekleşmesi için onların tetiklenmesi gerekir. Basit bir örnek ile olayı biraz daha özetlesem sanırım daha anlaşılır olur. Şimdi bir alarm yönetim sistemi var diyelim.Çeşitli yerlerdeki alarmları kontrol ediyor olsun. Bu çeşitli yerlerden biri bir banka olsun. Gece geç saatlerde bu bankaya bir hırsız girsin(tetik) ve alarmın çalışmasına neden olsun. Alarm yönetim sistemine giden bu alarm  da bize nerede,saat kaçta olayın olduğunu bildirsin. Biraz daha programcılık terimleri ile olaya başka açıdan bakalım şimdi. Şimdi bankaya biri girdiğinde haberdar olmak istiyoruz.HIRSIZGIR() diye bir metod  olsun,ve hırsızın bankaya girme metodu olsun.Hırsızın bankaya girme olayı gerçekleştiği zaman ALARMCAL() methodu çalışsın ve bize haber versin. Bu işi ALARMCAL() metodunu, HIRSIZGIR() metodu ile ilişkilendirerek yapabiliyoruz. Ve bu şekilde HIRSIZGIR() çalıştığı zaman ALARMCAL() metodu tetiklenmiş olacak. Umarım bu örnek olayın biraz anlaşılması için yeterli olur,gerçi aşağıda program koduyla bazı şeylere daha net deyiniyor olacağım. Bu konuda bahsedilmesi gereken bir diğer kavram ise delegate(delege,temsilci) metodlar.  Object Oriented Programming kavramının ana taşlarından biri olan data encapsulation, açısından bakarsan delegate metodlar içinde method encapsulation diyebiliriz. Biraz daha anlaşılır olması için, delegate(temsilci) metodların, başka metodları temsil etmesi olarak basit bir cümle kurabilirim. Delegate metod, temsil ettiği başka bir metodun çalışmasını sağlar. Bu şekilde bir nesne içindeki metodların içeriklerinin biraz olsun gizlenmesi sağlanabilir. Şimdi biraz kod üzerinden gidelim. class AlarmEventArgs : EventArgs {         private string place;         private string time;         public AlarmEventArgs(string p,string t)         {             place = p;             time = t;         }         public String Place         {             get { return place; }         }         public String Time         {             get { return time; }         } } Üstteki kodda System.EventArgs’yi kullanarak kendi EventArguments’ımızı yaratıyoruz. Bu belirlediğimiz event gerçekleştiği zaman bize döndürecek argümanları belirleyebiliyoruz. Kendi  EventArguments’larımızı yazma gibi bir zorunluluğumuz yok aslında ama ben genellikle tercih ediyorum.

public class Alarm {         //Event'in tetiklenmesini sağlayacak olan delegate metodunu tanımlıyoruz.         //Tanımlama sırasında metod içinde bir işlevine dair hiç bir şey yazmıyoruz.         //Parametre olarakda bu Event'i tetiklenen obje ve parametreleri tanımlıyoruz.         public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);         //Yukarıda tanımladığımız delegate methodu tipinde bir event tanımlıyoruz.                 public event AlarmEventHandler AlarmEvent;                 public void Active(string p,string t)         {             AlarmEventArgs args = new AlarmEventArgs(p, t);             AlarmEvent(this, args);                     }          }Burada delegate metodumuzu tanımlıyoruz.Alacağı parametreleride belirtikten sonra da, event’i de tanımlıyoruz. Dikkat ederseniz event’in  döndüreceği bilgi olarak delegate metodumuzu yazıyoruz. Yani event’i bir method ile ilişkilendiriyoruz burada. Bence  Event ve Delegate konularında en önemli ve dikkat edilmesi gereken yer burası.

public static void Main() {         Alarm a = new Alarm();         //Event sonuçunda çağıralacak metodu temsilci metoda tanıtıyoruz.         a.AlarmEvent += new Alarm.AlarmEventHandler(a_AlarmEvent);         a.Active("Banka", "02:34");         a.Active("Market", "23:04");  }  //Event gerçekleştiği zaman çalışacak olan metod.  static void a_AlarmEvent(object sender, AlarmEventArgs e)  {         Console.WriteLine("Alarm is started in "+ e.Place+" at "+e.Time);  }Main fonksiyonu içinde gerekli tanımlamalardan sonra, Alarm nesnesinin Event\’ine temsilci metodun temsil edeceği metodu atıyoruz.Burası da çok önemli bir nokta. Çünkü olayın gerçekleşmesinden sonra çağırılacak fonksiyonun içeriğini burada tanımlıyoruz.Bu örnekte,ben Alarmın nerede aktif olduğunu ve saat kaçta çalıştığını konsola yazdırdım.Bu çok ama çok basit bir örnek oldu.Umarım anlaşılmış,en azından bazı şeylerin biraz daha oturmasını sağlamıştır. Her türlü soru ve fikirlerinizi thearda@hotmail.com adresine bekliyorum.

DirectX’in yeni versiyonu DirectX 10’nun çıkmasına az kaldı.Vista ile birlikte entegre bir şekilde gelecek olan yeni versiyon, eski versiyonlara göre oldukça kuvvetli.İlerleyen günlerde oldukça kapsamlı bir directX 10 yazısı burada olacak ama şu an bahsetmek istediğim ve üzüntü duyduğum bir konuyu söylemek istiyorum, o da artık Managed DirectX 2.0’ın artık olmayışı. 1 yıl önce Microsoft geliştiriciler için MDX 2.0’ı beta olarak çıkardı ve 1 yıl içerisinde bir çok revizyon ile bunu paylaştı. Ancak son çıkan DirectX October 2006 SDK’sı içerisinde artık MDX 2.0 Beta yok. Zaten beta olan bir şeyi kaldırmanın çok da önemi gözükmese de aslında geliştiriciler için çok büyük sorun çıkardı bu. Mevcut 2.0 çalışmalarımı MDX 1.1’e çevirmek gerçekten zahmetli ve sıkıcı bir iş oldu. MDX 1.1’in stable bir versiyon olması, aslında neden o varken 2.0’a geçtim gibi sorularıda bu zahmetli iş sırasında oldukça aklımı kurcaladı. Bu arada atlamadan birşey hatırlatmak istiyorum, MDX 1.1, .NET 2.0 ile beraber çalışıyor.

 

Peki neden böyle bir şey oldu?

XNA Framework’ü önümüzdeki aylarda,çok yakın bir zamanda çıkacak. XNA ile baya iddialı olan Microsoft, tüm DirectX geliştiricilerini sanırım bu platform altında toplamak istiyor. Fena da etmiyor aslında ama bu şekilde zahmet çıkarması biraz kafa karıştırıcı.

Özet olarak artık Managed DirectX 2.0 Beta yok.Destek de yok. Yani mevcut 2.0 uygulamalarınızı ya 1.1’e çevireceksiniz ya da XNA’e merhaba diyeceksiniz ki, Microsoft’un da istediği bu.

Uzun bir süredir Beta olan Internet Explorer’ın yeni sürümü çıktı.Hayırlı uğurlu olsun. 🙂 Bir önceki versiyonlarının ne kadar sakat olduğunu söylemeye pek gerek yok sanırım. Firefox gibi bir çok benzerinin popüler olması ile büyük değişikliklere giden yeni sürüm, eski sürümlere nazaran çok daha güzel gözüküyor. Göz boyama dışında arka tarafda güzel ve güvenilir bir sistem olduğu söylensede,ilerleyen günlerde i.e 7 için çıkacak service pack’lere hazır olsak iyi olur…

Download için : http://www.microsoft.com/windows/ie/default.mspx  

Teknik nedenlerden dolayı site uzun bir süredir kapalıydı. Hosting şirketi ile yaşadığım bir sorundan dolayı da bütün database’imi kaybettim. Acı ama gerçek diye bir tabir vardır ya,işte aynen o olayı yaşadım. Ama yeni bir site ile yılmadan yeniden buradayım. Benzer ve daha güçlü bir sistem olan WordPress ile yola devam etme kararı aldım. Kullanımı oldukça kolay olması bazı yükleri benim üzerimden şimdiden aldı bile. Bu sayede siteye içerik olarak sanırım daha fazla katkıda bulunabileceğim.Önümüzdeki günlerde eski içeriği tam olarak koyamasamda yeni yazılar ile yine siteyi dolduracağım.Hadi bakalım 🙂

Microsoft, son zamanlarda küçük bir çok uygulama çıkarıyor. Özellikle Live kavramı duyurulduğundan beri, bu hizmet için çıkan uygulama ve hizmetler gerçekten çok hoş. Genel olarak, kullanıcıların her türlü bilgiye kolayca ulaşmasını, başka hizmetlerden faydalanmalarını kolaylaştırmayı ve denetim gücünü tamamen kullanıcıya bırakmayı hedefleyen Live hizmetlerine bir de Windows Live Writer eklendi. Peki nedir bu Windows Live Writer? Şu an bu yazıyı bu sayfaya yazmamı kolaşlaştıran bir program demek sanırım en basit tarifi olacaktır.

Windows Live Writer ile Live Space ve diğer blog hizmetlerini çok rahat bir şekilde güncelleyebiliyorsunuz. Hiç bir internet sayfası açmadan,hiç bir blog sistemine girmeden. Word tarzı editörlere aşina olanların oldukça rahat bir şekilde kullanabileceği bu program ile blog sitenizi güncellemek çok kolay.

WordPress,Blogger gibi popüler blog sistemlerine bu program aracılığı ile müdahale ediyor olabilmeniz süper bir şey. Link, resim ekleme gibi işlemler oldukça kolay ve rahat bir şekilde yapılabiliyor. Diğer Live hizmetleri ile entegre çalışması da blog’unuza Live hizmetlerini eklemenizi sağlıyor. Blog tarzı yapılar ile uğraşanların mutlaka göz atmasında fayda var,ben kullanıyorum,çok da tavsiye ediyorum…

Ayrıntılı bilgi ve download adresi:

 http://windowslivewriter.spaces.live.com/