Ünite 7: UML ile Nesne Yönelimli Analiz ve Modelleme

Giriş

Nesne tabanlı programlama dilleri, kodların yeniden kullanımına olanak sağladığı ve programlama maliyetlerini azalttığı için giderek yaygınlaşarak kullanılmaktadır. Ayrıca, nesne tabanlı programlama yaklaşımı sayesinde, farklı programlama takımlarının bir yazılımın ortaya çıkmasında is birliği içinde çalışması mümkün olmaktadır. Programlamada nesne tabanlı yaklaşım, nesne tabanlı analiz (NTA) ve nesne tabanlı tasarım (NTT) için birtakım tekniklerin kullanılmasını gerektirir. Bu tekniklerde nesne tabanlı diyagramlar kullanılır. Sistem nesne tabanlı ortamda gerçeklenmeyecekse bu diyagramlar içinden sınıf (class) ve dizge (sequence) diyagramlar gibi bazılarının kullanımı, uygun değildir. Nesne tabanlı analiz ve tasarım için geliştirilen diğer diyagramlar, herhangi bir ortam içinde kullanılabilir.

Nesne Modellemeye İlişkin Temel Kavramlar

Nesneler, Öznitelikler, Davranışlar, Kapsülleme : Sistem geliştirmede nesne tabanlı yaklaşım, sistem ortamının nesnelerden oluşması üzerine kuruludur. Sistem geliştirmede nesne tabanlı yaklaşım kullanıldığında, sistemi oluşturacak nesnelerin belirlenmesi önemlidir. Nesneler, bir insan, bir yer, bir olay ya da bilgiyi bünyesinde tutmak istediğimiz bir şey olabilir. Her nesne, öznitelik olarak adlandırılan ve sahip olduğu özellikleri belirten verilere sahiptir. Her nesne, davranışlara sahiptir. Bu davranışlar, nesnenin neler yapabileceğini belirtir. Nesne tabanlı programlamada, davranışlar fonksiyonlar olarak oluşturulur. Kapsülleme kavramı, nesne tabanlı sistemler ile ilişkilidir. Kapsülleme, nesneleri, nesnelerin özniteliklerini belirten verileri ve kendi verileri üzerinde işlem gerçekleştiren fonksiyonları bünyesinde barındırır.

Sınıflar, Genelleşme ve Özelleşme: Nesne modellemede bir başka önemli kavram, nesnelerin gruplandırılması için kullanılan sınıflardır. Benzer öznitelik tiplerine ve davranışlara sahip nesneler, sınıf olarak tanımlanır. Belirli bir sınıfa ait nesne örneklendiğinde, o sınıf için önceden tanımlanan özniteliklere ve davranışlara sahip bir nesne var olur. Her nesnenin örneklendiği bir sınıf vardır. Sınıflar, üst sınıf ve alt sınıf olarak düzenlenebilmektedir. Bu düzenleme içinde, üst ve alt sınıflar arası ilişki miras (inheritance) ilişkisi olarak tanımlanmaktadır. Miras (Inheritance), bir nesnenin sahip olduğu veri ve fonksiyonların başka bir nesne tarafından miras yolu ile kullanılmasını belirten kavramdır. Miras kullanılarak tasarlanan sınıfların ortak veri ve fonksiyonları üst sınıf altında toplanmaktadır. Bu teknik, genelleşme olarak tanımlanabilir. Üst sınıftaki veri ve fonksiyonları kullanmak üzere oluşturulan sınıflar alt sınıf olarak adlandırılır. Alt sınıflar, üst sınıflan kullandıkları veri ve fonksiyonlara ilave olarak yeni veri ve fonksiyonlar da içerir. Buna da özelleşme denir. Her sınıftan, farklı özniteliklere sahip birden çok nesne örneklenebilir. Böylelikle aynı şeylerin tekrar kodlanması nedeniyle ortaya çıkacak hata engellenmekte zaman ve emekten kazanılmaktadır.

