Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Eklenti Tabanlı Programlama Teknolojileri - Mustafa Burak AMASYALI - Bilisimdergi.Com
      Eklenti Tabanlı Programlama Teknolojileri Eylül 2009 | Sayı : 6

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210

Bu ay teknik bir yazı ile karşınızdayım. Yazılım teknolojisi ve teknikleri sürekli gelişiyor, bu gelişimi yakalamak  için bizim de gelişmemiz gerekli. Bu ayki yazım eklenti yani plug-in tabanlı programlama üzerine. Peki nedir eklenti tabanlı programlama?

Birçoğumuz Eclipse ya da Photoshop gibi programlar kullanmışızdır. Bu programları kullanırken bir menüsünden veya internetten eklentiler indirebilir ve kurabiliriz. Programın sonlanmasına gerek kalmadan eklediğimiz yeni eklenti yani özellik kurulabilir ve program üzerinde anında kullanılmaya başlayabilir. Benim için eklentilerin program sırasında eklenebilmesi ve herhangi bir derleme olmaksızın çalışması çok ilgi çekiciydi. Bir eklentinin çalışabilmesi için temel bir sınıftan türemiş bir sınıf olmasının gerekli olduğunu düşünüyordum ama nasıl derleme olmadan çalışma zamanında programa eklenir hiçbir fikrim yoktu. Bunun için çok fazla çözüm olduğuna emindim, özellikle işletim sistemleri ve işletim sistemleri arasından özellikle Linux çekirdeği bunu mükemmel bir şekilde gerçekleştiriyor. Ben de Microsoft yaz okulunda sayın hocam Sefer Algan’ dan aldığım eğitim ve biraz araştırma ile çok yaygın kullanılan Microsoft .NET  teknolojisi ile eklenti tabanlı uygulama geliştirmeyi öğrendim. Bu öğrendiklerimi küçük bir uygulama ile size aktarmaya çalışacağım.

Eklentileri DLL yani dinamik kütüphaneler yardımı ile programımıza ekleyeceğiz. Dinamik kütüphanelerin exe dosyalarına benzer yapıları vardır. Derlenmiş kodlar olarak tanımlanabilirler ama çalışmaları için başka exe dosyasına ihtiyaçları vardır.  Bir program bir dll dosyası içerisindeki sınıfları ve fonksiyonları kullanabilir. C# dilinde “reflection” kütüphanesi sayesinde çalışma sırasında ismini parametre olarak verdiğimiz bir dll dosyasını  kullanabiliyoruz. Yine parametre olarak verdiğimiz sınıfların tür bilgisini bu dll dosyasından çekerek o sınıfların nesnelerini oluşturabiliyoruz. Zaten eklenti nesnesini oluşturduktan sonra temel sınıfın fonksiyonlarını kullanarak eklentiyi kullanabiliriz.

Örnek uygulama olarak bir mesajlaşma programı düşünelim. Bu program MSN, ICQ ve benzeri mesajlaşma sistemlerine bağlanıp tek bir arayüz üzerinden mesajlaşma sağlasın. Yeni bir mesajlaşma sistemi eklememiz gerektiğinde (örnek olarak GTalk, Facebook) uygun bir dll hazırlayıp proje klasörüne ekledikten sonra “cofig.txt” dosyasına bu yeni dll’ i de ekleyerek programı yeni sisteme hazır hale getirebilelim.

İlk yapmamız gereken bir temel sınıf oluşturmak. Bu temel sınıfta bize gereken en temel fonksiyonlar ve değişkenler olmalı. Sisteme giriş, mesaj gönderme, mesaj alma ve sistemden çıkış gibi 4 temel fonksiyona sahip olsun sistemimiz. Siz gerçekten böyle bir uygulama geliştirmek isterseniz daha gelişmiş bir temel sınıf oluşturmalısınız. Bu sınıfı geliştiricilere bir dll içinde yer verebiliriz. O yüzden Visual Studio içerisinde bir “class library” projesi oluşturuyoruz.

Sınıfımızı resimdeki gibi oluşturduk. Sınıfın ve fonksiyonların abstract olmasının sebebi yeni eklenen eklentilerin yani mesajlaşma sistemlerinin bu fonksiyonları kullanmak zorunda olmasıdır. Bu projeyi built ettikten sonra oluşan dll dosyasını saklıyoruz.

Şimdi yeni ekleyeceğimiz eklentileri yönetecek bir yapıya ihtiyacımız var. Bu yapı bir text dosyasından, eklentilerin dll dosyasının ismini ve yeni eklentinin class’ ının namespace ve isim bilgilerini alacak. Bu isimleri kullanarak eklentiyi dinamik olarak oluşturacağız. Şimdi yeni bir proje açarak text dosyasındaki verileri okurken kullanacağımız plugin class’ ı oluşturuyoruz.

 

