Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

1

Accessors, bir nesnenin durumunu değiştirmeyen yöntemlerdir. Bu yöntemler, nesnenin iç durumunu


sorgulamak veya erişmek için kullanılır, ancak nesnenin durumunu değiştirmezler. Örneğin, bir sınıfın bir
alanının değerini döndüren bir getter yöntemi bir accessor'dür.

Mutators ise bir nesnenin durumunu değiştirebilen yöntemlerdir. Bu yöntemler, nesnenin iç durumunu
değiştirebilir, güncelleyebilir veya değişiklik yapabilir. Örneğin, bir sınıfın bir alanının değerini ayarlayan
veya güncelleyen bir setter yöntemi bir mutator'dür.

Bir değişken nesnenin durumunu değiştirebilecek yöntemlere sahipse, o nesne değiştirilebilir (mutable)
olarak adlandırılır. Yani, aynı nesne farklı zamanlarda farklı durumlara sahip olabilir. Örneğin, bir listeye öğe
ekleyebilir veya silebiliriz ve bu liste değişebilir bir nesnedir çünkü içeriği zamanla değişebilir.

Immutable bir nesne, herhangi bir yöntemi tarafından asla değiştirilemeyen bir nesnedir, yani hiçbir mutator'a
sahip olmayan bir nesnedir. Bu nesnelerin durumu sabit kalır ve hiçbir yöntemleri nesnenin durumunu
değiştirmez. Örneğin, Python'daki tuple ve string gibi veri tipleri, bir kez oluşturulduktan sonra
değiştirilemezler.

Immutable nesnelerin durumu değişmez, yani bir kez oluşturulduktan sonra içeriği değiştirilemez. Bu
nedenle, bir kez oluşturulan bir immutable nesne, programın çalışma süresi boyunca aynı kalır.
Nesneler genellikle değiştirilebilir (mutable) olarak tanımlanır, çünkü çoğu programlama dili mutable veri
tipleri üzerine kurulmuştur ve nesnelerin durumunu güncellemek genellikle önemlidir. Ancak, immutable
nesnelerin de bazı avantajları vardır. Örneğin, bir immutable nesne birden çok iş parçacığı tarafından aynı
anda kullanılabilir, çünkü durumu değişmez ve senkronizasyon sorunları oluşmaz. Ayrıca, immutable
nesneler referans bütünlüğü sağlar, yani bir nesnenin durumunun değiştirilmesi diğer nesneleri etkilemez. Bu,
hata ayıklama ve kodun anlaşılmasını kolaylaştırır.

Bu açıklama, bir sınıfın yapısını ve özelliklerini tanımlar ve sınıfın nasıl kullanılacağını belirtir:

1. Bir sınıfın tanımladığı alanların (fields) isimleri ve tipleri belirtilir. Alanlar, sınıfın özelliklerini temsil
eder ve her bir örneğin durumunu saklar. Ancak, alanların değerleri sınıf tanımında belirlenmez veya
sabitlenmez. Bu nedenle, her bir örnek (instance) kendi alan değerlerine sahip olabilir.
2. Sınıfın tanımladığı metodların (methods) isimleri, tipleri ve implementasyonları belirtilir. Metodlar,
sınıfın davranışlarını ve işlevlerini tanımlar. Her metodun içindeki işleyiş sınıf tanımında belirlenir ve
belirli bir nesne için sabittir. Bu nedenle, bir nesnenin bir metodunun değerleri değişmez (immutable)
olarak kabul edilir.

Bu tanım, bir sınıfın alanlarının (fields) değerlerinin nesnelerin durumunu temsil ettiğini ve değişebileceğini,
ancak metodların (methods) implementasyonunun sabit olduğunu ve bir nesnenin hayatı boyunca
değişmediğini belirtir. Bu sayede, bir sınıfın kullanımı ve davranışı netleştirilir ve istikrarlı bir şekilde
kullanılabilir.

