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

Bu ay içerisinde .NET 4.0 versiyonu yayınlanacak bildiğiniz üzere. Yaklaşık bir yıldır, çeşitli platformlarda .NET 4.0 ve Visual Studio 2010 beraberinde tanışacağımız özellikler gösteriliyor, anlatılıyor. Kısacası hazırız aslında .NET 4.0’a…(!)

Peki neden .NET Framework,”4.0” oldu?…Ya da v4.0 altında gerçekten neler oldu biliyor muyuz?…Açıkcası kişisel olarak, biz yazılımcıların bazı önemli değişikliklere çok önem verdiğimizi düşünmüyorum. Yani hem kendimden, hem de gözlemlerime dayanarak söylüyorum bunu. İstisnalar var tabi ki bunu da biliyor, takip ediyorum…Neyse…Bundan dolayı da .NET Framework’ü hakkını vererek kullanıp, uygulamalar geliştirebildiğimize inanmıyorum.

1.0,1.1,2.0,3.0,3.5,4.0 şeklinde gidiyoruz bizde .NET Framework ile…Her versiyon aslında farklı bir yazılımcı jenerasyonu. En azından ben böyle düşünüyorum. 1.0-1.1 zamanında kendi master page yapısını oluşturan, 1.1’de kendi Ajax kütüphanesini yazan, 2.0’da kendi O/R mapping’ini yazıp Entity Framework’e kafa tutan bir çok kişi tanıyorum…AJAX’ı Microsoft’un çıkardığı bir yenilik sanan, arka tarafta işlerin nasıl döndüğünü bilmeyen kişiler de tanıyorum. Tabi ki artık bazı işlerin kolaylaşması, çok derinlerdeki olayların nasıl olduğu bilme gerekliliğini sorgular hala getiriyor. Ama eğer yazılım ile teknolojiye katma değer katmaya çalışıyorsak ve mühendislik yaklaşımından geliyorsak, nasıl olduğunu bilmesekte ne olduğunu bilmemiz gerektiğine inanıyorum.
Bundan dolayı .NET 4.0’ın derinliklerinde neler değiştiğini, kendi tecrübelerim ve öğrendiğim bilgiler doğrultusunda paylaşma gereği hissettim. Hani temeli iyi yaparsak, üst taraf daha sağlam olur yaklaşımı ile…

Öncelikle kendi çizmiş olduğum komik ama bence anlamlı resmi paylaşarak nasıl .NET 4.0’a geldik bunu hatırlayalım.

.NET 1.0 ve 1.1 bir çoğumuzun hatırlamak istemeyeceği bir dönem. “Karanlık Çağ” şeklinde adlandırılıyor olması sanırım çok da yanlış değil. .NET 2.0 ile beraber, temelli çok daha sağlam bir yapı ile geleceğe daha büyük umutlar ile baktık. Önceki versiyona göre daha istikrarlı ve ne olduğu daha belirgin bir framework’tü .NET 2.0.NET 2.0 ile mutlu mesut yaşarken, hızlı ilerleyen teknolojik kavramlar, .NET 3.0’ı attı önümüze…Yedik bir güzel…Hazmetmesi, adapte olması zordu…Yapı olarak fazla değişiklikler olmasa da, yapının üstüne gelen WCF, WPF, CS(Card Space),WF adaptasyonu zorlaştırdı biraz. Sonra .NET 3.5 çıktı…Biraz daha kolay hazmedelim diye .NET 3.0’daki yeniliklerin iyileştirildiği ve ek besin vitamini olarakta LINQ ve Entity Framework ile desteklenen bir versiyondu .NET 3.5
Şimdi de .NET 4.0…Çok daha kararlı, bazı şeylerin, önceki dönemlerdeki tecrübeler ile silinip atıldığı ve tekrar yazıldığı, parlak gözüken bir versiyon. İyileştirmelerden çok, geliştirmelerin olduğu, yenilikler ile teknolojik gelişmelere daha kolay ayak uydurabileceğimiz bir versiyon…

Peki neden farklı?

.NET Framework’de bulunan CLR, .NET 2.0 versiyonunda beri hiç değişmemişti. .NET 4.0 ile beraber CLR 4.0 ile tanışıyoruz. .NET 4.0 versiyonunda ki en önemli değişikliklerden biri de bu aslında. Peki neler değişti, neler gitti, neler geldi…

Garbage Collection değişiklikleri

