Objective-C dersinde sınıf kavramı ve nesne modeli hakkında bilgi sahibi olabilirsiniz Bu ders sayesinde, nesneler ve sınıflar arasındaki ilişkileri anlayacak ve bunu uygulamalarınızda kullanabileceksiniz Detaylı bilgi için hemen ziyaret edin!
Objective-C, nesneye dayalı bir programlama dili olarak kabul edilir ve bu dilde sınıflar ve nesneler arasındaki ilişkiler oldukça önemlidir. Sınıf kavramı, objelerin oluşturulması, kullanımı ve özelliklerinin belirlenmesi açısından büyük önem taşır. Sınıflar, objelerin ana planlarının yapılandırılmasını sağlar ve objelerin oluşturulmasına izin verirler.
Sınıf kavramı, nesneye dayalı programlamada temel bir yapı taşıdır. Sınıf, bir veya daha fazla nesnenin tasarımını ve özelliklerini belirler. Herhangi bir sınıfın nitelikleri, sınıfta tanımlanır ve nesneler bu özellikleri kullanabilirler.
Objective-C'de sınıf, @interface ile başlayan bir deklarasyonla tanımlanır. Bu deklarasyon, sınıfın üyelerini (property) belirler. Sınıf dışında, @implementation anahtar sözcüğü ile sınıfın işlevselliğini tanımlarız. Bu şekilde oluşturulan sınıflar, Objective-C programcıları tarafından yeniden kullanılabilir kod blokları haline getirilir.
Objeler ve Nesne Modeli
Objective-C çalışmalarında sıkça kullanılan nesne modeli, objelerin görevlerini ve birbirleriyle olan ilişkilerini belirleyen bir yapıdır. İşlevsel olmasının yanında, nesne modeli sayesinde kodlama işlemleri daha anlaşılır ve yönetilebilir hale getirilir. Objeler, nesne modelinde yaratılır ve birbirleriyle olan ilişkileri çeşitli yollarla belirlenir. Bu belirlemeler sırasında objelerin birbirleriyle olan etkileşimleri de belirlenir.
Nesne modelleme işlemleri sırasında objelerin rolleri belirlenir. Bir objenin temel işlevleri arasında veri tutma ve veri işleme gibi noktalar yer alır. Nesne modellemesi ile birbirleriyle ilişkili objeler oluşturulabilir. Bu sayede objeler arasındaki bağlantılar, veri aktarımı, fonksiyonel bağlantılar vb. işlemler de daha kolay bir şekilde gerçekleştirilebilir. Nesne modellemesi açısından en önemli unsurlardan biri de türlerdir. Nesne tiplerine ve fonksiyonlara göre sınıflar belirlenir ve bu sınıflar birbirleri arasında hierarşik bir yapı oluşturur.
Objelerin Oluşturulması
Objective-C dilinde, objeler temelde sınıflar tarafından tanımlanır. Bu nedenle, bir objeyi oluşturmak için öncelikle sınıfın tanımlanması gerekir. Sınıflar tanımlandıktan sonra, sınıftan bir obje örneği oluşturulabilir. Objelerin örneklenmesi (\textit{instantiation}) genellikle aşağıdaki sözdizimi ile yapılır:
ClassName *myObject = [[ClassName alloc] init]; |
Bu kod, ClassName sınıfından bir obje örneği oluşturur. \textit{alloc} ve \textit{init} metodları, Objective-C dilinde örnek oluşturma işlemlerini gerçekleştiren standart metotlardır.
Bir objenin özellikleri, objenin olan niteliklerine (property) atanarak belirlenir. Bu nitelikler, sınıf tanımlaması içinde belirlenir ve obje örneği oluşturulduğunda kullanılabilir hale gelirler.
Aşağıdaki örnekte, \textit{firstName} ve \textit{lastName} nitelikleri, \b{Person} sınıfı için tanımlanmıştır:
@interface Person : NSObject |
Bu sınıftan bir obje örneği oluşturmak için, örnekleme işlemi sonrasında niteliklere değer atamak gereklidir. Örneğin:
// Person sınıfından bir obje örneği oluştur |
Bir objenin nitelikleri, dot notation olarak adlandırılan sözdizimi kullanılarak okunabilir veya değiştirilebilir. Örneğin:
NSLog(@"First name: %@", person.firstName); |
Örnekleme işlemi sırasında, objenin RAM'deki konumu tahsis edilir ve obje, kod tarafından el ile serbest bırakılmadığı sürece hafızada kalır. Objelerin otomatik olarak serbest bırakılması (garbage collection), Objective-C dilinde desteklenmez. Bu nedenle, objeler için hafıza yönetimi genellikle manuel olarak yapılır.
Objelerin Nitelikleri
Objective-C’de objelerin özelliklerini belirlemek için nitelikler (property) kavramı kullanılır. Niteliğin tanımı sınıf türü ve isimlendirmesi ile yapılır. Örneğin, “@property (nonatomic, strong) NSString *name;” şeklinde bir nitelik tanımı yapılabilir. Bu örnek, bir Objective-C sınıfında adı “name” olan ve tipi NSString olan bir nitelik tanımlamanın örneğidir.
Bir niteliği Objective-C’de tanımlamak, onunla çalışmayı mümkün kılmaktır. Niteliklerin kullanımı objelerin özelliklerine erişmek için gereklidir. Örneğin oluşturulan bir öğrenci nesnesine ad ve soyad nitelikleri atandığında, bu niteliklere, öğrencinin adını ve soyadını görmek istediğimiz zaman erişebiliriz.
Nitelik Adı | Veri Tipi | Açıklama |
---|---|---|
ad | NSString | Öğrencinin adını tutar. |
soyad | NSString | Öğrencinin soyadını tutar. |
yas | NSInteger | Öğrencinin yaşı bilgisini tutar. |
- Bir niteliğin oluşturulmasında veri tipi belirtmek önemlidir. Bu sayede, Objective-C dilinde desteklenen tüm tipler kullanılabilir ve gereksiz tiplerden kaçınılır.
- Bir nitelik oluşturulduğunda, “strong” tipinden başlayarak birçok seçeneği belirlemek mümkündür. Bu seçenekler; strong, weak, retain, copy ve assign'dir.
- ”nonatomic” niteliği, bir niteliğin çoklu iş parçaları tarafından birlikte kullanıldığı bir senaryoda, iş parçaları arasında senkronizasyonu sağlamak için kullanılır. Bu sayede, senaryoda meydana gelebilecek hatalar minimize edilir.
Nitelikler aynı zamanda özelliklerinde otomatik bir şekilde oluşturulmasını sağlayan “synthesized property” kavramı ile de tanımlanabilir. Bu yöntemle birlikte, Objective-C derleyicisi bu otomatik oluşturma işlemini yerine getirerek kod yazma süresini kısaltır.
Nitelikler aynı zamanda read-only (sadece okunur) veya read-write (hem okunabilir hem yazılabilir) olarak da tanımlanabilir. Bu sayede, özelliklerin objelerin içinde değiştirilebilir veya sadece okunabilir hale getirilebilir.
Kapsülleme
Kapsülleme, nesne modelindeki objelerin hassas niteliklerine erişimi kontrol altında tutmak için kullanılan bir kavramdır. Bu sayede objelerin içindeki özelliklerin yanlışlıkla değiştirilmesi önlenir ve bu özelliklere sadece belirli metotlar yardımıyla erişilir.
Objective-C'de kapsülleme için "property" adı verilen özellikler kullanılır. Bu özellikler, public, protected ve private olarak belirlenebilir. Public olarak tanımlanan özelliklere herkes erişebilirken, protected ve private olarak tanımlanan özelliklere sadece sınıfın içindeki metotlar erişebilir.
Aşağıdaki tablo, property tanımlamalarında kullanılan erişim belirleyicilerini ve kullanımlarını göstermektedir.
Erişim Belirleyici | Özellik Açıklaması |
---|---|
public | Herkese açık özellik |
protected | Sadece sınıfın kendisi ve türetilen sınıflar tarafından erişilebilir özellik |
private | Sadece sınıf içinde metotlar tarafından erişilebilir özellik |
Kapsülleme sayesinde objelerin hassas özellikleri, sadece belirli metotlar tarafından erişilebilir ve değiştirilebilir. Bu da objelerin doğru şekilde çalışmasını sağlar ve hataların oluşmasını önler.
Miras
Miras, Object-Oriented Programming (OOP) yönteminde temel kavramlardan biridir. Bu konseptte, bir obje bir başka objeden türemektedir. Yeni obje, üst objenin özelliklerine sahip olur ve ek özellikler ekleyebilir, ayrıca üst objenin özelliklerini değiştirebilir.
Miras, Objective-C dilinde de kullanılan bir yöntemdir. Burada, bir üst sınıf ve ondan türeyen alt sınıflar oluşturulur. Alt sınıflar, üst sınıfın sahip olduğu özelliklerin bir bölümünü veya tamamını devralır. Bu sayede, kodlama açısından çok daha az tekrarlamalar yapılarak, daha temiz ve düzenli bir kodlama yapısı elde edilebilir.
- Bir sınıf miras aldığında, alt sınıfın özellikleri üst sınıfın davranışlarını sürdürür.
- Bu sayede, kodlama açısından çok daha az tekrarlamalar yapılarak, daha temiz ve düzenli bir kodlama yapısı elde edilebilir.
- Miras ile, alt sınıftaki herhangi bir özellik değiştiğinde, üst sınıf ve türetilmiş tüm sınıflar otomatik olarak güncellenir.
Bir örnek vermek gerekirse; insanların birçok ortak özelliği vardır, örneğin sahip oldukları temel organlar. Ancak, her insan farklı boyutta, ağırlıkta ve renkte olabilir. Bu durumda, insan sınıfı üst sınıf olarak alınabilir ve ardından farklı insan grupları alt sınıflar olarak modellenebilir.
Bu şekilde, her bir alt sınıfın özelliklerini tek tek tanımlamak yerine, üst sınıfın özelliklerinin bir kısmını devralabilir ve daha özelleştirilmiş bir yapı elde edilebilir. Miras, kodlama işlemlerinin daha hızlı bir şekilde yapılmasını ve daha iyi bir yapı oluşturulmasını sağlar.
Objelerin Davranışları
Objective-C'deki objelerin işlevleri, metotlar vasıtasıyla ifade edilir ve bu metotlar, obje içinde bulunur. Metotlar, aynı zamanda sınıfların da bir parçasıdır ve bir objeye özgü değildirler. Bunlar, belirli bir objenin hareketlerini kontrol etme ve yönlendirme yolu olarak kullanılır.
Metotlar, Objective-C'de birkaç farklı şekilde tanımlanabilir. Temel olarak, bir metot iki ana bölümden oluşur: imza ve gövde. Metotların imzaları, objeye ne tür argümanlar vereceğimizi ve bunların ne tür sonuçlar getirebileceğini söylerken, gövde, metotun gerçek işlevselliğini tanımlar.
Bir metot tanımlandıktan sonra, obje üzerinden kullanılabilir. Bunun için, metot adı obje üzerinde sözcük olarak kullanılır ve bu, metot tarafından manipüle edilecek objenin adını içerir. Bunun yanı sıra, parantezler içinde argümanlar tanımlanır. Bu argümanlar, metotun işlevini yerine getirmek için gereken değişkenlerdir.
Bazı metotlar, geri dönüş değerleri üretir ve bu değerler, çağrıldığı yerde kullanılır. Bir metot, geri döndürülebilecek bir şey olmayabilir ve bu durumda fonksiyon, sadece belirli bir işlevi yerine getirir.
Metotların kullanımında temel amaç, objelerin uygun bir şekilde çalışmasını sağlamaktır. Doğru kullanıldığında objeler, istenen işlemleri gerçekleştirebilirler. Ancak, yanlış kullandığımızda, program hatalara yol açabilir veya beklenmeyen sonuçlar üretebilir.
Nesne Modelinde UML Kodlama
Nesne modeli kodlaması yaparken kullanılan bir diğer önemli araç da Unified Modelling Language (UML) dir. UML, objeler arasındaki ilişkileri, yapıları, süreçleri ve davranışları görselleştirmek için kullanılan bir standarttır. Bu sayede, objelerin birbirleriyle olan ilişkileri ve işleyişleri daha net gösterilebilir.
UML, birçok farklı şekil, sembol ve kavramlar içerir. Bu semboller sayesinde, objelerin nitelikleri, metotları, birbirleriyle olan ilişkileri gibi detaylar açıkça ifade edilebilir. Bunun yanı sıra, UML sayesinde, farklı senaryoların da modellenmesi mümkündür.
UML ile bir model oluşturulurken, daha önce ele alınan sınıf, obje, nitelik ve metot gibi konuları da göz önünde bulundurmak gerekir. Modeller, genellikle sınıf diyagramları, durum (state), etkinlik (activity), içerik (deployment) gibi farklı tiplerde yapılabilir. Günümüzde, birçok yazılım geliştirme aracında, UML desteği bulunmaktadır. Bu sayede, kodlama sırasında modellerin daha kolay takip edilmesi, farklı senaryoların düşünülmesi ve gerektiği yerlerde değişikliklerin yapılması mümkündür.