Subtle Fierce

Sekilas Mengenai Objective-C

Objective-C adalah extension dari bahasa pemrograman C. Tujuan dari Objective-C adalah agar C dapat digunakan dengan paradigma Object-Oriented, yang membuat program menjadi lebih reusable berkat fitur inheritance.

Mari kita lihat contoh code C dibawah:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int numbers = 2;

    puts("Hello World!\n");         

    puts("numbers value is: %d", numbers);

    return 0;
}

Dan kemudian bandingkan dengan code standar Objective-C:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        int numbers = 2;

        NSLog(@"Hello, World!\n");

        NSLog(@"numbers value is: %d", numbers);

    }

    return 0;
}

Dalam hal ini Objective-C boleh dilihat sebagai C dengan library dan runtime tersendiri.

Library yang umumnya digunakan dalam pemrograman Objective-C sendiri bernama Cocoa yang terdiri dari dua framework besar yaitu Foundation dan AppKit.

Untuk iOS, Apple mengembangkan library bernama Cocoa Touch yang merupakan turunan dari Cocoa.

Perbedaan dari keduanya adalah Cocoa Touch menggunakan framework GUI tersendiri yang bernama UIKit.

Cocoa Touch sendiri masih menggunakan Foundation sebagai framework dasar.

Aplikasi Objective-C hanya dapat berjalan dalam platform yang mengadopsi Objective-C runtime, dan kedua platform yang paling kompatibel untuk saat ini adalah Mac OS X dan iOS.

Foundation framework

Foundation adalah framework dasar yang menjadi building blocks dalam mengembangkan aplikasi berbasis Objective-C.

Dalam Foundation terkandung beberapa class dasar yang umumnya menjadi data type di bahasa pemrograman lain, seperti NSString, NSArray, NSDictionary, dsb.

Programmer tetap dapat menggunakan primitif data type dari C seperti int, char, float, double, dsb.

Dalam Foundation juga terkandung sebuah class yang menjadi “root” dari semua object dalam Objective-C, yaitu NSObject.

Boleh dibilang hampir semua class dalam Objective-C adalah turunan dari NSObject.

Program diatas adalah contoh dari program Objective-C standar yang hanya menggunakan Foundation.

Membuat Objects dengan Foundation

Mari kita lihat kembali contoh program diatas dan memodifikasinya dengan menambahkan satu baris code di dalam block @autoreleasepool:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        NSString *name = [[NSString alloc] initWithString:@"Obet"];

        NSLog(@"Your name is: %@", name);

    }

    return 0;
}

Dari kode diatas yang menjadi perhatian kita adalah NSString *name = [[NSString alloc] initWithString:@"Obet"];.

Jika kita breakdown langkah demi langkah, kode tersebut terdiri dari:

  1. NSString *name adalah deklarasi dari pointer bernama name dengan type NSString.
  2. [NSString alloc] adalah method call yang memanggil fungsi alloc dari NSString.
  3. [[NSString alloc] initWithString:@"Obet"] adalah shorthand untuk melakukan alokasi dan inisialisasi object dalam satu waktu.
  4. NSString *name = [[NSString alloc] initWithString:@"Obet"]; adalah sebuah statement yang menyatakan return dari langkah ke-3 yang berupa memory address akan di-assign ke pointer dengan type NSString yang bernama name.

Jadi bisa disimpulkan untuk membuat instance dari sebuah class adalah dengan template seperti:

NamaClass *namaPointer = [[NamaClass alloc] init];

namaPointer akan menjadi pointer dari instance yang dihasilkan oleh [[NamaClass alloc] init].

[[NamaClass alloc] init] akan me-return memory address dari instance NamaClass yang telah dibuat.

Membuat Class di Objective-C

Pertanyaan selanjutnya adalah bagaimana membuat class dalam Objective-C dari awal.

Class dalam Objective-C terdiri dari dua bagian, yaitu header dan implementation.

Dalam header terkandung semua definisi dari class seperti nama class, parent class, protocols, instance variables, dan instance methods.

Dalam implementation terkandung implementasi dari masing-masing method yang sudah didefinisikan sebelumnya dalam header.

Berikut contoh dari class dengan nama Game:

Game.h // Game.h

#import <UIKit/UIKit.h>

@interface Game : NSObject

@property (strong) NSString *name;
@property (strong) NSString *genre;
@property (strong) NSString *releaseDate;

- (void)printCompletely;

@end

Penjelasan dari masing-masing baris code adalah:

  1. #import <UIKit/UIKit.h> : adalah preprocessor directive untuk melakukan import file header lainnya. Yang termasuk dalam file yang sering di-import adalah seperti frameworks, libraries, atau class lain yang ingin disertakan dalam class yang akan dibuat.
  2. @interface Game : NSObject : Special keyword dalam Objective-C antara lain adalah @interface yang hampir mirip dengan public class Game extends OtherClass di Java. NSObject sendiri merupakan parent class utama dalam Objective-C.
  3. @property (strong) NSString *name; : Adalah definisi dari instance variable bernama name dengan type NSString. Dan lagi, @property adalah special keyword dalam Objective-C yang menunjukkan bahwa kita ingin mendeklarasikan sebuah instance variable beserta definisi dari setter/getter method-nya.
  4. - (void)printCompletely; : Adalah definisi method tambahan dengan nama printCompletely dengan return value bernama (void).
  5. @end : Adalah special keyword yang menunjukkan akhir dari block @interface.

Game.m // Game.m

#import "Game.h"

@implementation Game

@synthesize name;
@synthesize genre;
@synthesize releaseDate;

- (void)printCompletely
{
    NSLog(@"%@, %@, %@", self.name, self.genre, self.releaseDate);
}