CLR 4.0 ile beraber Garbage Collection tarafında iyileştirmeler yapılmış. Performans konusunda yapılan bu iyileştirmeler ile GC’nin çalışma algoritmalarında büyük değişiklikler var. .NET Framework tarafında yaratılan objeler belli koleksiyonlarda tutuluyor. Objeler yaşam sürelerine göre bu koleksiyonlar da konumlanıyor. GC’da bu koleksiyonlardaki objeleri yaşam sürelerine göre topluyor,yok ediyor…CLR 4.0’da bu işler artık daha hızlı.

İç içe çalışan CLR

CLR 4.0’ın bence en güzel yeniliklerinden biri de, içerisinde başka CLR versiyonlarının da çalışabilmesi. Ne demek oluyor bu açalım biraz daha…. .NET Framework ile çalışan ana uygulama tek bir CLR versiyonu yükleyebiliyordu. Bu da uygulamalarda destek sorununa neden olabiliyordu. Mesela CLR 1.0 versiyonu ile çalışan bir uygulamaya, CLR 2.0 versiyonu ile bir şey yazamıyorduk. CLR 4.0 ile artık bu sorun ortadan kalkıyor. Plug-in yazmak artık çok daha kolay olacak kısacası…Bunun ile ilgili bir örnek ilerleyen yazılarımda olacak, telaşa mahal yok…

Yakalanamayan hatalar(Ayrıntılar için CSE’ı google da aratın)

Önceki CLR versiyonlarında bazı unmanaged işlemlerden doğan hataları yakalamak normal try-catch blokları ile mümkün değildi. InvalidMemory,AccessViolation falan filan gibi. CLR 4.0 ile artık bu tarz hataları yakalamak daha kolay. Bunun için [HandleProcessCorruptedStateExceptions] özelliğini programımızın başlangıcına eklememiz yeterli.

Profiling yenilikleri

Uygulamaları profile etmek için önceki CLR versiyonlarında üretim ortamına Visual Studio kurmamız gerekmekteydi. Artık buna gerek yok…

Dump Debuging

Belli arayüzler ile artık uygulamalarımızda dump debuging yapabileceğiniz. Hata olduğunda “Gönderim mi,göndermiyim mi” sorusu ile başbaşa kaldığımız ekran .NET 4.0 ile kendi uygulamalarımız adına biraz daha anlam kazanacak.

Çok çekirdekli .NET

Ay çekirdeği tadındaki bu en güzel yenilik, artık çok çekirdekli işlemcilerde, bu çekirdeklerden faydalanmamızı sağlayacak Parallel Extensions olarak karşımıza çıkıyor. CLR thread’leri artık bu çekirdekler arasında dağıtılabilinecek…Şahane…

Daha bir çok ilginç yenilik var. Zamanla gerektiği kadar bunları öğrendikçe,kullandıkça paylaşmaya çalışacağım. Yukarda dediğim temel olayından dolayı…Neyse şimdilik bu kadar…

28-29-30 Nisan 2010 tarihlerinde Ankara’da yeni bir festival gerçekleşecek. Sepultura’dan, Deathstars’a,Jay-Jay Johanson’dan Hayko Çepkin’e oldukça geniş ve güzel bir kadrosu var…Rock ve metal musikiden hoşlanan Ankaralılara şiddetle tavsiye ediyorum. Ayrıntılar aşağıda bir yerlerde işte…

The Profestival Rock 2010 from The Prostar on Vimeo.

Ayrıntılar: http://www.theprofestival.com/

Biletler: http://www.biletix.com/perfList.htm?id=247&pst=EVENTGROUP

Bu haftanın grupları…

/ Leave a comment / ~ 2 dakikada okuyabilirsiniz.

Bu hafta bunları dinlemişim,etmişim…Özellikle IAMX’i ve Deftones’u yedim yuttum…IAMX konseri olduğu için özel ilgi gösterdim hatta…Ama 3 Nisan ki konserden sonra ilginin boşa gitmediğini gördüm sevindim…Son zamanlarda izlediğim en iyi performansı sergiledi IAMX. Umarım tekrar gelirler…Gelmeleri lazım…Deftones’un yeni albüm de şahane…Biraz zor bir albüm aslında, ama biraz sabır ile kolay aşılabilen bir zorluk…Umarım Deftones’u da görürüz yine yakında…

Bugün başlayan ve önümüzdeki 2 gün boyunca devam edecek Mix10 etkinliğinde ilk duyurulan haberler, Silverlight 4’ün “yayın adayı” ve WCF RIA Services’in “yayın adayı” oldu. Nisan ayı gibi de sanırım bu iki kavramın son hallerine kavuşuyor olacağız…Ayrıntılı bilgileri ve indirmek için gerekli linkleri aşağıdaki adreste bulabilirsiniz.

