Buradasın
Java'da Class Diagram Çizimi ve Nesne Tabanlı Programlama Eğitimi
youtube.com/watch?v=G_V9nlvJ44IYapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan Java programlama dili ve nesne tabanlı programlama konularını içeren kapsamlı bir eğitim içeriğidir.
- Video, class diagram'ın ne olduğu, temel bileşenleri ve Draw.io platformu kullanarak nasıl çizileceği ile başlayıp, sınıf ilişkileri (dependency, association, aggregation, composition, kalıtım) konularını detaylı şekilde ele almaktadır. Eğitmen, kullanıcı-oyun, kitap-kişi, doğum belgesi-hesaplayıcı gibi çeşitli örnekler üzerinden UML diyagramlarını göstermekte ve Visual Studio Code'da kısayollar hakkında bilgi vermektedir.
- Video ayrıca class diagram'ın düzgün görünmesi için çalışma alanlarının düzenlenmesi, kırılma noktalarının ayarlanması ve oluşturulan diagram'ın farklı formatlarda (PDF, PNG, JPEG) dışa aktarılması konularını da kapsamaktadır. Bu eğitim, programlama derslerinde class diagram çizimi yapmak isteyenler için faydalı bir kaynak niteliğindedir.
- Class Diagram'ın Önemi
- Bu videoda class diagram'lar ve Draw.io kullanarak nasıl class diagram çizileceği anlatılacak.
- Class diagram'lar, birden fazla paket kullanıldığında ve sınıflar birbirleri arasında ilişki kurduğunda sistemli bir şekilde ilerlemek için gereklidir.
- Class diagram'lar, projenin akışı kararlaştırıldıktan ve kod yazma aşamasına girildiğinde hangi sınıfların yer alacağı ve birbirleri arası ilişkilerin belirlendiği aşamada başvurulan bir diyagramdır.
- 02:22Class Diagram'ın Yapısı
- Class diagram'da tek bir sınıfa karşılık gelen parça bir dikdörtgen içinde gösterilir ve bu sınıfın içerdiği class member'lar (değişkenler) ve metotlar bu dikdörtgen altında yer alır.
- Değişkenlerin dışarıdan ulaşılabiliritesi (+ veya - sembolleriyle gösterilir: public, private, protected veya default).
- Metotlar için hangi parametrelerin ihtiyaç duyulduğu ve return type'ı (dışa döndürdüğü şey) belirtilir.
- 04:42Class Diagram Çizimi
- Class diagram çizmenin birçok yolu vardır; sadece class diagramlara odaklanan programlar ve kod üzerinden class diagram oluşturabilen sistemler bulunmaktadır.
- Genellikle kod yazmadan önce diyagramı oluşturmak daha mantıklıdır, çünkü diyagramı oluşturan kişi genellikle sınıfları oluşturmaz.
- Draw.io, diyagram çizme konusunda başarılı bir araçtır ve farklı başlangıç örnekleri sunar.
- 06:37Draw.io ile Class Diagram Oluşturma
- Draw.io'da farklı başlangıç örnekleri bulunur ve sol tarafta "class" yazarak daha geniş class diagram örnekleri aranabilir.
- Hazır bir diyagram üzerinden başlamak, sol tarafta eklenmiş görsel elemanlardan hangisini kullanacağınızı seçmenize gerek kalmadan doğrudan var olan bir tanesini kopyalayarak kullanmanıza olanak sağlar.
- Konteynerler içindeki ögeleri dışarı çıkarabilir, içine koyabilir, sıralamalarını değiştirebilir ve sürükleyerek taşıyabilirsiniz.
- 09:19Oyun Sınıfı Örneği
- Oyun sınıfı örneğinde private değişkenler (oyun adı ve çıkış yılı) ve get-setter metotları gösterilmiştir.
- Get-setter metotları genellikle private değişkenler için kullanılır ve bir dizi private değişken varsa her biri için getir-setter satırlarını diyagramda göstermek tercih edilmez.
- Get-setter metotları genellikle public'tir, artı sembolü ile gösterilir, metodun adı, parametrelerin isimleri ve return type'ı belirtilir.
- 11:38Klaslar Arası İlişkiler
- Klaslar arasındaki ilişkiler çizgilerle gösterilir ve çizginin türü, şekli ve ucundaki parça o ilişkinin ne olduğunu belirler.
- Kullanıcı klası oyunları bir array olarak kendi içerisinde tutar ve favori oyunlarını ekleyebilir.
- Kitap klasında "serinos" ismi ve ekrana yazdırma metodu bulunurken, kullanıcı için kitap ekleme metodu da mevcuttur.
- 13:09Dependency İlişkisi
- Dependency ilişkisi zayıftan güçlüye doğru ilerler ve bir nesneyi yönetme veya ikinci nesne üzerinde söz sahibi olma durumunu ifade eder.
- Kişi ve kitap örneğinde, kişi kitabı sadece bir yerde klas olarak kullanır, kalıcı olarak tutmaz veya kitap da person tutmaz.
- Bu ilişki hesaplayıcı ile doğum belgesi klasları arasında da mevcuttur.
- 14:25Doğum Belgesi Klası
- Doğum belgesi klası gün, ay ve yıl değerlerini tutacak şekilde oluşturulur.
- Klas içinde get belge no metodu eklenir ve bu metot doğum belgesi numarasını hesaplamak için kullanılır.
- Doğum belgesi numarası doğrudan klas içerisinde değil, hesaplayıcı adlı klasın statik bir metoduna güvenilerek hesaplanır.
- 16:56Hesaplayıcı Klası
- Hesaplayıcı klası içinde sıra no adında bir değişken tutulur ve sıra al metodu bulunur.
- Klas diyagramında metodların ne yaptığı doğrudan belirtilmez, bunun yerine açıklayıcı isimler kullanılır.
- Dependency ilişkisinde biri diğerine bağımlı olduğunda, doğrudan klasına ihtiyaç duyulur.
- 18:56Class Diagram'da Bağımlılık İlişkisi
- Doğum belgesi klasının hesaplayıcıyı kullandığı durumda, kesikli çizgi ve ucunda ok olan bir ilişki kullanılır.
- Draw.io'da elemanlar arası bağlantılar için çizgiler kullanılabilir ve çizgilerin uçları herhangi bir elemana bağlanabilir.
- Bağlantı noktaları, her elemanın genelde üçer tane her yönde bulunur ve çizgilerin bağlantı formatları (diken çizgi, kıvrımlı çizgi) değiştirilebilir.
- 21:48Bağımlılık İlişkisinin Özellikleri
- Yanlış bağlanan çizgiler sağ tıklayarak "ters çevir" seçeneği ile değiştirilebilir.
- Çizgilerin stil menüsünden içi düz veya kesik kenarlı olabilir, kalınlığı ayarlanabilir ve uçlarda farklı oklar kullanılabilir.
- Class diagram örneğinde gerekli yapılar mevcut olduğundan, bunları kopyalayıp kullanmak mümkündür.
- 23:03Hesaplayıcı ve Kullanıcı İlişkisi
- Hesaplayıcı, yeni kullanıcı oluştururken isim, yaş ve hesaplayıcı objesi gönderir.
- Hesaplayıcı sınıfında sıfırdan başlayan bir sıra numarası bulunur ve sıra al metodu ile önce arttırılıp sonra eksiğini alır.
- Kullanıcı sınıfı içerisinde hesaplayıcının dinamik bir metodunu kullanması gerekir çünkü birden fazla hesaplayıcı olabilir ve her birinin sıra numarası farklı olabilir.
- 24:46Kullanıcı Sınıfı ve Constructor
- Kullanıcı sınıfı içerisinde isim (string) ve yaş (integer) parametreleri bulunur.
- Constructor, class diagram'da metotlar grubunun en başında yer alır ve başına artı sembolü koymadan yazılabilir.
- Kullanıcı sınıfı içerisinde hesaplayıcı değişkeni tutulmaz, sadece hesaplayıcının sıra numarası integer olarak tutulur.
- 29:05İçerme İlişkisi
- İçerme ilişkisinde, bir nesnenin içerisinde başka bir nesne bulunur ve bu ilişki aradaki bağlılığın gücü artarak gider.
- İçerme ilişkisinde, bir kişinin içerisinde kitaplardan oluşan bir array bulunabilir ve bir kitap birden fazla kişiye ait olabilir.
- İçerme ilişkisinde, iki tarafta yıldız sembolü kullanıldığında çok sayıda kişinin aynı kitaba sahip olabileceği veya aynı kişinin çok sayıda kitaba sahip olabileceği belirtilir.
- 30:39Kullanıcı ve Oyun İlişkisi
- Kullanıcı sınıfı içerisinde favori oyunlar array'i bulunur ve kullanıcılar belli sayıda oyunu favori oyunları olarak tutabilir.
- Kullanıcı sınıfı içerisinde birden fazla favori oyun olabilir ve bir oyun birden fazla kullanıcının favorisi olabilir.
- Kullanıcı ve oyun arasındaki ilişki, kullanıcı tarafından oyun seçildiğinde mevcut oyunlardan bir tanesinin kullanıcı ereğine eklenmesiyle gerçekleşir.
- 32:50Kullanıcı ve Oyun Arasındaki İlişki
- Kullanıcı ile oyun arasında bağlantı oluşturmak için çizgiler kullanılır ve çizgilerin üst üste geçmemesi tercih edilir.
- Çizgileri seçtiğimizde taşıyabileceğimiz kontrol noktaları görünür ve bu noktalar üzerinden daha rahat konumlandırma yapılabilir.
- Kullanıcının içinde oyun barındırıldığı bilgisi, çizgiye çift tıklayarak yıldız sembolü ekleyerek gösterilir.
- 34:57Kullanıcı ve Favori Oyunlar İlişkisi
- Kullanıcının içerisindeki favori oyunları bir array olarak barındırdığı bilgisi, class member olarak gösterilmelidir.
- Array değişkenin kendi adıyla değil, türüyle ilgili olduğu için "Oyun array" şeklinde belirtilmelidir.
- Aradaki çizgi, kullanıcı sınıfının hangi class'lara ait olduğunu gösterir ve uzaktan bakıldığında bu bilgiyi paylaşmak için önemlidir.
- 36:54By Directional Association İlişkisi
- By directional association durumunda iki tarafta birbirine referans tutulur, örneğin kitapların sahiplerini de tutarlar.
- Bir kitabın birden fazla sahibi olabilir ve bir kişi birden fazla kitaba sahip olabilir.
- Visual Studio Code'da sınıf adı yazıldığında otomatik olarak get ve set metotları oluşturulur.
- 38:13Sınıf ve Kullanıcı İlişkisi
- Bir sınıfın içinde barınan kullanıcılar (öğrenciler) ve kullanıcı sayısı tutulur.
- Bir sınıfa kullanıcı ekleme metodu çağrıldığında, kullanıcı da kendini bu sınıfa ekler.
- Her kullanıcı tek bir sınıfa gidebilir, bu nedenle bir sınıf array tutmak yerine tek bir sınıf bilgisi tutar.
- 40:12Sınıftan Çıkarma İşlemi
- Sınıftan çıkar metodu, gelen kullanıcı eğer bu sınıfa aitse, kullanıcı sayısını bir azaltıp array'deki mevcut kullanıcıyı bulunan indeksten sonraki elemanları sola kaydırır.
- Sistemde her kullanıcı için tek bir obje oluşturulur, bu nedenle doğrudan objenin eşitliği üzerinden kontrol yapılır.
- Kullanıcı sayısını bir azalttıktan sonra, array'in dışına çıkmamak için j+1 yerine j+9 kullanılır.
- 44:19Bir'e Çok İlişkisi
- Bir sınıf birden fazla kullanıcıyı barındırabilir, bu durumda bir sınıf tarafında yıldız, kullanıcı tarafında bir yer alır.
- Bir'e çok ilişkisi varsa, erey olarak duran tarafta bir yer almalıdır.
- İki taraf çoka çok veya bire bir olabilir, yıldız ve bir ilişkisi olduğunda bir olan taraf yanına bir yazılan taraf ereyi bulunduran tarafta olmalıdır.
- 46:56Aggregation İlişkisi
- Aggregation, sahiplik ilişkisini ifade eder ve obje sadece bir sınıfa eklenmiş gibi düşünülür.
- Aggregation durumunda, kitap belli bir klasın içerisinde bir değişken olarak, bir klasmanber olarak, ona ait bir parça olarak yer alır.
- Aggregation'da iki taraf da birbirine referans sahibi olabilir, ancak kitap objesi sadece person'da bulunacak ve person oluşturulunca objenin yaşam süresi boyunca onun içinde yer alır.
- 50:09Aggregation'ın Zayıf ve Güçlü Hali
- Aggregation'ın zayıf hali, person'ı silersek kitap silinmek zorunda değil, ancak sahipsiz olarak değiştirilecektir.
- Aggregation'ın güçlü hali, taraflardan biri diğerine sahip olup, içinde tutan tarafı silecek olursak, sahip olunan nesne üzerinde de bir işlem yapmamız şarttır.
- İki taraflı bir ilişki söz konusuysa, biri diğerlerini tutuyor, diğeri diğerlerini tutuyor; ancak düz çizgiyle gösterilen ilişki daha zayıf bir ilişkiyi ifade eder.
- 53:48Aggregation Örneği
- Kitap sınıfı seri no'su ve ismi gibi özelliklere sahiptir.
- Kullanıcı kitaba sahip olduğunda, sahiplik bildiren sembol kullanıcı tarafında yer almalıdır.
- Sembolün hangi tarafta yer aldığı önemli bir şeydir; sembol bulunduran şekillerde, sembolün hangi tarafta yer aldığı önemli bir şeydir.
- 55:12Kullanıcı ve Kitap İlişkisi
- Kullanıcı birden fazla kitaba sahip olabilir ve bu kitaplar bir array içerisinde tutulabilir.
- Kullanıcı ile kitap arasındaki ilişki, bir tarafın en az bir tane veya istediği kadar kitap sahibi olabileceği şekilde gösterilebilir.
- Kullanıcı bir kitabın en fazla on tane sahibi olabilir, bu durumda yıldız işareti kullanılarak sınırsız sayıda kitap sahibi olabileceği belirtilir.
- 58:26Composition İlişkisi
- Composition ilişkisinde, diğer klasın objesi sadece sahip olan class varken anlamlı olur ve o class silindiğinde diğerini de siler.
- Kullanıcı içerisinde tutulan doğum belgesi, composition ilişkisine örnektir çünkü bir doğum belgesi birden fazla class'a ait olamaz.
- Doğum belgesi, kullanıcı silindiğinde de silinir çünkü private olarak constructor ile oluşturulur ve dışarıya verilmez.
- 1:03:09Kalıtım Yapısı
- Java'da extend ederek karşımıza çıkan kalıtım yapısında, tepedeki parent class'ın sub class'ları hem değişkenlerini hem de metotlarını alır ve üzerine ekler.
- Bir class başka bir klası extend ettikten sonra üzerine bir şey eklemiyorsa, aslında bir tür belirlemesidir.
- Kitap class'ının ciltli kitap ve elektronik kitap olarak iki farklı class'ı vardır; ciltli kitap cilt node ekstradan tutarken, elektronik kitap link adı ve link al metodu gibi farklı özellikler içerir.
- 1:05:58Kitap Sınıfları ve İlişkileri
- Ciltli kitap ve elektronik kitap sınıfları oluşturulmuş, elektronik kitap elektrik çarpar metoduna sahip.
- Kitap sınıfları arasında ilişki gösterimi için içi boş üçgen ok kullanılıyor, ok başı parent class'tan sub class'a doğru bakıyor.
- Elektronik kitap da ciltli kitap gibi bir çocuk sınıf olarak gösterilebilir ve ok başı bu tarafta yer aldığı sürece ilişki anlaşılır.
- 1:08:45Interface İlişkileri
- Extend etmek yerine bir interface'i implant etmek (realization) ilişkisi kesikli çizgilerle gösterilir ve interface'in tepesine "interface" yazılır.
- "Yazdırılabilir" interface'i, implement eden class'ların içerisinde konsola yazdır metodunu bulundurmasını garanti eder.
- Interface'ler değişken bulundurmaz, sadece metotlar içerir ve bu metotların türleri belirtilir.
- 1:11:12Diyagram Tasarımı ve Özellikleri
- Diyagram konteynerleri açılıp kapanabilir durumda ve kendi tasarımımız var.
- Konteynerlerin üst kısmı ayrı bir alan olarak tasarlanabilir ve gerektiğinde yukarı aşağı taşınabilir.
- Interface'ler kesikli çizgilerle gösterilir ve implement eden class'lar düz çizgilerle bağlanır.
- 1:14:21İlişki Gösteriminde Dikkat Edilmesi Gerekenler
- Çizgilerin birleştiği noktalarda sayı varsa, hangi çizgiye ait olduğu kafada karışıklık bırakmayacak şekilde yerleşim olması önemlidir.
- Kesikli çizgi ve düz çizgi birleşimi için ayrım yapılması gerekir, tek bir başlıkta birleşen çizgiler için sayı yer alıyorsa ikisi için de geçerlidir.
- Extend şeklinde bir ilişki yoksa (interface implemente ediliyorsa) veya generalization/realization ise sayı yer almaz.
- 1:16:12Çizim Düzenleme ve Bağlantılar
- Çizimde düzgün görünmesi için önce kare formata yakın bir şekilde dizmek ve tek bir çalışma alanının içerisinde kalacak biçimde düzenlemek önemlidir.
- Bağlantıları doğru şekilde yapmak gerekir, örneğin doğum belgesi satırına alttan değil yandan bağlamak daha mantıklıdır.
- Kırılma noktalarını ayarlayarak çizgileri düz hizalayarak en az kırılma noktasıyla bağlantı işlemini yapabilirsiniz.
- 1:17:51Dosya Dışa Aktarma
- Çizimi Draw.io ile uyumlu bir şekilde kaydederken, masaüstü versiyonu yüklüyse dosya açılabilir hale gelir.
- Görsel olarak dışa aktarma için PDF formatı vektör grafik içerdiği için farklı boyutlarda çıktı almaya uygun olup, dokümanın içerisine link olarak eklenebilir.
- Resim olarak dışa aktarırken PNG formatı daha büyük olup sıkıştırılmamış grafik içerdiği için tercih edilebilir, ancak yakınlaştırma oranını 300-500 civarında ayarlamak daha iyi olur.
- 1:20:10Çizim Araçları ve Kaynaklar
- Class diagram veya ML ailesi farklı versiyonları ve varyasyonları olabilen bir ailedir.
- Çizim dosyası ve Draw.io linki paylaşılacaktır.
- Draw.io'ya "draw.io" yazarak veya "app diagrams.net" üzerinden ulaşılabilir.