Unified Modeling Language (Birleşik Modelleme Dili - UML), bir sistemin tasarımını görselleştirmek için
standart bir yol sağlamayı amaçlayan genel amaçlı bir görsel modelleme dilidir.
UML, birçok farklı diyagram türü için standart bir notasyon sunar ve bu diyagramlar genellikle üç ana gruba
ayrılabilir: davranış diyagramları, etkileşim diyagramları ve yapı diyagramları.
Davranış diyagramları, bir sistem veya bileşenlerin nasıl davrandığını ve etkileşime girdiğini gösterir. Bunlar
arasında kullanım senaryosu diyagramları, aktivite diyagramları ve durum makinesi diyagramları bulunur.
Etkileşim diyagramları, sistem bileşenleri arasındaki mesaj alışverişini ve etkileşimi gösterir. Sıra
diyagramları ve işbirliği diyagramları bu kategoriye girer.
Yapı diyagramları, bir sistemin veya bileşenlerinin yapısal bileşenlerini ve ilişkilerini gösterir. Sınıf
diyagramları ve nesne diyagramları bu gruba örnektir.
UML'in oluşturulması, yazılım tasarımına ilişkin farklı notasyon sistemlerini ve yaklaşımlarını standardize
etme isteği ile motive edilmiştir. UML, ilk olarak 1994-1995 yıllarında Rational Software tarafından
geliştirilmiş ve 1996 yılına kadar bu şirket tarafından yönlendirilmiştir. 1997 yılında, UML, Nesne Yönetim
Grubu (Object Management Group - OMG) tarafından bir standart olarak benimsenmiş ve o zamandan beri
bu organizasyon tarafından yönetilmektedir.
Alan Tanımlamaları:[Görünürlük] [Tür] İsim [ [Çokluğu] ] [ =BaşlangıçDeğeri]

Görünürlük (Visibility): Alanın erişim düzeyini belirtir. Bu genellikle "public", "private", "protected"
veya "default" (hiçbir şey belirtilmemişse) olabilir.
Tür (Type): Alanın veri türünü belirtir. Örneğin, "int", "String", "boolean" gibi.
İsim (Name): Alanın adını belirtir. Tanımlamanın gerekli bir parçasıdır.
Çokluğu (Multiplicity): Opsiyonel olarak, alanın birden çok değer içerebileceği belirtilir. Örneğin, "[]"
ifadesi bir diziyi temsil eder.
Başlangıç Değeri (InitialValue): Alanın başlangıç değerini belirtir. Opsiyoneldir.

Metod Tanımlamaları:[Visibility] İsim ( [Parametre, . . . ] ) [:Tür]

Görünürlük (Visibility): Metodun erişim düzeyini belirtir. Yine "public", "private", "protected" veya
"default" olabilir.
İsim (Name): Metodun adını belirtir.
Parametre (Parameter): Metodun aldığı parametreleri belirtir.
Tür (Type): Metodun dönüş değerinin veri türünü belirtir. Örneğin, "int", "String", "boolean" gibi.

visibility

1. Protected: Bu anahtar kelime, bir özelliğin sadece kendi sınıfı, aynı paketteki tüm sınıflar ve alt sınıflar
tarafından erişilebilir olduğunu belirtir.
2. Package (Varsayılan): Bu anahtar kelime, bir özelliğin yalnızca kendi sınıfı ve aynı paketteki tüm
sınıflar tarafından erişilebilir olduğunu belirtir. Eğer bir özellik için herhangi bir görünürlük
belirtilmemişse, varsayılan olarak bu görünürlük atanır.
Packages
Sınıflar genellikle bir pakete gruplanır. Paketler bir hiyerarşi içinde düzenlenebilir. Başka bir deyişle, bir
paket, sınıflar ve alt paketleri içerebilir. Önemli bir nokta ise, aynı paketteki tüm sınıfların yakından ilişkili
olması gerektiğidir.
Paketler, bir Java uygulamasındaki sınıfları mantıklı bir şekilde gruplamak için kullanılır. Benzer işlevlere
sahip sınıflar bir araya getirilerek bir paket içinde organize edilir. Bu, kodun daha iyi yönetilmesine,
bakımının kolaylaşmasına ve yeniden kullanılabilirliğinin artmasına yardımcı olur.
Paketler aynı zamanda bir hiyerarşi oluşturabilir. Bir paket içinde alt paketler oluşturarak daha büyük ölçekli
bir organizasyon sağlanabilir. Bu, büyük projelerde karmaşıklığı azaltmak ve kodun daha iyi
yapılandırılmasını sağlamak için kullanılır.
Ancak, aynı paketteki tüm sınıfların yakından ilişkili olması önemlidir. Bir paketteki sınıflar, genellikle aynı
işlevi yerine getiren veya birbirleriyle yakından ilişkili olan sınıflardır. Bu, kodun anlaşılabilirliğini artırır ve
bir sınıfın başka bir sınıfa olan bağımlılığını netleştirir.

