Sınıf tanımları yapılırken genel olarak kullanılan bir kalıp vardır. UML'de bir sınıf bir dikdörtgen içerisinde gösterilir. Dikdörtgenin en üstündeki ilk bölmede sınıfın adı yer alır. Sınıflara isim verirken, her kelimenin baş harfinin büyük olması diyagramların anlaşılırlığını arttırır. Bir sınıfın çeşitli özellikleri (attributes) olabilir ve bunlar dikdörtgenin ikinci bölmesine yazılır. Bir sınıfın hiç özelliği olmayabileceği gibi birden fazla özelliği de olabilir.
Sınıfların bir diğer önemli elemanı da işlevlerdir (methods). İşlevler bir sınıfta iş yapabilen elemanlardır. Bu iş başka bir sınıfa yönelik olabileceği gibi sınıfın kendi içindeki bir iş de olabilir. Sınıf diyagramlarında işlevler özelliklerin hemen altındaki bölmede gösterilir. İşlevler özelliklerden farklı olarak birtakım bilgilere ihtiyaç duyabilir veya birtakım bilgileri dışarıya verebilir ya da bunların hiçbirini yapmayabilirler. Örneğin, aşağıdaki şekilde iki özelliğe ve üç işleve sahip bir sınıf bulunmaktadır. İşlev 1 hiç bir parametre almaz ve dışarıya bilgi vermez. İşlev 2 birtakım parametreler alır ancak dışarıya bilgi vermez. İşlev 3 ise dışarıdan bilgi almaz ancak dışarıya tamsayı (integer) türünde bilgi gönderir.
Bir sınıf diyagramında kullanılabilecek temel yapılar bunlar olmasına rağmen koşullar (constraints) ve notlar (notes) denilen elemanlar da eklenebilir. Notlar genellikle işlevler ve özellikler hakkında bilgi veren tercihe bağlı kutucuklardır. Koşullar ise sınıfa ilişkin birtakım koşulların belirtildiği ve parentez içinde yazılan bilgilerdir.
Sınıflar Arası İlişki (Assocation)
Sınıflar arası ilişki gösterilirken iki sınıf arasına düz bir çizgi çekilir ve ilişkiyi gösteren çizginin üzerine ilişkinin türü yazılır. Örneğin, Kitap ve İnsan sınıfları arasında "okuma" ilişkisi vardır. İnsan sınıfının gerçek nesnesi olan "Ali" ile Kitap sınıfının gerçek nesnesi olan "UML kitabı" arasında "okuma" ilşkisi vardır. Kısaca şöyle denir: Ali, UML kitabı okur.
Sınıflar arasındaki ilişkinin bir çizgiyle belirtebilecek kadar basit olmadığı durumlarda ilişki sınıfları kullanılır. Müşteri ile Kitapçı sınıfı arasında "satın alma" ilişkisi vardır. Fakat müşteri satın alırken Ücret ödemek zorundadır. Ücret sınıfı ile satın alma ilişkisi kesikli çizgi ile birleştirilir.
Bu tür ilişkiler bire-bir ilişkilerdir. Bire-çok ilişki durumu da söz konusudur. Bir sınıf, n tane başka bir sınıf ile ilişkiliyse bire-çok ilişki vardır. Örneğin, aşağıdaki örnekte Yüzbaşı ile Er arasında bire-yüz bir ilişki vardır.
Burda 1 yüzbaşı 100 Er'e komut verebilir.
En temel ilişkiler:
- Bire-bir
- Bire-çok
- Bire-bir veya daha fazla
- Bire-sıfır veya bir
- Bire-sınırlı aralık
- Bire-n
Bir sınıf kendisiyle ilişkili ise veya bir sınıfın sistemde birden fazla rolü varsa diğer bir ilişki türü olan kendine dönen (reflexive associations) söz konusudur.
Patron bir elemandır, aynı zamanda kendisi gibi eleman olan birden çok çalışandan sorumludur.
İlişki Çeşitleri
- İçerme (Aggretations)
İçerme bağıntısı, iki sınıf arasındaki "sahiptir" veya "içerir" türünden bağıntıları modellemekte kullanılır. Bu bağıntıda bir sınıfın nesnesi, diğer sınıfın nesnesi tarafından sahiplenilmektedir. Parça ile bütün arasında çok sıkı bir ilişki yoktur ve her bir parça ayrı olarak tek başlarına bir anlam ifade eder. İçerme ilişkisi 'bütün parça' yukarıda olacak şekilde ve 'bütün parça'nın ucuna içi boş elmas gelecek şekilde gösterilir. Örneğin, kumandanın tuş takımı, pil ve ışık lambası gibi parça elemanları vardır ve her bir parça kendi başına işlevsel bir bütünlük taşır.
- Oluşma (Composite)
Parça-bütün ilişkilerini modellemekte kullanılırlar. Bütün nesneler yaratıldığında parçaları da yaratılmalıdır. Bütün ve bütünü oluşturan parçalar arasında sıkı bir ilişki vardır. Oluşma ilişkisi 'bütün parça' yukarda olacak şekilde ve 'bütün parça'nın ucuna içi dolu bir elmas gelecek şekilde gösterilir. Örneğin, bir insan bedeni için kafa, gövde vs. oluşturulması gereken parça nesnelerdir.
Uygulamada oluşma ve içerme bağıntıları kimi durumlarda birbirine karıştırılabilir. Çünkü, oluşma bağıntısı, içerme bağıntısının yalnızca güçlü bir biçimidir. Bir başka deyişle her oluşma bağıntısı aynı zamanda bir içerme bağınıtısıdır. Belirleyici fark ise iki bağıntı türünün nesneleri birbirine bağlama gücü arasındaki farktır.
- Türetme (Inheritance)
Bazı nesnelerin sahip olduğu ortak özellikleri her sınıfta belirtmek yerine ortak özellikler bir sınıfta toplanarak diğer sınıflar ondan türetilebilir. Hatta farklı özellikleri de ekleyerek proje daha etkin hale getirilebilir. Türetme aynı özelliklerin tekrar tekrar yazılamasını engellediği ve gruplamaya yardımcı olduğu için programcılar açısından çok önemlidir.
Örneğin, Hayvan, Memeliler, Sürüngenler, Kuşlar şeklinde sınıfların olduğu düşünülsün. Memeliler, Sürüngenler ve Kuşlar sınıflarının farklı özellikleri olduğu halde hepsinin Hayvan olmasından dolayı birtakım ortak özellikleri vardır. Bu yüzden Memeliler, Sürüngenler ve Kuşlar birer Hayvandır denir. Yani kısacası Memeliler, Sürüngenler ve Kuşlar, Hayvan sınıfından türemiştir ve herbirinin kendine özgü özellikleri vardır denir.
- Arayüz (Interface)
Bazı durumlarda bir sınıf sadece belirli işlemleri yapmak için kullanılır. Herhangi bir sınıfla ilişkisi olmayan ve standart bazı işlemleri yerine getiren sınıfa benzer yapılara arayüz denir. Arayüzlerin özellikleri yoktur. Yalnızca bir takım işleri yerine getirmek için başka sınıflar tarafından kullanılırlar. Örneğin, bir TuşaBasma arayüzü yapılarak istenirse Kumanda sınıfında, istenirse de Klavye sınıfında kullanılabilir.