- (id)init
{
    if ( self = [super init] )
    {
        self.name = @"Team Fortress 2";
        self.genre = @"First-Person Shooter Multiplayer Action";
        self.releaseDate = @"October 9, 2007";
    }

    return self;
}

@end

Penjelasan dari masing-masing baris code adalah:

  1. #import "Game.h" : Game.h dan Game.m adalah dua file terpisah. Untuk tetap mendapatkan reference dari header, Game.m atau implementation tetap membutuhkan reference dari Game.h sebagai header-nya.
  2. @implementation Game : @implementation adalah special keyword yang menunjukkan block dibawahnya adalah implementasi dari class Game.
  3. @synthesize name; : @synthesize adalah special keyword dalam Objective-C yang merupakan pasangan dari keyword @property. @synthesize akan men-generate setter/getter implementation methods dari masing-masing instance variable. Rule of thumb: If you create a @property, don’t forget to @synthesize it.
  4. - (void)printCompletely : Adalah implementasi dari method printCompletely yang sebelumnya sudah didefinisikan di dalam file header.
  5. NSLog(@"%@, %@, %@", self.name, self.genre, self.releaseDate); : NSLog adalah sebuah function dari Foundation framework untuk melakukan proses printing output di console. Sangat berguna dalam debugging. self.name adalah bentuk lain dari [self name] yang akan mengakses getter method untuk mendapatkan return berupa value dari name. Menggunakan . atau dot merupakan alternatif dari method call yang menggunakan angle brackets [ dan ].
  6. - (id)init; : Penasaran dari mana asalnya method init? Method ini sendiri tidak didefinisikan dalam header. Method init merupakan method yang akan dipanggil ketika sebuah Class di-instantiate (istilah lainnya adalah ketika object dari sebuah class dibuat dalam memori). init adalah method yang bertujuan untuk melakukan proses inisialisasi instance variable setelah instance tersebut dialokasikan di memori. Asal muasal method init sendiri berasal dari parent class utama yaitu NSObject. Karena kita telah mendeklarasikan @interface Game : NSObject di header Game.h maka secara otomatis kita sudah menyatakan bahwa class Game adalah turunan dari NSObject. Dalam hal ini init dalam Game.m akan meng-override method init dari parent-nya yaitu NSObject.
  7. if ( self = [super init]) : Dikarenakan class Game meng-override method init dari parent-nya (NSObject), maka sebagai child yang meng-override, class Game harus mempersilahkan parent class-nya untuk melakukan inisialisasi terlebih dahulu dengan menggunakan keyword super dan memanggil method init dari parent. Tujuan dari flow control if diatas adalah untuk memastikan bahwa parent class (NSObject) telah sukses melakukan proses inisialisasi sebelum class Game dapat melakukan inisialisasi.

1955-2011

“…the world has lost an amazing human being.”

Namaste, Steve.

Thanks for everything.

Pow: Rack-based Web Server for Local Development

Watch the quick screencast and you will realize why Pow is awesome.

Stream.js

A really compelling new data structure. Think about arrays without limitations.

Steve Jobs Resigns as Apple CEO

Thank you, Steve, for creating such a wonderful company.

Attention.

I’m going on hiatus for a while. So this blog wouldn’t be updated regularly. Last but not least, Happy 66th Independence Day for Indonesia!

Jaret Manuel’s Startup Hack Resources

A really amazing hack resource lists.

Ways To Stay Creative

The only list that’s making sense.

Sejarah Singkat Objective-C

Objective-C adalah sejenis bahasa yang dikalangan awam mungkin terdengar aneh tetapi di kalangan geek adalah sebuah bahasa yang sangat elegan untuk membuat aplikasi Mac dan iPhone.

Bahasa pemrograman ini lahir pada awal tahun 1980-an oleh duo programmer bernama Brad Cox dan Tom Love. Bahasa pemrograman ini sendiri terinspirasi dari bahasa pemrograman lain bernama Smalltalk.

Singkat cerita, kedua programmer tersebut menginginkan fitur Smalltalk pada bahasa pemrograman C, yang dibuat oleh Dennis Ritchie dan Brian Kernighan. Bahasa C sendiri dibuat di era 1960-an dan sudah menjadi bahasa pemrograman de facto di kalangan programmer.

Menurut mereka resep sukses dari Objective-C adalah bukan untuk meniadakan atau menyaingi bahasa C, tetapi malah meningkatkan kemampuan bahasa C dengan fitur Object-Oriented, dimana C sendiri masih belum mendukung fitur ini.

Objective-C sendiri dipopulerkan oleh NeXT Computer, sebuah perusahaan yang didirikan Steve Jobs di tahun 1988 setelah dia disingkirkan dari Apple, perusahaan yang dia rintis bersama Steve Wozniak. NeXT sendiri tidak begitu sukses di pasaran dikarenakan harga hardware-nya yang terlampau mahal, tetapi software tools mereka (yang tentu saja berbasis Objective-C) banyak dipuji kalangan programmer.

Menyadari bahwa ternyata Objective-C diterima luas oleh pasar, akhirnya NeXT memutuskan untuk lebih fokus dalam mengembangkan software dan memaketkan Objective-C dalam produk sistem operasi bernama NeXTStep.

Steve Jobs yang sudah kembali ditunjuk sebagai CEO Apple memutuskan untuk mengembangkan sistem operasi bernama Mac OS X untuk jajaran komputer terbaru dari Apple Mac. Teknologi Mac OS X sendiri merupakan pengembangan dari OpenStep, yang menjadi hak eksklusif Apple setelah mereka membeli NeXT pada tahun 1996.

About WordPress Caching

Great writeups from Tutorial9.

Installed the Hyper Cache and my blog now running wicked fast!