Projemize Messenger temel class’ ının dll dosyasını referans olarak verdikten sonra aşağıdaki class’ ı oluşturuyoruz. Bu sınıf, dosyadan bilgileri okuyup eklenti nesnelerini oluşturacak. İçerisindeki plugins nesnesi dosyadaki verileri, plugingsObject ise plugin nesnelerini tutacak. dllName bizim ekleyeceğimiz eklentileri barındıran dll dosyalarının adı, className ise bu dll içerisindeki classların adıdır.

 

 

readFile fonksiyonumuz ile Messenger.txt dosyasındaki veriler plugins nesnesi üzerine yüklenir. Messenger.txt dosyasını projemize eklemeyi unutmuyoruz. Plugins nesnesi bir template sınıf olan list’ dir. Yani hazır bir bağlı liste yapısıdır.

 

Handle fonksiyonu reflection kütüphanesini kullanarak dinamik olarak dll’ ler üzerindeki pluginlere ait nesneleri oluşturuyor. Oluşturduğu nesneleri plugingObject nesnesi (template bir sınıf olan Dictionary den türemiş olan) üzerine yüklüyor.

 

Bir main fonksyon oluşturarak oluşturulan her plugin için login yapacağız. Login fonksiyonları içerisinde mesajlar vererek işlemimizi kontrol edeceğiz. Foreach döngüsü içerisinde yüklenmiş tüm pluginler için login fonksiyonunu çağırıyoruz.

 

Bundan sonraki adımımız MSN eklentisini oluşturmak. MSN eklentisini bir dll içinde tutacağız, bu yüzden yine bir “class library” projesi açıyoruz ve Messenger sınıfından türemiş sınıfımızı oluşturuyoruz.

 

Bu projeyi de built edip oluşan dll’ i saklıyoruz. Kodların içerisini doldurmadım ama siz MSN Messenger’a ait bir API’ yi kullanarak ya da Live hizmetlerinden yararlanarak bunu gerçekleştirebilirsiniz. Test etmek için de fonksiyonların return değerlerini yazmalısınız. Bundan sonra yapmamız gereken asıl programı yazmak. Bu program text dosyasından MSN eklentisine ait dll ismini ve sınıf ismini alacak. Bu isimleri kullanarak programın çalışma süresinde, hakkında hiçbir veriye sahip olmadığı MsnMessenger sınıfından türemiş bir nesne oluşturacak.

Bu yeni eklentimizin dll dosyasını asıl projemizin exe dosyasının yanına koyduktan sonra Messenger.txt dosyasını şu şekilde düzenliyoruz:

 

Asıl projemizi çalıştırdığımızda ekran çıktımız aşağıdaki gibi olacak.

 

Artık eklenti tabanlı çalışan bir programımız var. Eklenti tabanlı programlama bize sürekli genişleyen projelerde yönetim ve güncelleme kolaylığı sağlar. Umarım sizin için faydalı bir yazı olmuştur. İyi okumalar ve yazmalar.
      Mustafa Burak AMASYALI
İ.Ü. Bilgisayar Mühendisliği 4. Sınıf
- Eylül 2009 -

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Editörden... | Ercan ZENGİN
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Virtual Enterprise Nedir? | Ömer TURHAN
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Yeni Trend: Bloglar | Alper KAYA
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Kağıtlar Canlanıyor | Bahar KURTOĞLU
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Efsane Yeniden Bizlerle | Erman TEPE
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Windows 7 ile Gelen Yenilikler | Burak KANMAZ
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Geleceğe Bir de SIGGRAPH’tan Bakın | Neslişah ÇELİK
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Klavye İnkılabı | Cihat GÜZEL
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Eklenti Tabanlı Programlama Teknolojileri | Mustafa Burak AMASYALI
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Elektronik Posta | Muhammed CÜCE
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
İlginç Usb Tasarımları | Ilgın UĞUR
Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
Kadın ve Bilişim | Feyzan SARUHAN

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 208

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 209

Deprecated: Function ereg_replace() is deprecated in /home/bilisimd/public_html/articles_details.php on line 210
« önceki sayfa - 8 - sonraki sayfa »

Ana Sayfa | Künye | Dergimiz | Yazarlar İçin | İletişim
© 2009-2010 Bilisimdergi.Com Tasarım - Kodlama : İU BİLGİSAYAR

Creative Commons License
Bilişim Dergi içeriği  Creative Commons  lisansı ile korunmaktadır.
Kaynak göstermek ve link vermek şartıyla yazılarımızı kullanabilirsiniz.