http://www.silverlight.net/getstarted/silverlight-4/

Bir güzel ve önemli haber ise Windows Phone 7’den…Windows Phone 7’nin geliştirici araçları da bugün itibari ile geliştiricilere sunuldu. Tabi telefon çıkmadan pek kullağa mantıklı gelmiyor ama geliştirme ortamının sağladığı güzellikler ile ilgileniyorsanız hemen olaya dalmanızı tavsiye ederim.Daha fazla ayrıntı ve geliştirme araçları için aşağıdaki linki takip edebilirsiniz.

http://developer.windowsphone.com/windows-phone-7-series/

Bir yazılım projesinde yazılım tasarımına başlarken, kafamızda ilk yaptığımız şey genellikle direk projenin nesne modelini çıkarmaya çalışmak oluyor. Yanlış bir şey olmasa da öncesinde yapılması gereken başka şeyler olduğundan ortaya çıkan nesne modeli ne kadar sağlıklı oluyor tartışılır. Kendi tecrübelerim ve gözlemlerime göre genellikle nesnelerin bir birleri ile ilişkilendirilmeleri konusunda hatalar yapabiliyoruz. Aslında hata demek doğru olmaz. Bazı noktaları düşünmeden, bazı şeyleri göz ardı ederek nesne modellerini oluşturuyoruz ve bunlar yazılım tasarımının ilerleyen aşamalarında sorun olarak karşımıza çıkmasa da, geliştirme sürecinde mutlaka karşımıza çıkıyor. Nesnelerin bir birleri ile olan ilişikileri ile bir sonraki yazımda daha çok ilgileniyor olacağım. Ama önce nesnelerimizi tasarlarken göz ardı edildiğini düşündüğüm bir kaç noktaya değinmek istiyorum.

Bir nesnenin var oluş sebebi…

Her hangi bir kavramın nesne modelini oluştururken, o kavramın ne amaçla var olduğunu asla unutmamak gerekir. Gerçekleştireceği operasyonların, o kavram dahilinde olduğunu kesinleştirmek nesne modelini ve ilgilerini oluşturmakta daha kolaylık sağlayacaktır. Matemetikte ki 4 işlemi soyutlayan bir nesneye, belli bir süre için faiz hesaplayan bir metodu da 4 işlem dahilinde olduğunu düşünerek eklemek o nesnenin karmaşıklığını artıracaktır. Farklı yerlerde farklı şekillerde var olabileceğinden tasarımsal olarak soruna yol açacaktır. Dolayısıyla nesnelerin görevlerinin çok net bir şekilde tanımlanıyor olması gerekmekte.

Bir nesnenin yaşam süresi…

Nesnelerin, bütün içerisinde ki yaşam süresini yönetebiliyor olmak çok önemlidir. Gelişen “geliştirme teknolojileri” bu sürenin yönetimini biraz olsun geliştiriciden alıyor olsa da, en azından nesnelerin yaşam sürelerinin farkında olmak bizim için çok önemli. “Object reference not set to an instance of an object”(sanırım en çok alınan hatadır) hatasını alıyor olmamız, bir bakıma da nesnelerimizin nerede, ne zaman, nasıl yaşadığının farkında olmamamızdan kaynaklanıyor diyebilirim. Nesnelerimizin, nerede, ne şekilde, ne kadar yaşayacağını ya da var olacağını çok iyi belirlememiz gerekiyor.

Bir nesnenin ilişkileri…

Nesnelerin bir birleri ile olan ilişkilerini ortaya net bir şekilde çıkarmak çok önemlidir. Bu noktada “Composition(part-of)”(Bileşim),“Aggregation(has-a)”(Kümelenme,bir araya gelme) ve “Inheritance(is-a)”(Kalıtım) kavramlarını anlıyor olmak çok önemlidir. Teorik olarak kavramlara hakim olsak bile, nesne tasarımlarında bunları uygulama konusunda zaman zaman sıkıntı çekilebiliyor. Nesneler arasında ki ilişikleri, hangi nesnenin hangi nesneye bağlı olduğunu ya da olacağını ilk başlarda kestirebiliyor olmak çok zor olsada,  bu zorluğa katlanıp çözme çabası olumlu sonuçları beraberinde getirecektir. Bu aşamada “Dependency injection”, “Inversion of control” kavramlarını da çok iyi anlıyor olmamız gerekmekte…
Bu üç başlığın yazılım tasarımı konusunda, özellikle nesne modeli oluştururken çok önemli olduğunu düşünüyorum. Şimdilik bu kadar…