Perşembe, Eylül 28, 2006

UML Nedir?

Bir inşaat mühendisi bina inşaatına pat diye başlamaz. Belki beyninde hiç yardımsız bina inşaatı yapacak kadar bilgi vardır ama yine de bina tasarlama konusunda eğitim almış deneyimli mimarlardan yardım almak daha akıllıcadır. Mimar ile inşaat mühendisi arasında belki hiç konuşma dahi olmayacaktır ama mühendisin yaptığı bina tam olarak mimarın düşündüğü şekilde olacaktır. Aradaki iletişimi proje denilen araç sağlayacaktır. O projenin üzerine konulan her işaretin bir anlamı, her sayının açıkladığı bir bilgi vardır. Alman mühendis Japon mimarın çizdiği projeyi eksiksiz yapabilir çünkü konuştukları dil inşaatcadır. Bir inşaat projesindeki şekillerin neyi ifade ettiğini bilen bir kişi o inşaatla ilgili her detayı görebilir. Hatta bu inşaata ne kadar malzeme gideceğini dahi hesaplayabilir. İnşaatın maliyetini çıkarabilir. Bir bina tasarımını hiç şekil kullanmadan sadece yazıyla ifade etmeye çalışsak çok şey yazmak gerekir. Hatta bunu da yapmadan sadece anlatarak çözmeye çalışsak ne kadar başarılı olabiliriz? Bazen basit bir şekil sayfalarca dökümandan daha açıklayıcı olabilir.

Aslında çok eski zamanlardan beri yazılım dünyasında da birçok simgesel tasarım aracı kullanılmış ancak evrensel anlamda kabul görmüş bir standart oluşmadığı için çok yaygınlaşmamıştı. Bu ihtiyacı gören OMG konuya el attı ve varolan standartları birleştirerek UML (Birleşik Modelleme Dili) standartlarını yayınladı.

UML bir yazılım tasarımının diyagramlarla açıklanması için kullanılan bir araçtır. Kodlama yapmaya gerek kalmadan sistemin genelinin veya bir parçasının tasarımını bu yolla gösterebilmek mümkündür. Analist, tasarımcı ve programcılar arasında iletişim kurmak için kullanılabilecek iyi bir araçtır. İnşaat projelerinden farklı olarak yazılım projeleri ihtiyaçlara paralel olarak üretimi boyunca sıkça değişir. Bu nedenle yazılım üretme metodları bu sık değişikliklere cevap verecek şekilde döngüsel bir mantıkla işleyecek şekilde tasarlanmıştır. Klasik bir yazılım döngüsü kabaca gereksinim belirleme, analiz / tasarım, kodlama ve test aşamalarından oluşur. Bu döngü 1 hafta - 1 ay arasında değişen bir süreyi kapsar. Son aşama tamamlandıktan sonra tekrar başa dönülür. Bu süreç böylece devam eder. Her döngü başlı başına bir proje olarak da kabul edilebilir. UML bu aşamaların herbirine hitap eden farklı diyagram çeşitleri içerir. Örneğin gereksinim belirleme (bir diğer deyişle müşteriden istekleri alma) aşamasında Use Case (vaka veya kullanım durumu olarak çevirenler var) diyagramı veya tasarım aşamasında sınıf diyagramları ve etkileşim diyagramları kullanılır. Sınıf diyagramı bir sınıfın yapısını, etkileşim diyagramları ise sınıfların çalışma esnasında biribirleriyle olan iletişimlerini gösterir. Bir programcının modellenmiş bir gereksinimi kodlaması hem zaman kazancı sağlar hem de olası hataların önüne geçilmesine yardımcı olur. Aslında programın her parçasını UML ile modellemeye gayret etmiş firmalar da vardır ama bu kadar kapsamlı bir çalışma içine girmenin ne kadar faydalı olduğu hala günümüzde süregelen bir tartışma konusudur. UML diyagramlarını basit bir iletişim aracı olarak algılamak amaçsız bir şekilde herşeyi diyagrama çevirmeye çalışmaktan çok daha iyidir.

Programımız nesne tabanlı bir dille yazılmıyorsa da kullanabileceğimiz UML diyagramları vardır ama asıl olarak UML nesne tabanlı diller düşünülerek tasarlanmıştır. Eğer nesne tabanlı programlama konusunda yeterince bilgili değilsek önce o konuyu öğrenmemiz daha faydalı olacaktır. UML ile ilgili Martin Fowler'in UML Distilled kitabının 3. sürümünü önerebilirim. Aynı kitabın 2. sürümünün Türkçe çevirisi de var. Ancak Türkçe kaynak aranıyorsa Bora Güngören'in UML ile Nesne Tabanlı Çözümleme ve Tasarım kitabı bence daha derli toplu ve faydalı bir kitap. UML dilinin kullanımının yanı sıra yazılım mühendisliğinin önemli ve genellikle zor anlaşılan konularından da işin pratiğine yönelik eğlenceli örneklerle bahsetmiş. Ayrıca nesne yönelimli programlama (OOP) bilmeyenleri de düşünerek kitaba nesne yönelimli programlamaya giriş yaparak başlamış.

Hazır yeri gelmişken bir konuya daha değineyim. Yukarıda yazılım üretimi döngüsünü anlatırken bahsettiğim gibi, program yazma işi sırf kodlama işi değil. İşin mühendisliği ve sosyal bir boyutu da var. Kodlama aşaması, üzerinde uzmanlaşılması gereken temel aşamalardan sadece birisi. İşini ciddi yapan yazılımevlerini bir kenara ayırırsak genelde işin kodlama haricindeki kısmı önemsenmez veya çok yüzeysel uygulanır. Bunun en büyük nedeni iyi kodcunun iyi program yazmak için yeterli olacağıyla ilgili yanlış bir görüş olması ve eğitim eksikliği. Bunları kitap okumadan öğrenmek pek mümkün değil. Bu konularda Türkçe kitap pek yok. Genellikle program yazarken kullandığımız araçları öğreten kitaplar yazılmış. Bunların birçoğu da çeviri. Kodlama bilgisi elbette gerekli ancak analiz, tasarım, test, üretim metodolojileri, kalite güvence gibi konularla ilgili daha çok Türkçe kitap görmek istiyorum. Tabiiki bize düşen orjinal kitap satın alarak yazarlara destek olmak ve yenilerinin yazılması için bu potansiyele sahip kişileri teşfik etmek.

1 yorum:

Murat YILMAZ dedi ki...

Çok faydalı bir bilgilendirme olmuş. Teşekkürler. UML konusunda 3-4 gündür araştırma yapıyorum. Sizin de tavsiye ettiğiniz kitaplar dışında maalesef türkçe kaynak yok. Fakat hiç bir kitapçıda veya sahhafta bu kitaplar kalmamış :( Uzun vadeli, yeni bir projeye başlayacağım ve UML ile başlamak istiyorum. Giriş seviyesinde makaleler ve özet tezler dışında kaynak çok çok az :(