Sınıf İlişkileri : Nesneler, diğer nesnelerden izole edilmiş (yalıtılmış) varlıklar değildir. Bir is ya da işlem yerine getirmek üzere, birbirleri ile etkileşim içindedir. Buna göre bir nesne işin tamamlanması için bir diğer nesneden destek alabilir. Sınıf ilişkileri gösteriminde sınıflar arasında bulunan çizgi bu iki sınıfın birbirleri ile iliskili olduğunu belirtmektedir. Çizgi üzerindeki, sınıflara yakın durumda verilen rakamlar çarpan olarak adlandırılmaktadır. Çarpan değeri, bir sınıfın diğer sınıfa ait kaç tane nesne ile ilişkilendirileceğini belirtmektedir. Nesneler arasındaki ilişkinin türü farklılık gösterebilir. Söz konusu ilişki türleri, bir parçasıdır (is a part of) ya da –dan oluşmaktadır (is entirely made of) cümlecikleri ile ifade edilir. Toplanma (aggregation), bir nesnenin bir ya da daha çok nesneyi içermesini belirten ilişki türüdür. Bu ilişkide, bütün içindeki bir parça, bütün olmadan da var olmaya devam eder. Toplanmaya göre daha sıkı ilişki, bileşim (composition) ile tanımlanmaktadır. Bütün, parçaların örneklenmesinden ve yok edilmesinden tamamen sorumludur. Ayrıca, parça sadece bir bütüne aittir.

Mesajlar ve Mesaj Gönderme: Nesnelerin etkileşimi ya da haberleşmesi ifadeleri, bir nesnenin diğer nesneye mesaj göndermesi anlamında kullanılır. Mesaj göndermek ise bir nesnenin sahip olduğu fonksiyona çağrı yapılmasını belirtmektedir. Mesaj gerçekte bir nesneden bir başka nesneye bir fonksiyon çağrısıdır.

Çok Biçimlilik : Nesnelerin mesajlaşması ile ilgili önemli bir kavram, çok biçimlilik (polymorphism) olarak adlandırılmaktadır. Bu kavram, farklı nesneler tarafından aynı mesajın farklı yorumlanabilmesi olarak tanımlanabilir. Alt sınıfın yerine geçme, üst sınıf türünün alt sınıf türü gibi davranabilmesi ve alt sınıf türü gibi kullanılabilmesidir. Bu yapının güzel tarafı, bir eylem bir nesne tarafından yürütülürken nasıl yapıldığı ile ilgilenilmemesidir. Basitçe, bir mesaj nesneye iletildiğinde, o nesne mesajı uygun şekilde yorumlamak ve yerine getirmekten sorumlu olmaktadır. Çok biçimlilik, miras sınıf hiyerarşisi ile oluşturulmaktadır. Üst sınıfla tanımlanan davranışların aynıları alt sınıflarda da bulunur. Harekete geçirilmek istenen davranışlar için mesajlar üst sınıfa iletilir. Üst sınıf, hangi alt sınıfın yerine geçti ise, o sınıfa ait davranış ortaya çıkar. Hiyerarşide bulunan tüm alt sınıflara üst sınıf üzerinde erişilir. Böylece, üst sınıf, alt sınıflar için bir arayüz görevi üstlenmiş olur. Nesne ilişkileri arayüz nesnesi üzerinden oluşturulacağından, arayüz nesnesi altına eklenen yeni alt sınıf, sistemde az bir değişiklik yapılarak ya da hiç değişiklik yapılmadan kullanılabilir. Bu yapı sistemin kolay geliştirilebilir olmasını sağlar.

UML Diyagramları

Birlesik modelleme dili (UML-Unified Modeling Language)nin amacı, herhangi bir sistem geliştirme projesinin, analizinden tasarımına kadar modellemesi için yeterince zengin ortak bir kelime dağarcığının sağlanmasıdır. UML kapsamında yer alan diyagram yapıları, hedeflenen bilgi sisteminin modellemesinde kullanılır. Modelin, düz yazı ile ifade edilmesi yerine grafiksel olarak temsil edilmesinin önemli bir gerekçesi vardır. Grafiksel gösterim, modelin daha kolay anlaşılmasını sağlar. Ayrıca, bilgi teknolojileri uzmanlarının sistem analizi ve tasarımı üzerinden daha hızlı ve doğru bir şekilde haberleşmesi, UML diyagramları kullanımı ile mümkün olabilmektedir. UML 2.5 sürümünde, 15 farklı diyagram tekniği bulunmaktadır. Bu diyagramlar, yapısal diyagramlar ve davranış diyagramları olmak üzere iki grupta toplanabilir. Yapısal diyagramlar, bir bilgi sisteminde bulunan veriler ve statik ilişkileri temsil etmek üzere kullanılır. Davranış diyagramları ise bilgi sistemini temsil eden nesneler arasındaki dinamik ilişkileri tanımlamak için kullanılır.