Nesne yönelimli yaklaşımın temel prensiplerinden biri, modülerlik ilkesidir. Bu ilke, büyük ölçekli
sistemlerin karmaşıklığını kontrol etmek için böl ve yönet tekniğini kullanmayı amaçlar.Kohesiyon, bir
modül içindeki varlıkların fonksiyonel ilişkisini ifade eder.Bağlantı, farklı modüller arasındaki karşılıklı
bağımlılığı ifade eder.
Bu prensip, karmaşık yazılım sistemlerini daha kolay yönetilebilir parçalara bölmeyi ve bu parçalar
arasındaki bağlantıyı minimize etmeyi amaçlar. Yüksek kohesiyonlu modüller, benzer işlevlere veya
birbiriyle ilişkili varlıklara sahiptir ve genellikle birbirleriyle sıkı bir şekilde entegre edilmiştir. Gevşek
bağlantılı modüller ise birbirlerinden bağımsız olarak değiştirilebilir veya yeniden kullanılabilir ve
değişiklikler bir modülde diğerlerini etkilemez. Bu sayede, sistem daha esnek, bakımı daha kolay ve genel
olarak daha sağlam hale gelir.

Nesne yönelimli yaklaşımda ise modüller sınıflar ve paketler şeklinde ortaya çıkar.

Abstraksiyon
En saf anlamıyla, abstraksiyon, bir varlığın özünden gereksiz olan özellikleri ayırma işlemidir. Sonuç olarak,
orijinal varlığın gereksiz özelliklerini kaldırarak veya göz ardı ederek elde edilen daha basit ancak yeterince
doğru bir yaklaşımdır. Yazılım geliştirme alanında abstraksiyon prensibi şu şekilde tanımlanabilir:
Bir modülün davranışları veya işlevselliği, modülün sözleşmeli arayüzü olarak bilinen özlü ve kesin bir
açıklama ile karakterize edilmelidir. Başka bir deyişle, sözleşmeli arayüz, modülün davranışının özünü
yakalar. Sözleşmeli arayüz, modülün bir soyutlamasıdır.

EncapsulationBir modülün uygulaması, sözleşmeli arayüzünden ayrılmalı ve modülün müşterilerinden


gizlenmelidir. Bu nedenle, bu prensip aynı zamanda bilgi gizleme olarak da bilinir. Kapsülleme, modüller
arasındaki bağlantıyı azaltmayı amaçlar. Müşterilerin bir modülün uygulaması hakkında ne kadar az bilgi
sahibi olursa, modül ile müşterileri arasındaki bağlantı o kadar gevşek olabilir. Kapsüllemenin önemli bir
faydası, müşterilerin sözleşmeli arayüz dışında hiçbir şey bilmediği sürece, uygulamanın sözleşmeli arayüz
aynı kaldığı sürece değiştirilebileceğidir.
Telefon Servisi: Analog vs. Dijital, Şifreleme

Polimorfizm
Çeşitli farklı hizmet sağlayıcıları, aynı sözleşmeli arayüzü onaylayabilir. Dahası, bu hizmet sağlayıcıları,
müşterileri etkilemeden değiştirilebilir. Müşterileri etkilemeden modülleri dinamik olarak değiştirebilme
yeteneği, polimorfizm olarak bilinir. Analog/dijital çift modlu bir cep telefonu, polimorfizmin bir örneğidir.
Telefonu kullanmak için tek bir sözleşmeli arayüz sağlar, ancak hizmeti sağlamak için iki farklı teknoloji
kullanır.

İlişki (Association)
İlişkiler, sınıflar arasındaki genel ikili ilişkileri temsil eder. İlişki, sınıflar arasındaki çeşitli ilişkileri
modellemek için kullanılabilir ve ilişki, çeşitli farklı yollarla uygulanabilir. Sıklıkla, ilişki içindeki bir veya
her iki sınıfta da diğer sınıfa doğrudan veya dolaylı referanslar bulunur. Bu, sınıflar arasındaki ilişkiyi temsil
eden bir özelliktir. Örneğin, bir "Öğrenci" sınıfı ile bir "Kurs" sınıfı arasında bir ilişki olabilir. Bu ilişki, bir
öğrencinin bir kursa kaydolması veya bir kursun birden çok öğrenciye sahip olması gibi farklı durumları
temsil edebilir. İlişki genellikle okunabilir şekilde gösterilir ve sınıflar arasındaki ilişkiyi açıklar.

