\documentstyle[twocolumn,alltt,fancybox]{article}
\setlength{\oddsidemargin}{-10mm}
\setlength{\evensidemargin}{-10mm}
\setlength{\topmargin}{-12mm}
\textheight=23.8cm
\textwidth=18cm
\date{}
\renewcommand{\ll}{<:}
\newcommand{\sll}{\prec:}
\newcommand{\sls}{<\hbox{\tt\#}}
\newcommand{\CR}
{\ovalbox{\ooalign{\hfill$\scriptstyle\hookleftarrow$\hfill\crcr}}}
\newcommand{\maru}[1]
{{\ooalign{\hfill$\scriptstyle#1$\hfill\crcr$\bigcirc$}}}
\title{The Theory of Objects(2)\\����\ ����\ ����}
\author{��������\\����������������������ʳز�}
\begin{document}
\maketitle
\setcounter{section}{2}
\section{���ɥХ󥹥ɤʥ��饹�١�������ħ}
����Ū�ʥ��饹�١�������μ礿����ħ�ΰ�ĤȤ��ơ��Ѿ������֥��饹�ȥ��֥�����
�δ֤ǡ��ߤ��˴�Ϣ���Ƥ��뤳�Ȥ����롣�Ѿ������֥��饹�����֥����פδ֤�
conflict ��ȯ�����뤳�Ȥ����롣���֥��饹�ȥ��֥����פ���̤��뤳�Ȥ�
���̤�ǧ���ȤʤäƤ��롣

\subsection{���֥������ȷ�}
\begin{itemize}
\item (Simula �ʤɤ�)���饹������꼰���ˤ����Ƥϡ����֥������Ȥ�
����������ϡ�
�᥽�åɤμ¸�����Ǻ������äƤ��롣���Τ褦�ʾ��֤ϡ��ּ¸��פ�
���̤����ֻ��͡פ�
�ݻ�����Ȥ��������ߤǤϤ褯�Τ�줿�����˺�����褹��ΤǤ��롣
\item ���Ū�Ƕ�θ���Ǥϡ�������������ܤ��Ƥ��롣���֥������Ȥλ��ͤ�
���֥������Ȥμ¸�����̤��뤳�Ȥϡ�
���ꤵ�줿���饹�Ȥ���Ω�ˡ����֥������ȤΥ����פ�Ƴ�����뤳�Ȥˤ��
ã�����줦�롣
���Υ��ץ������Ǥ� Modula-3 ��\underline{���饹�ȥ��󥿡��ե�������
ξ��}��Ƴ�����Ƥ������ʤɤǺ��Ѥ���Ƥ��롣
\item ���̤ˡ�{\it InstanceTypeOf(cell)} �����Ǥ� {\it cell} �Ǽ����줿
attribute ��(������)�����˥��㤬���̤Ǥ��롣
����򡢥��֥������ȥץ��ȥ���Ȥ�����
\item ���饹 {\it cell} �ȥ��֥��饹 {\it reCell} ���Ф��ơ�
\begin{alltt}
class {\it cell} is
  var {\it contents:Integer:=0};
  method {\it get():Integer} is
    return self{\it .contents} end;
  method {\it set(n:Integer)} is
    self{\it .contents:=n} end;
end;
subclass {\it reCell} of {\it cell} is
  var {\it backup:Integer:=0};
  override {\it set(n:Integer)} is
    self{\it .backup:=} self{\it .contents};
    \underline{super.{\it set(n)}};
  end;
  method {\it restore()} is
    self{\it .contents:=}self{\it .backup} end;
end;
\end{alltt}
���Ф��ưʲ��Τ褦�� {\tt ObjectType} ��Ƴ�����롣
\begin{alltt}
ObjectType {\it Cell} is
  var {\it contents: Integer};
  method {\it get(): Integer};
  method {\it set(n:Integer)};
end;
ObjectType {\it ReCell} is
  var {\it contents:Integer};
  var {\it backup:Integer};
  method {\it get():Integer};
  method {\it set(n:Integer)};
  method {\it restore()};
end;
\end{alltt}
�����ϡ����󥿡��ե������Ȥ���ɽ��������Ŭ���Ƥ��ꡢ
1 �̤�ʾ��ɽ���Ǥ�(���饹��)��Ω���Ƽ¸�����롣

\item ���֥������ȥ����� {\it Cell} �Τ���Υ᥿ɽ���Ȥ���
{\it ObjectTypeOf(cell)} ��Ȥ������֥������ȥ����פϡ����饹 {\it cell}
���鵡��Ū�� extract ��ǽ�Ǥ��롣���Τ��� {\it o:ObjectTypeOf(cell)}
�ޤ��ϡ�{\it o:Cell} �Ƚ񤯡�

\item �桹�����Ԥ���礿�������ϡ�
\begin{center}{\tt new}~~$c:ObjectTypeOf(c)$\end{center}
�������ƤΥ��饹 {\tt c} ���Ф�������Ǥ��뤳�ȤǤ��롣�ۤʤä����饹
$cell$�� $cell_1$ �Ǥ�Ʊ�����֥������ȥ����� {\it Cell} ����Ĥ��Ȥ�
ͭ�����뤳�ȤǤ���($ObjectTypeOf(cell)$ �� $ObjectTypeOf(cell_1)$
�����������)��

\item ���֥������ȥ����� {\it Cell} ����ĥ��֥������Ȥϡ�
attribute �μ¸��Ȥϴط��ʤ�������ץ��ȥ��������������Ȥ��׵ᤵ��롣
\end{itemize}

\subsection{���֥��饹�ȥ��֥����פζ���}
\begin{itemize}
\item ���֥����פϥ��֥��饹�ط����Ȥˤ��Ƥ�����
\item ��¤Ū�ʥ��֥����ԥ󥰤δ�ñ�ʷ���Ȥ�����ĤΥ��֥������ȥ�����
$O$ �� $O'$ ��
\begin{center}$O'\ll O$\end{center}
($O'$ �ϡ�$O$ ��Ʊ������ݡ��ͥ�Ȥ���Ĥ��ޤ��ϡ�����ʾ��
����ݡ��ͥ�Ȥ����) ����ݡ��ͥ�ȤȤϡ��ե�����ɤ��ޤ��ϥ᥽�åɤ�
̾���ȡ��б����륿���פ���ʤ롣�㤨�� $ReCell\ll Cell$ �Ǥ��롣

\item ��������ϡ��� 2.7 �ǵ��������᥽�å� specilization
������褦�˳�ĥ������������ݡ��ͥ�ȥ����פ��Ф���
���֥������ȥ����פ� invariant �Ǥ��롣

\item ���֥������ȥ����פ��Ƶ�Ū��������줿�������֥����פ�������Ф���
������տ�������ʤ���Фʤ�ʤ�(9 �ϤȤ���ʹߤǵ�������)��

\item ���Τ褦�ʥ��֥����פε������Ф��ơ����֥������ȥ����פϼ����ˡ�
¿�ť��֥����פ��󶡤��롣�ʲ��Υ��֥������ȥ����ס�
\begin{alltt}
ObjectType {\it ReInteger} is
  var {\it contents:Integer};
  var {\it backup:Integer};
  method {\it restore()};
end;
\end{alltt}
���Ф��ơ�$ReCell\ll Cell$ �� $ReCell\ll ReInteger$ �Ǥ��롣

\item ��̤Ȥ��ưʲ������롣
(4) $c'$ �� $c$ �Υ��֥��饹�Ǥ������
$$ObjectTypeOf(c')\ll ObjectTypeOf(c)$$
�Ǥ��롣���������ϡ�ñ�˥��֥��饹��(��)���饹�˿����� attribute ���ɲä���
���Ȥ��Ǥ��뤳�Ȥ򼨤���overriding ���줿�᥽�åɤϡ���¸(���λ���)�����פ�
�ݻ����뤳�Ȥ򼨤���

\item ����(4) �ϡ��� 2.4 �Ǽ���������(3) �� $ObjectTypeOf$ �Ѥˤ�����ΤǤ��롣
subclassing-is-subtyping property �Ǥ��롣

\item ����(3)�Ǥϡ�ɬ�׽�ʬ���פǤ��ä�����(4) �εդ���Ω���ʤ���
$O'\ll O$ �� $ObjectTypeOf(c)=O$ ���� $ObjectTypeOf(c')=O'$�Ȥ��Ƥ⡢
$c'$ �� $c$ �Υ��֥��饹�Ȥϸ¤�ʤ���

\item �֥��֥��饹�ϥ��֥����פǤ���פΤǡ������������� subsumption ��Ʊ�ͤ�
�Ȥ����Ȥ��Ǥ��롣

\item ��̤Ȥ��ơ�subclassing-is-subtyping �γ�ǰ����ơ�ɽ���Ϥ�»�ʤ�����
�ʤ� subclassing-implies-subtyping �ˤ����������ơ����󥿡��ե�������
�¸��ζ��̤򶯤᤿��
\end{itemize}

\subsection{�����ץѥ�᡼��}
\begin{itemize}
\item �����ץѥ�᡼���ϡ��ۤʤä������פ��Ф��ơ�Ʊ�����������Ҥ�����Ѥ���
����Ū�ʵ��ѤǤ��롣

\item ���֥����פȶ�Ʊ���ơ������ץѥ�᡼���ϡ�contravariance ���Ф���
���Ť����񤷤���ߺѤ��뤿��˻Ȥ�줦�롣�ʲ��Υ��֥������ȥ����פ�ͤ��롣
\begin{alltt}
ObjectType {\it Person} is
  ...
  method {\it eat(food:Food)};
end;
ObjectType {\it Vegetarian} is
  ...
  method {\it eat(food:Vegetables)};
end;
\end{alltt}

\item {\it Vegetarian} �� person �Ǥ��롣������ $Vegetarian\ll Person$
(�դ���Ω���ʤ�)����Ԥ��롣�����������δط��� {\it eat} �᥽�åɤΰ���
�� contravariance �Τ���ˡ���Ω���ʤ����⤷���ְ�ä� $Vegetarian\ll Person$
���ꤹ��ȡ�$Vegetarian$ �� $Person$ �� subsumed ���졢������
���򿩤٤뤳�Ȥ��Ǥ��롣

\item ���֥������ȥ����פ� $food$ �Υ����פ�ѥ�᡼�������륿���ױ黻��
(�����פ��饿���פؤδؿ�)
���Ѵ����뤳�Ȥˤ�� vegetarians �� persons �δ֤������� subsumption
�����뤳�Ȥ��Ǥ��롣
\begin{alltt}
ObjectOperator {\it PersonEating[F\(\ll\) Food]} is
  ...
  method {\it eat(food:F)};
end;
ObjectOperator {\it VegetarianEating[F\(\ll\)Vegetables]} is
  ...
  method {\it eat(food:F)};
end;
\end{alltt}

\item ���Υᥫ�˥���� {\it bounded type parameterization} �Ȥ���
\footnote{bounded type parameters ���󶡤������ϡ�Tellis/Owl��
Sather��Eiffel��PolyTOIL �� Rapide �����롣¾�θ���Ȥ��Ƥ� C++ �Ǥ�
bounds �ʤ��� ñ�˥����ץѥ�᡼�����󶡤��롣}

\item �ѿ� $F$ �ϥ����ץѥ�᡼���ǡ���ĤΥ����פ� instantiate
���뤳�Ȥ��Ǥ��롣$F\ll Vegetables$ �� $Vegetables$ �Υ��֥����פ�
$F$ ����ꤹ�롣������ $VegetarianEating[Vegetables]$ �ϥ����פǡ��դˡ�
$VegetarianEating[Food]$ �� well-formed �ǤϤʤ���������
$VegetarianEating[Vegetables]$ ��
$VegetarianEating$ �ΰ�ĤΥ��󥹥��󥹤ǡ������� $Vegetarian$ ����������

\item $PersonEating$ �Τ褦�ʱ黻�Ҥˤ����ǤϤʤ������� $F$ ���Ф��Ƥ�
������ $PersonEating[F]$ �����Ǥ�����(��̣��٤�)������椨
$VegetarianEating$ �� $PersionEating$ �ˤ���޴ط����ʤ�����������
$$\hbox{Ǥ�դ�}F\ll Vegetables,$$
$$VegetarianEating[F]\ll PersionEating[F]$$
�Ǥ��롣

\item Ǥ�դ� $F\ll Vegetables$ ���Ф��ơ����֥����ԥ󥰤ε�§�ˤ��
2 �ĤΥ��󥹥��󥹤ϴޤޤ�롣��äơ�
$$Vegetarian=VegetarianEating[Vegetables]\ll$$
$$PersonEating[Vegetables]$$
�Ǥ��롣$Vegetarian$ �� person �Ǥ��ꡢvegetables �Τ߿��٤뤳�Ȥ��Ǥ��롣

\item bounded type parameters �˴ط����� bounded abstract types
������\footnote{bounded abstract types ���󶡤������ˤϡ�Rapide��
Modula-3 �����롣Beta �Ǥ� virtual class �Ȥ����󶡤��Ƥ��롣}

\item bounded abstract types �ϡ�$Person$ �Υ��֥����פȤ��� $Vegetarian$
��������������β��Ϳ���롣�ʲ����㡢
\begin{alltt}
ObjectType {\it Person} is
  type \(F\ll Food\);
  ...
  var {\it lunch: F};
  method {\it eat(food: F)};
end;
\end{alltt}
\begin{alltt}
ObjectType {\it Vegetarian} is
  type \(F\ll Vegetables\);
  ...
  var {\it lunch: F};
  method {\it eat(food: F)};
end;
\end{alltt}

\item $Person$ �� $F\ll Food$ �ΰ�̣�� ��$Person$ �� $Food$ �Τ��뿩��ʪ��
���٤뤳�Ȥ��Ǥ��뤬�����礦�ɤɤο���ʪ�����Ϥ狼��ʤ��פ��Ȥ򼨤���
$lunch$ attribute �ϡ����ο���ʪ�򼨤���

\item $Food$ �Υ��֥����פǤ�������Υ����פ�����(�㤨�� $F = Dessert$)��
$lunch$ �ե�����ɤ� dessert �򥻥åȤ��������� $Dessert$ �Υѥ�᡼��
��Ȥä��᥽�åɤ�¸����롣��̤Ȥ��ƥ��֥������Ȥ� $Person$ (�����
$F$ ��˺���)�Ȥʤ롣

\item ��ä� $Vegetarian\ll Person$ ����Ω���롣vegetarian �ϡ����������
�����פ���ä� $lunch(F\ll Vegatables)$ �� (������) ���٤뤳�Ȥ��Ǥ��롣
���Υ��ץ����������¤ϡ�$Person$ �������� $F$ �Υ���ݡ��ͥ�ȤȤ��ơ�
\underline{��������ο���ʪ����}���٤뤳�Ȥ��Ǥ��뤳�ȤǤ��롣

\end{itemize}

\subsection{���֥����פʤ��Υ��֥��饹}
�� 3.2 �ǤߤƤ����褦�ˡ�(���֥��饹�����)���֥����פ�
the partial decoupling �ˤ�� subsumption �ε�������䤹���Ȥ��Ǥ��롣
\begin{itemize}
\item �⤦��ĤΥ��ץ������ϡ����֥����פȥ��֥��饹������̤����Ѿ��β�ǽ��
���������ȤǤ��롣���Υ��ץ������Ǥϡ��֥��֥��饹�ϥ��֥����ԥ󥰤��̣�����
(����(4))���������롣inheritance-is-not-subtyping [52] �Ȥ����Τ��Ƥ��롣

\item ����ˤ�ꡢ{\tt Self} ������ݥ��������֤��᥽�åɤηѾ�
��������Ȥ��Ǥ��롣�����ηѾ��ˤ���������������äˤ�ꡢsubsumption
�ˤ�����������򸺾������뤳�Ȥˤʤ롣{\tt Self} �� contravariant �ݥ�������
��ͳ���֤����Ȥˤ�ꡢ���֥��饹�ϥ��֥����פ�Ͷȯ����ɬ�פ��ʤ���

\item 2 �ĤΥ����� {\tt Max} �� {\tt MinMax} ��ͤ��롣
\begin{alltt}
ObjectType {\it Max} is
  var {\it n:Integer};
  method {\it max(other:Max):Max};
end;
ObjectType {\it MinMax} is
  var {\it n:Integer};
  method {\it max(other:MinMax):MinMax};
  method {\it min(other:MinMax):MinMax};
end;
\end{alltt}
�ޤ����ʲ��� 2 �ĤΥ��饹��ͤ��롣
\begin{alltt}
class {\it maxClass} is
  var {\it n:Integer:=0};
  method {\it max(other:{\tt Self}):} Self is
    if self\(.n>other.n\) then
      return self
    else return {\it other} end;
  end;
end;
subclass {\it minMaxClass} of {\it maxClass} is
  method {\it min(other:{\tt Self}):} Self is
    if self\(.n<other.n\) then
      return self
    else return {\it other} end;
  end;
end;
\end{alltt}
�᥽�å� {\it min} �� {\it max} �� {\it binary} �Ȥ����롣���줾�줬
2 �Ĥ���({\tt self}��{\it other})�ˤĤ��Ʊ黻���뤫��Ǥ��롣
{\it other} �� ������ {\tt Self} �� contravariance �ݥ������ �Ǥ��롣
�᥽�å� {\it max} �ϡ����饹 {\it maxClass} ���� {\it minMaxClass}
�˷Ѿ�����롣

\item ľ��Ū�ˤϡ�$Max$ �ϡ�$maxClass$ �˰��פ���$MinMax$ �� $minMaxClass$
�˰��פ��롣������Τ˰��פ����뤿��ˤ� {\tt Self} �νи���ޤ��
���饹�Τ���� $ObjectTypeOf$ �ΰ�̣��������ʤ���Фʤ�ʤ���
��̤Ȥ��� $ObjectTypeOf(maxClass)=Max$��
$ObjectTypeOf(minMaxClass)=MinMax$ �����롣������������Ω�����뤿��ˤϡ�
���֥������ȥ����פ���κƵ�������Ф���
���饹����� {\tt Self} �λ��Ѥ�ޥåפ��롣�Ѿ����줿�᥽�åɤΤ����
{\tt Self} �� specialize ���̣���롣

\item �㤨�С��Ѿ����줿�᥽�å� $max$ ����� {\tt Self} �� $MinMax$ ��
�б������롣������ $minMaxClass$ �Υ��󥹥��󥹤� ������ $MinMax$ ��
���Ĥ��Ȥˤʤ롣��ñ�ˤϡ�$maxClass$ �Υ��󥹥��󥹤� ������ $Max$ ��
������$minMaxClass$ �Υ��󥹥��󥹤� $MinMax$ ����Ĥ褦�ˤ��롣

\item $minMaxClass$ ���饹�� $maxClass$ �Υ��֥��饹�Ǥ��뤬��
$MinMax$ �� $Max$ �Υ��֥����פˤ��뤳�ȤϤǤ��ʤ����ʲ��Υ��饹��ͤ��롣
\begin{alltt}
subclass {\it minMaxClass'} of {\it minMaxClass} is
  override {\it max(other:{\tt Self})}:{\tt Self is}
    if {\it other.min({\tt self})=other} then
      return self
    else return {\it other} end;
  end;
end;
\end{alltt}
$minMaxClass'$ �Υ��󥹥��󥹤� $mm'$ �Ȥ���$mm':MinMax$ �Ȥʤ롣

\item �⤷ $MinMax$ �� $Max$ �Υ��֥����פ��Ȥ���С�$mm':Max$
�Ȥ��뤳�Ȥ��Ǥ��������� $Max$ ��Ǥ�դ� $m$ ���Ф���
$mm'.max(m)$ �Ȥ��뤳�Ȥ��Ǥ��롣$m$ �� $min$ attribute ���äƤ��ʤ�����
����ʤ��Τǡ�$mm'$ �� $max$ �᥽�åɤ� override �� break ���뤫�⤷��ʤ���

\item ��äơ�$MinMax\ll Max$ ����Ω���ʤ������Τ褦�ˡ�{\tt Self} ��
contravariant �ݥ������Ǥνи�����ä����֥��饹�ϡ����֥����פ�
�ޤ�Ȥϸ¤�ʤ���

\end{itemize}

\subsection{���֥������ȥץ��ȥ���}
���֥��饹�����֥����פ�ޤޤʤ����Ǥ����⡢���饹�ˤ�ä� ͶƳ�����
�����פȡ����Υ��֥��饹�ΰ�Ĥˤ�ä�ͶƳ����륿���פ�ط��Ť��뤳�Ȥ�
�Ǥ��롣���δط��ϡ�subsumption property ����Ω�����ʤ���
\begin{itemize}
\item �� 3.4 ����ˤ���褦�ˡ����Ĥ� $Max$ �Υ��֥����פ� quantify over
���뤳�ȤϤǤ��ʤ����ʲ��Τ褦�ʥѥ��ȥ�å�������⤢�ޤ����Ω���ʤ���
\begin{center}
ObjectOperator $P[M\ll Max]$ is ... end;
\end{center}
$P[Max]$ ���Ф��� $P$ �� instantiate ���뤳�ȤϤǤ��뤬��$P[MinMax]$ �Ǥ�
well-formed �ǤϤʤ���

\item ���֥ץ��ȥ���δط���Ƴ�����롣�ʲ��Τ褦�� 2 �Ĥα黻�Ҥ�Ƴ�����롣
\begin{alltt}
ObjectOperator {\it MaxProtocol[X]} is
  var {\it n:Integer};
  method {\it max(other:X):X};
end;
ObjectOperator {\it MinMaxProtocol[X]} is
  var {\it n:Integer};
  method {\it max(other:X): X};
  method {\it min(other:X): X};
end;
\end{alltt}
���������̲����ơ����Ĥ�Ƶ������� $T$ (�黻�� $T-Protocol$ ���Ф���
$T$ �κƵ�Ū�ʽи�����ݲ����뤳�Ȥˤ��)��������Ū�� pass ���뤳�Ȥ��Ǥ��롣
\item �黻�� $T-Protocol$ �ϥ����׾�δؿ��ǡ�$T-Protocol$ ����ư����
$T$ �Ȥʤ롣

\item $Max$ �� $MinMax$ �� 2 �Ĥδط���������롣��Ĥϡ�
$MinMax$ �� $MaxProtocol$ �� post-fixpoint �Ǥ��롣
$$MinMax\ll MaxProtocol[MinMax]$$
��ɽ�����Ȥ��Ǥ��롣

\item ����ܤϡ�$\sll$ �ϥ����ױ黻�Ҥδ֤Ǥιⳬ���֥����״ط����̣���롣
$$P\sll P'\:\:\:\:\hbox{iff}\:\:\:P[T]\sll P'[T]\:\:\:\hbox{for all types T}$$
$Max$�� $MinMax$ �ˤĤ��Ƥϰʲ�����������
$$MinMaxProtocol\sll MaxProtocol$$

\item 2 �Ĥδط��϶��ˡ����֥ץ��ȥ���γ�ǰ�δ��ä�������
\begin{enumerate}
\item �⤷ $S\ll T-Protocol[S]$ �ʤ�С�$S$ �� $T$ �Υ��֥ץ��ȥ���Ǥ��롣
\item �⤷ $S-Protocol\sll T-Protocol$ �ʤ�С�$S$ �� $T$ ��
���֥ץ��ȥ���Ǥ��롣
\end{enumerate}
���δط��ϡ��黻��Ʊ�Τδط��Ǥ��ꡢ�����״֤δط��ǤϤʤ���

\item �ʲ��Υѥ�᡼�����η���Ŭ�Ѥ��롣
$$\hbox{\tt ObjectOperator}P_1[X\ll MaxProtocol[X]]\hbox{\tt is...end};$$
$$\hbox{\tt ObjectOperator}P_2[P\sll MaxProtocol]\hbox{\tt is...end};$$
��äơ�$P_1[MinMax]$ ���Ф��� $P_1$ �� instantiate ���뤳�Ȥ��Ǥ���
$P_2[MinMaxProtocol]$ ���Ф��� $P_2$ �� instantiate ���뤳�Ȥ��Ǥ��롣

\item �ǽ�Υѥ�᡼�����ϡ� F-bounded parameterization[35,38,75] �ȸƤФ졢
�����ܤΥѥ�᡼�����ϡ�higher-order bounded parameterization �ȸƤФ�롣
�ѡ��� III �ǥե����ޥ�˼�갷����[4] �Ǥϡ��ѥ�᡼�����Τ���� 2 �Ĥη�
����Ӥ��Ƥ��롣

\item �����ױ黻�Ҥ�Ȥ�����˥��֥ץ��ȥ�����󶡤��Ƥ���
�ץ�����ߥ󥰸���Ǥϡ������פ˴ؤ��ƥޥå��󥰴ط�(matching relation)��
������Ƥ���($\sls$��ɽ��)\footnote{�ޥå��󥰤γ�ǰ�Ȥ���̾���ϡ�
PolyTOIL ���餭�Ƥ��롣Theta �� School �Ǥ������ǰ����äƤ���}��
�ޥå��󥰴ط��������ϥ��֥ץ��ȥ��������Ȱ��פ��롣

\item �ޥå��󥰴ط������Ѥ��뤳�Ȥˤ�ꡢ
$$S\sls T\:\:\:\hbox{if}\:\:\:S\ll T-Protocol[S]$$
\begin{center}(F-bounded interpretation)\end{center}
$$S\sls T\:\:\:\hbox{if}\:\:\:S-Protocol\sll T-Protocol$$
\begin{center}(higher-order interpretation)\end{center}
�Ȥʤ롣��ä� $MinMax\sls Max$ �Ǥ��롣

\item �ޥå��󥰴ط��Ǥϡ�subsumption property ����Ω���ʤ�
($S\sls T$ ���� $s:S$ �Ǥ� $s:T$ �ǤϤʤ�)��

\item ���������ޥå��󥰴ط��ϡ����ƤΥ����פΥѥ�᡼�����Τ������ˤ��ġ�
$$\hbox{\tt ObjectOperator}P_3[X\sls Max]{\tt is...end};$$
$P_3[MinMax]$ �� instantiation �ϡ��������פȤʤ롣

\item ���󤹤�ȡ�{\tt Self} �� contravariant �ݥ��������֤����Ȥ��Ƥ⡢
���֥����ԥ󥰤Ϥʤ��ʤ뤬��$max$ �Τ褦�� �Х��ʥ�᥽�åɤηѾ�
��ɽ�����뤳�Ȥ��Ǥ��롣�Թ��ˤ⡢subsumption �Ϥ��Υ���ƥ����ȤǤϼ�����
�������֥����׾�Ǥ� quantification �Ϥ�Ϥ䤢�ޤ���Ω���ʤ���

\item �����η����ϥ��֥ץ��ȥ���ط���¸�ߤ䡢
���δط��ˤ��ѥ�᡼������ǽ�Ϥˤ�ꡢ��ʬŪ������碌��ȹͤ����롣

\end{itemize}

\section{���֥������ȥ١�������}
���饹�١�������礿����ħ�� Simula ������ɽ������Ƥ��롣���֥������ȥ١���
����μ礿�� principles �� �ǽ� the Treaty of Orlando[114] �����礵��Ƥ��롣

\begin{itemize}
\item ���֥������ȥ١������������Ū�ʥ��饹�١�����������ñ��ǡ�
���������⤯�ʤ�䤹����

\item ¿���Υ��֥������ȥ١�������ϡ�Lisp��Smalltalk�ʤɿ͹���ǽ���ߥ�˥ƥ�
(�����ϡ��ä˽��������⤯���⤤���ͤ���äƤ���)�˻ظ����Ƥ���
[11,31,32,78,80]��

\item ��̤Ȥ��ơ����Ĥ����֥������ȥ١�������(Emerald �Τ褦�ʥ���ץ��
��Τ䡢Ceil �� Omega �Τ褦�ʺǶ�Τ�Τ������)���߷פ��褦�Ȥ����ߤ�
�ۤȤ�ɤʤ���
\end{itemize}

\subsection{���饹�ʤ��Υ��֥�������}
\begin{itemize}
\item ��äȤ��ñ�ʷ��Ȥ��ơ�Emerald �䡢��ñ�ʥ���������١����θ���
�Τ褦�ˡ����֥������Ȥγ�ǰ��ưŪ dispach ���󶡤���ΤߤǤ��롣
���Ť��򤷤��������֥������ȥ����ס����֥����ס�subsumption ���󶡤��롣

\item ���֥������ȥ١�������δ���Ū����ħ�ϡ����饹���ʤ����ƥ��֥�������
���������� construct ��¸�ߤ��뤳�ȤǤ��롣

\item �ʲ��Τ褦��������롣
\begin{alltt}
ObjectType {\it Cell} is
  var {\it contents: Integer};
  method {\it get(): Integer};
  method {\it set(n: Integer)};
end;
object {\it cell: Cell} is
  var {\it contents: Integer:=0};
  method {\it get(): Integer} is
    return self{\it .contents} end;
  method {\it set(n:Integer)} is
    self{\it .contents}:=n end;
end;
\end{alltt}
{\tt object} ������ˤ�ꡢ������ $Cell$ ��̾�� $cell$ ��ñ�쥪�֥�������
����������롣

\item ���饹���ʤ��Ƥ⡢��³���ˤ�ꡢñ��ʥ��֥������Ȥν����
�������뤳�Ȥ��Ǥ���(�ƤӽФ��줿���Ϥ��ĤǤ⿷�������֥������Ȥ��֤�)��
���Τ褦�ʼ�³���ϰ�����������ե�����ɤ��������롣
\begin{alltt}
procedure {\it newCell(m: Integer):Cell} is
  object {\it cell:Cell} is
    var {\it contents: Integer:=m};
    method {\it get():Integer} is
      return self{\it .contents} end;
    method {\it set(n:Integer)} is
      self{\it .contents:=n} end;
    return {\it cell};
  end;
  var cellInstance: Cell:=newCell(0);
\end{alltt}
���Τ褦��������³���ϡ��Ի׵Ĥ� Simula ���饹�˻��Ƥ���(�ѥ�᡼����
�¹����Τ����)��{\tt new} �ϼ�³���ƤӽФ��Ǽ¹Ԥ���롣
\end{itemize}

\subsection{�ץ��ȥ����פȥ�������}













\end{document}