Kullanım Durum Diyagramları: Kullanım durum, bilgi sistemi ile bu sistemin kullanıcıları arasındaki etkileşimi modellemek için kullanılır. Kullanım durum diyagramlarında, aktörler, kullanım durumlar, sistem sınırı ve ilişkiler için grafiksel gösterim elemanları bulunmaktadır. Aktörler, adam seklinde gösterilir. Aktör belirli bir kullanıcı değil, kullanıcının sistem ile etkileşiminde oynadığı roldür. Aktör aynı zamanda, sistem ile etkileşim içinde olan başka bir sistem de olabilir. Bu durumda aktör, içinde <> yazan bir dikdörtgen şekil ile gösterilir. Kullanım durumları ve aktörler arasındaki ilişki, aralarında bulunan bir çizgi ile gösterilir. Kullanım durumları, elips şekli ile gösterilir ve içinde kullanım durum’u belirten bir isim-fiil ifadesi yer alır. Aktörün isteği ile sistem tarafında yapılacak işlemler bu elipsler ile gösterilir. Kullanım durum’lar, bir sistem sınırı içinde toplanır. Sistem sınırı bir kutu seklinde gösterilir ve sistemin kapsamını belirtir.

Sınıf Diyagramları: Sınıf diyagramları, gelişen sistemin statik görüntüsünü veren statik bir modeldir. Sınıarı ve sınıflar arasındaki ilişkileri gösterir. Bu diyagramda, ana yapısal blok sınıftır. Üç parçalı dikdörtgen şekli ile gösterilmektedir. En üst parçada sınıfın adı, orta parçada öznitelikleri ve en alt parçada –se fonksiyonları bulunur. Sınıf üyelerinin erişilebilir olması, bilginin saklanma düzeyleri ile tayin edilmektedir. Buna göre, public tanımlı üyelere, bütün nesneler tarafından erişilebilir. Protected tanımlı üyelere, sınıfın alt sınıfları dışındaki tüm sınıflar ve nesnelerin erişimi engellenir. Private tanımlı üyelere, bütün diğer sınıfların ve nesnelerin erişimi engellenir. Sınıfın diyagramda gösteriminde, public üyeler (+), protected üyeler (#) ve private üyeler (i) işareti ile gösterilmektedir.

Dizge Diyagramları : Dizge diyagramları, bir kullanım durum içindeki faaliyetleri gerçekleştiren nesneleri ve bir kullanım durum için aralarında geçen mesajları gösterir. Geliştirilen sisteme dinamik bir bakış sağlayan dinamik bir modeldir. Tanımlı bir etkileşim içinde, nesneler arasında gerçekleşen mesaj dizisi gösterilir. Dizgenin katılımcıları (aktörler ya da nesneler), diyagramda en tepede yan yana yerleştirilir. Nesneler belirtilirken, üstüste iki noktanın solunda nesne adı, sağında ise sınıf belirtilir. Aynı isimde başka bir nesne ya da aktör yoksa üst üste iki noktanın solunda nesne adı yazılmayabilir. Aktörler, kullanım durum’da bulunan sembollerle ya da dikdörtgen şekli ile gösterilmektedir. Her bir nesne ve aktörün altında dikey kesikli bir çizgi bulunmakta ve bu çizgi her biri için hayat çizgisini belirtmektedir. Ayrıca, kesikli çizgi üzerinde bulunan ince dikdörtgen, nesnenin mesaj gönderdiği ya da aldığı zamanı belirtmektedir. Nesnelerin hayat çizgileri arasında gösterilen oklar ise bir nesneden diğerine aktarılan mesajı belirtir.

Durum Geçiş Diyagramları: Durum geçiş diyagramları, tek bir sınıfın olaylara tepki olarak geçiş yaptığı farklı durumları gösteren dinamik bir modeldir. Bütün sınıflar için kullanılmaz ancak, karmaşık sınıfların fonksiyonları için geliştirilen algoritmaların basitleştirilmesine yardım eder. Böylece durum geçiş diyagramları, sınıfların farklı durumlarını ve bir sınıfın bir durumdan diğerine geçişine neden olan olayları gösterir. Bu diyagramlar oluşturulurken kullanılan elemanlardan biri durumdur. Durum, belli bir zamanda belli bir noktada, bir nesneyi tanımlayan değerler kümesidir ve kenarları yuvarlatılmış dikdörtgen ile gösterilir. Başlangıç durumu, küçük ve içi dolu bir daire ile gösterilir. Son durum ise bir daire ve daire içinde küçük ve içi dolu bir diğer daire ile gösterilir. Diyagramda olaylar, nesnelerin bir durumdan diğerine geçmesinde tetikleyici olarak görev alır. Geçiş, diyagramda ok ile gösterilir ve nesnenin hangi durumdan hangisine geçeceğini gösterir. Geçişi tetikleyen olay, ok çizgisinin üzerinde bulunur.

Etkinlik Diyagramları: Kullanım durum ya da is süreç faaliyetlerinin ardışık akısını göstermek için etkinlik diyagramları kullanılır. Etkinlik diyagramı oluşturulurken kullanılan başlıca bileşenler, eylemler ve faaliyetlerdir. Bu elemanlar, diyagramda köseleri yumşsatılmıs dikdörtgen sekli ile oluşturulur. İçinde, fiil ve isim çiftinden oluşan kelimeler vardır. İsimler, kolayca anlaşılması için yeterince bilgi içerecek biçimde mümkün olduğunca kısa olmalıdır. Eylem –le faaliyetler arasındaki fark, faaliyetlerin daha sonra bir dizi eylem ve alt faaliyetlere bölünebilmesidir. Ancak, eylemler bölünemezler. Ayrıca diyagramda, düğümler bulunmaktadır. Temelde, başlangıç, karar, birleşim ve bitiş düğümü olarak dört tür düğüm bulunmaktadır. Başlangıç düğümü, faaliyet ve eylemlerin başlangıcını tanımlar. Bitiş düğümü, faaliyetlerin sonlanmasını gösterir. Bu düğüm ayrıca bir nesne akısı ya da kontrol akısının sonlanmasını da gösterir. Karar düğümü, akısın hangi yoldan ilerleyeceği kararının verilmesi gereken noktayı temsil eder. Birleşim düğümü, birden çok akısın birleşmesini sağlar.

Nesne Modelleme Süreci

Nesne tabanlı analiz gerçekleştirmenin amacı diğer sistem analiz metotlarında olduğu gibi, sistemin ve sistemden beklenen işlevlerin daha iyi anlaşılmasıdır. Böylece, nesne tabanlı analiz sürecinde, kullanıcı açısından istenen sistem fonksiyonları belirlenmektedir. Nesne tabanlı analiz, sistem fonksiyonlarının modellenmesi, nesnelerin saptanması ve tanımlanması ile nesnelerin düzenlenmesi ve ilişkilerinin tanımlanması olmak üzere üç aşamada gerçekleştirilir.

Sistem Fonksiyonlarının Modellenmesi: Bu aşamada öncelikle kullanım durum modeli oluşturulur. Sonra, kullanım durum faaliyetleri modellenir. Son olarak da sistemin dizge diyagramları çizilir. Kullanım durumu modeli oluşturmada izlenecek adımlar; yeni aktörlerin saptanması, tanımlanması ve belgelendirilmesi, yeni kullanım durumlarının saptanması, tanımlanması ve belgelendirilmesi, yeni kullanım olasılıklarının belirlenmesi, kullanım durum model diyagramının düzeltilmesi ve sistem analiz kullanım durum hikayelerinin belgelenmesidir. Bir başka diyagram tipi olan etkinlik diyagramı, süreç adımlarını ya da sistem faaliyetlerini modellemek için kullanılır. Bir is süreci ya da kullanım durum’un faaliyet akısı grafiksel olarak gösterilir. Akış diyagramlarına benzerlik göstermesine rağmen, bu diyagram paralel isleyen faaliyetleri gösterecek mekanizmalara sahiptir. Dizge diyagramları, kullanım durum’un isleyişi sırasında, mesajlar aracılığıyla nesnelerin etkileşimini gösterir.

Nesnelerin Saptanması ve Tanımlanması: Bu konuda en çok benimsenen yaklaşımda, sistem gereksinim belgeleri ve diger ilgili belgelerin taranması ve potansiyel nesne olabilecek isimlerin altlarının çizilmesi yoluna gidilir. Bu işlem neticesinde, çok sayıda isim, potansiyel nesne olarak ortaya çıkabilir. Bu sayıyı azaltmak için, sistemin kullanım durum modellerinden faydalanılabilir. Nesne bulma ve tanımlama aşamasında izlenecek adımlar potansiyel nesneleri bulma ve önerilen nesneleri seçmedir.

Nesnelerin Düzenlenmesi ve İlişkilerinin Tanımlanması: Bu aşamada, sınıf diyagramları kullanılır ve bazı adımlar izlenir. Bu adımlar; iliskiler ve çarpanı belirleme, genelleşme/özelleştirme ilişkilerini tanımlama, toplanma/bileşim ilişkilerinin belirlenmesi, sınıf diyagramı hazırlamadır.