Yazılım Mühendisliği

Java ve C# Arasındaki Farklar

Bu yazı, Java programlama dili ile Microsoft’un C# (C Sharp) programlama dili arasındaki farklılıkları ele alan bir derlemedir.

Maddeler, bu iki dilin platformlar arasındaki farklılıkları ele almaz. Yalnızca dil seviyesinde bulunan birtakım farklıları listelemek için hazırlanmıştır.

Bu derleme, herhangi bir üstünlük ya da bir dilin diğerinden daha iyi olduğunu göstermek için hazırlanmamıştır.

Tamamen kişisel ihtiyaçlar doğrultusunda, C# programlama dili ile uygulama geliştirme durumunda, yararlanılmak için çeşitli kaynaklardan ve kişisel deneyimlerden yola çıkarak hazırlanmıştır.

Son olarak bu liste, Java programcılarını hedef alan ve daha çok C# cephesinde bulunan özellikleri öne çıkarmaktadır. Bu yüzden birebir karşılaştırma yazısı olarak da ele alınmayabilir.

(daha fazla…)

Refactoring Nedir?

Varolan yazılımları daha da geliştirmek için uygulanan tekniklere refactoring denmektedir.

Refactoring tanımını biraz daha açmak gerekirse, uygulamanın kaynak kodu üzerinde, kodun işlevselliğini değiştirmeden yapılan iyileştirme ve kod okunabilirliğini arttırma tekniklerine refactoring denmektedir.

Uygulama geliştirildikten sonra, dönüp arkanıza baktığınızda çoğu zaman yazdığınız kodun çok daha iyi bir şekilde yazılabileceğini farkedersiniz. Ya da, kodun belirli yerlerinde bulunan birtakım işlemlerin aslında çok da gerekli olmadığını düşünebilirsiniz. Üstelik uygulama kodu farklı kişiler tarafından okunacaksa (ki büyük ihtimal okunur da), kodu okuyacak kişilerin (bu ilerde siz de olabilirsiniz) yapılan işlemleri daha iyi anlayabilmesi için, kodun bazı noktalarının çok daha açık bir şekilde yazılması gerekebilir.

(daha fazla…)

Factory Design Pattern

Nesne yönelimli programlama dilleri ile geliştirilen uygulamaların tasarımı, uygulamanın bakım ve geliştirme süreçlerini etkileyen çok önemli bir aşamadır.

Geliştirilecek uygulamanın, daha sonra yazılımın diğer modüllerinden bağımsız olarak genişletilebilir, bakımının yapılabilir ve varolan kodların tekrar kullanılabilir olması yazılım mühendisliğinin ilgi alanlarından biridir.

Factory Design Pattern (Tasarım Şablonu) ile amaç, uygun nesneleri uygulamaya döndürmektir. Şablonun temel işlevi, adından da belli olduğu gibi sınıfların örneklerini üretmektir.

Bu tanımlamayı biraz daha açarsak, bir sınıfdan ya da interfaceden türetilen n tane alt sınıf varsa, bu altsınıfların herbiri birbirinden farklı birtakım özel işlemleri gerçekleştirmek için geliştirilmiştir. Fakat bu n tane altsınıfın herbiri, türetildiği üst sınıfın sağladığı methodları kalıtım ile devralır ya da interfacein sunduğu methodları uygulamak zorundadır.

Sonuçta bu altsınıflar, türetildiği üst sınıf ya da interfacein tasarlanış felsefesi ile alakalı işlemler gerçekleştirir. Factory tasarım şablonu ile amaçlanan, bu altsınıfları, sınıfların detayından bağımsız olarak uygulamaya döndürmektir.

(daha fazla…)

Singleton Design Pattern

Daha önce şurada derinlemesine açıklamaya çalıştığım design patterns (tasarım şablonları), nesne yönelimli yazılım geliştirme sürecinde ortaya çıkan pekçok farklı probleme akıllıca çözümler getirmek için geliştirilmiş yazılım mimarileridir.

Tamamen nesne yönelimli programlama yaklaşımını destekleyen Java ile de uygulama geliştirirken, pekçok tasarım şablonu kullanarak, ortaya çıkabilecek problemleri tasarım aşamasında minimuma indirebiliyoruz.

