$BJ,@O!&@_7W%D!<%k$H$7$F$N(BSmalltalk

$B%*%V%8%'%/%H;X8~%0%k!<%W(B

$B:486?-(B
E-Mail=sahara@sra.co.jp

URL=http://www.sra.co.jp/people/sahara

$B$O$8$a$K(B

$B%*%V%8%'%/%H;X8~3+H/$N;~!"J,@O!&@_7W9)Dx$GK~B-$7$F;H$($kNI$$(BCASE$B%D!<%k$,:#$N(B $B$H$3$m$J$$!#$=$3$G!"%*%V%8%'%/%H;X8~%0%k!<%W$N%a%s%P!<$O!"3+H/8@8l$G$"$k(B Smalltalk$B<+BN$rJ,@O!&@_7W%D!<%k$H$7$F;H$C$F$$$k!#$3$N$h$&$J7]Ev$O!"

$BK\%l%]!<%H$G$O!"%*%V%8%'%/%H;X8~J,@O$r$I$N$h$&$K9T$&$+$r>R2p$9$kCf$G!"(B Smalltalk$B$NJ,@O%D!<%k$H$7$F$NG=NO$rHdO*$9$k(B 1 $B!#(B

$BLdBj$H$7$FGD0.$7$d$9$$$,!"7k9=;u$4$?$($,$"$k$H$$$&$3$H$G!"NcBj$H$7$F!"?^=q4[(B $B$NB_=P4IM}$re$2$k!#(B

$B%*%V%8%'%/%H;X8~J,@O(B

$B$3$3$G$O!"J,@O9)Dx$NCf$G$b:G=i$K9T$&%I%a%$%sJ,@O$r@bL@$9$k(B 2 $B!#(B

$B%I%a%$%sJ,@O$G$O!"%7%9%F%`$NBP>]$H$J$kLdBjNN0h(B($B%I%a%$%s(B)$B$O2?$r$7$F$$$k$+$r%b(B $B%G%k2=$7!"%I%a%$%s%b%G%k$r:n@.$9$k!#%I%a%$%sJ,@O$G9T$&$Y$-:n6H$O!"0J2<$NDL$j(B $B$G$"$k!#MQ8l=8$N:n@.$O!"%*%V%8%'%/%H;X8~3+H/5;K!0JA0$+$iI,MW$J:n6H$G!"=EMW@-(B $B$O%*%V%8%'%/%H;X8~3+H/$K$J$C$F$bJQ$o$i$J$$!#(B

$B0J2<$K!"3F:n6H$NFbMF$r=R$Y$k!#$?$@$7!"!VMW5a;EMM5-=R!W9)Dx$OK\%l%]!<%H$NL\E*(B $B$+$i$d$d$O$:$l$k$N$G!">\:Y$J5-=R$O>JN,$9$k!#(B

$BMQ8l=8$N:n@.(B

$B%7%9%F%`3+H/$N:GCf$K;HMQ$9$kMQ8l$rDj5A$9$k$N$,MQ8l=8$G$"$k!#MQ8l=8$N:n@.$O!"(B $BBg5,LO%7%9%F%`$G$O:G$b=EMW$J:n6H$H$J$k!#MQ8l=8$,@53N$K$G$-$F$$$k$+$I$&$+$G!"(B $B$=$N%W%m%8%'%/%H$N>uBV$,J,$+$k$H8@$C$F$b2a8@$G$O$J$$$[$I$G$"$k!#%*%V%8%'%/%H(B $B;X8~3+H/$G!VMQ8l!W$O%*%V%8%'%/%HL>$dA`:nL>$d4XO"L>$KD>7k$9$k$3$H$,B?$$$N$G!"(B $BFC$K=EMW$H$J$k!#(B

$B%I%a%$%sJ,@O9)Dx$G$O!"%I%a%$%s$K8GM-$JMQ8l$d$=$NB>pJs!W!V!A$BNc$($P!"?^=q4[$NB_=P4IM}%7%9%F%`$rNc$K7k$9$k$N$G!"MQ8l$N0UL#$,JQ$o$k$H%/%i%9?^$,JQ$o$C$F$7$^$$Bg$-$J1F(B $B6A$r5Z$\$9!#=>$C$F!"0J2<$N$h$&$JMQ8l=8$r:n$C$F$*$+$J$1$l$P$J$i$J$$!#(B

UseCase$B$N:n@.$*$h$S@)Ls$NH/8+(B

$B%7%9%F%`$N%f!<%6!<$K%$%s%?%S%e!<$7$?$j!"BP>]$H$9$kLdBjNN0h$NK\$r8+$?$j!"5l%7(B $B%9%F%`$N%^%K%e%"%k$rFI$s$@$j$7$F(BUseCase$B$r:n@.$9$k!#(BUseCase 3 $B$O%f!<%6!<$NMW5a;v9`$r5!G=C10L$G$^$H$a$?$b$N$G$"$k!#$?$@$7!"%*%V%8%'%/%H;X8~(B $B$J$N$G!"G=F0E*$J%*%V%8%'%/%H$r8+$D$1!"$=$N$^$o$j$K5!G=$r$^$H$a$kJ}8~$G5-=R$7(B $B$F$$$/!#(B

$B5!G=$N5-=R$G$"$k$+$i!"(BUseCase$B$O2

$B?^(B 1. UseCase$B$N3,AX(B

Jacobson$B$,Ds>'$7$?(BUseCase$B$G$O!"$"$H$G>R2p$9$k(BUseCase$B%@%$%"%0%i%`$H<+A38@8l$K(B $B$h$k(BUseCase$B$N5-=R$r!"6&$K(BUseCase$B$H8F$s$G$$$k!#K\=q$G$O!"$3$N$h$&$J8F$SJ}$OJ6(B $B$i$o$7$$$N$G!"<+A38@8l$G5-=R$9$k(BUseCase$B$N>\:Y$r!V%7%J%j%*!W$H8F$V$3$H$K$9$k(B $B!#$5$i$K!"%7%J%j%*$r!"<+A38@8l$G$J$/9=B$2=$5$l$?<+A38@8l$G=q$/$3$H$K$9$k!#$^(B $B$?!"%7%J%j%*$ruBV$r5-=R$9$k8e7o!J(Bpost-condition$B!K$r=E;k$9$k!#(B $B%7%J%j%*uBV$r=q$/A07o!J(Bpre-condition$B!K$H%7%J%j%*$r;HMQ$9$kJ8L.$b5-(B $B=R$9$k!#(B

$B$G$O!"?^=q4[$NB_=P4IM}%7%9%F%`$N

$B?^(B 2. $B?^=q4[B_=P4IM}%7%9%F%`$N(BUseCase$BL\
$B?^=q4[B_=P4IM}$N%H%C%W%l%Y%k$N(BUseCase$B$O2<(B$B?^$N$h$&$K$J$k!#(B

$B%H%C%W%l%Y%k$N(BUseCase$B%@%$%"%0%i%`$O!"%7%9%F%`$r$=$NFbIt$H30It$KJ,$16-3&$rL@(B $B3N$K$9$kF/$-$b$"$k!#$3$N(BUseCase$B$N>l9g!";J=q$HMxMQ$B$b$A$m$s!";J=q$HMxMQ]2=!W$O!"

$B?^(B 3. $B?^=q4[B_=P4IM}%H%C%W%l%Y%k$N(BUseCase

$B>e$N(BUseCase$B$G$O!"?^=q4[B_=P4IM}%7%9%F%`$,!VMxMQ$l$N(BUseCase$B$OG=F0E*$J%*%V%8%'%/%H$H$7(B $B$F!V;J=q!W$H!VMxMQ

$BB_=P!&JV5Q=hM}$N(BUseCase$B$O2

$B?^(B 4. $BB_=P$N(BUseCase

$BB_=P$N%7%J%j%*$O0J2<$N$h$&$K$J$k!#$3$3$G!"A07o!J(Bpre-condition$B!K$K$O%7%J%j%*(B $BuBV$r5-=R$7!"8e7o!J(Bpost-condition$B!K$O!"%7%J%j%*uBV$r5-=R$9(B $B$k(B 4 $B!#(B

$B=>Mh7?$N5

$B$J$*!";EMM5-=R8@8l(BOCL$B$N5-K!$K$D$$$F$O!"5SCm$G@bL@$7$F$$$/!#FbMF$O<+A38@8l$K(B $B$h$kCm

  • $B%7%J%j%*L>(B
  • $BB_=P(B
  • $B35MW(B
  • $BB"=q$NB_=P$r9T$&(B
  • $BJ8L.(B
  • $BEPO?$5$l$?MxMQ

    $BMxMQ $B4pK\%Q%9(B[$BB_=P2DG=(B] 6

  • $BA07o(B
  • -- $B:#$^$G$KMxMQ

    --$B$+$D:#2sB_$7=P$9B"=q$O$9$Y$FB_=P2DG=$G$J$1$l$P$J$i$J$$!#(B 7

    Set($BMxMQsize < 5 8 and Set($BB_$7=P$9B"=q(B)->forAll($BB_=P2DG=(B) 9

  • $B8e7o(B
  • -- $BB_$7=P$9A0$NB"=q$N=89g$+$iB_$7=P$9B"=q$r:o=|$7$?$b$N$,!"(B

    -- $BB_=P8e$NB"=q$N=89g$G$"$k!#(B

    Set($BB"=q(B) = Set($BB"=q(B)@pre - Set($BB_$7=P$9B"=q(B) 10

  • $BBeBX%Q%9(B[$BB_=PITG=(B] 11
  • $BA07o(B
  • -- $B:#$^$G$KMxMQe$+!"(B

    -- $B$^$?$O!":#2sB_$7=P$9B"=q$KB_=PITG=$N$b$N$,$"$k!#(B

    Set($BMxMQsize >= 5 or Set($BB_$7=P$9B"=q(B)->exists($BB_=P2DG=$G(B $B$J$$(B) 12

  • $B8e7o(B
  • -- $BB_$7=P$9A0$H8e$NB"=q$N=89g$OEy$7$/!"B_=PITG=>uBV$K$J$C$F$$$k!#(B

    Set($BB"=q(B) = Set($BB"=q(B)@pre and $BB_=PITG=>uBV(B 13

    $BB_=P$N%7%J%j%*(B

    $B$3$NB_=P$N%7%J%j%*$G$O!"B_$7=P$9B"=q$,(B1$B:}$G$bB_=PITG=$G$"$l$P!"B_=P$r9T$o$J(B $B$$$3$H$K$J$C$F$$$k!#!VB_=P2DG=$J$b$N$@$1$G$bB_$7=P$9$Y$-$@!W$H$N0U8+$,=P$F$/(B $B$k$+$H;W$&$,!"$=$l$O$3$N%7%J%j%*$NCf$K1#$5$l$F$$$k$Y$-!V

    $B!V(B1$B:}$G$bB_=PITG=$G$"$l$PB_$7=P$5$J$$!W$H$$$&$N$O!"8e7o$G5-=R$7$?>r7o$G$"$j(B $B!"$3$N%7%J%j%*$,!V$9$Y$F=*$o$C$?8e!W$N>uBV$r5-=R$7$F$$$k!#$D$^$j!"%7%J%j%*Fb(B $B$G?F@Z$J%f!<%6!<%$%s%?%U%'!<%9$r9=C[$7!"!VB_=P2DG=$J$b$N$@$1$G$bB_$7=P$9!W=h(B $BM}$r9T$&$3$H$r6X;_$7$F$$$k$o$1$G$O$J$$!#$3$N$h$&$J5!G=$N8!F$$O!"@_7W9)Dx$N%f(B $B!<%6!<%$%s%?%U%'!<%9@_7W$G9T$($P$h$$$N$G$"$k!#%I%a%$%sJ,@O$d%7%9%F%`J,@O$G$O(B $B!"%7%9%F%`$N:,44$K4X$o$i$J$$$h$&$J:3Kv$J5!G=$O5-=R$7$J$$!#:#$N>l9g!"$;$$$<$$(B $B!V%f!<%6!<$K$H$C$F;H$$$d$9$$%$%s%?%U%'!<%9$N9=C[(B 14 $B!W$r$&$?$C$F$*$1$P$h$$!#(B

    $BJV5Q$N%7%J%j%*$O0J2<$N$h$&$K$J$k!#(B

    • $B%7%J%j%*L>(B
    • $BJV5Q(B
    • $B35MW(B
    • $BB"=q$NJV5Q$r9T$&(B
    • $BJ8L.(B
    • $BEPO?$5$l$?MxMQ
    • $B4pK\%Q%9(B[$BJV5Q(B]
    • $BA07o(B
    • -- $BJV5Q$5$l$?B"=q$N=89g$,MxMQ

      -- $B$$$:$l$b6u$G$J$$(B

      Set($BMxMQnotEmpty and 15

      Set($BJV5Q$5$l$?B"=q(B)->notEmpty and

      Set($BMxMQincludesAll(Set($BJV5Q$5$l$?B"=q(B)) 16

    • $B8e7o(B
    • -- $B%7%J%j%*$,F0$/A0$NB"=q$N=89g$HJV5Q$5$l$?B"=q$N=89g$NOB=89g$,!"(B

      -- $B?7$?$JB"=q$N=89g$H$J$C$F$$$k(B

      Set($BB"=q(B) = Set($BB"=q(B)@pre union Set($BJV5Q$5$l$?B"=q(B) 17

    $BJV5Q$N%7%J%j%*(B

    $BB_=P$HJV5Q$N%7%J%j%*$N8e7o$r8+$F$_$k$H!"$$$:$l$b!"=89g1i;;$,$=$NK\BN$G$"$k!#(B $BMW$9$k$K!"B_=P$O?^=q4[$NB"=q$+$iB_$7=P$7$?K\$N=89g$r:o=|$7!"JV5Q$O$=$l$i$r85(B $B$KLa$9!#

    $BZ$9$k$NM-8z$J$N$G$"$k!#(B

    OCL$B$N=89g1i;;$N5-K!$O?t3X$N$=$l$h$j$d$dJ,$+$j$K$/$$$,!"5-9f$,(BASCII$B5-9f$N$_$G(B $B$G$-$F$$$k$N$G!"%o!<%W%m$d(BCASE$B%D!<%k$J$I$G;EMM$r=q$/$N$KFCJL$J$3$H$r$7$J$/$F(B $BNI$$$H$$$&MxE@$,$"$k!#(B

    $B!V=89g$O$I$&$b6l 18 $B!#(B

    $B$@$$$V(BOCL$B$N(B->$B$H$$$&5-K!$H4{Dj5A$NA`:n$,=P$F$-$?$N$G!">/$7@bL@$7$h$&!#(BOCL$B$G$O(B $B!"$b$N$N=8$^$j$rI=$9(BCollection$B$H$$$&7?$,$"$C$F!"(BSet$B!J=89g!K$d(BBag$B!J=EJ#$N$"$k(B $B$b$N$N=8$^$j!K$d(BSequence$B!J=g=x$N$"$k$b$N$N=8$^$j$G!"MWAG$N=EJ#$,5v$5$l$k!K$H(B $B$$$&7?$N%9!<%Q!<7?(B 19 $B$K$J$C$F$$$k!#(BOCL$B$O7?$H%/%i%9$rF10l;k$7$F$$$k!#$=$7$F!"%/%i%9$KDj5A$5$l$?%W(B $B%m%Q%F%#(B 20 $B$d(BCollection$B7?$KDj5A$5$l$F$$$k%W%m%Q%F%#$r;XDj$9$k$?$a$K!"%T%j%*%I!J!%!K$HLp(B $B0u5-9f!J(B->$B!K$r;H$C$F$$$k!#(B

    $BNc$($P!"26H0w!W(B $B$H$$$&%m!<%kL>$,IU$$$F$$$k$H$9$k!#?M%/%i%9$OB0@-$H$7$FL>A0$HCB@8F|$r;}$A!"A`(B $B:n$H$7$F<}F~$r;}$D!#A`:n<}F~$N%Q%i%a!<(B$B%?$O(BDate$B%/%i%9$N%$%s%9%?%s%9$r;}$D!#0l(B $BJ}!"2qA0$r;}$A!"A`:n$H$7$F=>6H0w?t$H3t2A$r;}$D!#(B

    $B?^(B 5.$B2q
    $B!V2q6H0w!W!J$9$J$o$A!V?M!W%/%i%9$N%$%s%9%?%s%9$N!V=>6H0w!W$G$"$k?M(B $B$?$A$N=89g!K$N?t$r5a$a$?$$$H$9$k!#$=$N$?$a$K$O!"(B

    $B2qself.$B=>6H0w(B->size

    $B$H5-=R$9$l$P$h$$!#$3$3$G!"2q(B($BJ8L.>e<+L@$N;~$O>JN,$7$F$h$$!K!"(B self$B$O$=$N%/%i%9$N$"$k%$%s%9%?%s%9<+?H!J$9$J$o$A2ql9g!"%m!<%kL>!V=>6H0w!W!K$r;X(B $BDj$9$k$N$K;H$$!"(B->$B$O%$%s%9%?%s%9$N=89g$N%W%m%Q%F%#$r;XDj$9$k$N$K;H$&!#F1$8%W(B $B%m%Q%F%#;XDj$G$b!"BP>]$,8DJL$N%$%s%9%?%s%9$J$jMWAG$J$N$+!"=89g$d(BCollection$B$J(B $B$N$+$G;XDjJ}K!$,0[$J$k$N$G$"$k!#(B

    $B:#$N>l9g!"(Bself.$B=>6H0w$G!V?M!W%/%i%9$N%$%s%9%?%s%9$N=89g$r;XDj$7$?$3$H$K$J$k(B $B!#$=$7$F!"$=$N=>6H0w$N=89g$K(B->size$BA`:n$rE,MQ$7!"7k2L$H$7$F$=$N=89g$NMWAG?t!J(B $B$D$^$j=>6H0w?t!K$r5a$a$k$3$H$K$J$k!#(B

    $B2q6H0w?tA`:n$r;H$C$F!"(B

    $B2qself.$B=>6H0w?t(B

    $B$H$7$F$b!"$b$A$m$s=>6H0w?t$O5a$^$k$,!"=>6H0w?tA`:n$NCf?H$O(B

    self.$B=>6H0w(B->size

    $B$=$N$b$N$G$"$k!#(B

    $B?^=q4[$NB_=P4IM}%7%9%F%`$N$=$NB>$N%7%J%j%*$O!":#2s$N%l%]!<%H$G$O>JN,$9$k!#(B

    $Br7o$r8+$D$1$F$_$h$&!#(B

    $B$9$G$K!VMxMQr7o$O(B $BB_=P$N%7%J%j%*$G8+$D$1$F$$$k!#$b$A$m$s!"$3$N$h$&$J@)Ls>r7o$OJ,@Or7o$r8+$D$1$?$3$H$K$7$h$&!#(B $B:GBgB_=P?t$N@)Ls$b!"0J2<$N$h$&$KHFMQ@-$r;}$?$;$F=q$-49$($k!#(B

    • $BB"=q$OB_=P2DG=$+$9$G$KB_$7=P$5$l$F$$$k$+$N$I$A$i$+$G$"$k!#(B 21
    • $BB"=q$,B_=P2DG=$G$+$DB8:_$7$J$$$H$$$&$3$H$O$J$$!#(B 22
    • $BMxMQe8B$,$"$k!#(B

    $B?^=q4[B_=P4IM}$N@)Ls>r7o(B

    $B

    $B:o=|$9$kB"=q(B.$BK\(B.$BB"=q(B->size = 1

    $B$J$I$H$$$&5-=R$r$7$?$,!"$3$l$O0J2<$N$h$&$J%/%i%9?^$N0lIt$r;W$$Ib$+$Y$F$3$=5-(B $B=R$G$-$k!#%/%i%9!VK\!W$H%/%i%9!VB"=q!W$N4V$r!"K\$N%$%s%9%?%s%9$H$=$NK\$NB"=q(B $B$N%$%s%9%?%s%9$r4X78IU$1$k4XO"$,7k$s$G$$$k!#K\%/%i%9$K$"$kB"=q(B() 23 $BA`:n$O!"$=$NK\$NB"=q$N%$%s%9%?%s%9=89g$rJV$9!#B"=q%/%i%9$K$"$kK\(B()$BA`:n$O!"$=(B $B$NB"=q$NB0$9$kK\!J$N%$%s%9%?%s%9!K$rJV$9!#(B

    $B?^(B 6.$BK\$HB"=q$N%/%i%9?^$N0lIt(B($BC!$-Bf(B)

    $B%I%a%$%s%*%V%8%'%/%H$NH/8+(B

    $B$5$F!"$$$h$$$h%I%a%$%sJ,@O$NCf3K$G$"$k%I%a%$%s%*%V%8%'%/%H$NH/8+J}K!$r5-=R$9(B $B$k!#%I%a%$%s%*%V%8%'%/%H$NH/8+$O0J2<$N$h$&$J
    • $B%*%V%8%'%/%H$NL>A0!&@UG$!&Lr3d$r8+$D$1$k(B
    • $B%*%V%8%'%/%H$rJ,N`$7!"4XO"!&Jq4^4X78$r8+$D$1$k(B
    $B$^$:!"%I%a%$%s%*%V%8%'%/%H$NL>A0!&@UG$!&Lr3d$r8+$D$1$k$H$3$m$+$i@bL@$7$h$&!#(B

    $B%*%V%8%'%/%H$NL>A0!&@UG$!&Lr3d$r8+$D$1$k(B

    $B%I%a%$%s%*%V%8%'%/%H$O]LdBjNN0h(B($B%I%a%$%s(B)$B$G$HL@3N$K6hJL$G$-(B 24 $B!"%7%9%F%`$N%i%$%U%5%$%/%kFb$G!VD9@8$-$9$k!W2DG=@-$N9b$$%*%V%8%'%/%H(B 25 $B$rA*$VI,MW$,$"$k!#(B

    $B?^=q4[$NB_=P4IM}%7%9%F%`$G$O!"%H%C%W%l%Y%k$N(BUseCase$B$+$i$O!"!V;J=q!W$H!VMxMQ(B $B$B3F%I%a%$%s%*%V%8%'%/%H8uJd$N@UG$$HLr3d$r8+$D$1$k$N$,

  • $BMxMQ
    $BB"=q$re$NM}M3$G!"%7%9%F%`$KEPO?$5$l$F$$$J$1$l(B $B$P$J$i$J$$!#(B

    $BMxMQ $B;J=q(B

  • $BB_=P!&JV5Q$r9T$&

    $B;J=q%/%i%9$O;J=q$N%$%s%9%?%s%9$r@8@.!&4IM}$9$kLr3d$H$9$k!#(B

  • $B?^=q4[(B
  • $B%7%9%F%`$K4X$9$k%j%=!<%9(B($B?M$HK\!K$N4IM}$r9T$&

    $B?^=q4[%/%i%9$O!"?^=q4[$N%$%s%9%?%s%9$r@8@.$9$kLr3d$H$9$k!#(B 26

  • $BK\(B
  • $BBjL>!&Cxl9g$N!"Cj>]E*O@M}E*35G0$H$7$F$N!VK\!W!#Bj(B $BL>!&Cx

    $BK\%/%i%9$O!"K\$N%$%s%9%?%s%9$r@8@.!&4IM}$7!"8!:w$9$kLr3d$H$9$k!#(B

  • $BK\
    $B8D!9$NK\$N>pJs$r;}$DJ*M}E*$J35G0$H$7$F$N!VK\!W!#B"=q4IM}$NBP>]!#(B 27

    $BK\ $BB_=P(B

  • $BB_=P9T0Y$r=hM}!&4IM}$9$k

    $BB_=P%/%i%9$O!"B_=P%$%s%9%?%s%9$N@8@.!&4IM}$r9T$&!#(B

  • $BCx
    $BK\$NCxpJs$r;}$D!#(B

    $BCx $BJ,Ln(B

  • $BK\$NJ,Ln$r>pJs$r;}$D!#(B

    $BJ,Ln%/%i%9$O!"J,Ln%$%s%9%?%s%9$N@8@.!&4IM}!&8!:w$r9T$&!#(B

    $B?^=q4[B_=P4IM}$N%I%a%$%s%*%V%8%'%/%H$N@UG$$HLr3d(B

    $B 28 $B!#:#2s$NNcBj$O>.$5$J$b$N$J$N$G!"9,$$$3$N$h$&$J$3$H$O5/$3$i$J$+$C$?!#(B

    $B%*%V%8%'%/%H$rJ,N`$7!"4XO"!&Jq4^4X78$r8+$D$1$k(B

    $B$5$F!"$$$h$$$h%I%a%$%s%*%V%8%'%/%H$N4X78$r%/%i%9?^$H$7$F=q$$$F$$$/$3$H$K$h$j(B $B!"%I%a%$%s%*%V%8%'%/%H$rJ,N`$7!"%I%a%$%s%*%V%8%'%/%HF1;N$N4XO"!&Jq4^4X78$r8+(B $B$D$1$F$$$/$3$H$K$J$k!#(B

    $B%b%G%j%s%0$K47$l$F$/$k$H!"D>@\%/%i%9?^$r=q$-;O$a$k$3$H$,$G$-$k$,!"IaDL$O%7%J(B $B%j%*Kh$K=g=x?^$r:n$C$F$$$C$F!"%*%V%8%'%/%H4V$G$I$N$h$&$J%a%C%;!<%8$r$I$N$h$&(B $B$J=gHV$G$d$j$H$j$9$l$PNI$$$+$r7h$a$F$$$/!#(B

    $B0J2<$K!"B_=P$N=g=x?^$r<($9!#(B

    $B=g=x?^$O%*%V%8%'%/%H4V$K$I$N$h$&$J=gHV$G%a%C%;!<%8$,N.$l$k$+$r5-=R$9$k$?$a$N(B $B%@%$%"%0%i%`$G$"$k!#;M3Q$NH"$NCf$K%/%i%9L>$,5-=R$5$l$F$$$k$,!"2<@~$rIU$1$F!"(B $B$=$N%/%i%9$N$"$k%$%s%9%?%s%9$G$"$k$3$H$r<($9!#%a%C%;!<%8$O2#J}8~$NLp0u$G<($7(B $B!"%a%C%;!<%8L>(B($B%Q%i%a!<%?(B)$B!'JVCM$H$$$&7A<0$r$H$k!#;~4V$O>e$+$i2<$KN.$l!"%*%V(B $B%8%'%/%H$N2<$N=DK@$,$=$N;~E@$N%*%V%8%'%/%H$rI=$9!#GH@~$NLp0u$O!"@)8f$NN.$l$r(B $B<($9!#(B

    $BNc$($P!"0lHV2<$N!VB_=P!W$+$i!V;J=q!W$X8~$+$&GH@~$NLp0u$O!"!V@8@.(B($BMxMQH$re$N!VB_=P!W$+$i!VMxMQ

    $B?^(B 7.$BB_=P$N=g=x?^(B

    $B$3$N=g=x?^$G!"B_=P2DG=$+$I$&$+$r!VB_=P!W%*%V%8%'%/%H$,!VMxMQ 29 $B!#(B

    $B$^$?!"!VMxMQ 30 $B!#(B

    $B$B$3$3$G$O!"!VB_=P!W%*%V%8%'%/%H$,<+J,<+?H$K!VK\

    $B?^(B 8.$BJV5Q$N=g=x?^(B

    $B$3$N$h$&$K!"%7%J%j%*$KBP1~$7$F=g=x?^$r:n$C$F$$$-!"%*%V%8%'%/%H$NLr3d$H!"%*%V(B $B%8%'%/%H4V$N%a%C%;!<%8$N$d$j

    $B$3$3$G$O!"$=$N$h$&$J%U%#!<%I%P%C%/$,2?2s$+$"$C$?$b$N$H%*$F!"%/%i%9?^$N$?$?$-(B $BBf$r<($=$&!#(B

    $B?^(B 9.$B?^=q4[B_=P4IM}$N%/%i%9?^(B($B$?$?$-Bf(B)

    $B>e$N%/%i%9?^$G$O!"%/%i%9$NJ,N`$b$"$kDxEY$7$?!#$=$N;W9M2aDx$r$3$l$+$i<($=$&!#(B

    $B$^$:!"B_=P4IM}$NBP>]$H$J$kK\]%/%i%9(B 31 $B!VCx:nJ*!W$r:n$j!"K\$O$=$N%5%V%/%i%9$H$7$?!#$3$&$7$F$*$1$P!"?^=q4[$G(BCD$B$d%S%G(B $B%*$rB_$7=P$9$h$&$K$7$?$H$-$b%/%i%9?^$N=$@5$O$o$:$+$G:Q$`!#(B

    $B$^$?!"?^=q4[$OK\$r;}$A!"K\$OK\$BNc$($P!"?^=q4[$KK\$,(B10000$B%?%$%H%k$"$j!"$"$kK\$NK\ 32 $B$r;}$A!"K\$HK\ 33 $B$N$I$A$i$+$G$"$k!#(B

    $BB_=P$N>pJs$O!"MxMQH$7$?$j!VB_=P!W$rC$7$?$j$H$$$C$?5!G=(B $B$,M=A[$5$l$k$N$G!"B_=P%/%i%9$rMxMQe$9$k!#(B

    $BMxMQpJs$O?^=q4[%/%i%9$,;}(B $B$C$F$$$k(B 34 $B!#MxMQ]%/%i%9$G(B $B!"0lHLMxMQ 35 $B!#(B

    $B?^=q4[%/%i%9$OMxMQZ$9$k!W4XO"(B 36 $B$r;}$A!";J=q%/%i%9$O?^=q4[%/%i%9$H!VF/$/!W4XO"(B 37 $B$r;}$D!#MxMQ]%/%i%9!V?M!W$N%5%V%/%i%9$G$"$j!"Cx 38 $B!#C1=c2=$N$?$a$K!"Cx$BCx$lCx:nJ*%/%i%9$H4XO"$G7k$P$l$F$$$k!#$3$l$K$h(B $B$C$F!"Cx $B%*%V%8%'%/%H$N>uBVJQ2=$N5-=R(B

    $B$5$F!"%I%a%$%s%*%V%8%'%/%H$N8uJd$OBgJ,L@3N$K$J$C$F$-$F!"%/%i%9?^$N$?$?$-Bf$b(B $B$G$-$?!#$3$N$^$^!"%/%i%9?^$N3F%/%i%9$KI,MW$JA`:n(B($B5!G=(B)$B$rDI2C$7$F$$$C$F$bNI$$(B $B$N$@$,!"$=$NA0$K3F%/%i%9$N%*%V%8%'%/%H$N?6$kIq$$$r8!F$$7$F$_$h$&!#(B

    $B:#$^$G$O!"%I%a%$%s$N@EE*$J9=B$$rCf?4$K9M$($F$$$?$N$G!"$3$N$"$?$j$G%I%a%$%s%*(B $B%V%8%'%/%H$N?6$kIq$$$r9M$($k$3$H$K$h$j!"!V;W9M!W$NJP$j$r@'@5$7$F$*$3$&$H$$$&(B $BLu$G$"$k!#$3$&$7$?J}$,!"%I%a%$%s%b%G%k$N8m$j$rAa$/H/8+$G$-$k$3$H$,B?$$!#(B

    $B%I%a%$%s%*%V%8%'%/%H$N?6$kIq$$$O!"3F%*%V%8%'%/%H$N>uBVJQ2=$r5-=R$9$k$3$H$GJ,(B $B@O$G$-$k!#$3$N$?$a$NF;6q$,!V>uBVA+0\?^!W$G$"$k!#(B

    $B$^$:!"K\uBVA+0\?^$r8+$F$_$h$&!#$3$l$OK\r7o$,$=$N$^$^H?1G$5$l$F$$$k!#9u4]$+$i=P$?Lp0u5-9f$O=i4|A+0\(B $B$rI=$7!":G=i$K$I$N>uBV$K0\$k$+$r<($9(B 39 $B!#:#$N>l9g!"L$B_=P>uBV$K$J$k!#>uBV$O;M3Q$N5-9f$GI=$7!">e$N%U%#!<%k%I$K>u%dL>(B $B$r5-$9!#L$B_=P>uBV$+$i(B2$B=E4]5-9f$K8~$+$&Lp0u$O=*N;A+0\$rI=$7!"8=;~E@$G$N>uBV(B $BA+0\?^$rH4$1$k$3$H$r<($9(B 40 $B!#(B

    $BL$B_=P>uBV$GB_=P%$%Y%s%H$,$/$k$H!">uBV$OB_=PCf$KA+0\$9$k!#B_=PCf>uBV$GJV5Q%$(B $B%Y%s%H$,$/$k$H!">uBV$OL$B_=P$KA+0\$9$k!#(B

    $B?^(B 10.$BK\uBVA+0\?^(B

    $BuBVA+0\?^$r8+$F$_$h$&!#$3$3$G!"!VuBV$NCf(B $B$K$"$k#H$r!{$G0O$C$?5-9f$O!"MzNr>uBV;XI8!J(Bhistory state indicator$B!K$r0UL#$7(B $B!"(B$B>uBV$,!VA0$N>uBV!W$r3P$($F$$$k$3$H$r<($9!#:#$N>l9g$O!"

    $B>uBVA+0\$rI=$9Lp0u$KIU$$$F$$$kJ8;zNs$O!"0J2<$N$h$&$J7A<0$G$"$k!#(B

    $B%$%Y%s%HL>(B $B0z?t%j%9%H(B 41 $B%d(B[$B%f(B $B%,!<%I>r7o(B $B%d(B]$B%f%d(B/$B%f(B $BF0:n<0(B

    $B%$%Y%s%HL>$O>uBV$rA+0\$5$;$k%$%Y%s%H$r<($7!"%,!<%I>r7o$O!V$"$k>r7o$,K~$?$5$l(B $B$?$H$-!WA+0\$,5/$3$k$3$H$r<($9!#F0:n<0$O!"A+0\$N7k2L5/$3$k0l$D$^$?$OJ#?t$NF0(B $B:n$rI=$9!#F0:n$O!":G=*E*$K$OA`:n$9$J$o$A%W%m%0%i%`$H$J$k!#(B

    $B7k6I!"$3$N>uBVA+0\?^$G$O!"!VuBV$GuBV$XLa$k!#(B

    $B?^(B 11.$BMxMQuBVA+0\?^(B

    $B?^=q4[$J$IB>$N%*%V%8%'%/%H$O!"6=L#$"$k!V?6$kIq$$!W$r$7$J$$$N$G!">uBVA+0\?^$r(B $B=q$/I,MW$O$J$$!#(B

    $BMW5a;EMM5-=R(B

    $B$5$F!"!VMW5a;EMM5-=R!W9)Dx$O>\:Y$J5-=R$r>JN,$9$k$,!"$3$N9)Dx$N$N@v$$=P$7$H!"A`:n$N;EMM$H$7$FA07o!&8e7o$r5-=R$9$k$3$H$G$"$k!#(B< /P>

    $B$3$N$h$&$J:n6H$r%/%i%9?^>e$G9M$($k$H$$$&$N$,!"%*%V%8%'%/%H;X8~J,@O$d@_7W$K$D(B $B$$$F5-=R$7$?BgJ}$NK\$Ne$G9M$(!"0lIt$r?M$K@bL@$9$k$H$-$K%/%i%9?^$r;H$&!W$H$$$&$N$,!"(BSmalltalk$B$K68$C$?2f!9$N9M(B $B$($J$N$G$"$k!#(B

    $B?^(B 12.Smalltalk$B$N%V%i%&%6(B

    $B>e$N?^$O!"(BSmalltalk$B$N%V%i%&%6$G!"(BSS-Library$B$H$$$&%/%i%9!&%+%F%4%j!<(B 42 $B$NMxMQ

    $B2hLLCf1{2J,$N%&%#%s%I%&$O!"%a%=%C%IJT=82hLL$G!"$=$NCf1{JU$j$N(B| a$BB_=P(B |$B$O(B $B0l;~JQ?t!V(Ba$BB_=P(B 43 $B!W$rDj5A$7!"$=$N>e$NJ}$N9T$O(B2$B=E0zMQId$G0O$C$?Cm 44 $B$G!"(BOCL$B$K$h$kA07o!&8e7o$N5-=R$,=q$$$F$"$k!#(B

    $B%W%m%0%i%`K\BN$O!"(B| a$BB_=P(B |$B$N2<$K5-=R$7$F$"$j!"0J2<$N$h$&$K$J$C$F$$$k!#(B

    self $Ba$BK\a$BB_=P(B := $BB_=P(B new: a$BK\self $BB_=P%j%9%H(B: (self $BB_=P%j%9%H(B add: a$BB_=P(B; yourself).

    self $B^a$BB_=P(B

    $B?^(B 13.$BMxMQ
    Smalltalk$B$N%W%m%0%i%`$O(B

    $B%*%V%8%'%/%H!!%a%C%;!<%8(B

    $B$H$$$&7A<0$H$J$C$F$$$F!"Nc$($P(B1$B9TL\$N(B

    self $B$B$O!"MxMQ^self error: $B%fMxMQ$B$H$$$&%W%m%0%i%`$,^a$BB_=P(B

    $B$H$$$&9T$,$"$k$,!"$3$l$O!"$3$N%a%=%C%I$,!V(Ba$BB_=P!W$H$$$&0l;~JQ?t$NFbMF$rJV$9(B $B$3$H$r<($7$F$$$k!#(B

    $B$5$F!"$3$N%W%m%0%i%`$r 45 $B$OBgBN0J2<$N$h$&$K$J$j!"%V%i%&%6!

    $B?^=q4[(B class>>example4$B!!(B"$B?^=q4[%/%i%9$N(Bexample4$B$H$$$&%a%=%C%I$G$"$k(B"

    "$BMxMQl9g$NNc(B"

    "$B?^=q4[(B example4"

    | a$B?^=q4[(B a$B;J=q%j%9%H(B a$BJ,N`;J=q%j%9%H(B a$BMxMQ

    a$B?^=q4[(B := $B?^=q4[(B new: $B%fIpB"Ln%f(B $B:GBgB_=P?t(B: 3 $B:GBgB_=PF|?t(B: 7.$B!!(B"$B?^=q4[%$%s(B $B%9%?%s%9$N@8@.(B"

    a$B?^=q4[(B $B;J=qEPO?(B: $B%fNS70%f(B; $B;J=qEPO?(B: $B%fB@ED70%f(B.$B!!(B"$B;J=q%*%V%8%'%/%H$NEPO?(B"

    a$B;J=q%j%9%H(B := a$B?^=q4[(B $B;J=q%j%9%H(B.

    a$B?^=q4[(B $BB"=qEPO?(B: ($BK\(B new: $B%f?M@8AjCL(B: $B%fKc?}J|O25-%f(B $BCx$BB"=qEPO?(B: ($BK\(B new: $B%f9VCL(B: $B%f0f8MC<%f(B $BCx$BB"=qEPO?(B: ($BK\(B new: $B%f=54)6bMKF|%f(B $BBjL>(B: $B%f9gK\=54)6bMKF|(B1998$B%f(B $BCx!0l%f(B) $BJ,Ln(B: #($B%fa$BB"=q%j%9%H(B:= a$B?^=q4[(B $BB"=q%j%9%H(B.

    a$BB"=q%j%9%H(B do: [:e | a$B?^=q4[(B $BK\(B hash);$B!!(B"$BK\$BK\(B hash) +1);

    $BK\(B hash) +2);

    $BK\(B hash) +3)].

    a$B?^=q4[(B $BMxMQa$BMxMQ

    "$BBjL>$dL>A0=g$G%=!<%H$7$F!"JL$N0l;~JQ?t$KBeF~$9$k$3$H$G!"%F%9%H;~$KK\a$BJ,N`B"=q%j%9%H(B := SortedCollection withAll: a$BB"=q%j%9%H(B sortBlock: [:x :y | x $BBjL>(B <= y $BBjL>(B].

    a$BJ,N`K\(B <= y $BBjL>(B].

    a$BJ,N`;J=q%j%9%H(B := SortedCollection withAll: a$B;J=q%j%9%H(B sortBlock: [:x :y | x $BL>A0(B <= y $BL>A0(B].

    a$BJ,N`MxMQA0(B <= y $BL>A0(B].

    "4$B:}$NK\a$BJ,N`;J=q%j%9%H(B first $BB_=P(B: a$BJ,N`K\a$BJ,N`;J=q%j%9%H(B first $BB_=P(B: (a$BJ,N`K\a$BJ,N`;J=q%j%9%H(B first $BB_=P(B: (a$BJ,N`K\a$BJ,N`;J=q%j%9%H(B first $BB_=P(B: (a$BJ,N`K\ $B?^(B 14.$BMxMQl9g$N%F%9%H%W%m%0%i%`(B

    $B%W%m%0%i%`$N:Y$+$$@bL@$O>J$$$F!"$I$N$h$&$K

    $B?^(B 15.$BMxMQ
    $B$3$3$G!V(BDebug$B!W%\%?%s$r%/%j%C%/$9$k$H!"

    $B?^(B 16.$B%G%P%C%0MQ$N%H%l!<%9%&%#%s%I%&(B

    $B$3$N%&%#%s%I%&$N>e$NJ}$N%5%V%&%#%s%I%&$O!"e$KI=<($5$l$F$$$k!#:#$N>l9g!"$=(B $B$N0l$DA0$K

    error: $B%fMxMQ$B$,%O%$%i%$%H$5$l$F$$$F!"$3$N%a%C%;!<%8$G%G%P%C%0MQ$N%&%#%s%I%&$,3+$$$F%W%m%0(B $B%i%`$Nself $B$B$H$$$&ItJ,$G(Bfalse$B$rJV$7$F$/$k$i$7$$!#$3$l$r3NG'$9$k$K$O!"%&%#%s%I%&Fb$N!V(B self $B$B$3$N$h$&$K(BSmalltalk$B$O%&%#%s%I%&Fb$K8+$($F$$$k%W%m%0%i%`$NCGJR$rA*Br$7$F!"$9(B $B$0$=$N>l$G$B>e$N?^$N2<$NJ}$K$O#4$D$N%5%V%&%#%s%I%&$,$"$k!#0lHV:8$N%5%V%&%#%s%I%&$O!":#Ce(B $BL\$7$F$$$k%*%V%8%'%/%H$,2?$G$"$k$+(B 46 $B$H!"$=$N%*%V%8%'%/%H$N%$%s%9%?%s%9JQ?t$N%j%9%H$rI=<($7$F$$$F!"$=$N$I$l$+$rA*(B $BBr$9$k$H!":8$+$i(B2$BHVL\$N%5%V%&%#%s%I%&$K$=$NCM$rI=<($9$k!#:8$+$i(B3$BHVL\$N%5%V%&(B $B%#%s%I%&$O%Q%i%a!<%?$H0l;~JQ?t$N%j%9%H$rI=<($7$F$$$F!"$=$N$I$l$+$rA*Br$9$k$H(B $B$=$NCM$r1&$+$i(B4$BHVL\$N%5%V%&%#%s%I%&$KI=<($9$k!#:#!"(Bself$B$H(Ba$BK\uBV$,!"2<$N?^$G$"$k!#CeL\$7$F$$$k%$%s%9%?%s%9!&%*%V%8%'(BN$B%H$O(B'dr.k'$B$H$$$&(B $BL>A0$NMxMQ$G(Bid$B$,%f(B265302937$B%f$NK\ 47 $B!#$3$l$i$N%&%#%s%I%&$G%$%s%9%?%s%9JQ?t$d%Q%i%a!<%?$d0l;~JQ?t$NCM$r8+$F!"A[Dj(B $B$7$?CM$+$I$&$+$r8!>Z$9$k$3$H$G!"%W%m%0%i%`$,0U?^$7$?$H$*$j$KF0$$$F$$$k$+$I$&(B $B$+$,J,$+$k!#(B

    $B?^(B 17.$B%$%s%9%?%s%9!&%*%V%8%'%/%H$H%Q%i%a!<%?$NI=<((B

    $B$5$F!"MxMQ$B%&%#%s%I%&>e$G(B

    self $B$B$N$9$0A0$K!"(B

    self halt.

    $B$H$$$&9T$rA^F~$9$k!#$3$l$O!"$3$NCOE@$KMh$?$i%W%m%0%i%`$N(B $BA0$N%\%?%s$r%/%j%C%/$9$k$H!"%G%P%C%0MQ%&%#%s%I%&$O0J2<$N$h$&$K$J$k!#$3$3$G!"(B $B!V(BSend$B!W%\%?%s$r%/%j%C%/$9$k$H!VuBV$K$J$j!"?^=q4[$N:GBgB_=P?t$N(B $B@)8B$r1[$($?$N$GB_=P$,$G$-$J$/$J$C$?$i$7$$$3$H$,J,$+$k!#(B

    $B?^=q4[$N:GBgB_=P?t$,K\Ev$K(B3$B$+$I$&$+$O!":82<$N%5%V%&%#%s%I%&$G!"%$%s%9%?%s%9(B $BJQ?t$N!V(Bi$B?^=q4[!W$rA*Br$7%]%C%W%"%C%W%a%K%e!<$+$i(Binspect$B$rA*Br$9$k$H?^(B20$B$N$h(B $B$&$J%$%s%9%Z%/%?!Smalltalk$B$G$O!"%$%s%9%Z%/%?!pJs$r8+$?$j!">l9g$K$h$C$F$OJQ?t(B $B$NCM$rJQ$($?$j$7$F;n9T:x8m$9$k$3$H$,$G$-$k!#

    $B?^(B 18.self halt$B$G;_$^$C$?$H$3$m(B

    $B?^(B 19.$B!V

    $B?^(B 20.$B?^=q4[%*%V%8%'%/%H$N%$%s%9%Z%/%?!

    $B?^(B 21.$B!V(Bi$BMxMQ

    $B?^(B 22.$BMxMQ
    $B$3$N$h$&$K$7$F!"%7%J%j%*$d%/%i%9?^$N$?$?$-Bf$G!"$"$kDxEY%/%i%98uJd$,=P$F$-$?(B $BCJ3,$G!"(BSmalltalk$B$rMQ$$$F6qBNE*$K3F%*%V%8%'%/%H$,$I$N$h$&$J4XO"$,$"$j!"$I$N(B $B$h$&$J?6$kIq$$$r$9$k$+$r;n9T:x8mE*$K3NG'$7$F$$$/!#$3$N$d$jJ}$N$[$&$,!"!VF0$+(B $B$J$$!W%/%i%9?^$r(BCASE$B%D!<%k$J$I$G:n$k$h$j8z2LE*$@$H$$$&$N$,(BSmalltalker$BC#$N4V(B $B$G$N6&DLG'<1$G$"$k(B 48 $B!#(B

    Smalltalk$B$r;H$C$FJ,@O!&@_7W$7$?J}$,!"%$%s%?%U%'!<%9$,$h$jL@3N$K$J$j!"%V%i%&%6(B $B!<$r;H%A$F3FH$r9T$&$3$H$G4V0c$$$r8:$i$9$3$H$,$G$-!"(BGUI$B$N@_7W!& 49

    $B 50 $B!#(BSmalltalk$B$N$h$&$JF0E*8@8l$O!"J,@O!&(B$B@_7W9)Dx$N$h$&$K!"%W%m%0%i%`A4It$r40@.$5(B $B$;$:$K%"%$%G%"$r;n$7!"F0$+$9$H$$$C$?MQES$K8~$$$F$$$k$N$G$"$k!#(B

    $B%I%a%$%s%b%G%k$N8!>Z(B

    $BJ,@O$N:G=*9)Dx$O!"%b%G%k$N8!>Z$G$"$k!#(BSmalltalk$B$N$h$&$J8@8l$,$J$$$H$-$O!"%7(B $B%J%j%*$r85$K$7$?%F%9%H%1!<%9$G4y>e%A%'%C%/$r9T$&$N$@$,!"(BSmalltalk$B$GJ,@O%b%G(B $B%k$r:n$C$F$*$1$P!"?^(B14$B$N$h$&$J%F%9%H%W%m%0%i%`$r3F%7%J%j%*Kh$KMQ0U$7$F$*$-!"(B $B%b%G%k$N$+$J$j$NItJ,$rZ$9$k$3$H$,$G$-$k!#?^(B14$B$N%W%m%0%i%`$OD9$=(B $B$&$K8+$($k$,!":G8e$N(B4$B9T0J30$O%F%9%HMQ$N%G!<%?$N=`Hw$G$"$j!"%7%J%j%*4V$G$+$J(B $B$j6&M-$G$-$k$N$G$5$7$FLdBj$K$O$J$i$J$$!#(B

    $B?^=q4[$NB_=P4IM}%7%9%F%`$NJ,@O%b%G%k$N>l9g$O!"2

    $B?^(B 23.$B:n@.$7$?%/%i%9$H9T?t(B(LOC)

    $B=*$o$j$K(B

    $BK\%l%]!<%H$G$O!"%*%V%8%'%/%H;X8~J,@O!JFC$K%I%a%$%sJ,@O9)Dx!K$r$I$N$h$&$K?J$a(B $B!"(BSmalltalk$B$,$=$l$r$I$N$h$&$K;Y1g$G$-$k$+$r2r@b$7$F$-$?$,!"$3$3$G>R2p$7$?(B Smalltalk$B$NG=NO$O!"$^$@$=$l$,;}$C$F$$$k@x:_G=NO$N$[$s$N0lIt$K2a$.$J$$!#(B

    $B$^$?!"6aG/(BSmalltalk$B$N%7%'%"$O=y!9$K8~>e$7$F$$$F!"3F(BOS$B>e$N%U%j!<$N(BSmalltalk$B$b(B $BA}$($F$-$?!#$D$$:G6a$G$O!"%U%j!<$N(BSmalltalk$B$G$"$k(BSqueak 51 $B$,%7%c!<%W$N%6%&%k%9>e$K0\?"$5$l!"(BMacintosh$B!&(BWindows$B!&(BLinux$B!&(BWindows CE$B!&(BBeOS$B$J$I$G$b!"3F$B$5$i$K!"3F$B$=$&8@$&$o$1$G!";MC+%*%U%#%9$N(BSmalltalk$BItBb$O!"F|!9(BSmalltalk$B$K$N$a$j9~$s$G$$(B $B$k!#(B

    $B$J$*!"I.

    1.$B$3$3$G>R2p$9$k$N$O!"(BVisualWorks$B$H8F$P$l$k!"6/NO$J>&MQ(BSmalltalk$B%M%$%F%#%V!&%3(B $B%s%Q%$%i!<$H$=$N3+H/4D6-$G$"$k$,!"(BFree$B$N(BSmalltalk$B$G$"$k(BSqueak$B$J$I$G$b!"J,@O!&(B $B@_7W%D!<%k$H$7$F$N4pK\E*$JG=NO$OJQ$o$i$J$$!#(B
    2.$B5-K!$O;ve$NI8=`$K$J$j$D$D$"$k(BUML$B$r;HMQ$9$k!#(B
    3.Jacobson, Ivar et al. Object-Oriented Software Engineering - A Use Case Driven Approach. Addison-Wesley, 1992.$B!!;2>H(B
    4.$B!VMW5a;EMM5-=R!W9)Dx$O:#2s$N%l%]!<%H$G$O>\:Y$r>JN,$9$k$,!"%7%J%j%*$K5-=R$7$?(B $BA07o!&8e7o$r!"A`:n;EMM$H$7$F>\:Y$K5-=R$7$F$$$/9)Dx$@$H9M$($F$$$?$@$$$FNI$$!#(B< /P>
    5.$B$?$@$7!"
    6.$B%7%J%j%*$N
    7.-- $B$O(BOCL$B$NCm
    8.Set()$B$N5-K!$O!"(B()$BFb$NMWAG$N=89g$rI=$9!#(B

    ->$B$O=89g$NA`:n$r<($95-9f$G$"$j!"(Bsize$B$O4{Dj5A$NA`:n$G!"=89g$NMWAG?t$rJV$9!#(B
    $B=>$C$F!"(BSet($BMxMQsize $B$G=89g$NMWAG?t$r<($9!#(B
    9.forAll$B$b4{Dj5A$NA`:n$G!"(B()$BFb$N>r7o$,!V(B->$B$N:8JU$N!W=89g$NMWAG$9$Y$F$K$D$$$FK~(B $B$?$5$l$F$$$l$P??$rJV$9!#$3$N>l9g$O!"B_$7=P$9B"=q$9$Y$F$,!VB_=P2DG=!W$G$"$l$P(B $B??$rJV$9!#(B
    10.@pre$B$O8e7o$NCf$G;HMQ$G$-$k5-9f$G!"%7%J%j%*$dA`:n$NF0$/A0$N!VCM!W$r<($9!#!]$O(B $B!]$N:8B&$N=89g$+$i!]$N1&B&$N=89g$^$?$OMWAG$r:o=|$9$k$3$H$r<($9!#(B
    11.$B%7%J%j%*$NI{e(B $B$NBeBX%Q%9$r5-=R$7$F$bNI$$!#(B[ ]$BFb$OCm
    12.exsists$B$b4{Dj5AA`:n$N0l$D$G!"(B()$BFb$N>r7o$rK~$?$9MWAG$,0l$D$G$b$"$l$P??$rJV$9(B $B!#(B
    13.$BB_=PITG=>uBV$N>\:Y$O!"%I%a%$%sJ,@O9)Dx$G$ODj5A$7$J$$!#(B
    14.$B%f!<%6!<%$%s%?%U%'!<%9$N@_7W$OBg;v$J:n6H$@$,!"J,@OCf$K$d$k$Y$-;v$G$O$J$$!#2h(B $BLL$N@_7W$,@h9T$9$k$h$&$J3+H/8=>l$N%W%m%8%'%/%H$OB?$$$,!"$=$N$h$&$J%W%m%8%'%/(B $B%H$G$O??$N!VJ,@O!W$,9T$o$l$F$$$J$$$3$H$,B?$$!#(B
    15.notEmpty$B$O4{Dj5A$NA`:n$G!V6u$G$J$1$l$P??!W$N0UL#!#(B
    16.includesAll$B$b4{Dj5A$NA`:n$G!"(B()$BFb$N=89g$,!V(B->$B$N:8JU$N=89g!W$NItJ,=89g$G$"$l(B $B$P??$rJV$9!#(B
    17.union$B$b4{Dj5A$NA`:n$G!"(B2$B$D$N=89g$NOB=89g$rJV$9!#(B
    18.C.L$B%j%e!H$N$3$H!#(B
    19.$B7?$O%9!<%Q!<7?$NA`:n$r7Q>5$9$k!#Nc$($P!"(BSet$B$O(BCollection$B$NA`:n$r7Q>5$9$k!#(B
    20.$B%/%i%9$d7?$NA`:n$"$k$$$OB0@-$"$k$$$O%m!<%kL>$N$3$H!#(B
    21.$B$b$A$m$s!"uBV$b9M$($i$l$k$,(B $B!"$3$3$G$OLdBj$r4JC1$K$9$k$?$a@)Ls>r7o$rC1=c2=$7$?!#(B
    22.$B$3$l$b!"
    23.$B$^$@!"A`:n$N%Q%i%a!<%?$N>\:Y$O6=L#$,$J$$$N$G!"$H$j$"$($:%Q%i%a!<%?L5$7$N5-K!(B ( )$B$r=q$$$F$$$k!#(B
    24.$BNc$($P!V%f!<%6!J};}$D$H!"$"$k%*%V%8%'%/(B $B%H$,$I$A$i$K=jB0$9$k$N$+[#Kf$K$J$k2DG=@-$,6/$$!#$3$&$J$k$H!"@5$7$$%W%m%0%i%`(B $B$,:n@.$G$-$J$/$J$k!#(B
    25.$B%*%V%8%'%/%H$rDj5A$9$k%/%i%99=B$$O!"%7%9%F%`
    26.$BJ#?t$N?^=q4[$NB_=P4IM}$r$9$k$J$i!"?^=q4[%/%i%9$O%$%s%9%?%s%9$N4IM}$b9T$o$J$1(B $B$l$P$J$i$J$$$,!"$3$3$G$O4JC12=$N$?$a!"?^=q4[$N%$%s%9%?%s%9$r0l$D$H$9$k!#(B
    27.UseCase$B$H%7%J%j%*$G$O!VB"=q!W$H8F$s$G$$$?$,!"!VK\$N$H$$$&$h$j%m!<%kL>$G$"$k$N$,E,(B $BEv$@$HH=CG$7$?!#(B
    28.$BHfSH$H$7$F$O!V>.^<
    29.$B$b$A$m$s!"MxMQe$NLd(B $BBj$OH/@8$;$:!"$3$&$$$&$3$H$,2DG=$K$J$k!#$3$3$G9M$($F$$$kMxMQ]%G!<%?$J$N$@!#(B
    30.$B$b$A$m$s!"MxMQpJs$,1#JC$5$l$F$$$l$P!"$3$N>l9g!"Bg$-$JLdBj$,H/@8$9$k(B $B$3$H$O$J$$!#(B
    31.$B%$%s%9%?%s%9$N$J$$!":FMxMQ2DG=$JA`:n$r;}$D%/%i%9!#%5%V%/%i%9$G$$$/$D$+$NA`:n(B $B$r$NA`:n(B($B5!G=(B)$B$,;H$($k$h$&$K$J$k!#(B
    32.$B%$%s%9%?%s%9F1;N$N7k9g4X78$r%j%s%/$H$$$&!#%j%s%/$N=89gBN$,4XO"$G$"$k!#(B
    33.$BL$B_=P$N;~$O!">o$KB_=P2DG=$G$"$k$3$H$OA0$K=R$Y$?!#(B
    34.$B?^=q4[$N%k!<%k$O?^=q4[%/%i%9$,;}$C$F$$$k$Y$-$@$m$&!#(B
    35.$B$9$J$o$A!"0lHLMxMQ
    36.$BMxMQ
    37.$B?&0w0lMw(B()$B$N%a%C%;!<%8$rAw$k$N$K;H$&$3$H$,M=A[$5$l$k!#(B
    38.$BCx]%/%i%9$G$"$j!"%$%s%9%?%s%9$r;}$D!#(B
    39.$B>uBVA+0\?^$,%*%V%8%'%/%H$KBP1~$7$F$$$k$H$-$O!"$=$N%*%V%8%'%/%H$,@8@.$5$l$?$H(B $B$-$NA+0\$rI=$7$F$$$k$3$H$K$J$k!#(B
    40.$B>uBVA+0\?^$,%*%V%8%'%/%H$KBP1~$7$F$$$k$H$-$O!"$=$N%*%V%8%'%/%H$,L5$/$J$k$H$-(B $B$NA+0\$rI=$7$F$$$k$3$H$K$J$k!#(B
    41.$B0z?t%j%9%H$O!"$3$NNc$G$O$^$@=P$F$3$J$$!#(B
    42.Smalltalk$B$N%/%i%9$d%a%=%C%I$rJ,N`$9$k$?$a$N35G0!#(B
    43.$B0l;~JQ?t$O>.J8;z$G;O$^$k$N$,(BSmalltalk$BN.$G$"$k!#4A;z$K$O>.J8;z$H$$$&35G0$,$J(B $B$$$N$G!"1Q8l$N>l9g$N@5=qK!$G$"$kITDj4';l(Ba$B$r4A;z$NF,$KIU$1$?!#0l;~JQ?t$d%$%s(B $B%9%?%s%9JQ?t$K$O(BaPerson$B$d(BanUser$B$H$$$&L>A0$rIU$1$k$N$,(BSmalltalk$B$N=,47$G$"$k!#(B
    44.$B:G=i$N(B2$B=E0zMQId$O8+$($J$/$J$C$F$$$k!#(B
    45.$B$b$A$m$s!"$3$N%F%9%HMQ%W%m%0%i%`$+$i8F$S=P$5$l$k%a%=%C%I$O$9$G$K:n@.$7$F$$$k(B $B!#(B
    46.self$B$NItJ,$rA*Br$9$k$H!"2?$G$"$k$+$,$=$N1&$N%5%V%&%#%s%I%&$KI=<($5$l$k!#(B
    47.$BCM$NI=<(J}K!$O!"$=$N%*%V%8%'%/%H%$%s%9%?%s%9!&%a%=%C%I(BprintOn:$B$GDj5A$7$F$*$/(B $B!#(B

    48.$B$b$A$m$s!"%/%i%9?^$r=q$$$F$$$F$b(BSmalltalk$B%3!<%I$N%$%a!<%8$,F,$NCf$KIA$1$F$$(B $B$k!VC#?M!W$O!"$I$A$i$NJ}K!$G$bNI$$%b%G%k$r:n$l$k$N$@$,(B...
    49.$B$b$A$m$s!"=PMh$NNI$$(BCASE$B%D!<%k$,M-$l$POC$OJL$J$N$@$,!"%*%V%8%'%/%H;X8~(BCASE$B%D(B $B!<%k$O!"2?8N$+=PMh$,0-$$J*$,B?$$!#(B
    50.$B$d$j$9$.$k$H!"2?$,$J$s$@$+J,$+$i$J$$%W%m%0%i%`$,$G$-$F$7$^$&4m81@-$O$"$k!#(B
    51.$B%G%#%:%K!<$H%"%C%W%k$,3+H/$7$F$$$k85AD(BSmalltalk-80$B$r3HD%$7$?=hM}7O!#(B