Kelas & Objek Objective-C
Tujuan utama dari bahasa pemrograman Objective-C adalah untuk menambahkan orientasi objek ke bahasa pemrograman C dan kelas-kelas adalah fitur utama dari Objective-C yang mendukung pemrograman berorientasi objek dan sering disebut tipe yang ditentukan pengguna.
Kelas digunakan untuk menentukan bentuk objek dan menggabungkan representasi data dan metode untuk memanipulasi data ke dalam satu paket yang rapi. Data dan metode di dalam kelas disebut anggota kelas.
Karakteristik Objective-C
Kelas didefinisikan dalam dua bagian berbeda yaitu @interface dan @implementation.
Hampir semuanya berbentuk benda.
Objek menerima pesan dan objek sering disebut sebagai penerima.
Objek berisi variabel instan.
Objek dan variabel instance memiliki ruang lingkup.
Kelas menyembunyikan implementasi objek.
Properti digunakan untuk menyediakan akses ke variabel instance kelas di kelas lain.
Definisi Kelas Objective-C
Saat Anda menentukan kelas, Anda menentukan cetak biru untuk tipe data. Ini tidak benar-benar mendefinisikan data apa pun, tetapi itu menentukan apa arti nama kelas, yaitu, apa objek kelas akan terdiri dan operasi apa yang dapat dilakukan pada objek semacam itu.
Definisi kelas dimulai dengan kata kunci @interfacediikuti dengan nama antarmuka (kelas); dan badan kelas, diapit oleh sepasang kurung kurawal. Di Objective-C, semua kelas diturunkan dari kelas dasar yang disebutNSObject. Ini adalah superclass dari semua kelas Objective-C. Ini menyediakan metode dasar seperti alokasi memori dan inisialisasi. Misalnya, kami mendefinisikan tipe data Kotak menggunakan kata kunciclass sebagai berikut -
@interface Box:NSObject {
//Instance variables
double length; // Length of a box
double breadth; // Breadth of a box
}
@property(nonatomic, readwrite) double height; // Property
@end
Variabel instance bersifat pribadi dan hanya dapat diakses di dalam implementasi kelas.
Mengalokasikan dan Menginisialisasi Objek Objective-C
Kelas menyediakan cetak biru untuk objek, jadi pada dasarnya objek dibuat dari kelas. Kami mendeklarasikan objek dari kelas dengan jenis deklarasi yang persis sama dengan yang kami deklarasikan variabel tipe dasar. Pernyataan berikut mendeklarasikan dua objek kelas Box -
Box box1 = [[Box alloc]init]; // Create box1 object of type Box
Box box2 = [[Box alloc]init]; // Create box2 object of type Box
Kedua objek box1 dan box2 akan memiliki salinan anggota data mereka sendiri.
Mengakses Anggota Data
Properti objek kelas dapat diakses menggunakan operator akses anggota langsung (.). Mari kita coba contoh berikut untuk memperjelas -
#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;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
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
Properti
Properti diperkenalkan di Objective-C untuk memastikan bahwa variabel instance kelas dapat diakses di luar kelas.
Berbagai bagian deklarasi properti adalah sebagai berikut.Properti dimulai dengan @property, yang merupakan kata kunci
Ini diikuti dengan penentu akses, yang nonatomik atau atomik, baca-tulis atau hanya-baca dan kuat, unsafe_unretained atau weak. Ini bervariasi berdasarkan jenis variabel. Untuk jenis pointer apa pun, kita dapat menggunakan strong, unsafe_unretained atau weak. Begitu pula untuk jenis lainnya kita bisa menggunakan readwrite atau readonly.
Ini diikuti oleh tipe data variabel.
Akhirnya, kami memiliki nama properti yang diakhiri dengan titik koma.
Kita dapat menambahkan pernyataan sintesis di kelas implementasi. Namun di Xcode terbaru, bagian sintesis ditangani oleh Xcode dan Anda tidak perlu menyertakan pernyataan sintesis.
Ini hanya mungkin dengan properti kita dapat mengakses variabel instan kelas. Sebenarnya, metode pengambil dan penyetel secara internal dibuat untuk properti.
Misalnya, anggap saja kita memiliki properti @property (nonatomic ,readonly ) BOOL isDone. Di bawah tenda, ada setter dan getter yang dibuat seperti yang ditunjukkan di bawah ini.
-(void)setIsDone(BOOL)isDone;
-(BOOL)isDone;