Objective-C Sınıf Kavramı ve Nesne Modeli Nedir?

Objective-C Sınıf Kavramı ve Nesne Modeli Nedir?

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 Sınıf Kavramı ve Nesne Modeli Nedir?

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

@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;

@end

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
Person *person = [[Person alloc] init];

// firstName ve lastName niteliklerine değer atama
person.firstName = @"John";
person.lastName = @"Doe";

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);
// Output: First name: John

person.lastName = @"Smith";

Ö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.

Öğrenci Sınıfı Nitelikleri
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.