• Tidak ada hasil yang ditemukan

Key-value coding

Key-value coding memungkinkan programmer mengakses properti dari objek secara langsung dengan menggunakan keys. Meskipun key-value coding dapat mengakses instance variable secara langsung, key-value coding mencoba menggunakan accessor methods untuk mengakses sebuah properti. Dengan adanya key-value coding ini user, tidak perlu lagi menuliskan kode untuk accessor methods. Hal ini akan dilakukan secara otomatis oleh cocoa.

2.8. Objective-C

Objective-C adalah bahasa yang sangat dinamis, bahasa object-oriented yang berbasis pesan. Objective-C memiliki fitur-fitur seperti dynamic dispatch, dynamic typing dan dynamic loading sehingga mensupport design pattern yang digunakan oleh cocoa. Objective-C merupakan ekstensi dari bahasa C sehingga kode-kode dan librari yang ditulis dalam bahasa C dapat digabung dengan aplikasi berbasis cocoa tanpa harus mengubah design awal dari pengembangan perangkat lunak berbahasa C. Berikut akan dijabarkan satu persatu tentang objective-C.

2.8.1. Objects

Hal yang paling mendasar dalam semua bahasa object-oriented adalah objek. Sebuah entiti yang menghubungkan data dengan operasi-operasi yang dapat dilakukan pada data tersebut. Objective-C menyediakan sebuah tipe data umum yaitu id. Id didefinisikan sebagai pointer terhadap sebuah data objek yang

memungkinkan seorang programmer untuk dapat bekerja dengan objek. Sebuah objek dapat dideklarasikan dalam kode sebagai berikut:

id anObject;

Untuk semua konstruktor dari object-oriented berbasis objective-C termasuk nilai kembalian dari metode, id menjadi nilai kembalian yang default.

Tipe id memberikan kebebasan kepada programmer untuk mendefinisikan tipe data yang abstrak, meskipun programmer tersebut tidak tahu pasti tipe data yang didefinisikan. Id hanya memberikan sedikit informasi tentang suatu objek dan hanya menandakan bahwa objek tersebut adalah entiti dalam sebuah sistem yang dapat merespon pesan. Perilaku seperti ini dikenal sebagai dynamic typing, mengijinkan sistem untuk mencari kelas milik objek dan mengirim pesan pada metode.

Objective-C juga mendukung static typing, yaitu mendefinisikan sebuah variabel dengan menggunakan pointer ke tipe kelasnya sendiri, contoh:

NSObject *object;

Deklarasi varibel seperti diatas menghemat waktu pengecekan kompilasi. Tetapi tidak seperti bahasa pemrograman lain, static typing pada objective-C hanya dipakai pada saat kompilasi. Pada runtime, semua objek dianggap sebagai tipe id guna menjaga dinamisme dalam sistem.

2.8.2. Messaging

Message atau pesan adalah sebuah request untuk melakukan tindakan tertentu. Objek dalam objective-C berjumlah banyak, independen, entiti abstrak dalam ruang lingkup sebuah program. Objek ini bukanlah kontainer pasif untuk perilaku tertentu ataupun koleksi data dan fungsi yang dapat diaplikasikan ke data tersebut. Objective-C mengijinkan pesan apapun diteruskan ke objek apapun.

Objek diharapkan merespon pada runtime dengan perilaku yang sesuai. Kejadian seperti ini disebut dynamic binding. Pada saat sebuah objek menerima sebuah pesan pada runtime, objek tersebut dapat melakukan satu dari tiga hal dibawah ini:

• Melakukan fungsi yang diminta jika objek tersebut dapat melaksanakan fungsi tersebut.

• Meneruskan pesan pada objek lain yang mungkin tahu bagaimana melakukan aksi yang diminta.

• Memberikan peringatan yang menyatakan bahwa objek tidak tahu bagaimana merespon pesan.

Objek tahu bagaimana meneruskan pesan tanpa harus mengetahui bagaimana cara objek lain bekerja.

Struktur pesan dalam objective-C diapit dalam sebuah kurung siku dengan susunan objek penerima pesan diikuti pesan yang akan dikirim serta argumen jika ada. Sebagai contoh pesan dapat diekspresikan sebagai “kirimkan pesan play ke objek yang diidentifikasikan oleh variabel iPod”.

[iPod play];

Argumen dalam pesan ditulis setelah titik dua setelah nama pesan. Contoh: untuk mengubah volume dari objek iPod kita mengirim pesan sebagai berikut:

[iPod setVolume:12];

Jika pesan mengandung banyak argumen, argumen dipisahkan dengan spasi.

[iPod usePlaylist:@”Techno” shuffle:YES];

Nama dari pesan ini adalah usePlaylist:shuffle:. Titik dua merupakan bagian dari metode.

Pada saat pesan dikirim ke objek, sebuah pencarian dilakukan untuk menentukan metode-metode yang seharusnya dipanggil. Logika pencarian disini yaitu:

• Runtime mencari target objek dari pesan untuk menentukan kelas objek.

• Jika kelas berisi sebuah instance method dengan nama yang sama dengan pesan, maka metode tersebut akan diekseskusi.

• Jika kelas tidak mempunyai metode, pencarian akan dilanjutkan ke superclass. Jika sebuah metode dengan nama yang sama dengan pesan ditemukan dalam superclass, metode tersebut akan dieksekusi.

Pencarian ini terus berlanjut sampai ditemukan metode yang sesuai.

• Jika tidak ditemukan metode yang sesuai, objek penerima akan menerima pesan forwardInvocation:. Jika objek mengimplementasikan pesan ini, maka objek tersebut memiliki kemampuan untuk menyelesaikan masalah.

2.8.3. Classes

Objek dalam objective-C disebut class. Kelas baru suatu objek adalah spesialisasi dari objek yang lebih general. Setiap kelas baru adalah akumulasi dari definisi kelas yang diturunkan dan dapat diperluas dengan cara menambah metode baru dan varibel kelas baru atau mendefinisi ulang metode yang telah ada untuk melakukan atau menambah fungsionalitas. Objective-C adalah single inheritance language yang berarti bahwa sebuah kelas hanya dapat diturunkan dari satu kelas yang lain.

Pada objective-C, kelas didefinisikan dalam dua bagian dan dipisahkan dalam dua file yang berbeda:

• Interface : berisi deklarasi metode kelas dan instance variable serta nama dari superclass. Interface ditulis pada sebuah file dengan suffix .h

#import <Cocoa/Cocoa.h>

@interface Song : NSObject { id titile;

}

- (id)title;

- (void)setTitle:(id)aTitle;

@end;

Diatas adalah contoh isi dari file interface.

• Implementation : berisi kode yang mendefinisikan metode-metode dari kelas. Implementation ditulis pada sebuah file dengan suffix .m

#import Song.h

@implementation Song

- (id)title {

return title;

}

- (void)setTitle:(id)aTitle {

[title autorelease];

title = [aTitle retain];

}

@end;

Untuk membuat sebuah objek baru digunakan perintah alloc lalu diikuti perintah init. Pada saat objek dibuat, memori akan dialokasikan dan instance variable diinisialisasi. Contoh bagaimana membuat objek baru:

Song aSong = [[song alloc] init];

Dokumen terkait