UNUNIFIED MODELING LANGUAGE
- Ali Kurucu
- 23 Eyl 2023
- 7 dakikada okunur
UML Sınıf Diyagramları
Bu yazımızda UML Class Diyagramlarını öğreneceğiz. Ancak bundan önce UML kavramlarına bakalım.
UML(Birleşik Modelleme Dili) nedir?
UML, bir sistem tasarımını görselleştirmek için yazılım mühendisliği alanında genel amaçlı bileşenler dilidir. Yazılı bir dil değildir. Farklı bölümler için kategorilere ayrılsa da, genel olarak bölümleri için kullanılır. 1995 yılında, yazılımlarda standart bir yaklaşım oluşturmak için geliştirilmiştir. Yani UML diyagramları ile önceden modellediğiniz bir yazılım projesini, modele uygun olacak şekilde herhangi bir dil ile geliştirebiliyorsunuz. Bu da yazılım mühendisleri arasında ortak bir dil oluşturur. İlk ortaya çıkışından bu yana sürekli gelişme göstererek, birçok farklı dala ayrımı. Aşağıda UML diyagramlarının kategorilerini görebiliriz. Bizim bu yazımızda bahsettiğimiz Sınıf Diyagramı, Yapı Diyagramı altında bulunmaktadır. Yapı Diyagramları(Yapısal Diyagramlar),
görsel kaynak: wikipedia.org
UML Sınıf Diyagramları
Sınıf diyagramları, OOP(Nesne Tabanlı Programlama) temel olarak tasarlanmıştır. Amaç yazılımımız Temel sınıflar ve aralarındaki dağılımları dağıtır. Gelin daha detaylı inelim. Aşağıdaki gibi Hayvan olarak bir sınıfımız olduğunu düşünelim.
class Animal {
özel Dize adı;
özel int kimliği;
özel int yaş; public void setName(Dize adı){
this.name=name;
}
public void eat() {
System.out.println("Yeme");
}
}
Not: Yazının daha fazla uzatılamaması için tüm alıcı-ayarlayıcı yöntemler yazılmamıştır.
Hayvan sınıfını Java'da bu şekilde yazdık. Peki biz bu tüm sınıfın diğer nesne temelli dillerde yazabilecek şekilde ifade etmek isteyecek miydik? Yani diğer yazılımcıların da anlayacağı bir dilde yazsaydı. İşte o zaman sınıf diyagramında ifade edilmesi gerekirdi.
Bu gösterimde yöntemler için dönüş tipi ve serbest yazmak zorunlu değil. Ancak modelin okunabilir(okunabilir) olması için yazmak mümkündür.
Üstte Hayvan sınıfının sınıf diyagramındaki gösterimini görebilirsiniz. Sınıf diyagramlarında sınıflar bu şekilde ifade ediliyor. Üstte “Nitelikler” yani sınıfa ait nitelikler (örneğin isim, yaz, kimlik bilgileri), alt ayarlanabilir sınıfa ait yöntemler bulunur. İfadelerin çözümünde bulunan “-” işareti ise erişim değiştirici(erişim niteleyicisi). Yani o varsayılanın, kamu, özel ya da korunduğunu gösteriyor. Sınıf soyut olsaydı Animal yerine Animal şeklinde italik gösterebilirdik ya da <<abstract>> şeklinde yazabilirdik. Aynı şekilde bir arayüz içinse <<arayüz>> şeklinde belirtiriz. Erişim değiştiriciler için gösterimler aşağıdaki listedeki gibi.
UML Sınıf Diyagramları
·
5 dakikalık okuma
·
24 Mayıs 2019
Paylaşmak
Bu yazımızda UML Class Diyagramlarını öğreneceğiz. Ancak bundan önce UML kavramlarına bakalım.
UML(Birleşik Modelleme Dili) nedir?
UML, bir sistem tasarımını görselleştirmek için yazılım mühendisliği alanında genel amaçlı bileşenler dilidir. Yazılı bir dil değildir. Farklı bölümler için kategorilere ayrılsa da, genel olarak bölümleri için kullanılır. 1995 yılında, yazılımlarda standart bir yaklaşım oluşturmak için geliştirilmiştir. Yani UML diyagramları ile önceden modellediğiniz bir yazılım projesini, modele uygun olacak şekilde herhangi bir dil ile geliştirebiliyorsunuz. Bu da yazılım mühendisleri arasında ortak bir dil oluşturur. İlk ortaya çıkışından bu yana sürekli gelişme göstererek, birçok farklı dala ayrımı. Aşağıda UML diyagramlarının kategorilerini görebiliriz. Bizim bu yazımızda bahsettiğimiz Sınıf Diyagramı, Yapı Diyagramı altında bulunmaktadır. Yapı Diyagramları(Yapısal Diyagramlar),
görsel kaynak: wikipedia.org
UML Sınıf Diyagramları
Sınıf diyagramları, OOP(Nesne Tabanlı Programlama) temel olarak tasarlanmıştır. Amaç yazılımımız Temel sınıflar ve aralarındaki dağılımları dağıtır. Gelin daha detaylı inelim. Aşağıdaki gibi Hayvan olarak bir sınıfımız olduğunu düşünelim.
class Animal {
özel Dize adı;
özel int kimliği;
özel int yaş; public void setName(Dize adı){
this.name=name;
}
public void eat() {
System.out.println("Yeme");
}
}
Not: Yazının daha fazla uzatılamaması için tüm alıcı-ayarlayıcı yöntemler yazılmamıştır.
Hayvan sınıfını Java'da bu şekilde yazdık. Peki biz bu tüm sınıfın diğer nesne temelli dillerde yazabilecek şekilde ifade etmek isteyecek miydik? Yani diğer yazılımcıların da anlayacağı bir dilde yazsaydı. İşte o zaman sınıf diyagramında ifade edilmesi gerekirdi.
Bu gösterimde yöntemler için dönüş tipi ve serbest yazmak zorunlu değil. Ancak modelin okunabilir(okunabilir) olması için yazmak mümkündür.
Üstte Hayvan sınıfının sınıf diyagramındaki gösterimini görebilirsiniz. Sınıf diyagramlarında sınıflar bu şekilde ifade ediliyor. Üstte “Nitelikler” yani sınıfa ait nitelikler (örneğin isim, yaz, kimlik bilgileri), alt ayarlanabilir sınıfa ait yöntemler bulunur. İfadelerin çözümünde bulunan “-” işareti ise erişim değiştirici(erişim niteleyicisi). Yani o varsayılanın, kamu, özel ya da korunduğunu gösteriyor. Sınıf soyut olsaydı Animal yerine Animal şeklinde italik gösterebilirdik ya da <<abstract>> şeklinde yazabilirdik. Aynı şekilde bir arayüz içinse <<arayüz>> şeklinde belirtiriz. Erişim değiştiriciler için gösterimler aşağıdaki listedeki gibi.
Sınıf gösterimini gördük. Ancak sınıfın tek başına gösterimi bir şey ifade etmiyor. Bu sınıflar arasındaki bağlantıların gösterimi de önemli. UML'de bulunanların listesi şu şekilde:
1- Genelleme/Kalıtım
2- Gerçekleştirme/Uygulama
3- Dernek
4- Bağımlılık (Toplama ve Bileşim)
1- Genelleme/Kalıtım
Peki nesne tabanlı programlamanın olmazsa olmazı kalıtım(kalıtım) ona göre nasıl gösterilir.
görsel kaynak: Lucidchart youtube kanalı
Üstte kalıtımın nasıl ifade edildiğinin gösterimi bulunmaktadır. Bu gösterim soyut sınıftan kalıtım alırken de aynı. Bu tür kalıtım ilişkisinde konular arasında “IS-A” ilişkileri bulunmaktadır.
“Kaplumbağa Bir Hayvandır”“Kaplumbağa bir hayvandır.”
2- Gerçekleştirme/Uygulama
Bu ilişkilerin bölümleri ile sınıflar arasında birleşimler için kullanılır. Kesikli(kesikli) çizgi ile ifade edilir. Kalitımdaki kesik kesik kesik olan halidir.
Örnek: --------------▻
kaynak: https://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/index.html
3- Dernek
Birliktelik, sınıf diyagramlarında en çok oluşumlu ilişki çeşitlerindendir. Tasarım desenleri ile ilgili yazılarımda UML örneklerinde ilişkilendirmelerle bol bol karşılaşmamız için bu kısmın iyi anlaşılması önemlidir. Miras'ta sınıflar arasında IS-A ilişkisi var olduğu belirtildi. Burda sınıflar arasında HAS-A ilişkisi bulunuyor. Birazdan örneklerle indir.
Dernekler 4 çeşide ayrılmaktadır. Bunlar çift yönlü(tek yönlü), tek yönlü(çift yönlü), dönüşlü ve toplama&kompozisyondur. Toplama ve bileşim ilişkisinde evlilik ilişkisinin söz konusu olduğu için onu ayrı bir güventa ele alabiliriz. Çeşitlere bakmadan önce çokluk kavramlarına bakalım. Çünkü Associatinlarda sınıflar arasındaki ayrılık ilişkisinde bu kavram önemlidir.
görsel kaynak: wikipedia.org
Sınıflar arasında HAS-A ilişkileri kurarken çeşitliliğin sayısını genel olarak bağlı bir durum. Üstte görülebileceği gibi sayıyı belirtebiliyorsunuz. Bunun dışında doğrudan bir sayı ya da 4..10 gibi sayı aralığı da verebiliyorsunuz.
Çift Yönlü Dernek
Bu iki sınıf arasında tek kişilik bir ilişki kullanıldığında kullanılabilirta.
Üstteki okunuşu şu şekildedir.
“KİŞİNİN BİR ADRESİ VAR”“İnsanın bir adresi vardır”
Burada 1 yerine 0..n şeklinde bir ifade de kullanılabilirdi. Üstteki ilişkide 1 yazdığı için, Kişi sınıfı içerisinde Adres sınıfı tipinde bir özniteliğin bulunacağını belirtiyor. Ancak Adres sınıfında Kişi ile ilgili bir bilgi yer almıyor. Çünkü ilişki türü çift yönlü(tek yönlü). Ayrıca ilişki ile ilgili aradaki bağlantıya isim verebilmemiz mümkün. Bu tercihe bağlı bırakılmıştır.
Tek Yönlü Ortaklık
Bu iki sınıf arasında çift taraflı bir ilişki kullanıldığında kullanılabilirta.
Üstelik bunun çok güzel bir örneği var. Bu ifadenin Türkçe'si şu şekilde. Öğrenci sıfır ya da sonsuz tane kursa kayıt olmuş olabilir, aynı şekilde kursa hiç öğrenci kaydı yapılmayacak olabilir ya da sonsuz tane öğrenci kaydı olabilir. Burada sol tarafta bulunan sınıfı karşıladığı sınıftaki sayıyla ilgileniliyor. Sağdakini de tam tersi. Yani bir kursa en az 1 öğrenci kayıt olması için öğrenci sınıfı sınıfı 1..* şeklinde değiştirilecektik.Öğrenci sınıfında Ders sınıfından yaratılmış liste, Ders sınıfında da Öğrenci sınıfından yaratılmış liste tutulmaktadır.
UML Sınıf Diyagramları
Bu yazımızda UML Class Diyagramlarını öğreneceğiz. Ancak bundan önce UML kavramlarına bakalım.
UML(Birleşik Modelleme Dili) nedir?
UML, bir sistem tasarımını görselleştirmek için yazılım mühendisliği alanında genel amaçlı bileşenler dilidir. Yazılı bir dil değildir. Farklı bölümler için kategorilere ayrılsa da, genel olarak bölümleri için kullanılır. 1995 yılında, yazılımlarda standart bir yaklaşım oluşturmak için geliştirilmiştir. Yani UML diyagramları ile önceden modellediğiniz bir yazılım projesini, modele uygun olacak şekilde herhangi bir dil ile geliştirebiliyorsunuz. Bu da yazılım mühendisleri arasında ortak bir dil oluşturur. İlk ortaya çıkışından bu yana sürekli gelişme göstererek, birçok farklı dala ayrımı. Aşağıda UML diyagramlarının kategorilerini görebiliriz. Bizim bu yazımızda bahsettiğimiz Sınıf Diyagramı, Yapı Diyagramı altında bulunmaktadır. Yapı Diyagramları(Yapısal Diyagramlar),
görsel kaynak: wikipedia.org
UML Sınıf Diyagramları
Sınıf diyagramları, OOP(Nesne Tabanlı Programlama) temel olarak tasarlanmıştır. Amaç yazılımımız Temel sınıflar ve aralarındaki dağılımları dağıtır. Gelin daha detaylı inelim. Aşağıdaki gibi Hayvan olarak bir sınıfımız olduğunu düşünelim.
class Animal {
özel Dize adı;
özel int kimliği;
özel int yaş; public void setName(Dize adı){
this.name=name;
}
public void eat() {
System.out.println("Yeme");
}
}
Not: Yazının daha fazla uzatılamaması için tüm alıcı-ayarlayıcı yöntemler yazılmamıştır.
Hayvan sınıfını Java'da bu şekilde yazdık. Peki biz bu tüm sınıfın diğer nesne temelli dillerde yazabilecek şekilde ifade etmek isteyecek miydik? Yani diğer yazılımcıların da anlayacağı bir dilde yazsaydı. İşte o zaman sınıf diyagramında ifade edilmesi gerekirdi.
Bu gösterimde yöntemler için dönüş tipi ve serbest yazmak zorunlu değil. Ancak modelin okunabilir(okunabilir) olması için yazmak mümkündür.
Üstte Hayvan sınıfının sınıf diyagramındaki gösterimini görebilirsiniz. Sınıf diyagramlarında sınıflar bu şekilde ifade ediliyor. Üstte “Nitelikler” yani sınıfa ait nitelikler (örneğin isim, yaz, kimlik bilgileri), alt ayarlanabilir sınıfa ait yöntemler bulunur. İfadelerin çözümünde bulunan “-” işareti ise erişim değiştirici(erişim niteleyicisi). Yani o varsayılanın, kamu, özel ya da korunduğunu gösteriyor. Sınıf soyut olsaydı Animal yerine Animal şeklinde italik gösterebilirdik ya da <<abstract>> şeklinde yazabilirdik. Aynı şekilde bir arayüz içinse <<arayüz>> şeklinde belirtiriz. Erişim değiştiriciler için gösterimler aşağıdaki listedeki gibi.
Sınıf gösterimini gördük. Ancak sınıfın tek başına gösterimi bir şey ifade etmiyor. Bu sınıflar arasındaki bağlantıların gösterimi de önemli. UML'de bulunanların listesi şu şekilde:
1- Genelleme/Kalıtım
2- Gerçekleştirme/Uygulama
3- Dernek
4- Bağımlılık (Toplama ve Bileşim)
1- Genelleme/Kalıtım
Peki nesne tabanlı programlamanın olmazsa olmazı kalıtım(kalıtım) ona göre nasıl gösterilir.
görsel kaynak: Lucidchart youtube kanalı
Üstte kalıtımın nasıl ifade edildiğinin gösterimi bulunmaktadır. Bu gösterim soyut sınıftan kalıtım alırken de aynı. Bu tür kalıtım ilişkisinde konular arasında “IS-A” ilişkileri bulunmaktadır.
“Kaplumbağa Bir Hayvandır”“Kaplumbağa bir hayvandır.”
2- Gerçekleştirme/Uygulama
Bu ilişkilerin bölümleri ile sınıflar arasında birleşimler için kullanılır. Kesikli(kesikli) çizgi ile ifade edilir. Kalitımdaki kesik kesik kesik olan halidir.
Örnek: --------------▻
kaynak: https://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/index.html
3- Dernek
Birliktelik, sınıf diyagramlarında en çok oluşumlu ilişki çeşitlerindendir. Tasarım desenleri ile ilgili yazılarımda UML örneklerinde ilişkilendirmelerle bol bol karşılaşmamız için bu kısmın iyi anlaşılması önemlidir. Miras'ta sınıflar arasında IS-A ilişkisi var olduğu belirtildi. Burda sınıflar arasında HAS-A ilişkisi bulunuyor. Birazdan örneklerle indir.
Dernekler 4 çeşide ayrılmaktadır. Bunlar çift yönlü(tek yönlü), tek yönlü(çift yönlü), dönüşlü ve toplama&kompozisyondur. Toplama ve bileşim ilişkisinde evlilik ilişkisinin söz konusu olduğu için onu ayrı bir güventa ele alabiliriz. Çeşitlere bakmadan önce çokluk kavramlarına bakalım. Çünkü Associatinlarda sınıflar arasındaki ayrılık ilişkisinde bu kavram önemlidir.
görsel kaynak: wikipedia.org
Sınıflar arasında HAS-A ilişkileri kurarken çeşitliliğin sayısını genel olarak bağlı bir durum. Üstte görülebileceği gibi sayıyı belirtebiliyorsunuz. Bunun dışında doğrudan bir sayı ya da 4..10 gibi sayı aralığı da verebiliyorsunuz.
Çift Yönlü Dernek
Bu iki sınıf arasında tek kişilik bir ilişki kullanıldığında kullanılabilirta.
Üstteki okunuşu şu şekildedir.
“KİŞİNİN BİR ADRESİ VAR”“İnsanın bir adresi vardır”
Burada 1 yerine 0..n şeklinde bir ifade de kullanılabilirdi. Üstteki ilişkide 1 yazdığı için, Kişi sınıfı içerisinde Adres sınıfı tipinde bir özniteliğin bulunacağını belirtiyor. Ancak Adres sınıfında Kişi ile ilgili bir bilgi yer almıyor. Çünkü ilişki türü çift yönlü(tek yönlü). Ayrıca ilişki ile ilgili aradaki bağlantıya isim verebilmemiz mümkün. Bu tercihe bağlı bırakılmıştır.
Tek Yönlü Ortaklık
Bu iki sınıf arasında çift taraflı bir ilişki kullanıldığında kullanılabilirta.
Üstelik bunun çok güzel bir örneği var. Bu ifadenin Türkçe'si şu şekilde. Öğrenci sıfır ya da sonsuz tane kursa kayıt olmuş olabilir, aynı şekilde kursa hiç öğrenci kaydı yapılmayacak olabilir ya da sonsuz tane öğrenci kaydı olabilir. Burada sol tarafta bulunan sınıfı karşıladığı sınıftaki sayıyla ilgileniliyor. Sağdakini de tam tersi. Yani bir kursa en az 1 öğrenci kayıt olması için öğrenci sınıfı sınıfı 1..* şeklinde değiştirilecektik.Öğrenci sınıfında Ders sınıfından yaratılmış liste, Ders sınıfında da Öğrenci sınıfından yaratılmış liste tutulmaktadır.
dönüşlü
Açıklama en zor ilişki bu olabilir. Refleksif(dönüşlü) yani sınıfının kendisi ile yaptığı ilişkidir.
görsel kaynak: praveenthomasln.wordpress.com
Üstte dönüşlü ilişki için güzel bir örnek yer alıyor. Directory(Dosya dizini) hiç ya da sonsuz sayıda alt dosya dizinine sahip olabilir. Aynı şekilde hiç ya da 1 tane üst dizine sahip olabilir. Dizin sınıfı kendi sınıfından türettiği 2 tane dizin nesnesi ile üstteki modeli gerçekleştirebilir.
4- Bağımlılık (Toplama ve Bileşim)
Bu ilişkiyi çift yönlü ilişkilendirme olarak düşünebiliriz. Ancak ekstra sınıflar arasında bağlılıktan söz edilir.
Aggregation ve Composition'da sınıflar arasında parça olma anlamı vardır. Bir sınıfın diğer sınıfın bir parçasıdır. Bu ilişki Aggregation'da biraz daha zayıfken, Composition'da daha güçlüdür. Çünkü Bileşim ilişkisinde parça olduğu sınıf yok ise diğer sınıf yokdur. Bu tür tanıtımlarda HAS-A ya da IS-PART-OF şeklinde okuyabiliriz.
Toplama
Üstte sınıflar arasında Toplama ilişkilerini görebilirsiniz. Tekerlekli arabanın sınıfının bir parçasıdır. Ancak araba sınıfı yokken tekerlek yok olmak zorunda değildir. zayıf bir parça ilişkisi vardır.
Kompozisyon
Üstte sınıflar arasında Kompozisyon ilişkilerini görebilirsiniz. Kalp, insan sınıfının bir parçasıdır. İnsan yok sınıfı olduğunda kalpte yok olacaktır. İki sınıf arasında güçlü bir parça ilişkisi vardır. Kompozisyon ile anlaşma arasındaki fark budur. Umarım açıklayıcı olmuştur.
Üstteki sınıflar arasındaki ilişkiler gerçek projelerde hepsi bir arada kullanılabilir. Yazıda sınıflar arasındaki ilişkiler ilişkileri için temel tabanlı programlama hakkında en az temel düzey bilgisi gerekmektedir. Yazının sonuna geldik. Beklediğimden biraz daha uzun oldu. Ancak bu konu yazılım mühendisliği için çok önemli bir ayrıntıyla çalışmayı yaptık. Bana yazının yorum bölümünden ya da mail adresinden ulaşabilirsiniz.
Commentaires