<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Gue</title>
	<atom:link href="http://evan-leonardi.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://evan-leonardi.net</link>
	<description>Pokoknya Gue Deh</description>
	<pubDate>Fri, 14 Nov 2008 02:22:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Sekilas tentang Objective-C</title>
		<link>http://evan-leonardi.net/2008/11/13/sekilas-tentang-objective-c/</link>
		<comments>http://evan-leonardi.net/2008/11/13/sekilas-tentang-objective-c/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 02:21:12 +0000</pubDate>
		<dc:creator>evanlr</dc:creator>
		
		<category><![CDATA[Objective-C]]></category>

		<category><![CDATA[IPhone OS]]></category>

		<guid isPermaLink="false">http://evan-leonardi.net/?p=48</guid>
		<description><![CDATA[Pertama-tama buka X-Code -> File -> New Project&#8230; -> Mac OS X -> Command Line Utility-> Foundation Tool -> choose.
Setelah memilih nama project, maka tampilannya kira-kira kayak begini:

Hello World
Kalau dilihat disitu, ada file dengan extension &#8220;.m&#8221;, itu adalah extension untuk source code objective-C. Pilih file tersebut, dan replace script nya dengan script sebagai berikut:

1
2
3
4
5
6
7
#import &#60;stdio.h&#62;
&#160;
int [...]]]></description>
			<content:encoded><![CDATA[<p>Pertama-tama buka X-Code -> File -> New Project&#8230; -> Mac OS X -> Command Line Utility-> Foundation Tool -> choose.</p>
<p>Setelah memilih nama project, maka tampilannya kira-kira kayak begini:<br />
<a href='http://evan-leonardi.net/wp/wp-content/uploads/2008/11/objcproject.png'><img src="http://evan-leonardi.net/wp/wp-content/uploads/2008/11/objcproject-300x213.png" alt="" title="objcproject" width="300" height="213" class="aligncenter size-medium wp-image-49" /></a></p>
<h3>Hello World</h3>
<p>Kalau dilihat disitu, ada file dengan extension &#8220;.m&#8221;, itu adalah extension untuk source code objective-C. Pilih file tersebut, dan replace script nya dengan script sebagai berikut:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #666666;">&quot;hello world<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span><span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>kemudian klik tombol &#8220;build and go&#8221;. Kemudian lihat hasilnya pada file lat-obj-c, seharusnya seperti gambar dibawah berikut:<br />
<a href='http://evan-leonardi.net/wp/wp-content/uploads/2008/11/helloworld_console.png'><img src="http://evan-leonardi.net/wp/wp-content/uploads/2008/11/helloworld_console-300x219.png" alt="" title="helloworld_console" width="300" height="219" class="aligncenter size-medium wp-image-50" /></a></p>
<p>Catatan:</p>
<ol>
<li>Objective-C adalah bahasa C yang dirancang untuk melaksanakan konsep object oriented</li>
<li>Semua fungsi bahasa C disupport oleh Objective-C</li>
<li>null pada C, diganti menjadi nil, keunggulan pada nil adalah nil dapat memanggil method, apabila method tersebut merupakan method yang mengembalikan output, maka outputnya juga akan bernilai nil. Sehingga tidak diperlukan lagi pengecekan apakah object tersebut nil atau ngak.</li>
<li>Objective-C memiliki tipe data BOOL yang merepresentasikan tipe boolean, dan menggunakan YES dan NO menggantikan TRUE dan FALSE.</li>
<li>Objective-C memiliki preprocessor #import untuk menggantikan #include, dimana dengan menggunakan #import, berarti compiler memastikan bahwa file hanya diinclude 1 kali.</li>
</ol>
<p><span id="more-48"></span></p>
<h3>@interface</h3>
<p>Dalam object oriented, terdapat class. @interface adalah cara mendeklarasi class pada objective-c. Sebagai contoh buat File->new file&#8230; -> other -> Empty File -> Fraction.h</p>
<p>Kemudian pada Fraction.h, buat script sebagai berikut:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Fraction<span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">int</span> numerator;
    <span style="color: #0000ff;">int</span> denominator;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> numerator;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> denominator;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<ul>
<li>NSObject adalah parent dari semua object, dan memiliki properti-properti standar dari sebuah object.</li>
<li>Inheritance ditandai dengan &#8220;Class: parent&#8221;, disini &#8220;Fraction: NSObject&#8221;.</li>
<li>Instance variable, didefinisikan diantara &#8220;@interface Class: Parent {&#8221; dengan &#8220;}&#8221;.</li>
<li>Apabila akses (protected, public, private) tidak didefinisikan, maka defaultnya adalah protected.</li>
<li>Method dideklarasikan diantara &#8220;}&#8221; dan &#8220;@end&#8221;, dengan format &#8220;scope (return type) methodName: (parameter type 1) parameterName1;&#8221;. Scope mengacu kepada &#8220;instance&#8221; dan &#8220;static&#8221;, dimana &#8220;instance method&#8221; dideklarasikan dengan &#8220;-&#8221;, dan &#8220;static method&#8221; dideklarasikan dengan &#8220;+&#8221;.</li>
<li>deklarasi ditutup dengan &#8220;@end&#8221;</li>
</ul>
<p>Pada definisi class diatas, terdapat method setNumerator, dan setDenominator yang berfungsi sebagai setter, dan method numerator, dan denominator yang berfungsi sebagai getter.</p>
<h3>@implementation</h3>
<p>Disini tempat kita mendefinisikan semua deklarasi method2 pada class. Script dibawah ini disimpan dengan nama <strong>Fraction.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Fraction.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Fraction
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;%i/%i&quot;</span>, numerator, denominator <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n
<span style="color: #002200;">&#123;</span>
    numerator <span style="color: #002200;">=</span> n;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d
<span style="color: #002200;">&#123;</span>
    denominator <span style="color: #002200;">=</span> d;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> numerator
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">return</span> numerator;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> denominator
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">return</span> denominator;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<ul>
<li>Semua definisi method berada diantara &#8220;@implementation ClassName&#8221; dengan &#8220;@end&#8221;</li>
</ul>
<h3>Menggunakan class yang sudah dibuat</h3>
<p>Sekarang pada lat-obj-c.m replace script sebelumnya menjadi:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;stdio.h&gt;</span>
<span style="color: #339900;">#import &quot;Fraction.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #ff0000;">// create new instance</span>
    Fraction <span style="color: #002200;">*</span> frac <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #ff0000;">// set the values</span>
    <span style="color: #002200;">&#91;</span>frac setNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">1</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>frac setDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #ff0000;">// print it</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;The fraction is: &quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#91;</span>frac print<span style="color: #002200;">&#93;</span>;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #ff0000;">// free memory</span>
    <span style="color: #002200;">&#91;</span>frac release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<ul>
<li>Baris ke-7 merupakan mekanisme awal pembentukan object dengan urutan sebagai berikut:
<ol>
<li>[Fraction alloc] berarti alokasikan memory untuk class Fraction</li>
<li>[[Fraction alloc] init] berarti, setelah dialokasikan, jalankan method init pada class Fraction</li>
<li>Fraction * frac = [[Fraction alloc] init] berarti, setelah sukses melakukan init, maka tunjuk alamat memory object Fraction yang telah dibentuk tadi menggunakan pointer &#8220;* frac&#8221;</li>
</ol>
<p>        Pada baris tersebut terdapat banyak sekali tanda [], dimana pemanggilan method dari sebuah object pada objective-C adalah sebagai berikut: [object method]</li>
<li>Baris ke-10 terdapat [frac setNumerator: 1], yang berarti jalankan method setNumerator pada object yang ditunjuk oleh pointer &#8220;* frac&#8221; dan passing sebuah parameter dengan nilai 1.</li>
<li>Baris ke-19 terdapat [frac release], seperti pada program2 C lainnya dimana tidak adanya mekanisme garbage collector, maka object yang dibentuk harus direlease secara manual. (objective-c memiliki mekanisme autorelease, tetapi disarankan untuk tidak menggunakan fasilitas tersebut apabila bisa untuk tidak digunakan, karena memiliki kompleksitas programming yang lebih daripada manual release)</li>
</ul>
<h3>Multiple Input Parameter</h3>
<p>Tambahkan method berikut ini pada class Fraction dengan cara sebagai berikut:</p>
<p><strong>Fraction.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>13
14
15
16
</pre></td><td class="code"><pre class="objc">...
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d;
&nbsp;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>Fraction.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>30
31
32
33
34
35
36
37
</pre></td><td class="code"><pre class="objc">...
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d
<span style="color: #002200;">&#123;</span>
    numerator <span style="color: #002200;">=</span> n;
    denominator <span style="color: #002200;">=</span> d;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p>Method dengan multiple input parameter, secara umum dideklarasikan sebagai berikut &#8220;scope (return type) methodName: (parameter type 1) parameterName1 label2: (parameter type 2) parameterName2 label3: (parameter type 3) parameterName3&#8243;, pada saat runtime, method akan dikenali dengan nama &#8220;methodName:label2:label3:&#8221;.</p>
<p>Untuk memanggil method diatas, maka coba ganti script lat-obj-c.m pada baris ke-10 dan 11 menjadi:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>10
</pre></td><td class="code"><pre class="objc">    <span style="color: #002200;">&#91;</span>frac setNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">1</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<h3>Constructor</h3>
<p>Pada dasarnya tidak ada constructor pada objective-c, semua yang dianggap constructor adalah method biasa yang memiliki prefix &#8220;init&#8221;. Sebagai contoh, tambahkan constructor untuk mengeset numerator dan denominator pada class Fraction, sbb:</p>
<p><strong>Fraction.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>15
16
17
18
</pre></td><td class="code"><pre class="objc">...
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>Fraction <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d;
&nbsp;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>Fraction.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>36
37
38
39
40
41
42
43
44
45
46
47
48
49
</pre></td><td class="code"><pre class="objc">...
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>Fraction <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d
<span style="color: #002200;">&#123;</span>
    self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> self <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span>self setNumerator<span style="color: #002200;">:</span> n andDenominator<span style="color: #002200;">:</span> d<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<ul>
<li>Baris ke-39, berarti, memanggil constructor default dari class parent (disini NSObject), dan object tersebut ditunjuk oleh pointer self (pointer self adalah pointer dari class itu sendiri (sama dengan &#8220;this&#8221; pada java dan c++))</li>
<li>Baris ke-41, berarti, testing apakah object berhasil dibentuk atau tidak, kalau tidak maka self akan bernilai nil. Kalau berhasil maka akan memanggil method setNumerator:andDenominator: pada baris ke-43</li>
<li>Baris ke-44, berarti, return object dari class Fraction yang baru dibentuk kepada pemanggil.</li>
</ul>
<p>Karena sekarang class Fraction telah memiliki constructor yang dapat mengeset numerator dan denominator, maka baris 7 sampai 10 dapat diganti menjadi:</p>
<p><strong>lat-obj-c.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>6
7
</pre></td><td class="code"><pre class="objc">...
    Fraction <span style="color: #002200;">*</span> frac <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">1</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<h3>Access Privilege</h3>
<p>Pada objective-c, privilege hanya dimiliki oleh instance variable, sedangkan method semuanya bersifat public. Privilege yang terdapat pada objective-c ada 3 (4 pada sytem 64-bit, tapi tidak akan dibicarakan disini karena ini ada pada bagian IPhone :p) yaitu @public, @protected, @private. Sedangkan scope untuk akses levelnya sama dengan java dan c++. Untuk penggunaan, coba lihat script dibawah ini.</p>
<p><strong>Access.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Access<span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">@public</span><span style="color: #002200;">:</span>
    <span style="color: #0000ff;">int</span> publicVar;
&nbsp;
    <span style="color: #0000ff;">@private</span>
    <span style="color: #0000ff;">int</span> privateVar;
&nbsp;
    <span style="color: #0000ff;">@protected</span>
    <span style="color: #0000ff;">int</span> protectedVar;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>Access.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Access.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Access
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Access.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    Access <span style="color: #002200;">*</span> a <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Access alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    a<span style="color: #002200;">-</span>&gt;publicVar <span style="color: #002200;">=</span> <span style="color: #0000dd;">5</span>; <span style="color: #ff0000;">// works</span>
    a<span style="color: #002200;">-</span>&gt;privateVar <span style="color: #002200;">=</span> <span style="color: #0000dd;">5</span>; <span style="color: #ff0000;">// not works</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>a release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<h3>Static Variable</h3>
<p>Kadang-kadang kita ingin tahu, berapa banyak object yang sudah dibentuk dari sebuah class, maka pada kasus ini dapat digunakan static variable.</p>
<p><strong>Fraction.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>17
18
19
20
</pre></td><td class="code"><pre class="objc">...
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> resetCount;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> getCount;
...</pre></td></tr></table></div>

<p><strong>Fraction.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="objc">...
<span style="color: #0000ff;">static</span> <span style="color: #0000ff;">int</span> count;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> resetCount
<span style="color: #002200;">&#123;</span>
    count <span style="color: #002200;">=</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> getCount
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">return</span> count;
<span style="color: #002200;">&#125;</span>
...</pre></td></tr></table></div>

<p>lalu pada definisi constructor initWithNumerator:andDenominator ditambahkan script berikut ini</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>56
57
58
</pre></td><td class="code"><pre class="objc">    ...
    count<span style="color: #002200;">++</span>;
    ...</pre></td></tr></table></div>

<p>Setelah itu, untuk testing, tambahkan script dibawah ini pada fungsi main<br />
<strong>lat-obj-c.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="objc">    ...
    <span style="color: #002200;">&#91;</span>Fraction initCount<span style="color: #002200;">&#93;</span>;
    Fraction <span style="color: #002200;">*</span>frac1 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">1</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
    Fraction <span style="color: #002200;">*</span>frac2 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">2</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
    Fraction <span style="color: #002200;">*</span>frac3 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Counter = %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>Fraction getCount<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>frac1 release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>frac2 release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>frac3 release<span style="color: #002200;">&#93;</span>;
    ...</pre></td></tr></table></div>

<h3>Exception Handling</h3>
<p>Objective-c memiliki mekanisme exception handling dengan contoh dibawah ini.</p>
<p><strong>FractionException.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSException.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> FractionDevidedByZeroException <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSException</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>FractionException.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;FractionException.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> FractionDevidedByZeroException
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p>Kemudian pada class Fraction method setDenominator:, diubah menjadi script dibawah ini:<br />
<strong>Fraction.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;FractionException.h&quot;</span>
...</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>27
28
29
30
31
32
33
34
35
36
</pre></td><td class="code"><pre class="objc">...
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> d <span style="color: #002200;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #0000ff;">NSException</span> <span style="color: #002200;">*</span> e <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>FractionDevidedByZeroException exceptionWithName<span style="color: #002200;">:</span>@<span style="color: #666666;">&quot;FractionDevidedByZeroException&quot;</span> reason<span style="color: #002200;">:</span>@<span style="color: #666666;">&quot;Denominator set by zero&quot;</span> userInfo<span style="color: #002200;">:</span><span style="color: #0000ff;">nil</span><span style="color: #002200;">&#93;</span>;
        <span style="color: #0000ff;">@throw</span> e;
    <span style="color: #002200;">&#125;</span>
    denominator <span style="color: #002200;">=</span> d;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Kemudian untuk testing, ubah script <strong>lat-obj-c.m</strong> menjadi sebagai berikut:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;stdio.h&gt;</span>
<span style="color: #339900;">#import &quot;Fraction.h&quot;</span>
<span style="color: #339900;">#import &quot;FractionException.h&quot;</span>
<span style="color: #339900;">#import &lt;Foundation/NSAutoreleasePool.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">NSAutoreleasePool</span> <span style="color: #002200;">*</span> pool <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>NSAutoreleaseool alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    Fraction <span style="color: #002200;">*</span> frac1 <span style="color: #002200;">=</span> <span style="color: #0000ff;">nil</span>, <span style="color: #002200;">*</span> frac2 <span style="color: #002200;">=</span> <span style="color: #0000ff;">nil</span>, <span style="color: #002200;">*</span> frac3 <span style="color: #002200;">=</span> <span style="color: #0000ff;">nil</span>;
&nbsp;
    <span style="color: #0000ff;">@try</span>
    <span style="color: #002200;">&#123;</span>
        frac1 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span><span style="color: #0000dd;">1</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
        frac2 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span><span style="color: #0000dd;">2</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">0</span><span style="color: #002200;">&#93;</span>;
        frac3 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span><span style="color: #0000dd;">3</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #0000ff;">@catch</span> <span style="color: #002200;">&#40;</span> FractionDividedByZeroException <span style="color: #002200;">*</span> e <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;%s: %s<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>e name<span style="color: #002200;">&#93;</span> cString<span style="color: #002200;">&#93;</span>, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>e reason<span style="color: #002200;">&#93;</span> cString<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #0000ff;">@finally</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> frac1 <span style="color: #002200;">!=</span> <span style="color: #0000ff;">nil</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span> <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;nilai frac1: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>frac1 print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#125;</span>
        <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> frac2 <span style="color: #002200;">!=</span> <span style="color: #0000ff;">nil</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span> <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;nilai frac2: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>frac2 print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#125;</span>
        <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> frac3 <span style="color: #002200;">!=</span> <span style="color: #0000ff;">nil</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span> <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;nilai frac3: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>frac3 print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#125;</span>
    <span style="color: #002200;">&#125;</span>
&nbsp;
    frac2 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">@try</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #002200;">&#91;</span>frac2 setNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">1</span><span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#91;</span>frac2 setDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #0000ff;">@catch</span> <span style="color: #002200;">&#40;</span> FractionDividedByZeroException <span style="color: #002200;">*</span> e <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;%s: %s<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>e name<span style="color: #002200;">&#93;</span> cString<span style="color: #002200;">&#93;</span>, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>e reason<span style="color: #002200;">&#93;</span> cString<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #0000ff;">@finally</span>
    <span style="color: #002200;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> frac1 <span style="color: #002200;">!=</span> <span style="color: #0000ff;">nil</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span> <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;nilai frac1: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>frac1 print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#125;</span>
        <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> frac2 <span style="color: #002200;">!=</span> <span style="color: #0000ff;">nil</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span> <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;nilai frac2: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>frac2 print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#125;</span>    
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>pool release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<ul>
<li>Kalau dilihat disini, maka parent dari semua class Exception adalah class NSException</li>
<li>Pada exception, Block &#8220;@finally&#8221; pasti akan dieksekusi walaupun terkena exception maupun tidak</li>
<li>Apabila terkena exception, maka baris selanjutnya pada block &#8220;@try&#8221; tidak dijalankan</li>
<li>NSAutoreleasePool merupakan salah satu mekanisme memory management pada objective-c</li>
</ul>
<h3>Polymorphism</h3>
<p>Pada objective-c terdapat sebuah tipe data yang bernama &#8220;id&#8221;. Tipe data ini memiliki kesamaan dengan &#8220;void *&#8221; pada c/c++, dimana dapat diassign dengan tipe data apapun. Tetapi pada objective-c tipe &#8220;id&#8221; ini hanya dapat diassign oleh object. Karena tipe data ini dapat menerima masukkan dari semua jenis object, maka polymorphism pada objective-c terdapat pada tipe &#8220;id&#8221; ini.</p>
<p><strong>ClassA.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> ClassA <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>ClassB.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> ClassB <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>ClassA.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;stdio.h&gt;</span>
<span style="color: #339900;">#import &quot;ClassA.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> ClassA
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Class A<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span> <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>ClassB.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;stdio.h&gt;</span>
<span style="color: #339900;">#import &quot;ClassB.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> ClassB
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Class B<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span> <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;ClassA.h&quot;</span>
<span style="color: #339900;">#import &quot;ClassB.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    ClassA <span style="color: #002200;">*</span> clsa <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>ClassA alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
    ClassB <span style="color: #002200;">*</span> clsb <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>ClassB alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">id</span> cls;
&nbsp;
    cls <span style="color: #002200;">=</span> clsa;
    <span style="color: #002200;">&#91;</span>cls print<span style="color: #002200;">&#93;</span>;
&nbsp;
    cls <span style="color: #002200;">=</span> clsb;
    <span style="color: #002200;">&#91;</span>cls print<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>clsa release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>clsb release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Apabila script diatas dicompile dan dijalankan, maka akan terlihat sifat polymorphism dengan parent utama adalah NSObject. Tetapi berbeda dengan polymorphism pada java atau c++, cls dapat memanggil semua method baik yang ada pada ClassA maupun ClassB.</p>
<h3>Inheritance</h3>
<p>Dari contoh-contoh sebelumnya, kita sudah menggunakan inheritance dimana NSObject dan NSException sebagai parent. Untuk lebih memperjelas mengenai inheritance, perhatikan script2 berikut ini:</p>
<p><strong>Rectangle.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Rectangle <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">int</span> height, width;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setHeight<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> h;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setWidth<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> w;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
&nbsp;
<span style="color: #0000ff;">@end</span>;</pre></td></tr></table></div>

<p><strong>Rectangle.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Rectangle.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Rectangle
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setHeight<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> h
<span style="color: #002200;">&#123;</span>
    height <span style="color: #002200;">=</span> h;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setWidth<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> w
<span style="color: #002200;">&#123;</span>
    width <span style="color: #002200;">=</span> w;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Luas Rectangle: %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, height <span style="color: #002200;">*</span> width <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>Square.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Rectangle.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Square <span style="color: #002200;">:</span> Rectangle
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>Square.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Square.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Square
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Luas square: %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, height <span style="color: #002200;">*</span> height <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Square.h&quot;</span>
<span style="color: #339900;">#import &quot;Rectangle.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    Rectangle <span style="color: #002200;">*</span> rect <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Rectangle alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
    Square <span style="color: #002200;">*</span> sq <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Square alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>sq setHeight<span style="color: #002200;">:</span><span style="color: #0000dd;">10</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>rect setHeight<span style="color: #002200;">:</span> <span style="color: #0000dd;">10</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>rect setWidth<span style="color: #002200;">:</span> <span style="color: #0000dd;">20</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>sq print<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>rect print<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>sq release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>rect release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Konsep inheritance pada objective-c tidak berbeda dengan java, tetapi seperti yang telah dijelaskan sebelumnya pada access level, objective-c tidak memiliki access level pada tingkat method, sehingga semua method akan diturunkan pada child class-nya.</p>
<h3>Dynamic Types</h3>
<p>Dynamic Types adalah salah satu sifat dari objective-c yang berarti, sebuah class dapat saja tidak memiliki method yang dipanggil ketika program dicompile, dan pada suatu saat class tersebut daat memiliki method tersebut tanpa harus mengcompile ulang semua program (ditambahkan secara partial). Dan dari pernyataan tersebut, tentu saja apabila class Square pada script sebelumnya tidak memiliki method print, tetap dapat dicompile dengan baik oleh compiler objective-c.</p>
<p>Karena kefleksibilitasan tersebut, terdapat beberapa method dari class NSObject yang dapat digunakan untuk menghadapi permasalahan yang disebabkannya, antara lain:</p>
<ul>
<li>- (BOOL) isKindOfClass: classObj &#8212; Method ini akan return YES apabila class pemanggil merupakan class yang sama dengan classObj, maupun class turunan dari classObj</li>
<li>- (BOOL) isMemberOfClass: classObj &#8212; Method ini akan return YES apabila class pemanggil merupakan class yang sama dengan classObj</li>
<li>- (BOOL) respondsToSelector: selector &#8212; Method ini akan return YES apabila object pemanggil memiliki method &#8220;selector&#8221;</li>
<li>+ (BOOL) instancesRespondToSelector: selector &#8212; Method ini akan return YES apabila class pemanggil memiliki method &#8220;selector&#8221;</li>
</ul>
<p>Ini juga merupakan salah satu alasan knp setiap object sebisa mungkin merupakan turunan dari class NSObject.</p>
<p>Untuk lebih jelasnya coba buat dan jalankan script dibawah ini:</p>
<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Rectangle.h&quot;</span>
<span style="color: #339900;">#import &quot;Square.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    Rectangle <span style="color: #002200;">*</span> rect <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Rectangle alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
    Square <span style="color: #002200;">*</span> sq <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Square alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isKindOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Square <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isKindOfClass Square&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isKindOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Rectangle <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isKindOfClass Rectangle&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isMemberOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Square <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isMemberOfClass Square&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isMemberOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Rectangle <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isMemberOfClass Rectangle&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq respondsToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> setWidth<span style="color: #002200;">:</span> <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq respondsToSelector setWidth:&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq respondsToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> bohongan <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq respondsToSelector bohongan&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>Square instancesRespondToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> setWidth<span style="color: #002200;">:</span> <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Square instancesRespondToSelector setWidth:&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>Square instancesRespondToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> bohongan <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Square instancesRespondToSelector bohongan&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>rect release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>sq release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<h3>Categories</h3>
<p>Categories adalah salah satu feature dari objective-c yang digunakan untuk menambah fungsi maupun mengubah fungsi dari class yang sudah didefinisikan sebelumnya, tanpa perlu mengubah class tersebut. Terkadang kita membutuhkan tambahan ataupun perubahan pada method dari sebuah class untuk kasus kasus khusus, dengan menggunakan Categories ini, maka kita tidak perlu takut bahwa perubahan akan berpengaruh pada script lain yang menggunakan class yang asli.</p>
<p>Categories hanya dapat digunakan untuk menambah dan memodifikasi method. Sintaks untuk pembuatan categories ini adalah &#8220;@interface namaClass (namaCategories)&#8221; dan &#8220;@implementation namaClass (namaCategories)&#8221;.</p>
<p>Untuk lebih jelasnya buat script dibawah ini:</p>
<p><strong>SquareAdd.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Square.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Square <span style="color: #002200;">&#40;</span>Bohongan<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> bohongan;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>SquareAdd.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;SquareAdd.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Square <span style="color: #002200;">&#40;</span>Bohongan<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> bohongan
<span style="color: #002200;">&#123;</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p>Dengan begini, untuk menggunakan method bohongan pada class Square, harus mengimport &#8220;SquareAdd.h&#8221; terlebih dahulu, apabila tidak, maka method tersebut dianggap ada tapi tidak dapat digunakan.</p>
<p>Untuk lebih jelasnya lihat <strong>main.m</strong> dibawah ini:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Rectangle.h&quot;</span>
<span style="color: #339900;">#import &quot;Square.h&quot;</span>
<span style="color: #339900;">#import &quot;SquareAdd.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    Rectangle <span style="color: #002200;">*</span> rect <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Rectangle alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
    Square <span style="color: #002200;">*</span> sq <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Square alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isKindOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Square <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isKindOfClass Square&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isKindOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Rectangle <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isKindOfClass Rectangle&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isMemberOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Square <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isMemberOfClass Square&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq isMemberOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Rectangle <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq isMemberOfClass Rectangle&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq respondsToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> setWidth<span style="color: #002200;">:</span> <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq respondsToSelector setWidth:&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>sq respondsToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> bohongan <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;sq respondsToSelector bohongan&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>Square instancesRespondToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> setWidth<span style="color: #002200;">:</span> <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Square instancesRespondToSelector setWidth:&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>Square instancesRespondToSelector<span style="color: #002200;">:</span> <span style="color: #0000ff;">@selector</span><span style="color: #002200;">&#40;</span> bohongan <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Square instancesRespondToSelector bohongan&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>sq bohongan<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>rect release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>sq release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Sebagai tambahan, coba comment baris ke-3, dan jalankan kembali script diatas.</p>
<h3>Posing</h3>
<p>Posing adalah feature objective-c yang digunakan untuk mereplace method dari class yang sudah ada, sehingga semua object dari class tersebut akan menggunakan method dari class turunannya.</p>
<p><strong>FractionB.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Fraction.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> FractionB <span style="color: #002200;">:</span> Fraction
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>FractionB.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;FractionB.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> FractionB
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;(%i/%i)&quot;</span>, numerator, denominator <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;stdio.h&gt;</span>
<span style="color: #339900;">#import &quot;Fraction.h&quot;</span>
<span style="color: #339900;">#import &quot;FractionB.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    Fraction <span style="color: #002200;">*</span> frac <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span> denominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">10</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;The fraction is: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>frac print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #ff0000;">// Make FractionB pose as Fraction</span>
    <span style="color: #002200;">&#91;</span>FractionB poseAsClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Fraction <span style="color: #0000ff;">class</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    Fraction <span style="color: #002200;">*</span> frac2 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span> denominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">10</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;The fraction is: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>frac2 print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #ff0000;">// free memory</span>
    <span style="color: #002200;">&#91;</span>frac release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>frac2 release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Fasilitas posing ini merupakan method dari class NSObject. (Tambah 1 alasan lagi untuk menggunakan NSObject sebagai default parent).</p>
<h3>Protocols</h3>
<p>Protocol pada objective-c dapat disamakan dengan interface pada java, atau virtual class pada c++, yang digunakan untuk mengatasi kebutuhan akan multiple inheritance.</p>
<p>Untuk contoh penggunaan protocol, perhatikan script dibawah ini.</p>
<p><strong>Printing.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="objc"><span style="color: #0000ff;">@protocol</span> Printing
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>Fraction.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
<span style="color: #339900;">#import &quot;Printing.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Fraction <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span> &lt;Printing&gt;
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">int</span> numerator;
    <span style="color: #0000ff;">int</span> denominator;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>Fraction <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> numerator;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> denominator;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>Fraction.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;Fraction.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Fraction
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>Fraction <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d
<span style="color: #002200;">&#123;</span>
    self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> self <span style="color: #002200;">&#41;</span>
        <span style="color: #002200;">&#91;</span>self setNumerator<span style="color: #002200;">:</span> n andDenominator<span style="color: #002200;">:</span> d<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> print 
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;(%i/%i)&quot;</span>, numerator, denominator <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n
<span style="color: #002200;">&#123;</span>
    numerator <span style="color: #002200;">=</span> n;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d
<span style="color: #002200;">&#123;</span>
    denominator <span style="color: #002200;">=</span> d;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> setNumerator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n andDenominator<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> d
<span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>self setNumerator<span style="color: #002200;">:</span> n<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>self setDenominator<span style="color: #002200;">:</span> d<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> numerator
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">return</span> numerator;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> denominator
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">return</span> denominator;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;stdio.h&gt;</span>
<span style="color: #339900;">#import &quot;Fraction.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    Fraction <span style="color: #002200;">*</span> frac <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Fraction alloc<span style="color: #002200;">&#93;</span> initWithNumerator<span style="color: #002200;">:</span> <span style="color: #0000dd;">1</span> andDenominator<span style="color: #002200;">:</span> <span style="color: #0000dd;">3</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #0000ff;">id</span> &lt;Printing&gt; print;
&nbsp;
    print <span style="color: #002200;">=</span> frac;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;The fraction is: &quot;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #002200;">&#91;</span>print print<span style="color: #002200;">&#93;</span>; <span style="color: #0000dd;">putchar</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">if</span><span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>frac conformsToProtocol<span style="color: #002200;">:</span> <span style="color: #0000ff;">@protocol</span><span style="color: #002200;">&#40;</span> Printing <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> YES <span style="color: #002200;">&#41;</span>
        <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;frac memiliki protocol Printing&quot;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>frac release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Pada contoh diatas, dapat dilihat bahwa untuk mentransfer object dengan sebuah atau lebih protocol ke variable dengan tipe id, maka tipe id juga harus diberikan penanda protocol yang sama &#8220;id
<protocol1, protocol2, protocol3>&#8220;, apabila object memiliki protocol yang merupakan subset dari id, maka object tersebut juga dapat menggunakan id yang sama.</p>
<h3>Properties</h3>
<p>Properties digunakan untuk menggenerate setter dan getter dari sebuah object.</p>
<p><strong>FileProp.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> FileProp <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">NSString</span> <span style="color: #002200;">*</span> filename;
<span style="color: #002200;">&#125;</span>
&nbsp;
@property <span style="color: #002200;">&#40;</span>retain<span style="color: #002200;">&#41;</span> <span style="color: #0000ff;">NSString</span> <span style="color: #002200;">*</span> filename;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>FileProp.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;FileProp.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> FileProp
&nbsp;
@synthesize filename;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> dealloc
<span style="color: #002200;">&#123;</span>
    <span style="color: #002200;">&#91;</span>filename release<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>super dealloc<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;FileProp.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    FileProp <span style="color: #002200;">*</span> fp <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>FileProp alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>fp setFilename<span style="color: #002200;">:</span> @<span style="color: #666666;">&quot;Testing&quot;</span><span style="color: #002200;">&#93;</span>; <span style="color: #ff0000;">// setter yang digenerate otomatis;</span>
&nbsp;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;%s<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>fp filename<span style="color: #002200;">&#93;</span> cString<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>; <span style="color: #ff0000;">// getter yang digenerate otomatis;</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>fp release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<h3>Memory management</h3>
<h4>Retain, Release dan Dealloc</h4>
<p>Pada class NSObject, terdapat sebuah nilai counter yang berguna untuk menghitung berapa banyak reference ke object yang bersangkutan. NSObject memiliki 2 buah method yang digunakan untuk mengubah nilai reference tersebut, yaitu retain (untuk menambah), dan release (untuk mengurang). Apabila nilai reference tersebut = 0, maka method dealloc akan dipanggil secara otomatis oleh objective-c. Ketika menginisialisasi object dengan menggunakan method init, maka retain akan otomatis dipanggil 1 kali.</p>
<p><strong>memory.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Memory <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> dealloc;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>memory.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;memory.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Memory
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> dealloc
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">puts</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;masuk dealloc&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#91;</span>super dealloc<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;memory.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span>  <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    Memory <span style="color: #002200;">*</span> mem <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Memory alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Memory ref counter: %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>mem retainCount<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>mem retain<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>mem retain<span style="color: #002200;">&#93;</span>;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Memory ref counter: %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>mem retainCount<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>mem release<span style="color: #002200;">&#93;</span>;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Memory ref counter: %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>mem retainCount<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>mem release<span style="color: #002200;">&#93;</span>;
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;Memory ref counter: %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #002200;">&#91;</span>mem retainCount<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>mem release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Jalankan script diatas, dan lihat bagaimana hubungan antara retain, release, dan dealloc.</p>
<h4>Autorelease Pool</h4>
<p>Autorelease pool merupakan sebuah fasilitas memory management objective-c untuk melakukan auto release dari object-object yang sudah tidak digunakan lagi. Untuk menambahkan suatu object kedalam autorelease, dibutuhkan method dari NSObject yang bernama autorelease. Dan ada 1 hal yang harus diingat, yaitu apabila sebuah object sudah masuk kedalam mekanisme autorelease, maka object tersebut tidak boleh direlease manual, karena apabila counter reference < 0, maka program akan mengembalikan "runtime error".</p>
<p><strong>memory.h</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &lt;Foundation/NSObject.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@interface</span> Memory <span style="color: #002200;">:</span> <span style="color: #0000ff;">NSObject</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">int</span> number;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>Memory <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> initMemory<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span>Memory <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> autoMemory<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> dealloc;
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>memory.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;memory.h&quot;</span>
<span style="color: #339900;">#import &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">@implementation</span> Memory
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>Memory <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> initMemory<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n
<span style="color: #002200;">&#123;</span>
    self <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>super init<span style="color: #002200;">&#93;</span>;
&nbsp;
    number <span style="color: #002200;">=</span> n;
&nbsp;
    <span style="color: #0000ff;">return</span> self;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span>Memory <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> autoMemory<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #002200;">&#41;</span> n
<span style="color: #002200;">&#123;</span>
    Memory <span style="color: #002200;">*</span> mm <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Memory alloc<span style="color: #002200;">&#93;</span> initMemory<span style="color: #002200;">:</span> n<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>mm autorelease<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> mm;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #002200;">&#41;</span> dealloc
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000dd;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #666666;">&quot;masuk dealloc %i<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, number <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#91;</span>super dealloc<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #0000ff;">@end</span></pre></td></tr></table></div>

<p><strong>main.m</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="objc"><span style="color: #339900;">#import &quot;memory.h&quot;</span>
<span style="color: #339900;">#import &lt;Foundation/NSAutoreleasePool.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #002200;">&#40;</span> <span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #002200;">*</span> argv <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #0000ff;">NSAutoreleasePool</span> <span style="color: #002200;">*</span> pool <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #0000ff;">NSAutoreleasePool</span> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
    Memory <span style="color: #002200;">*</span> mm1 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>Memory autoMemory<span style="color: #002200;">:</span> <span style="color: #0000dd;">1</span><span style="color: #002200;">&#93;</span>;
    Memory <span style="color: #002200;">*</span> mm2 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>Memory autoMemory<span style="color: #002200;">:</span> <span style="color: #0000dd;">2</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #ff0000;">// [mm2 release];</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>pool release<span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Coba jalankan program diatas, dan lihat hasilnya, autorelease akan ditambahkan dengan metode stack (seperti biasa lah ini <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> ), sedangkan apabila baris [mm2 release] di uncomment, maka akan terjadi runtime error, karena mm2 akan di release 2 kali padahal hanya diretain 1 kali (1 - 2 = -1 < 0).</p>
<h3>Resource</h3>
<p><a href="http://www.otierney.net/objective-c.html">Objective-C Beginner Guide</a><br />
<a href="http://cocoadevcentral.com/d/learn_objectivec/">Cocoa Dev Central: Learn Objective-C</a><br />
<a href="http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/chapter_1_section_1.html">The Objective-C 2.0 Programming Language: Introduction to The Objetive-C 2.0 Programming Language</a></p>
]]></content:encoded>
			<wfw:commentRss>http://evan-leonardi.net/2008/11/13/sekilas-tentang-objective-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PKU - 1004 - Financial Management</title>
		<link>http://evan-leonardi.net/2008/11/06/pku-1004-financial-management/</link>
		<comments>http://evan-leonardi.net/2008/11/06/pku-1004-financial-management/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 17:29:04 +0000</pubDate>
		<dc:creator>evanlr</dc:creator>
		
		<category><![CDATA[PKU]]></category>

		<category><![CDATA[Algoritma]]></category>

		<category><![CDATA[pku]]></category>

		<guid isPermaLink="false">http://evan-leonardi.net/?p=45</guid>
		<description><![CDATA[link soal asli
link soal pdf
Deskripsi Soal:
Anda diberikan 12 baris bilangan real, tentukan nilai rata-rata dari keduabelas bilangan tersebut.

Penjelasan:
Jumlahkan semua bilangan, kemudian bagi dengan 12.
Buka


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include &#60;stdio.h&#62;
&#160;
int main &#40;&#41;
&#123;
    int sen, dolar, tsen = 0;
    for&#40; int i = 0; i &#60; 12; ++i &#41;
    &#123;
   [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1004">link soal asli</a><br />
<a href="http://evan-leonardi.net/wp/wp-content/uploads/2008/11/Financial%20Management.pdf">link soal pdf</a></p>
<p>Deskripsi Soal:<br />
Anda diberikan 12 baris bilangan real, tentukan nilai rata-rata dari keduabelas bilangan tersebut.<br />
<span id="more-45"></span></p>
<p>Penjelasan:<br />
Jumlahkan semua bilangan, kemudian bagi dengan 12.</p>
<p><a class="spoiler_link_show" href="javascript:void(0)" onclick="wpSpoilerToggle(document.getElementById('id1673407735'), this, 'Buka', 'Tutup')">Buka</a>
<div class="spoiler_div" id="id1673407735" style="display:none"></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="cpp"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span> sen, dolar, tsen <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>;
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>; i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">12</span>; <span style="color: #000040;">++</span>i <span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
    	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;%d.%d&quot;</span>, <span style="color: #000040;">&amp;</span>dolar, <span style="color: #000040;">&amp;</span>sen <span style="color: #008000;">&#41;</span>;
    	tsen <span style="color: #000040;">+</span><span style="color: #000080;">=</span> dolar <span style="color: #000040;">*</span> <span style="color: #0000dd;">100</span> <span style="color: #000040;">+</span> sen;
    <span style="color: #008000;">&#125;</span>
&nbsp;
    tsen <span style="color: #000040;">/</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">12</span>;
    <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;$%d&quot;</span>, tsen <span style="color: #000040;">/</span> <span style="color: #0000dd;">100</span> <span style="color: #008000;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> tsen <span style="color: #000040;">%</span> <span style="color: #0000dd;">100</span> <span style="color: #008000;">&#41;</span> <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;.%d&quot;</span>, tsen <span style="color: #000040;">%</span> <span style="color: #0000dd;">100</span> <span style="color: #008000;">&#41;</span>;
    <span style="color: #0000dd;">putchar</span><span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">'<span style="color: #666666; font-weight: bold;">\n</span>'</span> <span style="color: #008000;">&#41;</span>;
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://evan-leonardi.net/2008/11/06/pku-1004-financial-management/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PKU - 1003 - Hangover</title>
		<link>http://evan-leonardi.net/2008/11/06/pku-1003-hangover/</link>
		<comments>http://evan-leonardi.net/2008/11/06/pku-1003-hangover/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 17:05:46 +0000</pubDate>
		<dc:creator>evanlr</dc:creator>
		
		<category><![CDATA[PKU]]></category>

		<category><![CDATA[algorima]]></category>

		<category><![CDATA[pku]]></category>

		<guid isPermaLink="false">http://evan-leonardi.net/?p=44</guid>
		<description><![CDATA[link soal asli
link soal pdf
Deskripsi Soal:
Terdapat sebuah meja, dan diatasnya terdapat n kartu sebentuk. Sebuah kartu dapat ditaruh melewati tepi meja maksimal sepanjang 1/2 dari panjang kartu tersebut. ketika 2 buah kartu disusun, maka kartu paling bawah dapat ditaruh melewati tepi meja maksimal sepanjang 1/3 dari panjang kartu, dan kartu yang paling atas dapaat ditaruh [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1003">link soal asli</a><br />
<a href="http://evan-leonardi.net/wp/wp-content/uploads/2008/11/Hangover.pdf">link soal pdf</a></p>
<p>Deskripsi Soal:<br />
Terdapat sebuah meja, dan diatasnya terdapat n kartu sebentuk. Sebuah kartu dapat ditaruh melewati tepi meja maksimal sepanjang 1/2 dari panjang kartu tersebut. ketika 2 buah kartu disusun, maka kartu paling bawah dapat ditaruh melewati tepi meja maksimal sepanjang 1/3 dari panjang kartu, dan kartu yang paling atas dapaat ditaruh melewati tepi kartu pertama maksimal sepanjang 1/2 dari panjang kartu. Secara umum apabila terdapat n kartu maka, total panjang kartu yang melewati tepi meja adalah 1/2 + 1/3 + &#8230; + 1/(n+1).</p>
<p>Anda diberikan total panjang kartu yang ingin dicapai, dan tentukan dibutuhkan berapa banyak minimal kartu yang digunakan untuk membentuk total panjang kartu tersebut.<br />
<span id="more-44"></span></p>
<p>Pembahasan:<br />
Cukup simulasikan soal diatas.</p>
<p><a class="spoiler_link_show" href="javascript:void(0)" onclick="wpSpoilerToggle(document.getElementById('id139672450'), this, 'Buka', 'Tutup')">Buka</a>
<div class="spoiler_div" id="id139672450" style="display:none"></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="cpp"><span style="color: #339900;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span> s, d;
    <span style="color: #0000ff;">int</span> res;
&nbsp;
    <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;%d.%d&quot;</span>, <span style="color: #000040;">&amp;</span>s, <span style="color: #000040;">&amp;</span>d <span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">2</span> <span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
    	s <span style="color: #000080;">=</span> s <span style="color: #000040;">*</span> <span style="color: #0000dd;">101</span> <span style="color: #000040;">+</span> d;
    	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> s <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span> break;
&nbsp;
    	s <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">10</span>;
    	<span style="color: #0000ff;">double</span> temp <span style="color: #000080;">=</span> <span style="color: #0000dd;">0.0</span>;
    	res <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>;
    	<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">2</span>; ; <span style="color: #000040;">++</span>i <span style="color: #008000;">&#41;</span>
    	<span style="color: #008000;">&#123;</span>
	    temp <span style="color: #000080;">=</span> temp <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">double</span><span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">1.0</span> <span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #0000ff;">double</span><span style="color: #008000;">&#40;</span> i <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span>;
&nbsp;
    	    <span style="color: #000040;">++</span>res;
    	    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span> temp <span style="color: #000040;">+</span> 1e<span style="color: #0000dd;">-9</span> <span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #0000dd;">1000</span> <span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;=</span> s <span style="color: #008000;">&#41;</span> break;
    	<span style="color: #008000;">&#125;</span>
&nbsp;
    	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;%d card(s)<span style="color: #666666; font-weight: bold;">\n</span>&quot;</span>, res <span style="color: #008000;">&#41;</span>;
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://evan-leonardi.net/2008/11/06/pku-1003-hangover/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ACM-ICPC 2008-2009 Jakarta Site</title>
		<link>http://evan-leonardi.net/2008/10/24/acm-icpc-2008-2009-jakarta-site/</link>
		<comments>http://evan-leonardi.net/2008/10/24/acm-icpc-2008-2009-jakarta-site/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 17:36:23 +0000</pubDate>
		<dc:creator>evanlr</dc:creator>
		
		<category><![CDATA[Cerita]]></category>

		<guid isPermaLink="false">http://evan-leonardi.net/?p=43</guid>
		<description><![CDATA[Tahun ini Universitas Bina Nusantara dipercaya menjadi penyelenggara ACM-ICPC tingkat Asia untuk regional Jakarta. Acara ini diadakan pada tanggal 20-21 Oktober 2008.



20 Oktober 2008

Jam 1/2 10 sampai ke Binus, trs telp Suhendry, katanya lagi di lantai 7 gedung baru, trs ketemu kurniady ditengah perjalanan kelantai 7 yang akhirnya barengan ke tempat Suhendry, kemudian bertiga bareng-bareng [...]]]></description>
			<content:encoded><![CDATA[<p>Tahun ini Universitas Bina Nusantara dipercaya menjadi penyelenggara ACM-ICPC tingkat Asia untuk regional Jakarta. Acara ini diadakan pada tanggal 20-21 Oktober 2008.<br />
<br />
<span id="more-43"></span></p>
<hr />
20 Oktober 2008<br />
<br />
Jam 1/2 10 sampai ke Binus, trs telp Suhendry, katanya lagi di lantai 7 gedung baru, trs ketemu kurniady ditengah perjalanan kelantai 7 yang akhirnya barengan ke tempat Suhendry, kemudian bertiga bareng-bareng jalan ke auditorium lantai-4 (wah binus anggrek ada auditorium, ini dulu gak ada waktu gw masih kuliah disana <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> ). Trs disuruh duduk di baris paling depan. Mulai deh gosipin NTU, dan SHJTU. Ternyata NTU duduk tepat dibelakang kita (yang nick topcodernya &#8220;microsoft&#8221; itu gaya, postur-nya bener-bener mirip sama David Angga, cuma David lebih tinggi sih <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> ), dan SHJTU ada dibelakangnya lagi <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> .</p>
<p>Pada tanggal ini terdapat beberapa acara yang menarik perhatian gw, yaitu sebagai berikut:</p>
<ul>
<li>IBM Tech Trek: yang tampil orang HRD-nya IBM Indonesia. Kesan gw, orangnya yang ngomong, bahasa inggrisnya lancar banget boo, suaranya jelas, dan gampang dicerna. Dari presentasi dia, kerja di IBM itu kita dikasih kesempatan untuk berkembang sesuai dengan minat dan bakat kita. Mereka membagi 2 jurusan, yaitu teknikal dan Bisnis, dimana kedua-duanya tidak terdapat perbedaan dalam karir, karena keduanya dianggap sama pentingnya (gak kayak perusahaan IT di Indonesia, dimana teknikal adalah bawahannya bisnis, sehingga lebih sering dikejar waktu oleh sesuatu yang gak disukai, yang akhirnya banyak produk yang luarnya bagus, tapi dalamnya bobrok :P ). Btw, ada kejadian lucu pada saat IBM Tech Trek ini, gw ngeliat salah satu tim SHJTU lagi baca koran PC-Plus, karena dia bacanya begitu serius (sampai dibolak balik tuh halaman koran), akhirnya penasaran juga gw, PC-Plusnya bahasa inggris ya ? dan ternyata &#8230; bahasa Indonesia <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/24.gif' alt='=))' class='wp-smiley' /> (emangnya dia ngerti bahasa indonesia <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/7.gif' alt=':-/' class='wp-smiley' /> <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/24.gif' alt='=))' class='wp-smiley' /> )</li>
<li>Pengenalan juri: yah, disini terdapat sesuatu yang lain dari biasanya, yaitu adanya juri dari Universitas lain, yaitu UK Maranatha, dan Unpar.</li>
<li>Pengenalan tim peserta: terdapat 47 tim (kl gak salah inget), dan beberapa yang menarik perhatian gw adalah tim-tim berikut ini:
<ul>
<li>Shianghai Jiao Tong (Joy, Seed): tim ini bisa dibilang merupakan tim terkuat dalam kompetisi kali ini, dan merupakan salah satu calon juara dunia.</li>
<li>Zhongshan(Sun Yet-sen) (ZSU_Uriel): universitas ini juga merupakan penghasil tim-tim kuat, tapi sayangnya tidak tau, apakah tim yang datang ke site-jakarta merupakan yang terkuat atau bukan. (cukup menarik untuk ditunggu aksinya <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> )</li>
<li>Universitas Hongkong (Far): Ngak bisa dipungkiri lagi, tim HKU yang bernama Far merupakan tim terkuat mereka (masih teringat dikalahkan 2 kali di regional Filipina (waktu itu anggotanya bener-bener dasyat <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> )).</li>
<li>Bina Nusantara (Pandemonium): kayaknya sih mereka ini penerus terkuat (walau agak-agak sangsi apakah bisa saingan sama tim-tim diatas (piss ko)).</li>
</ul>
</li>
<li>Trial Session: dari trial session ini juri mendapatkan beberapa pengalaman berharga (baca: masalah/bug), sebagai berikut:
<ul>
<li>Ada submitan peserta yang pertama kali dijalankan mendapatkan TLE, dan ketika dijalankan lagi, malah dapat AC dengan waktu yang cepat,</li>
<li>Ada submitan peserta yang mendapatkan TLE atau RE, yang menyebabkan submitan peserta lain yang dijalankan setelahnya terkena RE,</li>
<li>Settingan pada server pc-square, ter-reset secara tidak jelas, yang menyebabkan juri tidak dapat menjalankan submitan dari peserta.</li>
</ul>
<p>    dan dari trial session ini juga terlihat dengan jelas antara tim yang berpengalaman dan tim yang kurang berpengalaman :d. Mengapa soal pada trial session ini selalu dibuat mudah (sangat mudah) ? karena tujuannya bukan hanya mendapatkan AC dengan waktu yang secepat-cepatnya, tetapi juga untuk testing kinerja server (tim BeHoQ bener-bener membuka mata judgenya <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> , dimana mereka membuat bug 1, dan 2 muncul kepermukaan), environment komputer juri (testing settingan compiler juri, besar maksimal memory yang dapat dipesan (heap), besar stack memory (biasanya menggunakan rekursi (bisa tahan brp dalam)), kecepatan komputer juri (testing dengan looping)) , respon juri (baca: kapabilitas, dan kecepatan juri)</li>
</ul>
<p>Setelah acara trial, semuanya kembali ke tempat peristirahatan masing-masing dimana semua juri siap-siap gak tidur (Suhendry nungguin gw ama ndok buat test case untuk soal masing-masing <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> .)</p>
<hr />
Behind the Scene<br />
<br />
Soal I yang semula adalah soal sulit (Izzi tree blablabla (gw lupa judulnya)), ternyata solusi juri mengalami kesalahan lemma, sehingga juri tidak memiliki solusi valid untuk soal itu <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/32.gif' alt=':-$' class='wp-smiley' /> . Akhirnya lewat perundingan mendadak, Kurniady dan Suhendry membuat soal mudah (diharapkan menjadi soal tingkat medium) yang bernama &#8220;ICPC blablabla (lupa juga judulnya)&#8221;. (Tapi seharusnya peserta diuntungkan oleh kejadian ini, kl ngak, bakal ada 5 soal &#8220;hokage&#8221; (kl istilah Timo <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> )).</p>
<hr />
21 Oktober 2008<br />
<br />
Ini dia waktunya perperangan, jam 1/2 8 pagi gw dah dateng ke binus (gila deh, biasanya gw dateng kantor aja jam 1/2 11). Setelah makan, akhirnya masuk juga ruang juri, dan kabar baiknya, Suhendry sudah menemukan salah satu masalah pada server yaitu kurangnya heap memory pada server yang menyebabkan pc-square tidak berjalan dengan semestinya. Untuk mencegah bug pada trial session berikut ini rencana juri dalam mengatasinya:</p>
<ul>
<li>Kl ada TLE, maka akan dicoba dijalankan 1-2 kali lagi untuk memastikan apakah submitan tersebut benar-benar TLE atau terjadi bug pada pc-square</li>
<li>Kl terjadi RE, segera liat coding peserta, apakah terdapat hal-hal mencurigakan yang dapat menyebabkan RE, atau tidak, kl tidak terdapat hal yang mencurigakan pada coding, maka yang mencurigakan adalah komputer juri, dan akan segera dialihkan ke 2-3 komputer juri lain yang masih beres.</li>
<li>Kl terjadi masalah nomor-3 (ditandai dengan semua komputer juri tidak dapat menjalankan submitan peserta), maka restart server, setting ulang, dengan waktu secepat-cepatnya.</li>
</ul>
<p>Jam 8.27, kompetisi dimulai &#8230;<br />
<br />
Juri mulai penasaran, apakah dalam 5 menit, sudah ada tim yang mendapatkan AC. Ternyata sampai 10 menitpun belum ada 1 pun tim yang submit. Pada menit ke-14, tim UP-Fighting Morons, submit soal J, dan &#8230; (AC), kemudian disusul oleh tim KbPeckers AC soal E pada menit ke-18, tim Lachesis AC soal E pada menit ke-19 (Yeah Binus rank 2 atau 3 gw lupa <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> ), dan tim yang ditunggu-tunggu (Joy) akhirnya AC soal J pada menit ke-20.<br />
<br />
Pada menit ke-24 akhirnya tim Pandemonium berhasil solve soal J (yes, maju terus koo!!!). dari rank sementara ini, seharusnya tim lain sudah mendapatkan referensi, mana soal bonus-nya <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> (J !!).<br />
<br />
Kemudian lupa dengan kejadian lain, karena yang terjadi hanya hal-hal biasa, tau-tau terdapat submitan dari Joy untuk soal A pada menit ke-30 daaan &#8230; AC (peringkat 1), eh gak lama lagi KbPeckers pada menit yang sama untuk soal J daaan &#8230; AC (peringkat 2), dan 1 menit kemudian, pandemonium submit soal E daan &#8230; AC juga (peringkat 3 euy &#8230;).<br />
<br />
Sekarang cerita akan difokuskan pada tim Joy, pada menit ke-45, AC soal E, kemudian menit ke-58 AC soal I, dan soal G pada menit ke-61 (Yeah, I know, these problems are 5 from the 6 easiest problems here, tapii, dalam 1 jam, rasanya cukup brutal <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/4.gif' alt=':D' class='wp-smiley' /> ).<br />
<br />
Okay, sekarang cerita akan difokuskan kepada semua tim. Pada menit ke-61, kondisi tim-tim adalah sebagai berikut: Joy (5), Seed (3) (cukup keren, mereka solve ke-3 soal tersebut semua pada menit 4x), ZSU_Uriel (3), KbPeckers (2), No Idea (2), Pandemonium (2), hi hi (2), UP Fighting Morons (2), BeHoQ (2), UI_3 (2), ITTTel02 (2), RTC (2), dst dst cape nulisnya. Yang membuat gw agak bingung itu tim Far (0)  <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/13.gif' alt=':-O' class='wp-smiley' />  (Apakah tim mereka melemah setelah ditinggal Liu Kay Man dan Kelly <img src='http://evan-leonardi.net/wp/wp-includes/images/smilies/7.gif' alt=':-/' class='wp-smiley' /> ).<br />
<br />
Setelah kejadian-kejadian bru