Java ile uygulama geliştirirken kullanılan en popüler tasarım şablonlarından biri de Singleton tasarım şablonudur. Singleton tasarım şablonunun getirdiği çözüm basitçe, şablon çerçevesinde tasarlanacak sınıfların sadece tek bir örneğinin (instance) oluşturulabilmesidir. Bu sayede nesnenin gereksiz birçok kopyasının oluşturulmasının önüne geçilir ve herhangi bir durumda nesneye ihtiyaç duyulduğunda o nesnenin daha önceden oluşturulan örneği kullanılır.

(daha fazla…)

Programlama Dilleri ve Type Systems – Type Checking

Geçtiğimiz 15 (özellikle son 10 yıl) yıllık süre içerisinde, birçok programlama dili geliştirildi. Yazılım dünyasından kimileri, bu dönemi “Programlama Dilleri Çağı” olarak tanımlıyor. Bir nebze haklıklarda, çünkü inanılmaz sayıda programlama dili tasarlanıp yeni özellikler ekleniyor.

Teknoloji de diğer tarafdan baş döndürücü bir hızda ilerliyor ve günümüz ihtiyaçları sürekli değişiyor. Bunun yansımaları, elbet yazılım sektöründe de çokça görülmeye başlandı. Bu yüzden, yazılım geliştirme süreçleri ve özellikle kullanılan ortamlar dinamik bir yapıya dönüştü. Artık projeler, kimi zaman bir platformda, kimi zaman başka bir platformda ilerliyor. Kullanılan araçlarda, ihtiyaçlar doğrultusunda değişkenlik göstermeye başladı kuşkusuz.

Yazılım geliştirme süreçlerinde kullanılan araçlardan birisi de programlama dilleri. Her yazılım geliştiricisi, her programlama dilini doğal olarak bilemeyeceği için, projelerde kullanılan değişik dillere adaptasyon biraz sancılı oluyor. Programlama dilleri açısından olaya bakarsak amaç hiç bir zaman değişmez, bilgisayarlara derdimizi anlatabilmek. Tek farklılık gösteren nokta, bu amacı gerçekleştirebilmek için izlenen yollar kulanılan methodlar. Bu yüzden, programlama dilleri, bazı noktalarda birbirlerinden ayrışırlar. Bu konulardan birisi de “Type Systems (Tip Sistemleri)”. Geliştiriciler programlama dillerinin kullandığı farklı özellikler ve methodlar hakkında bilgi sahibi olurlar ise, bir dilden diğerine geçiş çok daha kolay bir şekilde yapılabilir.

Yeni bir programlama dilini incelemeye başladığımızda, hemen karşımıza type konularında birtakım bilgiler verilir. Örneğin Java static type checking yapan veya Python dynamic type checking yapan bir dildir şeklinde bir açıklamayla karşılaşırız. Bunlar bazı programcılar tarafından önemsenmese de aslında dili öğrenme aşamasında oldukça önemlidir. Dilin mantığını kavrama da bize oldukça fayda sağlarlar.
(daha fazla…)

Tasarım Şablonları – Design Patterns

Yazılım geliştirme, kesinlikle basit bir iş değildir.

Günümüzde (özellikle ülkemizde), birkaç programlama dilinin sözdizimini (syntax) öğrenen birçok kimse paldır küldür uygulama geliştirmeye çalışıyor (Amacım mektepli-alaylı çatışmasını alevlendirmek kesinlikle değil, konu da zaten bununla alakalı değil). Küçük bir uygulama geliştiriliyor ise pek bir problem yaşanmayacağı muhakkak. Ancak, onbinlerce ve daha fazla satır koddan oluşan orta ölçekli yazılımların, gereksinimler belirlenmeden, analiz ve planlama yapılmadan geliştirilmeye başlanması gereksiz işlerden arındırılmamış, bakım ve güncelleme süreçleri programcılar için bir kabus haline gelen ve uygulamayı geliştiren yazılım ekibinin birbirileri ile olan iletişiminin kopmasına yol açan projelere dönüşmesi kaçınılmazdır. Üstelik bir süre sonra yazılımınıza yeni özellikler eklemeye kalkıştığınızda ortaya çıkabilecek sorunlar zaman kaybı yanında maliyeti de etkilemektedir. “Spaghetti code (arapsaçı kod)” adı verilen kodlama tekniği(!) buna en güzel örnektir (daha fazla…)