Objective-C Sınıfları ve Nesneleri
Objective-C programlama dilinin temel amacı, C programlama diline nesne yönelimi eklemektir ve sınıflar, nesne yönelimli programlamayı destekleyen ve genellikle kullanıcı tanımlı türler olarak adlandırılan Objective-C'nin temel özelliğidir.
Sınıf, bir nesnenin biçimini belirtmek için kullanılır ve veri gösterimini ve bu verileri tek bir düzgün pakette işlemek için yöntemleri birleştirir. Bir sınıf içindeki veriler ve yöntemler, sınıfın üyeleri olarak adlandırılır.
Amaç-C Karakteristiği
Sınıf, iki farklı bölümde tanımlanmıştır: @interface ve @implementation.
Neredeyse her şey nesneler biçimindedir.
Nesneler mesaj alır ve nesneler genellikle alıcı olarak adlandırılır.
Nesneler, örnek değişkenleri içerir.
Nesnelerin ve örnek değişkenlerinin kapsamı vardır.
Sınıflar bir nesnenin uygulamasını gizler.
Özellikler, diğer sınıflardaki sınıf örneği değişkenlerine erişim sağlamak için kullanılır.
Objective-C Sınıfı Tanımları
Bir sınıf tanımladığınızda, bir veri türü için bir plan tanımlarsınız. Bu aslında herhangi bir veriyi tanımlamaz, ancak sınıf adının ne anlama geldiğini, yani sınıfın bir nesnesinin ne içereceğini ve böyle bir nesne üzerinde hangi işlemlerin gerçekleştirilebileceğini tanımlar.
Bir sınıf tanımı, anahtar kelimeyle başlar @interfaceardından arayüz (sınıf) adı; ve bir çift kaşlı ayraç içine alınmış sınıf gövdesi. Objective-C'de, tüm sınıflar adı verilen temel sınıftan türetilir.NSObject. Tüm Objective-C sınıflarının üst sınıfıdır. Bellek ayırma ve başlatma gibi temel yöntemler sağlar. Örneğin, Box veri türünü anahtar sözcüğünü kullanarak tanımladıkclass aşağıdaki gibi -
@interface Box:NSObject {
//Instance variables
double length; // Length of a box
double breadth; // Breadth of a box
}
@property(nonatomic, readwrite) double height; // Property
@end
Örnek değişkenleri özeldir ve yalnızca sınıf uygulamasından erişilebilir.
Objective-C Nesnelerini Tahsis Etme ve Başlatma
Bir sınıf, nesnelerin planlarını sağlar, bu nedenle temelde bir sınıftan bir nesne oluşturulur. Bir sınıfın nesnelerini, temel türlerdeki değişkenleri tanımladığımızla tam olarak aynı türden bildirimlerle bildiririz. Aşağıdaki ifadeler Box sınıfının iki nesnesini bildirir -
Box box1 = [[Box alloc]init]; // Create box1 object of type Box
Box box2 = [[Box alloc]init]; // Create box2 object of type Box
Hem kutu1 hem de kutu2 nesnelerinin kendi veri üyeleri kopyası olacaktır.
Veri Üyelerine Erişim
Bir sınıfın nesnelerinin özelliklerine doğrudan üye erişim operatörü (.) Kullanılarak erişilebilir. İşleri netleştirmek için aşağıdaki örneği deneyelim -
#import <Foundation/Foundation.h>
@interface Box:NSObject {
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
}
@property(nonatomic, readwrite) double height; // Property
-(double) volume;
@end
@implementation Box
@synthesize height;
-(id)init {
self = [super init];
length = 1.0;
breadth = 1.0;
return self;
}
-(double) volume {
return length*breadth*height;
}
@end
int main() {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Box *box1 = [[Box alloc]init]; // Create box1 object of type Box
Box *box2 = [[Box alloc]init]; // Create box2 object of type Box
double volume = 0.0; // Store the volume of a box here
// box 1 specification
box1.height = 5.0;
// box 2 specification
box2.height = 10.0;
// volume of box 1
volume = [box1 volume];
NSLog(@"Volume of Box1 : %f", volume);
// volume of box 2
volume = [box2 volume];
NSLog(@"Volume of Box2 : %f", volume);
[pool drain];
return 0;
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
2013-09-22 21:25:33.314 ClassAndObjects[387:303] Volume of Box1 : 5.000000
2013-09-22 21:25:33.316 ClassAndObjects[387:303] Volume of Box2 : 10.000000
Özellikleri
Özellikler, sınıfın örnek değişkenine sınıfın dışından erişilebilmesini sağlamak için Objective-C'de tanıtılmıştır.
Mülkiyet beyannamesinin çeşitli bölümleri aşağıdaki gibidir.Özellikler ile başlar @property, bir anahtar kelime olan
Bunu atomik olmayan veya atomik, salt okunur veya salt okunur ve güçlü, güvenli olmayan, korunmayan veya zayıf erişim tanımlayıcıları izler. Bu, değişkenin türüne göre değişir. Herhangi bir işaretçi türü için güçlü, güvensiz_ tutulmamış veya zayıf kullanabiliriz. Benzer şekilde diğer türler için okuma-yazma veya salt okunur kullanabiliriz.
Bunu, değişkenin veri türü takip eder.
Son olarak, özellik adını noktalı virgülle sonlandırdık.
Uygulama sınıfına synthesize ifadesi ekleyebiliriz. Ancak en son XCode'da, sentez kısmı XCode tarafından halledilir ve sentezleme ifadesini eklemenize gerek yoktur.
Sınıfın örnek değişkenlerine yalnızca özelliklerle erişebiliriz. Aslında, özellikler için dahili olarak alıcı ve ayarlayıcı yöntemler oluşturulur.
Örneğin, bir mülkümüz olduğunu varsayalım @property (nonatomic ,readonly ) BOOL isDone. Kaputun altında, aşağıda gösterildiği gibi oluşturulmuş ayarlayıcılar ve alıcılar vardır.
-(void)setIsDone(BOOL)isDone;
-(BOOL)isDone;