İlişkinin grafiksel gösterimi, adı ve yönü olan, kuyruksuz katı bir ok başı ile çizilen isteğe bağlı bir etiketten
oluşabilir. Kursa kaydolma ilişkisindeki ok, "bir öğrencinin bir kursa kaydolduğunu" belirtir, "bir kursun bir
öğrenciye kaydolduğunu" değil.
İlişkinin grafiksel gösterimi ayrıca, ilişkide yer alan sınıflardan herhangi birine takılabilecek isteğe bağlı bir
rol adı ve çoklu belirtimine izin verir. Danışman ve danışan, Fakülte ve Öğrenci ile ilişkilendirilmiş rol
adlarıdır.

Kayıt ilişkisi çoktan çoğa (many-to-many) ilişkidir; yani bir öğrenci herhangi bir sayıda kursa kaydolabilir ve
bir kursun içinde kayıtlı olabilecek öğrenci sayısında herhangi bir kısıtlama yoktur.

Öğretme ilişkisi birer-çok (one-to-many) ilişkidir; yani her kursu öğretecek sadece bir fakülte üyesi vardır,
ancak bir fakülte üyesi herhangi bir sayıda kurs öğretebilir.

Danışman-danışan ilişkisi de birer-çok (one-to-many) ilişkidir; yani her öğrencinin bir danışmanı vardır,
ancak bir danışmanın herhangi bir sayıda danışanı olabilir.

İlişkinin grafiksel gösterimi ayrıca ilişkinin gezilebilirliğini de gösterebilir. Eğer C1 sınıfından C2 sınıfına
doğrudan veya dolaylı bir referans varsa, o zaman C1'den C2'ye gezilebilir. Bir ilişki bir veya her iki yönde
de gezilebilir olabilir. Varsayılan olarak, bir ilişki her iki yönde de gezilebilir olarak kabul edilir. Eğer bir
ilişki yalnızca bir yönde gezilebilir ise, bu durum gezilebilir yöne doğru işaret eden bir gezinme oku ile
açıkça gösterilmelidir. Danışman-danışan ilişkisi sadece bir danışandan bir danışmana doğru gezilebilir,
danışmandan danışanlara doğru değil.
Aggregation ve Kompozisyon
Aggregation, bir ilişkinin özel bir biçimidir. Has-a veya parça-bütün ilişkisini temsil eder. Aggregation,
basitçe bütünü, yani toplam sınıfı, parçalardan, yani bileşen sınıflardan ayıran yapısal bir ilişkidir.
Aggregation, toplamın ve bileşenlerin yaşam süresi boyunca herhangi bir ilişkiyi ima etmez.
Aggregation'ın daha güçlü bir biçimi olan kompozisyon, bileşen sınıfın toplam sınıf tarafından münhasıran
sahiplenildiği anlamına gelir. Kompozisyon altında, bileşenlerin yaşam süresi tamamen toplamın yaşam
süresi içine dahil edilir.

Sınıf diyagramlarında, birleşim (aggregation), toplam sınıfın sonunda boş bir elmas işareti ile gösterilir.
Kompozisyon ilişkisi ise doldurulmuş bir elmas işareti ile gösterilir; bkz. Şekil 2.6. Ayrıca, birleşim elması
işareti yalnızca bağlantının bir ucunda görünebilir. Birleşim, bir ilişkinin özel bir biçimi olduğu için, ilişki
adları, çokluluk ve gezinme hakkındaki tartışmalar da birleşim için geçerlidir.
Bağımlılık-dependency
Bağımlılık, bir varlığın uygun işleyişi diğer varlığın varlığına bağlı olduğu ve bir varlıkta yapılan
değişikliklerin diğer varlığı etkileyeceği bir ilişkidir. Sınıflar arasındaki yaygın bir bağımlılık biçimi, sınıflar
arasındaki kullanım ilişkisidir. Başka bir deyişle, sınıf C1, yöntemlerinin parametreleri, yerel değişkenleri
veya dönüş türleri gibi yerlerde C2'yi kullanıyorsa, C1 sınıfı C2 sınıfına bağımlıdır. Bağımlılık ilişkileri için
grafiksel gösterim, bağımlılık yönüne işaret eden kesikli bir çizgidir.

Şekil 2.9'da gösterilen sınıf diyagramı, bağımlılık ilişkisini göstermektedir.Kayıt sınıfı, ders programlarına
ders eklemek ve çıkarmak için bir dizi yönteme sahiptir ve kurslara öğrenci kaydettirip ve öğrencileri
kurslardan çıkarmak için bir dizi yönteme sahiptir.Bu yöntemler, CourseSchedule, Course ve Student
sınıflarının örneklerini içeren parametreleri alır.Bu nedenle, Kayıt sınıfı, CourseSchedule, Course ve Student
sınıflarını kullanır, yani bağımlıdır.

You might also like