\documentclass[english]{book}
\usepackage[thai]{babel}
\usepackage[dvips]{graphicx}
\usepackage{verbatim}

\makeatletter

\newenvironment{code}{\vspace{2pt}\small}{\vspace{2pt}}

\newcommand{\usett}{\selectlanguage{english}\tt}

\newtheorem{thm}{Theorem}[section]
\newtheorem{examples}[thm]{\em ������ҧ���}

\newcommand{\instpic}[3]{
	\begin{figure}[!htbp]
	\vspace{0.3cm}
		{\centering
			\includegraphics{#1}
			\par}
		\caption{\label{#2}{#3}}
	\vspace{0.3cm}
	\end{figure}
}


\makeatother
\begin{document}


\frontmatter 

\chapter{Objective-C ��� GNUstep}

\title{Objective-C ��� GNUstep}

\author{by a suchness of philosophy}
\maketitle

Copyright (c)  2002  Ching San Free Software School.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections.
A copy of the license is included in the section entitled "GNU
Free Documentation License".


\tableofcontents{}
\chapter{����}
��ѧ�ҡ������¹����������ͧ Objective-C �����á�� Project-ILE \footnote{http://www.project-ile.net} �����ҹ�觹֡�͹�֡��� ��ԧ����Ǽ���è���¹˹ѧ��͢�����ѡ���� �������ʴ���������֡�ͧ������ǡѺ�ǤԴẺ�Ϳ����������\footnote{http://www.fsf.org} ��������֡�����ҹ�� �����ҡ����繵����ѡ��������������¤����Ӥѭ�ͧ�ǤԴ�ѧ����� �������ǹ������Ǽ�������Ҩйӻ���ª�����������ªҵ����ҡ���ҹ��� ��Сͺ�Ѻ�������ö�ҷ�����繤��ѹ��ʹ����� Objective-C �����Ѳ����������ҧ���ҧ��ҧ 㹷��á���Դ����¹˹ѧ���������������ҽ��� ���й�鹼���Դ��ҵ��ҽ��觡��������ҡ�����д��������� �֧��ŧ���Ҩ���¹���������� ���ͷ���ԧ�Ҩ���繢�����Ƿ��ҡ�˵ؼŷ��������¨�������ǡѺ���ҽ��觡������ �����˵���лѨ��·���������㹵͹������ �Ƿҧ�ͧ˹ѧ����������֧�����������ҹ�ǤԴ��ԧ������ͧ��ҡѺ�ǤԴ����ͧ෤�����������������ǡѹ����ҡ����ش��ҷ�������� ����Ƿҧ˹�觨��鹹��ʹ���੾�������ҷ���繫Ϳ������������ҹ�� ���ͨо��������Ҵ�ԧ�֧�Ϳ������Ẻ����Ңͧ�����·���ش��ҷ�������� �����������ҹ���˹ѡ�֧�����Ӥѭ�ͧ�ѧ������è���Ϳ�����������繷�Ѿ�ҡ�����繤�ҹ�����鹰ҹ ����ա�Ƿҧ˹�� ��͡���ʹ������Ңͧ��Ѫ�ҫͿ�����������µç �����Ҩ����ǹ�ͧ���ӹ������������ҵ͹���¢ͧ˹ѧ��������ͧ���ҷ�ͧ�Ϳ������������� GNU project\footnote{http://www.gnu.org}

������ͧ������ҡ���¹�������ҹ��Һ���������͹����ҹ˹ѧ�����С��˹�� ��Ҵ����˵ط��˹ѧ������������˹ѧ��������á������¹���� ��м���������վ����Ҩҡ�ѡ��¹���С��� �֧���������ҹ�����������ǧ˹�Ҵ�����ҡ�ù��ʹ��Ҩ�й�������������ǹ�Դ���仺�ҧ ��觡��ͧ������㹤��������ͧ�ѧ������� � �������� ����ش���¹�����ѧ��Ҽ����ҹ�����Ѻ�������ҡ˹ѧ�����������������ö������ª�������ҧ��ԧ�ѧ ���Ͷ�Ҽ����ҹ�բ���ʹ���ѹ���Դ����ª������ǹ��� ��ҹ����ö��¹�ҵԪ����� email address \emph{id@project-ile.net} ���ͷ�������Ӣ���ʹͧ͢��ҹ�һ�Ѻ��ا����������� edition ���仢ͧ˹ѧ����������

\subsubsection*{���ʴ������Ѻ���}
\subsubsection*{a suchness of philosophy}
\mainmatter

\chapter{��Ѫ�����ͧ�鹢ͧ�����¹�����Ẻ Object-Oriented}

\section{��÷ӧҹ�ͧ�����Ẻ Object-Oriented}

Object-Oriented ���¶֧����͡Ẻ������������˹�������� ������˹��¨����ѡɳТͧ����ͧ ����Ҩ�����º��º�Ѻ���Ե��Ш��ѹ �蹷��ӧҹ�ͧ��ҫ�觻�Сͺ���ºؤ�ŵ�ҧ� ���Ф���˹�ҷ��ᵡ��ҧ�ѹ� ���Ф��պ��ҷ��Ф����Ѻ�Դ�ͺ��ͧҹ�ͧ����ͧ �դ��Ӥ������Ҵ �դ�������͡��� ���Ф���������˹��¡���բ�����੾�Тͧ����ͧ �ҧ�����š��Դ�����˹��§ҹ��蹷�Һ�� ��е�ͧ��˹��·���¨Ѵ������ͺ�����˹������µ�ҧ�����ҹ������ʹ���ͧ�ѹ ��С��ǡ��¡ѹ���·���ش ������������ѵ�ػ��ʧ�������ѹ

\section{�ѡɳ�੾�Тͧ Object}

�����¹�����Ẻ Object-Oriented �Ъ������س����ö�Ѵ��áѺ�����¹�������Ҵ�˭����дǡ��觢�� �������ö��Ш�§ҹ�͡���������˹��·ӧҹ�����ѹ�¨Ъ���Ŵ������ӫ�͹�ͧ�ҹ�ͧ�س��з����ҹ�����Ǵ������觢�����Ŵ�͡�ʷ����Դ��ͼԴ��Ҵŧ ��ѡ��ù��С�Ш�§ҹ�ͧ�س�͡��˹�������������¡��� object ����˹������¨еԴ���������áѹ���¡���� message �֧�ѹ ������� object ������Ըշ��ͺʹͧ��� message �����ҧ�ѹ� �ѡɳз���Ӥѭ�ͧ object �����Ѫ��Ẻ Object-Oriented �л�Сͺ������觵��仹��

\subsection{Object}

object ����͡�����ͧ��������Ъش����觷����С�����ѹ ¡������ҧ�ҡ㹪��Ե��Ш��ѹ�� ����Ҩ���������عѢ���˹���� object ��á�з���ͧ�عѢ ���͡�á�з���ͧ��ҵ���عѢ��ǹ�鹶���繪ش����� �蹶��������¡�����عѢ��ǹ�� �����¶֧����� message �͡�عѢ��ǹ�� ������عѢ���Ѻ message �ҡ��� �ѹ���Ҩ��ʹͧ message ��� ��Ըշ���ҧ�ѹ �蹶���ѹ�Ҩ������������ ���Ͷ���ѹ�����¨ �ѹ���Ҩ�з������ʹ� 㹷�������зҧ�Ե�ͧ�عѢ�����繢�����੾�Тͧ�عѢ��ǹ�� ����������ö���֧�����Դ�ͧ�عѢ��ǹ���� ��觷���Ӥѭ����Ѻ object �֧���͡���ͧ��ǹ��ѡ ��͢����� ��Ъش����觷�����ͺʹͧ message ��� message �����繨е�ͧ�١���Ҩҡ object ������ҹ�� object ����ö�� message ���Ѻ����ͧ���� �ѧ���ٻ \ref{pic:object} ���ʴ��֧������(data)��Ъش�����(method)

\instpic{Object.eps}{pic:object}{Object ��Сͺ���¢�����(data)��Ъش�����(method)}

\subsection{Class}

����� object �������ѡɳШ���Тͧ����ͧ �ҧ object �Ҩ�Ф���¤�֧�ѹ �����Ҩ��ᵡ��ҧ�ѹ���� �ͧ���º�Ҿ�ͧ������عѢ ����ͧ���ҧ���ѡɳз��ᵡ��ҧ�ѹ �����ͧ���ҧ���ըش�����ѹ���� �蹷�駤�����عѢ ��ҧ�����ѵ������§�١���¹� �ѡɳз��ᵡ��ҧ�ѹ��� �١�¡�͡�ҡ�ѹ���� class �����Ҩ�������� ��¾������ object � class �� ����ҧ �� object �������� class �عѢ �繵�

\subsection{Encapsulation}

���¶֧��÷����ҹӡ�����ͧ��������С�����ͧ�ش������ҨѺ������ѹ�� object ˹��� ��������繡�áѹ������ object ��������ö��Ҷ֧ object �������µç �ѧ������ҧ�����ҡ������������ ����������ö��ҹ��عѢ���µç ����Ҩ���ѧࡵ����ѹ������ ��ФҴ����ѹ������֡���ҧ�� ��÷� encapsulation ���դ���������ѡɳй���觡�� encapsulation ���з�����������ö�¡���� object ��ҧ��͡���˹�ҷ����к��ҷ�ͧ�ѹ ��Шз�����������ö�� object �����������дǡ��觢��

\instpic{Encap.eps}{pic:encap}{��õԴ��͡Ѻ Object �����ѡ��� Encapsulation}

�ٻ \ref{pic:encap} ���ʴ��֧��õԴ��͡Ѻ object ��Ҩе�ͧ�Ӽ�ҹ message ��� return �¨�����ա����Ҷ֧ data �ͧ object �µç ���ҧ�á��� �����ҡ����Ҷ֧�����Ţͧ object �µç�Ҩ�мԴ����ҷ�ͧ�����¹�����Ẻ Object-Oriented �������ҡ��Ҩ��������ش�����������������¹͡ object ��Ҷ֧������� object �µç��¡��� ���С����Ҷ֧�������¼�ҹ message �з����������ӧҹ���ŧ


\subsection{Message}

���������������ҧ object ���͡�õԴ��͡Ѻ object �� ������¡���� message ��ѧ object ���� �����˹�ҷ��ͧ object ������е�ͧ�Ѵ�Թ���Ҩеͺʹͧ message ������Ѻ���ҧ�� ��鹵͹㹡�õͺʹͧ����ͪش��������� method ���١ encapsulation ����� object ���㹡����¹����� message ������Ѻ ��з���� object ���¡ method �����͵ç�Ѻ object ����ҷӧҹ ��㹺ҧ�ó� object ��� �Ҩ����� method ���ç�Ѻ message ������Ѻ���� ����� Objective-C ���դس�ѡɳ��Ӥѭ��С��˹�觷�����¡��� dynamic-binding �������ö��Ѵ��áѺ message ������������ѡ�� ��������ͧ����Ҿ�ͧ����� message �Ѵਹ��� �Т�¡������ҧ��� \ref{ex:messaging} ��Сͺ

\begin{examples} �������С���Ѻ message
\label{ex:messaging}
{\usett
\begin{verbatim}
voice = [dog bark];
\end{verbatim}
}
\end{examples}

�ҡ������ҧ���繡���� message {\usett bark} ���Ѻ object {\usett dog} �������� object {\usett dog} ���Ѻ message {\usett bark} ������¡ method {\usett bark} ����ҷӧҹ ��� method ���觤�ҡ�Ѻ��᷹��� {\usett voice} ��ҷ���觡�Ѻ�ҹ�� ��ͤ�ҷ�� method ���١���¡����ҷӧҹ�觡�Ѻ����� ����Ҩ��������ٻẺ㴡����鹡Ѻ method ����

\subsection{Polymorphism}

���¶֧��÷�� object ���е������ö���еͺʹͧ message ���Ѻ���ҧ���ǡѹ��Ըշ��ᵡ��ҧ�ѹ �蹶������� object �ҡ class {\bf ���} �Ѻ object �ҡ class {\bf �ѡ��ͧ} ������ message {\bf �ӧҹ} ���Ѻ����ͧ object ���� object {\bf ���} ���{\bf �ӧҹ}���¡���ѡ�Ҥ��� 㹢�з�� object {\bf �ѡ��ͧ} ��{\bf �ӧҹ}���¡����ͧ�ŧ�繵� ��÷�� object ���� object �еͺʹͧ message ���ҧ�â������Ѻ method �ͧ���� object ���� method �Ҩ���ժ��ͫ�ӡѹ���Ҩ�зӧҹᵡ��ҧ ���ͧҹ���ҧ���ǡѹ���� �ѡɳС�õͺʹͧ message ��Դ���ǡѹ ��ᵡ��ҧ�ѹ�� class ����ҧ�ѹ�蹹�� ���¡��� {\bf polymorphism}

\instpic{Poly.eps}{pic:poly}{Polymorphism ��͡�õͺʹͧ�ͧ object ��� message Ẻ���ǡѹ��Ըշ���ҧ�ѹ}

\subsection{Dynamism}

�л�Сͺ���¤س�ѡɳ�����������С������

\subsubsection{Dynamic Binding}
���ѡɳз���Ӥѭ�ҡ��С��˹�觢ͧ���� Objective-C ������ѡɳз��о���㹺ҧ���Ҩҡ���ҷ����Ẻ Object-Oriented ������ ����������������Ẻ dynamic binding ��  ������� Smalltalk-80 ��������ҵ�Ẻ�ͧ���� Objective-C �繵� �ѡɳз����ҹ���͡�èѴ��õդ��� message ��з��������ӧҹ����᷹���еդ���������ҧ��� compile ������� C++ ��õդ��� message Ẻ dynamic binding ���¶֧����� object ���Ѻ message �� object �зӡ�����º��º message �����Ѻ method 㹢�з����������ѧ�ӧҹ���� �ѧ���������֧����ö compile ��зӧҹ���������繨е�ͧ�� method ���ç�Ѻ message ��鹨�ԧ� �͡�ҡ����ѧ������÷� Distributed Object ���͡�÷�������˹���� message ����ա�������������繨е�ͧ�ӧҹ���躹����ͧ���ǡѹ �����������ҧ���

\subsubsection{Dynamic Typing}
��͡�÷�������������ö��Һ class �ͧ object ���س�� message ����������繵�ͧ��С��������ҧ��Ш�㹵͹ source code �������� �س����ö��˹����������з������ö�Ъ����ѧ class ���á��� �������ͤس�� message ��ѧ object ��� ������������ö���͡ method ���١��ͧ���͵ç�Ѻ class �������ҷӧҹ�·��س����ͧ�͡��� message ��鹶١����ѧ class � 㹺ҧ���������� C �س�е�ͧ�͡����������Һ��͹ compile ��Ҥس��ͧ��èШѴ��áѺ������Ẻ� ���ͷ�����¡��ҡ�� \emph{casting} ����ͧ

\subsubsection{Dynamic Loading}
���¶֧��÷��س����ö load object ����Ҩҡ file system ����ͤس��ͧ��è���ҹ �������繵�ͧ link �����ǧ˹�� �ѡɳС�÷ӧҹ�蹹��������ǡѺ����� shared library ���͡���� function {\usett dlopen()} ����� C �������¡�ش����觷��س��ͧ��������Ҩҡ file system �������繵�ͧ�ӡ�� link ����͹

\subsection{����׺ʡ�� (Inheritance)}

class �ҧ class �����ѡɳ������ѹ �� class �� �Ѻ class �عѢ ��ҧ�����ѡɳТͧ class �ѵ������§�١���¹� �ҡ�ѡɳдѧ���������ö���¡����� class ����� class �عѢ ��ҧ���� subclass �ͧ class �ѵ������§�١���¹� ��� class �ѵ������§�١���¹� �� parent class �ͧ class �� ��� class �عѢ ���ͤ���������觢�� ����Ҩ��¹Ἱ�ѧ class ��ҧ��Сͺ���¢�������Ъش����觴ѧ������ҧ��� {ex:classlist}

\begin{examples} ������ҧ�ͧ����ӴѺ Class ��Ф�������ѹ��
\label{ex:classlist}
{\usett
\begin{verbatim}
class:MAMMAL
parent class:ANIMAL
data:gender
method:eat,sleep

class:DOG
parent class:MAMMAL
data:name
method:bark

class:HUMAN
parent class:MAMMAL
data:name
method:say
\end{verbatim}
}
\end{examples}

�ҡ������ҧ��� \ref{ex:class} class MAMMAL �����ѵ������§�١���¹� ���� subclass �ͧ class �ѵ�� �բ��������ҧ���Ǥ���� ����� method �ͧ method ������㹡�áԹ(eat) ��й͹ (sleep) 㹢�з�� class �� (HUMAN) ����عѢ (DOG) �����繵�ͧ��С�Ȣ�������Ъش����觷���ҡ�� parent class ��� �ѡɳ��蹹�����¡��ҡ���׺ʡ������ {\bf inheritance} ���������繡���׺ʡ�� ��� class ������عѢ�л�Сͺ���� method eat, sleep ��Т����� gender �·�������繨е�ͧ��С�ȫ�� ���з���ͧ class �����׺�ʹ (derive) ��������Ъش����觴ѧ������Ҩҡ parent class ���ѵ��ѵ� ���ҧ�á��� �Ҩ�� class �ҧ class ���������׺ʡ���Ҩҡ class �������������� parent class ������¡ class ������������ root class

����׺ʡ�� ������������ö�� code ��������������дǡ��� ����Ҩ�������ҧ class ������� ���������ҵ�ͧ������������������ö���Ѻ class ��� ��ҡ���§�����ҧ class ����������׺ʡ�Ũҡ class ��� ������������ش�������Т����ŷ����ҵ�ͧ���ŧ� ��觨з��������з���͡�÷ӧҹ�ͧ��ǹ����ͧ���������� class ������� �͡�ҡ��� ����ѧ�Ҩ���ҧ class ��Ҵ�������ӹǹ˹�� ������� class �������ҹ�����ѹ�����������������ա���� ��Ҩо������ Object-Oriented frame work ��ҧ� �����Ҩ����������á��� �л�Сͺ���� class ��Ҵ��硨ӹǹ�ҡ ����������ҹ frame work ���� ����§��֧ class ���������ҹ������ҹ �����Ҩ���׺ʡ�Ũҡ class ����ҹ�鹡��� ��ж�� frame work �����͡Ẻ�����ء class �׺ʡ���Ҩҡ class ��§ class ���������� root class �����ѹ��§ class ���� ��Ҩ����¡����͡Ẻ����������ѡ���Ẻ \emph{single object hierarchy} ��觨Ъ���������Ŵ�����Ѻ��͹㹡�äǺ�����ШѴ��� object �ӹǹ�ҡŧ��

\instpic{Inheritance.eps}{pic:inheritance}{�������ö�׺�ʹ��������Ъش����觨ҡ parent class ��ҹ����׺ʡ��}

\section{�ǤԴ����ͧ����͡Ẻ�����Ẻ Object-Orieted}

\subsection{����觧ҹ�͡��˹�������}
�����¹�����Ẻ����ѡ�Դ�ѭ������� source code �բ�Ҵ�˭� �蹻ѭ��㹡�÷ӹغ��ا���ͻ�Ѻ��ا���������� ����ҡ�ռ��Ѳ�����¤����Ҩ���Դ�����Ѻʹ��੾������ͼ��Ѳ���������ö�ӧҹ������ѹ�������ö�Դ��͡ѹ�����ҧ�дǡ �͡�ҡ��� ��ù��ǤԴẺ Object-Oriented �Ъ���Ŵ�ѭ������ҹ�����ҡ ���С����������͡����ǹ�����������Шҡ�ѹ�Ъ���Ŵ�����Ѻʹ㹡�èѴ��� ��þѲ��������Ẻ Object-Oriented �֧��价������ object ��ҧ��������ӧҹ�����ѹ�����ҧ�ջ���Է���Ҿ����ش ������¡������ͧ object �����ӧҹ�����ѹ���ըش������������ѹ��� object frame work �͡�ҡ������͡Ẻ�����Ẻ Object-Oriented �з����س����ö�� code �����¹������������ �������������������ö���дǡ��觢�鹡��ҡ����¹����෤�ԤẺ procedural ��觤س�е�ͧ�Դ���˹��µ�ҧ�Ѵ��áѺ���������µç ������ҧ�����Ѻʹ����ͤس��ͧ�ӧҹ�繤���˭�� ��������ͤس����¹�ŧ�ش˹�� ����觼š�з���ͨش���������仴��� 

\subsection{��ù������������ҧ�дǡ}
㹡���觧ҹ�͡��˹������� ����ѡ�Ӥѭ����ͧ���֡�Ǻ���仴������� �����Ҥ�è����͡Ẻ�������ö�� object �����������ҧ�дǡ ��ͧ�Դ����͹Ҥ� ��Ҩ��������㹡���� object �������ҧ�� ��ͧ��������͡Ẻ����׺ʡ�����ҧ������� �������͡Ẻ message ����繡�ҧ �����������ö��������� ��е�ͧ������Ŵ������ӫ�͹�ͧ object � frame work ���� �������Ӥѭ��������������͡�÷��͡��û�Сͺ object �������Ѵਹ������������

\subsection{����� Dia �������ҧ UML ���ҧ����}
㹡���͡Ẻ object ��� ����Ҩ������ͧ��͵�ҧ����ͪ���㹡���͡Ẻ ������� Dia \footnote {http://www.lysator.liu.se/~alla/dia/} ����繫Ϳ���������շ������ö������㹡����¹ UML ����
\subsubsection{����͡Ẻ object ���� UML}
\subsubsection{����� Dia ���ҧ UML}

\chapter{���� Objective-C}

\section{�Ҿ�����л���ѵԢͧ���� Objective-C}

\section{������ҧ��С����ҹ Class ����� Objective-C}

\subsection{�ٻẺ��û�С�� Class ��С�����ҧ Object �·����}

�����¹������������� Objective-C �л�Сͺ���¡�û�С�� class ��С�ù� class ����С������ҹ 㹢���á �Т�¡������ҧ��Сͺ�����¹��������� Objective-C Ẻ�����ѧ������ҧ��� \ref{ex:samplecode}

\begin{examples} ������ҧ��������� Objective-C ���ҧ����
\label{ex:samplecode}
{\usett
\begin{verbatim}
#import <objc/Object.h>
@interface Person : Object
{
    char *firstname;
    char *lastname;
    int age;
}
- setName:(char *)newname lastName:(char*)newlastname;
- setAge:(int)newage;
- introduce;
- (int) age;
@end

@implementation Person
- setName:(char *)newname lastName:(char*)newlastname
{
    lastname = newlastname;
    firstname = newname;
}
- setAge:(int)newage
{
    age = newage;
}
- (int) age
{
    return age;
}
- introduce
{
    printf("I am %s %s.\n",firstname,lastname);
}
@end

int main() {
    Person *aPerson;
    aPerson = [Person new];
    [aPerson setName:"Pruet" lastName:"Boonma"];
    [aPerson setAge:40];
    [aPerson introduce];
    printf("He is %d year old.\n", [aPerson age]);
}
\end{verbatim}
}
\end{examples}

��Ҥس���͹ ��ҡ���ͧ�����������ҧ�Ǵ���� ������ҧ������������������Ҫ��� {\usett file.m} ���������ҵ��������ҧ ���� compile ���¤����

{\usett gcc -o test file.m -lobjc -lpthread} \footnote{㹡ó��� gcc �����ѧ� �س�Ҩ����ͧ��� {\usett -lpthread} ����}

�س������������� test �͡�� ��鷴�ͧ���¡����ҷӧҹ

{\usett ./test}

��ù���� class ���������� Objective-C �л�Сͺ������ǹ�Ӥѭ��ѡ�ͧ��ǹ�����ǹ {\usett @interface} �����ǹ {\usett @implementation} � class ˹���л�Сͺ�����ͧ��ǹ��� �·��������ѡ������ǹ {\usett @interface} �������ʡ�� {\usett .h} �����ǹ {\usett @implementation} ����ʡ�� {\usett .m} �ҡ������ҧ���繡�û�С�� class ���� {\usett Person} ������׺ʡ�Ũҡ class {\usett Object} ����� class ��鹺��ش ���� root class


\subsubsection{Interface}

�������� class ���ǹ�ͧ�����Ţͧ object ����繡�û�С����� class ������Һ�������ö�� message ������������ҧ ����ԧ����㹡�û�С�� {\usett @interface} ��������繨е�ͧ��С�����ǹ�ͧ message ���¡����������� Objective-C ���� dynamic-binding 㹡�����͡ method ����ҷӧҹ��� message ������Ѻ����ҷ��������ӧҹ��ԧ �ѧ��� compiler �з���§��ѡ��͹�����ҹ���ҡ����������ǹ����С�� message � {\usett @interface} ���С�� method ������ǹ�ͧ {\usett @implementation} �����Ҩ������Ƕ֧����

�ҡ������ҧ��� \ref{ex:samplecode} ���ǹ�ͧ {\usett @interface} �����С����� class ��ͧ��â��������������͹����ʶҹТͧ�ؤ�Ť�˹�� ����������ҹ���Сͺ���ª��� ���ʡ�� ������� �繡�û�С�������ǡѺ��û�С�ȵ��������� C ����á�� ����������ҹ���ѧ����ö��Ҷ֧���µç�ҡ method �ͧ class Person �͡�ҡ��� ����ѧ��С�ȶ֧ method ����ǫ����˹�ҷ���ҧ�ѹ� (��ҨС���Ƕ֧�ٻẺ�ͧ���� method �����ͧ�ͧ message ��� selector) �բ���ѧࡵ��ҡ�û�С�ȵ����� class �е�ͧ����ӡѺ������ parent class ���� class ��������٧���仵���ӴѺ�ͧ����׺ʡ�� �����ǹ�ͧ���� method ��� ����ö��������ǡѺ��������� {\usett age}

�ٻẺ�ͧ����� {\usett @interface} ��������鹴��� {\usett @interface} ������ª��ͧ͢ class ��觹�������˹�Ҵ��µ���ѡ���˭�����������ͧ���� "{\usett :}" ���ǵ�����ª��� class �������׺ʡ���� �����ҡ����� class ����׺ʡ���ҡ�����ͧ�������ͧ������Ъ��� parent class ��觶������� parent class ��ж����� class ����� root class ��㹡����¹������·����������Ҩе�ͧ�� parent class ���� ������������ parent class � ������� root class ŧ� ����û�С�� root class �����������ա ���������˵ؼŷ������è�ԧ�����Ҩ���¡������ҧ㹺����¹����٧�ͧ˹ѧ����������

\subsubsection{Implementation}

����㹡�ù������ǹ method �ͧ class ���������С��������ǹ {\usett @interface} ����ҡ�����ö��С�� method �������繵�ͧ���������ǹ {\usett @interface} ����ѧ�������������� �ѡɳТͧ��û�С�� method ������͹�Ѻ��û�С�� function ����� C ����� ���������ö��ҧ�ԧ�֧����÷���������ǹ {\usett @interface} ���µç �͡�ҡ����ѧ����ö��ҧ�֧�����ŷ������� parent class �����٧���仵���ӴѺ���µç�蹡ѹ �����ҧ�֧������� object ������á����Ҩ��������ö��ҧ�֧���������� object �ҡ method ������������ǹ˹�觢ͧ object ���Ͷ١��С������ class ��駹����仵����ѡ��� Encapsulation �����ҧ�֧��������� object �֧��÷Ӽ�ҹ method ��ҹ�� �� method {\usett -age} ��觨� {\usett return} ����������ͤ�Ңͧ����� {\usett int age} �����ҧ�á��� �������ö�кآͺࢵ�ͧ�����Ҷ֧����õ�ҧ�� object ����¡���� keyword 3 �������
\begin{itemize}
\item {\usett @private} �������Ҷ֧��੾�� method � class ���ǡѹ
\item {\usett @protected} �������Ҷ֧��੾�� method � class �������֧ class ����׺ʡ��
\item {\usett @public} �������Ҷ֧�����ҧ�����
\end{itemize}
��觨������Ƕ֧���������´����

\subsection{��ѡ��÷ӧҹ��鹰ҹ�ͧ����� Message, Selector ��� Method}

��õԴ��͡Ѻ object ������¡���� message ��ѧ object �������� Objective-C ���¶֧����� selector ��ѧ object ��� selector ���͢������ٻẺ˹�� �������ö��С�Ȣ�����Ẻ selector ����¡���� keyword {\usett SEL} �� {\usett SEL aSelector;} �����ǡѺ��û�С�Ȣ�����Ẻ���� ��÷ӧҹ�ͧ dynamic binding ����� Objective-C ���Դ�������� selector ����ͧ ����� object ���Ѻ message ���١������ٻ�ͧ selector ���� object ��й� selector ����������º��º�Ѻ method ���١��С������ class ��觶����辺 object ������ö�� selector ������Ѻ�ҵ�Ǩ�ͺ���ͨѴ��õ��� �����Ҩз������ʹ� message ��� ���ͨзӵ���� proxy �� selector ��鹵����ѧ object ������� ��кǹ��÷���������Դ������ѵ��ѵ� �������ö������� method ���ͨѴ��áѺ message ������������ѡ�� ������Ҩ�����º��º selector ������Ѻ�Ҵ��¡�û�С�� method ����ɺҧ����� ��觨ж١��������������� object ������ѡ message ������Ѻ������Ѻ��ҹ��� selector ��� object ���������ѡ�Ҵ��� ����ҨС���Ƕ֧��������´���ǹ�ͧ dynamic binding

message ���١�����ѧ object ��������ٻẺ {\usett [object message];} ��ж�� method �ա�� {\usett return} ������Ѻ�� ��ҡ�����ö�Ѻ��ҷ��١�觡�Ѻ���������ǡѺ������¡�� function ����� C �� {\usett return\_value = [object message];} �����ҧ�֧���� message �����ѡɳдѧ�����

\begin{itemize}
\item message ���繢�ͤ����Դ��͡ѹ��¨й�˹�Ҵ��µ���ѡ�û�Сͺ�ѭ�ѡɳ� "{\usett \_}" ��� "{\usett :}"
\item �ѭ�ѡɳ� "{\usett :}" ��������Ѻ����á�����������ҧ message �������ͪ�Դ�ͧ�����Ũ�����ռšѺ���� message
\end{itemize}

�ѧ��� �ҡ������ҧ��� \ref{ex:samplecode} ��û�С�ȶ֧ message

{\usett
\begin{verbatim}
setName:(char *)newname lastName:(char*)newlastname;
\end{verbatim}
}

��ѡɳй������¤������ message ����� {\usett setName:lastName:} ��ǹ���������ѧ����ͧ���� "{\usett :}" �л�Сͺ���ª�Դ�ͧ�����ŷ��ж١���繵�����ҡѺ message �������ǧ��� ������ª��ͧ͢����� �������;鹨ҡ���ͧ͢����á�йѺ����ǹ˹�觢ͧ���� message ���� ���㹺ҧ�ó�����Ҩ�� message ���Ѻ object ��ٻẺ�ͧ����� selector ����� ��᷹�����Ҩ��� message {\usett introduce} ���Ѻ object {\usett aPerson} ���������ҧ ��ҡ��Ҩ��᷹����� {\usett [aPerson perform:@selector(introduce)];} ��觡�������Ѿ�����ҧ���ǡѹ �����ҧ�á��� ����� selector ��� object �¼�ҹ message {\usett perform:} ����ѡɳз������仹�� ��ᵡ��ҧ�ҡ�����¹��������� GNUstep Foundation ��觨��� message {\usett performSelector:} ᷹ �¨����������������´�������ǹ�ͧ Foundation

㹡óշ����ҵ�ͧ������ object �� message �֧��� object �ͧ ��Ҩ��� keyword {\usett self} �繼���Ѻ message ����������ö�觼�ҹ message ��ѧ parent class ����µç���¡����ҧ��ҹ keyword {\usett super} �ѧ������ҧ��� \ref{ex:self}

\begin{examples} ����� message �ҡ method �ͧ object �֧ object �ͧ
\label{ex:self}
{\usett
\begin{verbatim}
- myMethod
{
    [self myAnotherMethod];
}

- myAnotherMethod
{
    [super aMethodInParentClass];
}
\end{verbatim}
}
\end{examples}

����������� Objective-C ���� message ������§���������ǻ�Сͺ���� method 2 ������ ���� class method ��� instance method ��觨�����դ���ᵡ��ҧ��ѡɳТͧ����Ѻ�� message ���ᵡ��ҧ�ѹ���ͧ��û�С����м���Ѻ ��ҨТ�鹵鹡�û�С�� class method ��������ͧ���ºǡ "{\usett +}" ��Ш�������ͧ����ź "{\usett -}" ��鹵鹡�û�С�� instance method ��觤���ᵡ��ҧ�ͧ method ����ͧ������������ class method ��� instance method �����¶֧ method ����Ѻ class object ��� instance object ����ӴѺ ���ǹ���� ��Ҩ������Ƕ֧����ᵡ��ҧ�����ҧ class object ��� instance object

\subsection{Class Object ��� Object Instance}

����ͧ����ᵡ��ҧ�����ҧ class object ��� object instance �Ҩ�����ҧ�����Ѻʹ���Ѻ�����������֡�������Ẻ Object-Oriented ������ҡ����� �������������ѡ��ù���§��� ����ͧ���º��º class object ���ç�ҹ����Ե�Թ������ҧ����ҧ˹�� ������ object instance (���͵��仨����¡�������� instance) ��ͼ�Ե�ѳ������ҡ�ç�ҹ���� �ҡ�ѡɳ��蹹������ҧ������ҡ����¡ class object ��� object factory �ѧ��� �ҡ������ҧ��� \ref{ex:samplecode} ��Ҩо�������ǹ {\usett main()} ������С�ȵ���ê��� {\usett aPerson} ���������ѧ class {\usett Person} ����� {\usett aPerson} ������ instance ��� Person ��� class object ���ѧࡵ�������ҡ�˹���Ңͧ {\usett aPerson} ���¤���� {\usett aPerson = [Person new];} ������¶֧����� message {\usett +new} ���Ѻ class {\usett Person} ��Ҩ���辺��û�С�� method {\usett +new} � Person ���з���ԧ�����ѹ�ж١��С������ class {\usett Object} ����� parent class �ͧ class {\usett Person}

class �������� class method �����ǡѺ instance ���������� instance method ��ҹ�� ���㹡�û�С�� class ˹��� ��Ҩл�С�ȷ�� class method ��� instance method �����ѹ�ѧ������ҧ��� \ref{ex:methoddef} ��觷��ᵡ��ҧ�ѹ�����ҧ class method ��� instance method ���� class method �������ö��Ҷ֧����÷���С��� {\usett @interface} �� ����÷��١��С������� {\usett @interface} ���¡��� instance variable ��觨ж١��Ҷ֧��ҡ instance method ��ҹ�� 

����ԧ���� ����� message {\usett +new} ��ѧ object {\usett Person} ���������ҧ��� \ref{ex:samplecode} �����ٻẺ����ͧ͢������ҧ instance ���� ��������¹�����ѡ��� inheritance ��������Ҷ�� class ���������ѡ message	������Ѻ message ��鹨ж١��ҹ���仵���ӴѺ�ͧ����׺ʡ�� �����Ҩ������� instance ������ѡ message ��������� message ��鹶١��ҹ���仨��֧ root class ���㹷������� class {\usett Object} �ѧ������������� {\usett +new} ��ѧ class {\usett Person} �ѹ��м�ҹ message �����ѧ class {\usett Object} ��觨�����¹�ѹ����� 2 message ������ͧ�ѹ ��� {\usett +alloc} ��� {\usett -init} ��������Ҩ�͡����� {\usett aPerson = [Person new];} �դ������������ǡѺ {\usett aPerson = [[Person alloc] init];} ���� {\usett aPerson = [Person alloc]; [aPerson init];} ������¤����������� class {\usett Person} ���Ѻ message {\usett +alloc} �ѹ��ШѴ��èͧ˹��¤����Ӣ�Ҵ��ҷ�� class ��鹵�ͧ��� ����ͨͧ���ǡ�� {\usett return} pointer �����ѧ˹��¤����ӷ��ͧ����͡����ٻ�ͧ instance �ҡ����� message {\usett -init} ���Ѻ instance ���͵�駤�Ҿ�鹰ҹ���������ͧ��âͧ class ���� �������Դ source code ��ǹ {\usett @implementation} �ͧ object {\usett Object} ����� ��ҡ�о���� message {\usett +new} �١��������ѧ���

{\usett
\begin{verbatim}
+ (id) new
{
    return [[self alloc] init];
}
\end{verbatim}
}

�������ҡ���� new �������ҧ instance ���������դ���ᵡ��ҧ�ҡ����� {\usett +alloc} ������� {\usett -init} ��� ������ {\usett +alloc} ������� {\usett -init} �����ӧҹ�����ǡ������� object ����ͧ��������㹡�����º��º�֧�ͧ��鹵͹

����á����Ҩ��� class method ����Ѻ�ͧ˹��¤�������е�������������ͧ�鹵�ҧ�� instance ���١���ҧ������� ������ѧ����ö�� class method ����Ѻ��Ѻ��Ҿ�鹰ҹ�ͧ class ���ա���� �����ͧ�ҡ����� Objective-C ����� class variable ������� class method ��ҹ�� ��èл�С�ȵ��������Ѻ class �����û�С�ȵ����Ẻ {\usett static} ������ǹ {\usett @implementation} �蹡�û�С�ȵ���� {\usett fake\_class\_variable} ���������ҧ��� \ref{ex:methoddef}

\begin{examples} ��û�С�� instance method ��� class method
\label{ex:methoddef}
{\usett
\begin{verbatim}
@interface MyObject : Object
{
    int x;
}
- myInstanceMethod;
+ myClassMethod;
@end

@implementation MyObject
static int fake_class_variable;
- myInstanceMethod
{
}
+ myClassMethod
{
}
@end
\end{verbatim}
}
\end{examples}


\subsection{��� Override Method}

text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text

\subsection{��÷� Dynamic Binding ����� Objective-C}

text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text

\subsection{Dynamic Typing ��� Static Typing}

text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text

\subsection{Dynamic Loading}

\subsection{Categories ��� Protocol}

\section{GNU Objective-C Compiler}

text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text

\subsection{��� Compile ��С�� Link}

text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text

\subsection{������¡��ҹ GC (gabbage collector) � GNU Objective-C Compiler}

text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text

\subsection{Objective-C++}
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
text text text text text text text
abc \footnote{http://www.areax.net/objcpp.pdf}
def \footnote{http://www.hey.com}


\section{������º��º���� Objective-C �Ѻ����Ẻ Object-Oriented ����}

���� Objective-C �ըش���������������ҷ�����������§��硹��¨ҡ���� C ��������������դ�������ö�����ͧ Object-Oriented ����ö��ҹ�����Ѻ library ��ҧ������ C �������ҧ�� ���¹�������� ��й͡�ҡ�������� dynamic binding ������þѲ������������Ǵ������觢�� ��੾�СѺ������ӧҹ��Ҵ�˭� �͡�ҡ����ѧ�� frame work �����������������ö�ͧ�������ҧ�� GNUstep ����������þѲ�������Ŵ��������ҡŧ ��ʹ����þѲ�������Ẻ GUI �������� ����������ҡ�Ѻ��͹�ա����



\chapter{GNUstep Foundation}


\section{�Ҿ����ͧ Foundation Framework}

class � foundation �� class ��鹰ҹ����������Ǣ�ͧ�Ѻ�����¹�����Ẻ GUI 
(graphic user interface) �������ö�� class ��ҧ�����ҹ��㹡�����ҧ�����������
���繵�ͧ�ʴ���Ẻ˹�ҵ�ҧ �������Ẻ daemon ���� internet service ��ҧ�

class � foundation ��ᵡ��ҧ�ҡ class ��������� Objective-C Ẻ����� ��
�ѧ����ѡ������ǡѹ ��ǹ���ᵡ��ҧ�ѹ����ͧ����Ƕ֧�繨ش�á��� root class 
���� Objective-C ���� root class �� {\usett Object} ��� GNUstep foundation 
���� {\usett NSObject} �� root class (root class � foundation �ա���˹�觤��
NSProxy ����繡óվ������Шж١��ҹ����ǡѺ distributed objects �����Ҩ��ѧ
�����ҡ���Ƕ֧ �����Ҩж֧���������Ǣ�ͧ) �͡�ҡ��� class � foundation ����
application kit �Т�鹵鹴��� \emph{NS} ������ (���¶֧ NeXTstep) �·�� class
� foundation ����ҹ�� �ж١�¡�����͡���˹�ҷ����ᵡ��ҧ�ѹ� ���������ҹ
�����ҧ�������еç����ѵ�ػ��ʧ�� �����Ҩ������Ƕ֧�������������´�ͧ��
�� class

\section{Class �Ẻ Foundation}


\subsection{��û�С�� Class �����׺ʡ�Ũҡ Class � Foundation}


\subsection{������ҧ���¡��ԡ Object Instance Ẻ��鹰ҹ}


\subsection{��ú�����˹��¤������ѵ��ѵ� (NSAutoreleasePool)}


\section{Class ��С���� Selector �·�����Ẻ Foundation}


\subsection{�����ҹ Selector}

respondsToSelector:

\section{�ҧ��ǹ�ͧ Class ����Ӥѭ��С����ҹ��ԧ���ͧ��}

\subsection{NSObject}

\subsection{String}

\subsection{Array}

\subsection{Dictionary}

\subsection{����}

\section{��ѡ��âͧ Class Ẻ Container}

\section{�ӴѺ��С���׺ʡ�Ţͧ Class
������� Foundation}

\section{���ҷ˹�ҷ��ͧ Class ��ҧ��
Foundation}

\chapter{GNUstep Application Kits}


\chapter{��þѲ����������� GNUstep �ʶҹ��ó��ԧ}


\section{෤�Ԥ����ɷ���Ӥѭ}


\subsection{��÷� Distributed Objects}


\subsection{thread}


\subsection{��÷� Multiple Inheritance � Objective-C ���¡�� Forward}


\subsection{�����觤������Ǣͧ����� message 㹨ش����繤͢Ǵ}


\subsection{��÷� Bundle}


\section{����� ProjectCenter}


\section{����� GORM (GNUstep Object Relationship Modeler)}

\section{�����ҹ GSXML ���ͨѴ��áѺ XML}

\section{��þѲ�� Web Application ���� GNUstepWeb}


\section{��þѲ�� Application 3 �ԵԴ���
GNU 3DKit}


\chapter{��ЪҤ� GNUstep}


\section{���ҷ�ͧ�Ϳ������������� GNU project}


\subsection{�������¢ͧ�����Ҿ}


\subsection{�ç�������������Ǣ�ͧ�Ѻ GNU}


\subsection{ʶҺѹ�ҧ�Ѳ������ͧ Free Software Hacker}

\section{�������ʹ������ǡѺ GNUstep �� Internet}

\subsection{Web Site}

\subsection{Usenet, Mailing List }

\input {fdl}

\end{document}
