%!PS-Adobe-2.0 %%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software %%Title: thesis.dvi %%Pages: 52 1 %%BoundingBox: 0 0 596 843 %%EndComments %%BeginProcSet: texc.pro /TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10 N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{ /vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail} B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N /cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add /gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}bind{adv 1 chg nd}bind{1 add chg}bind{1 add chg nd}bind{adv lsh}bind{ adv lsh nd}bind{adv rsh}bind{adv rsh nd}bind{1 add adv}bind{/rc X nd}bind{1 add set}bind{1 add clr}bind{adv 2 chg}bind{adv 2 chg nd}bind{pop nd}bind]N /D{ /cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval (Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{ /SS save N}B /eos{clear SS restore}B end %%EndProcSet TeXDict begin 1000 508 508 @start /Fa 39 120 df<1518153CA4157C1578A315F85DA314 015DA314035DA31407007FB712F8B812FCA26C16F8C7000FC8FCA35C141EA3143E143CA3147C14 78A314F85CA313015C6D5A2E3075AA3B>43 DI<387FFFC0B5FCA3120479921C>I48 D56 D<137813FC12011203A3EA01F8EA00E01300B1121E123F5A5AA25A5A 12780E2177A018>58 D67 D<0107B612C017F8903A001FC001FC923880003FEF1F80EF0FC0 17074AC7EA03E0A2EF01F0A2027E15F8A45CA218FCA2495AA218F8A2495A1703A3494815F01707 A218E04948140FA218C0171F49481580A2EF3F00173E49C8127E5F5F4C5A017E14034C5A4C5A4C 5A49023EC7FC16FCED03F00001EC0FE0B7C8FC15F836357BB43A>I<0107B712C0A2903A001FC0 003F4B130717031880A24AC71201A4147EA3EF03005CEE300194C7FCA249485BA316E049485B15 0391B5FCA2903907E007801503A3D90FC090C8FCA490381F800292C9FCA349CAFCA4137EA45BA3 1201B512FCA232357BB432>70 D<0107B51280A29039001FE0005D5DA34AC7FCA4147EA45CA449 5AA4495AA4495AA4495AA4495AA449C8FCA4137EA45BA31201B512F0A221357BB41E>73 D<0107B512E0A29026001FE0C7FC5D5DA34AC8FCA4147EA45CA4495AA4495AA4495AA4495AA317 C04948EB0180A3EE030049C7FC1606A2160E017E140C161C163C1638491478ED01F8ED07F00001 143FB75AA22A357BB430>76 D79 D<0107B67E17F0903A001FC001FC 923880007E83EF1F80A24AC713C0170FA2171F147EA44AEC3F80A218005F4948147E5F5F4C5A49 48EB07E04C5A047FC7FC91B512FC4914E002E0C9FCA3495AA4495AA449CAFCA4137EA45BA31201 B512F0A232357BB434>I83 D<0003B712FE5A9039F003F800D80F8049133ED80E00151C120C121C00 18495AA2481618A24A5A5AA3484948133000401610C71500A24AC8FCA4147EA45CA4495AA4495A A4495AA4495AA4495AA3EB7FC0B612C0A22F3572B437>I<263FFFFC90B5FCA2C690C7EA0FF001 FCEC07C0EE03801700A248481406A448485CA448485CA448485CA448485CA448C85AA4007E4A5A A4484AC7FCA31506A25A5D5DA25D007C5C5D003C1301003E495A001E0106C8FC6C131C3807C0F8 3801FFE06C6CC9FC303670B439>I97 D<137EEA0FFEA2EA007CA45BA4485AA4485AA43807C1F0EBC7FCEBDE1EEBF80FEA 0FF001E01380EBC0071380D81F0013C0A3140F123EA448EB1F80A40078EB3F0012F8143E147E14 7CA200785B5C1301495A00385B383C0780D81E1EC7FCEA0FFCEA03F01A3678B423>I<14FCEB07 FF90380F838090383E01C0EB78009038F001E000011307EA03E03907C00FC0A2390F800780001F 90C7FCA248C8FCA3127EA4127C12FCA3127C158015C0EC0180003CEB030014066C131C1478380F 81E03803FF80C648C7FC1B2378A123>IIII<141FEC FF80903801E1C7903803C06F90380F807F90381F003F131E5B017C133E13FC5B120149137C1203 A3484813F8A49038C001F0A4EC03E0A314070003EB0FC0141F3801E0373800F0E790387FCF80EB 1F0F1300A2EC1F00A4143E123C007C5B127E485B495A387803E0EB0F80D81FFFC7FCEA07F82032 7CA123>III<1538157C157E15FC157C15701500AB143FEC7F80903801C3C0903803 81E014011306130CA2EB1803A21330A290380007C0A4EC0F80A4EC1F00A4143EA45CA45CA4495A A4495A123C387C07C0007E5BEAFC0F49C7FCEA783EEA7078EA3FF0EA0F801F4383B218>II<133FEA07FFA2EA003EA4137CA413F8A4EA01F0A4EA03E0A4EA07C0A4EA 0F80A4EA1F00A4123EA45AA21308130CEAF818A4133012F01360127813C0EA3F80EA0F00103679 B414>I<2707C007F0137E3C0FE01FFC01FF803C18F0781E0783C03C3078E01F0E01E0903979C0 0F1826607B8001B07F020013F0017E14E0484814C0A2491480A2D801F04948485AA44848013E49 5AA34D5A48485BA2EF1F011980484849EC0300173EA2EF3C064848485A60A260003E4948EB1C30 EF0FE0001C6D486D5A392379A13F>I<3907C007E0390FE01FF83918F0783C393078E01EEB7980 39607B001F137F137E485AA25BA2D801F0133EA448485BA35D485AA2913801F0101618D80F8014 30EC03E0A2EDC060EA1F0016C0A2EDC180003E903801C300EC00FE001C147C252379A12B>I<14 FC903807FF8090380F87C090383E01E0017813F0EBF000000114F8485A485A15FC485A121FA248 C7FCA3007EEB01F8A4007CEB03F012FC15E01407007C14C0140F1580EC1F00003C131E5C6C5B5C 380F83E03803FF80D800FCC7FC1E2378A127>I<011F133E90393F80FF80903963C3C3C09039C1 E701E014EE260181FC13F0ECF8005C48484813F8A31501380007C0A490390F8003F0A490391F00 07E0A216C0150F013E1480A2ED1F00151E017E133E017F5B15786E5A9038F9C3C09038F8FF8002 7EC7FC91C8FC485AA4485AA4485AA3EAFFFEA225317FA127>I<903801F00890380FF81890381E 1C3890383C0678017813F0EBF003EA01E01203D807C013E0120F1380121F90380007C05AA3007E EB0F80A4007CEB1F0012FCA3143EA2127C147E5C123C1301381E077C380E0EF8EA07FCEA03F0C7 FC495AA4495AA4495AA2130F3801FFFEA21D3178A123>I<3907C01F80390FE07FE03918F0E070 393079807890387B00F838607E01A2017C13F039C0FC00E0491300A3EA01F0A4485AA4485AA448 5AA448C8FCA4123EA2121C1D2379A120>II<13075B5BA4133EA45BA45B387FFFF8B5FC3800F800485AA4485AA4485AA4485AA448C7 FCA214201430003E1360A214C0A2EB0180383C0300A2EA1E06131CEA0FF8EA03E0153179AF1A> IIII E /Fb 4 116 df101 DI<387FFFC080B5FC7EA2EA0003B3B3A6007FB6FCA2B712806C1500A221347BB32B>108 D<90387FF0603903FFFEF0000F13FF5A5A387FC01F387E0007481303481301A36CEB00E0007E14 00EA7FC0EA3FFE381FFFF0000713FF000114C0D8001F13E09038007FF0EC07F80070EB00FC00F8 147C153E7EA27E157E7E90388001FC9038F00FF890B5FC15F000F914C000F0148039601FFC001F 247AA32B>115 D E /Fc 4 116 df101 DI<387F FFFEB6FCA47EC77EB3B3AE007FB7FCB81280A46C1600293E7ABD35>108 D<90390FFF83C090B5EAF7E0000314FF5A121F5AEBF801397F80003F90C7121F00FE140F5AA37E 6CEC07C0D87FC090C7FC13F8383FFFE06CEBFF806C14F0000314FCC614FF011F14C0D9007F13E0 020113F0EC001FED07F8003C1403007EEC01FC00FE1400A27EA26D13016D14F86D13036DEB0FF0 01FE137F90B612E016C0168000FCECFE00013F13F8D8780313C0262C79AB35>115 D E /Fd 4 109 df83 D101 DI108 D E /Fe 42 120 df<913A03FF800FF8023F9038E07FFE49B500F9B51280903C07FE00FF FC1FC0D90FF8ECF03F90261FE0019038E07FE049484813C0EB7F8013FF02009138803FC0486EEC 1F80F00F006F91C7FCAAB912C0A4000190C70180C7FCB3AB007FD9FC3F13FFA43B3B7EBA37>11 D43 D45 D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C79 8B1A>I<143C147CEB01FC1307137FB5FCA3138FEA000FB3B3A6007FB6FCA4203779B62F>49 DII<151FA25D5D5D5CA25C5C5CA25C14 3D147D147914F1EB01E11303EB07C11481EB0F01131E133E133C137813F0120113E0EA03C0EA07 80120FEA1F00121E5A5A12F8B8FCA4C700031300AA0107B6FCA428367DB52F>I<0004EC0180D8 0F80130F01F813FF90B612005D5D5D5D5D158092C7FC14F8EB1F8090C9FCA8EB07FE90381FFFC0 017F13F09038F807F89038E001FE01807F90C7FC00061580C813C0157F16E0A316F0A2121F487E 487E12FF7FA216E05B5B6CC7EAFFC0127C003C1580003E5B6C1500390F8007FE3907F01FFC6CB5 12F06C5C6C6C90C7FCEB0FF824387BB62F>II65 D67 DII73 D77 D79 DI83 D<003FB91280A4D9F800EBE003D87FC09238007FC090C7151F007E 170FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AF011FB7FCA43B397DB842>I< EB3FFE48B512C0000714F0390FF00FFCEC03FE486C6C7E8082157F6C48806C5AEA0180C8FCA3EC 3FFF010FB5FC90387FFE7F3801FF803807FE00EA0FF8EA1FE0123F485AA2485AA415FF6C7EEC01 BF3A3FE0033FE0261FF81EEBFFC0390FFFFC1F0003497E39003FC0032A257DA42E>97 D<13FE12FFA412071203B0EC03FF021F13E0027F13F89039FFFC07FC9138E001FF913980007F80 91C7EA3FC04915E0161F17F0A2EE0FF8A317FCA917F8A3EE1FF0A217E0EE3FC06DEC7F806EEBFF 009039FBE001FE9039F8F80FFC9039F07FFFF0D9E01F13C09026C007FEC7FC2E3B7DBA35>I<90 3801FFE0010F13FC017F13FF9039FF807F803801FE00D807F8EBFFC0485AA2485A003FEC7F80ED 3F00007F140C4990C7FCA212FFA9127FA27F123FED01E06C7E000FEC03C07F6C6CEB0780D801FF EB0F006CEBC07E6DB45A010F13F00101138023257DA42A>I<167FED7FFFA4150381B0903801FF 81010F13F1013F13FD9038FFC07F3901FE001F4848130748487F48487F485A123FA2485AA312FF A9127FA36C7EA2121F6D5B000F5C6C6C5BD803FE4913802700FF80FD13FC90387FFFF9011F13E1 010313012E3B7DBA35>III<163E903907 FC01FF90267FFFC3138090B538E78FC03A03FC07FC1F3807F803390FF001FEEE0F803B1FE000FF 070093C7FC003F81A6001F92C7FCA26C6C485AA26C6C485A6C6C485A90B512E0486C5B260E07FC C8FC90CAFCA2121E121FA213C06CB512F015FF16C06C816C15F87E4881000F81391FC0000F48C7 EA01FF488000FE81A5007F15FE6C5DD81FC0EB03F86C6C495AD807FEEB7FE06CB65AC66C49C7FC 010713E02A377DA52F>I<13FE12FFA412071203B0EDFF80020713E04A7F91381E07F891383803 FC02607FECC001D9FF807FA21400A25BB3A4B5D8F87F13FCA42E3B7CBA35>I I<141EEC7F80ECFFC0A24913E0A46D13C0A2EC7F80EC1E0091C7FCABEC1FE0EB0FFFA4EB007F14 3FB3B1121E123FEA7F80D8FFC013C0147F158014FF6C481300EB83FC6CB45A000F13E0000190C7 FC1B4C85BB1D>I<13FE12FFA412071203B092383FFFE0A4923807F80016E04B5A033FC7FC157E 5D4A5A4A5AEC0FC04A5A143F4A7E90B57E81A2ECDFF8EC8FFC9038FE07FEEBFC03816E7F6E7F15 7F826F7E6F7E150F826F7EB539F03FFFF8A42D3B7DBA32>I<13FE12FFA412071203B3B3ADB512 F8A4153B7DBA1A>III<49B47E011F13F8017F13FE3A01FF00FF80D803FCEB3FC04848EB1FE04848EB0FF04848EB 07F8A2003F15FC491303007F15FEA300FF15FFA9007F15FEA36C6CEB07FCA2001F15F86D130F00 0F15F06C6CEB1FE06C6CEB3FC03A01FF81FF803A007FFFFE00011F13F80101138028257DA42F> I<9038FE03FF00FF011F13E0027F13F89039FFFC07FC9138E001FF0003D98000138091C7EA7FC0 49EC3FE0A217F0161F17F8A2160F17FCA917F8161FA217F0163F17E0EE7FC06D15806EEBFF0091 38E003FE9039FEF80FFC91387FFFF0021F13C0DA07FEC7FC91C9FCACB512F8A42E357DA435>I< 3901FC07E000FFEB1FF8EC3FFEEC78FF14E0000701C11380EA03FD148113FF02001300157E1518 4990C7FCB3A3B512FCA421257DA427>114 D<90387FE0E03803FFFD000F13FF381FC01F383E00 0714035A140112FCA27E6C90C7FC13E06CB4FC14F86C13FE6CEBFF806C14C06C14E06C14F0C66C 13F813079038001FFC14070070130112F014007EA26C14F8A26CEB01F039FF8003E09038E00FC0 00FBB5128000F0140038C01FF81E257DA425>I<130FA55BA45BA25BA25B5A5A5A001FEBFFE0B6 FCA3000190C7FCB21578A86C14F01480017F13E090383FC1C0EB1FFF6D1300EB01FE1D367EB525 >I<01FE147F00FFEC7FFFA400071403000380B3A35DA300015C150D6C6C011D138090267F8079 13FC90383FFFF16D13C1010313012E257CA435>III E /Ff 43 122 df12 D45 DI49 DII<161F4C7E167FA216FF5D5D5DA25D5D5D5DA292B5FC5CEC 03F7EC07E7EC0FC71587141FEC3F07147E14FC14F81301EB03F0EB07E0EB0FC01480EB1F005B13 7E5B5B485A1203485A485A5B48C7FC5A127E5AB912E0A5C8000FEB8000AC027FB612E0A533427D C13A>I<0003ED0380D807E0141F01FFEB03FF91B6FC17005E5E5E5E5E16804BC7FC15F815E092 C8FC01C0C9FCAAEC7FF001C3B5FC01CF14C090B612F09138C03FF89039FE001FFE01F8EB07FF13 E0496D138017C06C5AC86C13E0A217F0A317F8A2EA0780EA1FE0487E487EA212FF7F17F05BA217 E06C485B4915C0EA3F8090C74813806C6C4913006D5BD80FF0495A3A07FE01FFF86CB65AC615C0 6D91C7FC010F13FC010113802D437AC13A>II65 DII73 D<0103B71280A590C700 0FEB8000B3B3A9EA07C0EA1FF0487E487EA2487EA34B90C7FCA25B007F4A5A495C6C48495A6C48 495A260FFC075B6CB65A000192C8FC6C6C13F80107138031467DC43C>I76 D<923803FFF0037FEBFF800203B612F0021F15FE027F9039003FFF80DAFF F801077F010301E0010113F04901806D6C7E4990C86C7ED93FFE6FB4FC49486F7F49486F7F4A81 48496F7F488548496F7FA24849707EA2488591CA123FA24885A34848711380A400FF1AC0AD007F 1A80A26D5FA36C1A00A26E5E6C61A26C6D4C5AA26C6D4B5BA26C6D4B5B6C616E5D6C6D4B5B6D6C 4B5B6D6C4B90C7FC6D6D4A5A010701E0903801FFF86D01F801075B6D01FF013F5B6D6C90B61280 021F4BC8FC020315F0DA007F1480030301F0C9FC4A477AC557>79 DI82 DI<003FBA12FCA5DA0007EBE000D87FF8EF1FFE01E0 170749170349170190C71600A2007E197EA2007C193EA500FC193F48191FA5C81700B3B3A20107 B812E0A548447CC351>I<903807FFFC017FEBFFC048B612F04815FC489038001FFF03077F486D 6C7F6F7F8183167F6C90C77FA26C5AEA00F890C8FCA392B5FC143F0103B6FC011FEBFE7F017F13 003801FFF8000713C04890C7FC485A485A485AA2485AA516FF6C7EED01DF6C6C13036D90380F9F FE3C1FFFC07F1FFFF000079026FFFE0F13F80001ECF8076C6CEBE003010790C713F0352D7DAC39 >97 DI<91381FFF8049B512F0010714FC011F14FF90267FF8031380 EBFFE048494813C0481380481300485A121F496D1380123F6F13004848EB007C93C7FCA312FFA9 127FA27FA2123FEE01F06C7EA26C6CEC03E06C15076C6DEB0FC06C6DEB1F806C01F0EB3F009039 7FFC01FE011FB55A010714F0010114C09026001FFCC7FC2C2D7CAC34>IIII<173FDA7FF0EBFFC00107B5000313E0 011F14CF017F9138FFCFF0903AFFE03FFE1F489038800FFC4890380007FE4848903903FF0FE0A2 48486DEB8380EF8000001F82A7000F5EA26C6C4990C7FCA26C6C495A6C6D485A6C9038E03FF848 90B55A16C0D803C791C8FC9038C07FF0000790CAFCA47F7F7F90B612E016FF6C16C017F06C16FC 836C82A200031780120FD81FF8C7001F13C0D83FE014034848020013E0177F4848153FA56C6CED 7FC0A26C6CEDFF806D5C6C6C4A13006CB4EC1FFE000301E0EBFFF8C690B612E0013F1580010702 FCC7FCD9007F13C034437DAD3A>II<13FC48B4FC4813804813C05A4813E0A66C13C07E6C13806C1300EA00FC90C7 FCAAEB7FC0B5FCA512037EB3AFB6FCA518477CC620>IIII<90287FC001FF8049B47EB5010F01F0010F13F0033F 01FC013F13FC92B56C90B57E913DC1FC0FFF01FC0FFF9126C3E003902683E0037F0003D9C780EC 87806CD9CF00DACF008002DE6D01DE7F02DC03FC8102F85DA24A5DA34A5DB3A7B600C0B600C0B6 12C0A55A2D7CAC63>I<903A7FC001FF80B5010F13F0033F13FC92B57E9139C1FC0FFF9126C3E0 037F0003EBC7806CD9CF008002DE7F02DC8114F8A25CA35CB3A7B600C0B612C0A53A2D7CAC41> II<90397FC01FFCB590B57E02C314F002CF14FC9139 FFE03FFE92390007FF80000301FC6D13C06C496D13E04A7F4A15F0EF7FF8A2EF3FFCA218FEA217 1FA218FFA918FEA2173FA218FC177F18F8A2EFFFF06E4913E06E4913C06E49138002FF49130092 38C07FFE02EFB512F802E314E002E01480DB1FF8C7FC92C9FCAFB612C0A538417CAC41>I<9039 FF803F80B5EBFFE0028313F8028713FC91388FC7FE1507000390389E0FFF6C13BC14B814F89138 F007FEA2ED03FC9138E000F01600A35CB3A5B612E0A5282D7CAC30>114 D<90390FFF01C0017F13E70003B6FC5A380FF801391FC0003F4848131F48C7120F1507A25AA27F 6D90C7FC13F8EBFF806C13FEECFFC06C14F015FC6C14FF6C15806C15C0000115E06C7E011F14F0 1300020313F8EC007F0078141F00F8140FA26C1407A216F07E7E6DEB0FE07F6DEB3FC001FCEBFF 8090B61200D8FC7F13FCD8F81F13F0D8E0031380252D7CAC2E>IIIII<007FB53980 03FFFEA5000101F0C7EA3F806CEE1F006E5C017F153E6E147E013F157C6E14FC011F5D8016016D 5DED80036D5DEDC0076D5DEDE00F6D5DEDF01F6D92C7FC15F85E027F133EEDFC7E023F137CEDFE FC021F5B15FF6E5BA26E5BA36E5BA26E5BA26E90C8FCA2157EA3157C15FC5D1401D81F805B383F C003D87FE05B38FFF0075D140F4A5A92C9FC5C387FE0FEEB43FC6CB45A6C13E000071380D801FE CAFC37417EAC3D>121 D E /Fg 12 117 df<163E167F4B5A1507151F157F0203B5FC141F0103 B6FCB8FCA514E3EBFC03C7FCB3B3B3B2003FB912E0A73B5F74DE54>49 DI<92383FFF800203B5 12FC021FECFF80027F15F049B712FC01078249D9E00F6D7E90271FFE000180D93FF86D6C7FD97F E06E7FD9FF808202F080486D82486D826E8080488481A76C91C7FC616C495C6C5B6D485EEB1FE0 90C9485BA2614D5B6194B55A4C91C7FC604C5B040F5B043F13E00303B512800203B548C8FC4A14 F817FEEFFFC06E15F891C7000F13FE04016D7E706C7F7113F0717F717F85717F1A80831AC01AE0 A2831AF0A3D803FF18F8487F487F487F487F487FA2B57EA31AF0A34D14E05C6C19C05C4D14806C 5B4A4A14006C90C85CD80FFC4B5B6CB44B5B6C01E04A5B6C01FC49B55A6C9026FFC00F1480013F 90B7C7FC6D16FC010716F0010016C0021F02FCC8FCDA007F1380456079DE54>II<016017E001FCEE03F0D9FF80151F02 F8EC01FFDAFFC0017F5B92B7FC616196C7FC606060606060604DC8FC5F17F017C04CC9FC16F0DA 0FFECAFC91CCFCAD92381FFF804AB512FC020FECFF80023F15E091B712F8DBE0077F4AC713FF02 F86E7F02E06E7F02806E7F91C86C7F4983498301788190C98085A2711480A31AC0A41AE0A2EA07 FC487E487E487F487F80B5FCA31AC0A44A17806C5E5C91C815006C485F01F85DD81FC05F6D5F6C 6C5D6C6C4B5B6D5F6CB492B55A6C01C0495C6C01F0010749C7FC6DB4017F5B011F90B612F06D5E 01031680010003FCC8FC021F14E0020101F8C9FC436078DE54>I<95267FFFC01538053FB500FE 157C0403B700C0EB01FC041F04F8130393B800FE130703039438FF800F031FF0E01F037F9126FE 001FEBF03F92B600800101EBF87F020302FCC8003FB5FC4A02E0150F021F028015034A49CAFC4A 01F88391B548171F4902C083494A834991CB7E494984495B49864949197F5D90B51A3F485C1D1F 485C1D0F485CA2481C0792CDFC5A1D03A2485BA2F501F84899C7FCA35CA2B5FCB07EA280A37EA2 1EF86C6DF201FCA37E817E1D036C6E1AF8A26C6E19071EF06C806D1B0F6FF11FE06D7F6DF33FC0 6D6DF17F806D7F6D6EF0FF006D6E4D5A6D02F0EF07FC6E6D4D5A6E01FEEF3FF06E6D6C4C5A0207 02E04B485A6E02FC030F5B0200DAFFC0027F90C7FC6F02FE90380FFFFC031F91B75A030318E003 001880041F04FCC8FC040316F0DC003F92C9FCDD007F13E0666677E479>67 D<020FB5FC49B612F8010F15FF4916C04916F090277FFC001F7F01FF020313FE486D01007F717F 486D6E7F858385717FA26C5B717F6C5B6D5A6D5AEB0FC090C9FCA64BB6FC157F0207B7FC147F49 B5EAFE07010F14C0013FEBFE004913F090B512C0000391C7FC4813FC485B485BA2485B5A5CA2B5 5AA45FA36E5C7E6E5C6C167D6C6D02F97F6C6D0103ECFFC06C01FED90FF1ECFFC06C9027FFC07F E015E06C91B5EA807F6C6C1500011F02FC131F010302F01307D9001F0180010014C04B417BC051 >97 D<92380FFFC092B512FE0207ECFFC0023F15F091B712FC010349C613FF4901F8013F7F011F 01E0010F7F49496D7F4990C76C7F49488048707F48496F7EA248498248173F4A825A84481980A2 5C5A7213C0A3B5FCA291B9FCA41A8002E0CBFCA57EA46C7FA37E6EEE0F806CF01FC0A26C6D163F 6C19806E167F6C6DEEFF006C6E5C6D6D4A5A6D6D4A5A6D01F8EC1FF86D01FEEC7FF00103903AFF C007FFE06D91B65A6D6C93C7FC021F15FC020315F0DA007F1480030301F0C8FC42417BC04D> 101 D<903807FFC0B6FCA7C6FC7F7FB3A894380FFF80057F13F80403B512FE040F6E7E4C819326 3FF01F7F9326FF800F7F9227C1FC00077FDBC3F881DBC7E07F4C81EDCF8003DFC77E15DE03FE82 5DA25DA25DA35DB3B2B7D8F807B712C0A7526579E45D>104 D<902607FFC0EB7FFEB60107B512 E0043F14FC93B7FC03C316C003CF16F003DFD9807F7F9227FFF8000F7FC603E06D7F6D02800101 7F6D49C8804B834B6F7F4B6F7F5D737FA2737FA28785A287A3851C80AD1C0061A363A26163A24F 5B63616F5F4F5B6F92B55A6F94C7FC6F4A5B6F6C495B70010F5B04F0013F5B9226EFFF01B512C0 03E790B65A03E14BC8FCDBE07F14F0041F1480040101F0C9FC93CCFCB3A3B712F8A7515D7BC05D >112 D<903A0FFF8003FFB6010F13E0043F13F84C7F93B57E923981FE0FFF922683F81F138092 2687E03F13C0C6EC8FC06D90269F807F13E06D140015BEA215FCA24B6D13C0A24B6D1380711300 715AEF01F84B90C8FCA55DB3AEB712FEA73B417BC045>114 D116 D E /Fh 71 126 df<003C1378007E13FC00FE13FEA6007E13FCA900 7C137CA4003C137800181330171778AF28>34 D<90381E01E090383F03F0A7EB7F07017E5BA200 3FB512FE4880B71280A36C15003900FC0FC0A50001131F01F85BA6007FB6FCB71280A36C15006C 5C2603F03FC7FCA200075BEBE07EA83803C03C212F7DAE28>I<120FEA1F80EA3FC013E0A213F0 121F120F1201A5120313E01207A2EA0FC0EA1F80123FEA7F0012FE5A5A12700C1972AE28>39 D<14E0EB03F01307EB0FE0EB1FC0EB3F00137E5B485A485A485A5B120F5B121F90C7FC5A123EA2 127E127CA312FC5AAA7E127CA3127E123EA2123F7E7F120F7F12077F6C7E6C7E6C7E137E7FEB1F C0EB0FE0EB07F01303EB00E0143A74B428>I<127012FC7E127F6C7EEA0FC06C7E6C7E6C7E6C7E 137E133E133F7F1480130F14C01307A214E01303A314F01301AA130314E0A3130714C0A2130F14 80131F14005B133E137E5B485A485A485A485AEA3F8048C7FC12FE5A1270143A79B428>I43 DI<007FB512FCB612FEA46C14FC1F067C9A28>I<121E123FEA 7F80EAFFC0A4EA7F80EA3F00121E0A0A718928>I<151C153E157EA215FE15FC140115F8140315 F0140715E0140F15C0141F1580143F15005C147EA214FE5C13015C13035C13075C130F5C131F5C 133F91C7FC5B137E13FE5BA212015B12035B12075B120F5B121F5B123F90C8FC5A127E12FE5AA2 5A12781F3B7CB428>II<1306130F5BA25BA25B5B1203123F5AEAFFDF139FEA7E1F1200B3AB003FB5 12804814C0A36C14801A3079AF28>IIII<000FB512E04814F0A315E090C8FC ACEB0FF8EB3FFE90B5FC15C015E09038F80FF0EBC00390388001F890C712FC120EC8127C157E15 3EA31210127C12FE157EA2157C4814FC007CEB01F8007E1303393F800FF09038E03FE06CB512C0 6C14800003EBFE006C5B38003FE01F307CAE28>I<14FF010713C0011F13E04913F04913F89038 FF81FC3801FC01EA03F8EA07E0EA0FC090388000F8001F140090C8FC5A123E127E127C14C0EB1F FC38FC7FFF48B5128000FB14C0B612E09038E00FF090388003F8EB000148EB00FC157C48147EA2 153EA3127CA3127E003E147E003F147C15FC391F8001F81403390FE007F03907F81FE06CB512C0 6C14806C1400EB7FFCEB0FF01F317CAF28>I56 DI<121E123FEA7F80EAFFC0A4EA7F80EA3F00121EC7FCAD121E123FEA7F80EA FFC0A4EA7F80EA3F00121E0A2171A028>I<120FEA1F80EA3FC0EA7FE0A4EA3FC0EA1F80EA0F00 C7FCAD120FEA1F80EA3FC0127F13E0A3123F121F120F1203120713C0120F1380123FEA7F0012FE 5A5A12700B2C72A028>I<151C157E15FE14031407EC1FFCEC3FF0ECFFE049138001071300EB0F FCEB3FF8EB7FE048485A4890C7FCEA0FFEEA1FF8EA7FF0EAFFC05BA27FEA7FF0EA1FF8EA0FFEEA 03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC010113806D13E0EC3FF0EC1FFCEC07FE14031400157E 151C1F287CAB28>I<007FB6FCB71280A4003F1500CAFCA6003FB6FCB71280A46C150021127DA0 28>I<127012FC7E6C7E7FEA7FF0EA1FF8EA0FFEEA03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC01 0113806D13E0EC3FF0EC1FFCEC07FE1403A21407EC1FFCEC3FF0ECFFE049138001071300EB0FFC EB3FF8EB7FE048485A4890C7FCEA0FFEEA1FF8EA7FF0EAFFC05B48C8FC5A12701F287CAB28>I< 14FE903807FFC0011F7F497F90B57E48EB81FC3903FC007C01F07F3907C00FBE390F803FFF4848 5A91B5FCEA3E01EB03F8007C9038E03F80903807C01F1278EC800FEAF80F12F0EC0007A7EC800F 12F8D8780714006E5A127C903803E03E003EEBF8FE6DB45A6C6C5B6E5A6C6C6C5A3907C00F8039 03F0000F01FCEB3F803901FF81FF6C90B51200013F5B6D13F801075B01001380212F7DAE28>64 DI<90 3803FC0390390FFF0780013F13CF4913EF90B6FC4813073803FC00D807F0137F4848133F5B4848 131FA248C7FC003E140F127EA2007CEC070092C7FC12FCA25AA97EA2127CA2007E1407ED0F8012 3E123F6C7E151F6C6C14006D5B6C6C137ED803FC13FE3901FF03FC6CEBFFF86D5B6D13C0010F5B D903FCC7FC21317DAF28>67 D<007FB6FCB71280A37E3907C0000FA6ED070092C7FCA4140E141F A390B5FCA5EBC01FA3140E91C8FCA5ED0380ED07C0A7007FB6FCB7FCA36C1580222F7DAE28>69 D<007FB61280B712C0A37E3903E00007A6ED038092C7FCA514074A7EA390B5FCA5EBE00FA36EC7 FC91C8FCAC387FFF80B57EA36C5B222F7EAE28>I<903807F01890381FFC3C90387FFE7C90B5FC 4814FC3803FE1F3807F007EBE003380FC001EA1F80140048C7FCA2003E147C127E127C153892C7 FC12FC5AA791380FFF804A13C0A36C6D1380007C9038007C00A3007E14FC123E123FA2381F8001 A2380FC003EA07E0EBF0073803FC1F6CB5FC6C147CEB7FFE90381FFC38D907F0C7FC22317DAF28 >I<007FB512C0B612E0A36C14C0D8001FC7FCB3B3007FB512C0B612E0A36C14C01B2F7AAE28> 73 D<387FFF80B57EA36C5BD803E0C8FCB3AB1507ED0F80A7007FB6FCB7FCA36C1500212F7DAE 28>76 D<3A7FE003FFC000FF4913E013F0A26C6C6C13C03A07B8003C00A213BC139CA2139E138E 138FA213871480A2138314C0A2138114E0A2138014F0A214701478A21438143CA2141C141EA214 0E140F1407A215BC1403A2D87FF813FC38FFFC01A214006C485B232F7EAE28>78 DI<387FFFF0B512FE8015C06C803807C01FEC07F06E7E14011400157C A65D140114034A5AEC1FE090B5FC5D92C7FCA2819038C01FC0EC07E01403811401A8167016F8A2 15F8397FFC00F9486CEBFFF0A2ED7FE06C48EB3FC0C8EA0F8025307EAE28>82 D<90387FC0303901FFF87848EBFCF8000F13FF5AEBE07F383F000F007E1307007C130300FC1301 5AA21400A36C1470007C1400127E7E13C0EA1FFC380FFFC06C13FC000113FF6C6C1380010713C0 9038007FE0EC07F0EC01F8EC00FC157CA2157E0070143E12F8A46C147E157C6C14FC7E9038C003 F89038F80FF090B512E015C000F91480D8F07F130038600FF81F317CAF28>I<007FB612C0B712 E0A439F801F003A60070EC01C0000091C7FCB3AC90387FFFC090B57EA36D5B232F7EAE28>I<3A 7FFC01FFF0486C4813F8A36C486C13F03A07C0001F00B3AC6D5B0003143EA26D137E0001147C6D 13FC6C6C485A90387F07F06DB45A6D5B6D5B6D90C7FCEB01FC25307FAE28>I89 D<387FFFE0B512F0A314E000F8C7FCB3B3ADB512E014F0A36C13E014 3B70B428>91 D<387FFFE0B512F0A37EEA0001B3B3ADEA7FFFB5FCA36C13E0143B7DB428>93 D<133813FE487E000713C0001F13F0383FEFF8387FC7FC38FF01FE38FC007E0078133C00201308 170B78AE28>I<007FB512FCB612FEA46C14FC1F067C7E28>I<3803FFC0000F13F8487F487F8090 38807F80EC1FC0381F0007000E80C71203A3EB03FF133F48B5FC12074813C3381FF003EA3F80EA 7E005A5AA46C1307007E130F397FC07FF06CB612C06C15E06C13F96C13F000019038003FC02321 7CA028>97 DIIIIIII<131E133F497EA46DC7FC131E90C8FCA7EA7FFFB57EA37EEA000FB3A5007FB512E0 B612F0A36C14E01C307AAF28>I<143C147E14FFA4147E143C1400A73801FFFE4813FFA37EC712 1FB3B1143F0038133E007C137E00FE13FCEB03F8B512F014E06C13C06C1380380FFE0018417CAF 28>II<387FFF80B57EA37EEA0007B3B3 007FB512FCB612FEA36C14FC1F2F7CAE28>I<397E1F80FC39FF3FC1FE90387FE3FFD9FFF71380 6C90B5FCD80FF0EB87C09038C0FE07EC7E03EB807CA3EB0078B13A7FE0FF07F8D8FFF1EB8FFCA3 D87FE0EB07F8262180A028>I<397FE07F8039FFF1FFC001F37F01F77F6CB57E000113C149C67E 49137CA25BA25BB13A7FFFC1FFF0B500E313F8A36C01C113F025217FA028>II<397FE03F8039FFF1FFE001F37F01F713FC6CB57E000113C1EC007F01FCEB1F80 5BED0FC0491307A216E01503A715076D14C0150FA26DEB1F806D133FED7F009038FF81FEECFFFC 01F75B01F35B01F113C0D9F07FC7FC91C8FCAC387FFFC0B57EA36C5B23327FA028>I<90381FE0 3890387FF87C3801FFFE4813FF4814FC380FF81F381FE007EB8003383F0001127E1400127C00FC 147C5AA77E007C14FC127E14017EEB8003381FC00F380FF83F6CB5127C6C13FE6C13FC6C13F8EB 1FC090C7FCAC91381FFFF04A13F8A36E13F025327DA028>I<397FF803FE39FFFC1FFF4A13804A 13C0007F90B5FC39007DFE0F90397FF007809138E003004AC7FC5C91C8FCA2137EA3137CAD007F B57EB67EA36C5C22217DA028>I<9038FFE1800007EBFBC04813FF5A5A387F803F38FC000F4813 07A3EC0380007E90C7FCEA7FC0EA3FFE381FFFF0000713FC000113FFD8000F13809038003FC0EC 0FE00070EB03F000F81301A27EA26C13036CEB07E0EBE03F90B512C01580150000F113FC38607F F01C217AA028>I<131C133EA9007FB512F0B612F8A36C14F0D8003EC7FCAF151C153EA4013F13 7E157C90381FC1FCECFFF86D13F06D13E06D13C0903800FE001F2B7EAA28>I<397FE01FF8486C 487EA3007F131F0001EB007CB315FCA21403EBFC0F6CB612F016F86D137FEB3FFE90390FF03FF0 25217FA028>I<3A7FFC07FFC0486C4813E0A36C486C13C03A07C0007C0000031478A26D13F800 015CA2EBF00100005CA2EBF80301785BA2EB7C07013C5BA2EB3E0F011E90C7FCA2EB1F1FEB0F1E A214BEEB07BCA214FC6D5AA26D5A23217EA028>I<3A7FFC01FFF0486C4813F8A36C486C13F000 0FC7EA0780A26D130F00071500A514FC3903C1FE1EA2EBC3FFA43901C7CF1C01E7139C15BCA214 8713EF000014B814079038FF03F8A3EBFE01017E5B25217FA028>I<3A7FFC0FFF80486C4813C0 A36C486C13803A01F003E000D800F85BEB7C0790383C0F80D93E1FC7FCEB1F1EEB0FBEEB07FC5C 6D5A1301A21303497E14BCEB0F1EEB1E1FEB3E0F90383C078001787F9038F803E0EBF001D801E0 7F3A7FFC07FFC0486C4813E0A36C486C13C023217EA028>I<3A7FFC07FFC0486C4813E0A36C48 6C13C03A03C0007C0015786C7E15F86D5B1200140101F85B13781403013C5BA2133E90381E0780 A2130F4AC7FCA2EB078F149EA2EB03DE14DCEB01FCA25C1300A25CA213015CA3495A1208EA3E07 387F0F80A2D87C3FC8FCEA7FFE123F5BEA1FF0EA07E023327EA028>I<003FB512FE4814FFA315 FE007CC712FCEC01F8EC03F0EC07E00038EB0FC0C7EA1F80EC3F00147E5C495A495A495A495A49 5A49C7FC137E5B4848130E4848131F485A485A485A48C7FC48B6FCB7FCA36C14FE20217DA028> II125 D E /Fi 12 116 df<4AB46C1340021F01F013C091397F803C01903901FC0007D907E0EB038349 48EB00C7013FC8126F017E153F49151F4848150F485A000716075B000F1603485A1701123F5B17 00127FA290CAFC481700AB7E6D16C0A2123FA27F001FEE0180A26C7E0007EE03007F000316066C 7E6C6C5D017E5D6D5DD90FC05C6D6C495AD901FC0107C7FC9039007F803E91381FFFF802011380 32377BB53D>67 D76 D83 D101 DI105 D108 DI< D8FFF090381FFF80A2D803F8903803FC006DEB00F07F017E14607F6D7EA26D7E6D7E8013036D7E 6D7EA2147E801580141FEC0FC0EC07E0A2EC03F0EC01F815FC1400157E153FA2ED1FE0150FA215 071503486C1301A2D81FE01300D8FFFC1460A229287DA72F>III<01FF1380000313C1380780F3381E003F001C131F4813 0F007813070070130312F0A21401A27E6C90C7FC7E127F13F06CB4FC6C13F06C7F6C13FE6C7FC6 6C138013079038003FC0140FEC07E01403A200C01301A46C14C0A26C1303158000FCEB07006C13 0E38E7C03C38C1FFF838803FC01B2A7CA823>115 D E /Fj 2 128 df<123C127E12FFA4127E12 3C08087A8715>58 D127 D E /Fk 41 122 df45 D<147814F81303131FEA01FFB5FCA3EAFE1F1200B3B3A2007FB512FEA41F337AB22C>49 DII<153E157EA215FE140114031407A2140F141F143F147F147B14F3EB01E3EB 03C313071483EB0F03131E133C137C13F813F0EA01E0EA03C01207EA0F801300121E5A127C5AB7 12FEA4C73807FE00A9010FB512FEA427327EB12C>I<00041406D80F80131E9038F801FE90B55A 5D5D5D5D5D92C7FC14FC14F0011FC8FC90C9FCA6EB03FE90381FFFC0017F7F9038FC0FF89038E0 03FC496C7E01807F0100148000067FC813C0A316E0A2120C123F487E7F487EA216C05BA26C4848 13801300003C1500003E495A6C6C485A390FE01FF86CB55A000114C06C91C7FCEB1FF823347CB2 2C>II<123C123F90 B612F8A44815F016E016C0168016005D007CC7123E00785C5D00F8495A485C4A5A1407C7485A4A C7FC141E143E147E147C14FCA2495AA21303A21307A25C130FA3131FA5133FA86D5AA2EB078025 357BB32C>I<150F4B7EA24B7EA34B7EA24B7EA34A7FA24A7F15DF02077F159F158F020F7F1507 021F80EC1E03A2023E80EC3C01027C80EC7800A24A80167F0101814A133FA2494880161F49B67E A24981A291C712074982011E80013E82013C80A2017C8201788001F88249157FB500E0013FB512 F0A43C357DB443>65 DIII71 D73 D77 D<913803FFC0023F13FC49B6 7E0107010013E0D91FF8EB1FF849486D7ED97FC0EB03FE49486D7E4890C813804817C04848ED7F E0000F17F049153F001F17F849151F003F17FCA34848ED0FFEA400FF17FFAC007F17FE6D151FA3 003F17FCA26C6CED3FF8A2000F17F06D157F000717E06C6CEDFFC06C6D4913806C6D4913006D6C 495A6D6C495AD91FFCEB3FF8D907FFEBFFE0010190B51280D9003F01FCC7FC020313C038377BB5 43>79 D I<003FB812F8A4D9F003EB801FD87F80ED03FC01001501007E1600007C177CA20078173CA400F8 173E48171EA4C71600B3AB013FB612F8A437347DB33E>84 D97 DI<903803FF80013F13F090B5 12FC48EB01FED803FC7F3807F003120FEA1FE0123F6E5A48486C5A153092C7FC12FFA8127FA27F 123FED07806C7E000FEC0F006C7E6C6C133E3901FF80FC6CEBFFF0013F5B010390C7FC21227DA1 27>IIII<16F890390FFC03FC90397FFF8FFE48B6123F3A03FC0FF87F3807F003000F14FC3A 1FE001FE3E161C003FECFF00A6001F5CA26C6C485A00075C3903FC0FF090B55A486C1380260E0F FCC7FC90C9FCA2120F5A13C06CB512F015FEEDFF806C15E06C15F06C15F85A000F15FC393F8000 1F48C7EA03FE007E140100FE1400A4007FEC01FCA26C6CEB03F8D81FE0EB0FF0D80FFCEB7FE000 03B61280C6ECFE00010F13E028337EA22C>II< EA03C0EA07F0487E487EA2123FA2121FA26C5A6C5AEA03C0C8FCA8EA01FC12FFA4120F1207B3A6 B512E0A413367DB518>I<143C14FF491380A24913C0A46D1380A26D1300143C91C7FCA8EC1FC0 EB1FFFA41300147FB3AD120C123FEA7F80D8FFC0138014FF1500A2387F81FEEB83FC383FFFF000 0F13C0000190C7FC1A4585B51B>III<2703F803FEEB03FE00FF903B0FFF800FFF80023FD9E03F13E0913B7C1FF0 7C1FF0913BE00FF8E00FF83C0FF9C007F9C0072607FB80EBFB800200D9FF007F01FE5CA2495CB3 A2B500E0B500E0B512E0A443227CA14C>I<3903F803FC00FF90380FFF80023F7F9138781FE002 E07F390FF9800F2607FB007FA213FEA25BB3A2B500E1B512C0A42A227CA131>I<903803FF8001 1F13F0017F13FC3901FF01FF3A03FC007F80D807F0EB1FC0000F15E04848EB0FF0003F15F84913 07007F15FCA300FF15FEA8007F15FCA36C6CEB0FF8A2001F15F06D131F6C6CEB3FE06C6CEB7FC0 3A01FF01FF006CEBFFFE011F13F00103138027227EA12C>I<3901FC0FF800FFEB7FFF01FDB512 C09039FFF03FF09138800FF80007496C7E01FC6D7EA26F7EA2178081A217C0A817805DA217005D 5E6D495A6D5C9138801FF09138E07FE001FDB55AD9FC7F90C7FCEC0FF091C9FCABB512E0A42A31 7DA131>I<3903F81F8000FFEB7FE0ECFFF09038F9E3F8EC87FCEA0FFB0007130713FF9038FE03 F8EC01F0EC0040491300B3B512F8A41E227DA124>114 D<9038FFE1C0000313FF120F381F803F 383E000F481307140312FCA27E6C90C7FC13F0EBFF806C13F86C7F6C13FF6C14806C14C0000114 E06C7E010113F0EB001F0070130712F014037E15E07E6C13076C14C09038C03F8090B5120000F1 13FC38C03FE01C227DA123>I<131EA5133EA3137EA313FE120112031207001FB51280B6FCA3D8 03FEC7FCB0EC03C0A80001EB078013FF6CEB8F00EB7FFEEB1FFCEB07F01A317EB022>IIII121 D E /Fl 31 122 df<1A7F963801FFC0A24F7FA24F7FA34F7FA24F7FA24F7FA34F 7FA296B67EA34E81A24E81A34E81A24E81A24E81A3DE3FF780A2DE7FE380A219C3DEFFC1811981 4D018081A2614D6E806005076E80A24D486D80A260051F6E80A24D486D80A260057F6E806005FF 6E81A2604C6F8195C8FC4C7080A24C486F80A25F040F7080A24C486F80A25F043F70805F047F70 80A24D8104FF865F4B7181A24B90BB7EA34B87A24B87A3DB1FF8CA000F805E033F7280A24B4871 80A25E03FF7281A24A497181A293CCFC4A7480A24A487380A25D020F74805D021F7480A24A4873 80A2147F010FB56C7280B800E00307BA1280A8897979F898>65 DI<96260FFFFCEE07800607B600E0 ED0FC095B700FE153F0507DCFFC0147F057F05F014FF4CB900FC5B040F06FF5B043FF1C00793B7 D8C000ECF01F030303F0C700076D5A030F92C9EBFE7F033F02F8043FB6FC4B02E0160F4AB60080 16034A4ACA7E4A02F8717E4A4A84023F4A844A02808491B6CC7E494A854C85494A85494A864989 495C4C864989495C8B90B6CEFC488A5D5A8B485CA28B485CA25A207F5D5AA2F83F809DC7FC5AA3 5DA3B6FCB07EA381A37EA3F81F806CF73FC081A27EA26C80A2207F6C6E1D80A27E6F1CFF6C2000 6D6E62A26D6E636D1D0370505A6D806D535A6D6E505A6D6E1A3F70505A6D6E505A6E6E606E02E0 4E5B020F6E4E90C7FC6E02FCF01FFE6E6E4E5A6E6E6CEFFFF86E6C02E004035B6F02F8040F5B03 0F02FF043F1380030303F00203B5C8FC0300DBFFC0017F13FC043F92B712F0040F61040196C9FC 706C17FC050717E0050094CAFC060715F0DE000F49CBFC7A7A75F891>I I<96260FFFFCEE07800607B600E04B7E95B700FE153F0507DCFFC0147F057F05F014FF4CB900FC 5B040F06FF5B043FF1C00793B7D8C000ECF01F030303F0C700076D5A030F92C9EBFE7F033F02F8 043FB6FC4B02E0160F4AB6008016034A4ACA7E4A02F8717E4A4A84023F4A844A02808491B6CC7E 494A854C85494A85494A864989495C4C864989495C8B90B6CEFC488A5D5A8B485CA28B485CA25A 207F5D5AA27A5A9DC8FC5AA35DA3B6FCB07EA36F94BBFCA37EA46C8098C86CECC000A27EA26C80 A36C80A27E817E6D80A26D807F826D806D806D807F826D6E7E6E6E95B6FC6E80020F806E02FC5F 6E02FF5F6E6F5E6E6C02E05E6F02FC163F030FDAFF8092B7FC030303F8020313F90300DBFFE001 3FEBF07F043F92B7487E040FF1C00F0401F10007706C05FC1301050705E0EB003F05000580140F 060703F8C8EA0380DE000F49CCFC887A75F89E>71 D73 D<4EB57E95B7FC050F16F094B9FC040718E0041F18F8047F18FE4BB6 D8C0036E7E030702F8C7001F14E0031F02E0020714F8037F91C914FE92B500FC043F7F4A4A7080 020702E0040714E04A4A70804A4A70804A91CB804A49727F91B548727F494A7280494A7280494A 7280498A4C84498A494A728093CDFC498A90B6884B864820804B864820C0A24820E04B86A24820 F0A2484A7414F8A44820FCA34B864820FEA6B61EFFB16C20FEA36F62A36C20FCA46C6E5014F8A4 6C20F06F626C20E0A36C6E5014C0A26C6E97B61280A26C20006D6E4E5CA26D6E4E5C6D6670606D 6E4E5C6D666D6E4E5C70606D6E4E5C6D9BC7FC6E6D95B55A6E6E4C5C020F02E0040714F06E6E4C 5C6E6E4C5C020002FE047F91C8FC6F6D6C4AB55A031F02E0020714F86F02FC023F5C03039126FF C003B612C0030092B8C9FC041F18F8040718E0040095CAFC051F16F8050093CBFC06011480807A 75F897>79 DI<000F C11280A54820C0A303F8C7003F02E0C7FC03801A0F02FCC8180102F0757E02C01C1F4A8891C985 498948487713E0A24989A2491E7FA2491E3FA3491E1F007F20F0A4491E0FA748CAF207F8A5CB97 C7FCB3B3B3AE4ABC12FCA87D7679F58C>84 D<92380FFFFE0203B612F0023F15FF49B812E00107 17F84917FE013F9026F8001F6D7E4AC7000380496C6C01008090B56F7F486E6E7F6F6E7F727F48 6E6E7FA27280878487A26C5C846C4A83A26D5B6D90C9FCEB0FFCEB01E090CBFCA6053FB6FC043F B7FC0307B8FC153F0203B9FC021F15C0027FECE0000103B548C7FC4914F0011F14C0017F49C8FC 90B55A4814F0485C485C485C92C9FC485B485BA2485BA3B55AA460A3606C7F606EED0FDF6C171F 6EED3F9F6C6DDB7F1F13FC6C6E02FFECFF806C02E0902603FE0FECFFC06C6ED90FFC16E06C02FE 90387FF8076C6C90B6487E6DEEC001010793C7FC010003FC143F021F02E0020314C0DA007F90CC FC5B517ACF62>97 D<903801FFFEB6FCA8C67E131F7FB3ADF03FFE0507B512F8053F14FF94B712 E0040716F84C16FE043FD9800F6D7E93277FFC00018092B500E06D6C13F00580021F7F94C86C7F 04FC6F7F4C6F7F4C6F804C6F805E4C707F93CA80A2757F89A28789A289A2871E80A51EC0AE1E80 A5511400A365A2515BA265A2515B657093B5FC7060704B5C704B91C7FC704B5B704B5B704B5B92 26F3FF80027F5B03E16D91B55A9226C07FF0010314804B6CB4013F91C8FC4B6C90B612FC4A0107 16F04A010116804A6D6C02FCC9FC4A020F14E090CA01FCCAFC627A7AF870>I<93381FFFF00303 B612C0031F15F892B8FC020317C0020F83023F8391B526FC000F7F4902E001037F49028081010F 91C7487F4901FC5C495B4B4A14805B90B55A485CA2485C5A92C86C14005A725B5A4A6F5B725B48 9438007FE0070FC7FC96C8FC5A5CA4B5FCAE7EA280A37EA36C7FA26CF10FC06FEE1FE07E1A3F6C 6E17C0A26C6E167F6C6EEEFF806D6D4B1300816D6DED07FE6D6D4B5A6D6E141F6D02E0EC7FF801 0102F849485A6D02FF011F5B023F91B612806E94C7FC020716FC020016F0031F1580030302FCC8 FCDB001F13C04B5179CF59>I<973803FFFC4EB6FCA895C7FC1A3F86B3AD93380FFFC04BB512FC 031FECFF80037F15F00203B712FC020F16FE023F9139003FFF9F4A01F0010313DF49B500C00100 90B5FC494A143F4949C87E4949150749498149498149498190B5488248855D5A4891CAFCA25AA2 485BA25AA3485BA5B5FCAE7EA57E80A27EA27E807EA26C80626C96B5FC6C6E5D616D6D5D6D6D5D 6D6D5D6D6D4B806D6D92B77E6D6D6C0103EEFFC0010002E0010F133F6E01FCEBFFFE021F90B612 F8020716F0020116C0DA003FECFE00030314F0DB001F90C702C0C7FC627A79F870>I<93383FFF C00307B512FE033FECFFC04AB712F0020716FC021F16FF4AD9FC0114C091B526E0003F7F490280 010F7F4949C700037F010F496E7F49496E7F49496F7E495B4B6F138090B57013C0485C487213E0 A24891C914F0855A4A18F85A85481AFCA3485BA21BFE85A2B5FCA391BAFCA51BFC02FCCCFCA57E A4807EA37EA26C6D18FCF201FE7E816C19036F17FC6C19076C6EEE0FF8816DF01FF06D6DEE3FE0 6D6D16FF6D01FF4B13C06D6E02071380010102E0021F13006D02FCECFFFE6E9026FFC00F5B021F 91B612F002075F020117806E6C4BC7FC030F15F003011580DB000701F0C8FC4F517ACF5C>I I<922601FFFCED1FF0033FD9FFE0903801FFFC0203B600FE010F13FF020F9226FF803F1480027F 04F0B6FC91B800FB15C00103DAC01F90B500EF13E0499026FE0003ECFC0F4901F8010014F04949 6E13C04901C0021F13E04918F090B5486E6D6C13C0A24891C86C6D6C138048736C1300F3003848 496F6D90C7FCA44886A96C97C8FCA46C6D4B5BA26C616C6E4A5BA26D6D4A5B6D606D01F0027F5B 6D6D91B55A6D01FE010391C9FC499026FFC01F5B93B612F8495FD93F8F168002034BCAFC90267F 003F14E0030101FCCBFC4990CEFCA35AA380A28080808014FE91B812C0F1FF806C19F01AFE6DF0 FFC01BF06D851BFE6D856D86886D867F4986013F8690BCFC4887000701FCC97E4801F004018048 49EE003F4A170F484917034890CB6C7F86A2485A87A56D96B5FC6C63A26E5F6C636C6D4D5B6E5F 6C6D4D5B6C6D4D5B6C01FE057F5B6C6D6C4BB55A6C02E0030791C7FC013F01FC033F13FC6DD9FF F0010FB55A010791B812E0010096C8FC021F17F8020317C0DA003F03FCC9FCDB007F49CAFC5B73 7ACE65>I<903801FFFEB6FCA8C67E131F7FB3AD953803FFF0063F13FF4DB612E0050715F8051F 15FE4D819426FFF807804CD9C001804C48C780DC07F8804C4882EE1FC04C486E7F4CC8FC047E83 5E6F4881A24C83A25EA25EA25EA493C9FCB3B3A7B8D8F001B812E0A8637978F870>III<903801FFFEB6FCA8C67E131F7FB3AE073FB612E0A80703ECC0 00070001FCC7FC1BF007035B4F5B4F90C8FC4F5AF17FFC4F5A4E13E04E5B060F5B4E90C9FCF03F FC4E5A4D485A4D5B4D13804D90CAFCEF3FFE4D5A4D5A4C7F04077F5E4C7F4C8093B67E92B7FC85 85854C80EEF87F4C6C7F4C6C7F04C081DC000F804B7F4B6D8071808683727F727F867280847280 728087728084737F737F8785738073808873804F14FCB800C090B712FEA85F797AF86A>I<9038 01FFFEB6FCA8C67E131F7FB3B3B3B3B3ACB812E0A82B7978F838>I<902601FFFC912603FFF093 3803FFF0B6031FD9FF80031FEBFF8095B600F092B612F0050703FC020715FC051F6F021F814D6F 6C496F7E9426FFFC036E9026FFFC03804CD9C0006E48D9C000804C90C76C4A90C77EC66CDA07FC 6E9026F007FC6E7F011FDA0FF09326F80FF0826D4A484D5ADC3F806E9026FC3F806E7F94C893C8 FC047EDDFE7E834C607484DBFDF8715ADBFFF04E83A24C60A24C60A24C60A493C992C9FCB3B3A7 B800F090B800F090B812F0A89C4F78CEAD>I<902601FFFC913803FFF0B6033F13FF4DB612E005 0715F8051F15FE4D819426FFF807804CD9C001804C48C780C66CDA07F880011F4A48826DEC1FC0 4C486E7F4CC8FC047E835EDBFDF881A2DBFFF083A25EA25EA25EA493C9FCB3B3A7B8D8F001B812 E0A8634F78CE70>I<93380FFFF04BB67E031F15F892B8FC020317C0020F17F0023F49C66C13FC 4A01E001077F49B5008001016D7E4949C86C7F49496F7F49496F7F49496F7F49496F7F49496F7F 90B5486F7FA2481B804891CA14C0A2481BE04A83481BF0A2481BF8A248497113FCA4481BFEA5B5 1AFFAD6C1BFEA56C6D4D13FCA36C1BF8A36C6D94B512F0A26C1BE06C6E4B14C0A26C6E4B14806C 1B006F5D6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D6C49B55A010102E0010714806D02FE017F 91C7FC023F90B712FC020F17F0020317C0020094C8FC031F15F8030315C0DB000F01F0C9FC5851 7ACF65>I<902601FFFEEC1FFFB60203B512F8051FECFF8094B712E0040316FC040F16FF043F83 4CD9801F14E09327FFF8000380C66C90B500E0010080011F03806E7F6D4AC8001F7F4C6F7F4C6F 8004E0844C6F804C8193C9817480A2757FA28987A28987A21E80A4871EC0AE1E8063A41E00A263 65A2515BA26598B5FC65505C82704B5C704B5C704B91C7FC705F704B5B70037F5B706C91B55A71 01035CDC7FF0010F148070B4017F91C8FC7090B612FC040716F004011680706C02FCC9FC050F14 E0050001FCCAFC95CCFCB3A7B812F0A862717ACE70>I<902603FFF8ECFF80B6020713F8053F13 FE94B612804C15C04C15E04C010713F093260FF80F13F8EE1FE0C66C4A484813FC011F15806D4A 484813FE16FE5EEDF9F8A2EDFBF0A24C6D13FC15FF4C6D13F87213F07213E04C01001380F11C00 96C7FCA293CAFCA65DB3B3A2B812FCA8474F7ACE53>114 D<912601FFFEEB03C0023F9039FFE0 0FE049B6EAFC3F010F92B5FC133F49EB00032601FFF0EB007F4801C0141F4890C8120749814848 81484881187F485A183F127FA2181F12FF7FA27F7F6DEE0FC002C092C7FC14F014FCECFFE06CEC FF8016FCEEFFE06C16FC6C16FF18C06C17F06C836C17FE84C618806D17C06D17E0130F010317F0 010017F8141F020116FCEC000FDB003F14FE1601EE003F050F13FF1703007E82B4707E84A26D82 A2847FA26D17FEA37F6DEE1FFCA26D17F86D163F6DEE7FF06EEDFFE002E05C02F84A13C002FE02 0F1380DAFFC090B5120092B612FC01E35E01C016E0D9001F92C7FC48010314F80078D9003F90C8 FC405179CF4F>II<91B5933801FFFEB74AB6FCA8C66C93C7FC011F183F6D84B3B3A962 A462A297B5FCA26D5FA2616D6EEC07EF190F6DDD1FCF7F6D6EDA3F8F14C070DAFF0FECFFE06E6D 13036E01FEEB1FFC6E90B612F8020716F0020116C0DA003F1500030714FCDB003F01C003F0C7FC 635078CE70>I119 D121 D E /Fm 80 124 df<91391FE007E09139FFF81FF8903A03E03C7C3C903A0F801EF07E903A1E00 3FE0FE49137F017C14C049157C92383F80384848011F1300150FABB812C0A23B01F0000F8000B3 AA486C497E267FFFC3B5FCA22F367FB52D>11 DIII<003C1378007E13 FC38FF01FEA2EB81FFA2EA7F80003D137B00011303A438030006A348130E0006130C000E131C00 0C1318481330003813704813E00020134018177DB427>34 D<123C127EB4FCA21380A2127F123D 1201A4EA0300A35A1206120E120C5A12385A122009177AB415>39 D<14C0EB0180EB030013065B 131C5B5BA25B485AA2485AA2120790C7FC5A120E121EA35AA45AA612F85AAE7E1278A67EA47EA3 120E120F7E7F1203A26C7EA26C7E1370A27F7F130C7F7FEB0180EB00C0124E79B91E>I<12C012 607E7E7E120E7E6C7EA26C7E6C7EA21370A213781338133C131C131EA37FA4EB0780A614C01303 AE13071480A6EB0F00A4131EA3131C133C133813781370A25BA2485A485AA248C7FC120E120C5A 5A5A5A124E7CB91E>I<156015F0B3A5007FB812C0B912E0A26C17C0C800F0C8FCB3A515603334 7CAC3C>43 D<123C127EB4FCA21380A2127F123D1201A4EA0300A35A1206120E120C5A12385A12 2009177A8715>II<123C127E12FFA4127E123C08087A8715>I<151815 3CA2157C1578A215F815F0A2140115E0140315C0A214071580A2140F1500A25C141EA2143E143C 147C1478A214F85CA213015CA213035CA213075C130F91C7FCA25B131EA2133E133CA2137C1378 A213F85B12015BA212035BA212075BA2120F90C8FCA25A121E123E123CA2127C1278A212F85AA2 12601E4D7CB927>I I<1303130F5B137FEA07FFEAFFBFEAF83F1200B3B3A5EBFFC0B612C0A21A3379B227>I III<00081420000FEB01E09038E00FC090B5128015005C5C14F0000D13C000 0CC8FCAAEB0FE0EB3FFCEBF03E380DC00F390F000780000E14C0000CEB03E0000814F0C7FCEC01 F8A315FCA4123C127EB4FCA215F85A5A0060EB03F0A2007014E00030EB07C07E6CEB0F800007EB 3E003803C0FC3801FFF038003F801E347CB227>I<14FF010313C090380F80E090383E00300178 1318491338484813FC00031301EA07C01380120F001FEB00F890C8FCA25AA2127EA3EB07FC38FE 0F7F90383007C090382003E090384001F0EB800015F86CC712FC157C157EA25A157FA3127EA512 3E003F147EA27E15FC6C14F86C7E9038C001F00003EB03E03901E007C03900F81F00EB3FFEEB0F F020347DB227>I<1230123C003FB61280A21600485CA25D0070C7121800605CA25D485CA24A5A C748C7FC1406A25C5CA25C1470A25CA213015C1303A31307A3495AA3131FA5133FA96DC8FC130E 21357CB327>III<123C127E12FFA4127E123C1200B1123C127E12FFA4127E123C08217AA015>I<123C12 7E12FFA4127E123C1200B1123C127E12FE12FFA3127F123F1203A51206A3120CA21218A2123012 70122008307AA015>I<15E0A34A7EA34A7EA34A7EA24A7E140CA2EC1CFFEC187FA202387FEC30 3FA202607F151FA202C07F150FA249486C7EA349486C7EA301066D7EA3010FB57EA2010CC7FC49 147FA20138810130143FA20170810160141FA201E08149140FA200018200031507486C4A7ED81F F84A7EB50103B512E0A233377DB63A>65 DIIIIIIII<017FB5FCA29038007FE0 EC1FC0B3B3123E127FEAFF80A31580EB003F007E1400007C137E0030137C001C5B380F03F03803 FFC0C690C7FC20367DB428>II IIIII82 D<90381FE0019038FFFC033901F01F07390780038748C712CF001E14 7F001C80003C80127C007880A200F880A3817EA27E007E91C7FCEA7F807FEA3FF8EBFF806C13F8 6C13FF6C14C06C14F0C680013F7F01077FEB003FEC03FF02001380157F153FED1FC0150F12C0A2 1507A37E1680A27EED0F007E6C141E6C141CD8F3805BD8E1E013F039E0FC03E039C01FFF802680 03FEC7FC22377CB52B>I<007FB8FCA29039800FF800277C0007F0131F007882007082A2006082 A200E01780A2481601A6C792C7FCB3AE4A7E4A7E013FB512FEA231357DB438>IIII<267FFFFC90B512C0A2000101E090383FFC006C49 EB0FE06D48EB0780013F92C7FC6E13066D6C130E010F140C6E5B6D6C133816306D6C5B6D6C13E0 5E6D6C485AEC7F8393C8FCEC3FC6EC1FCE15ECEC0FF81407A26E7EA26E7E815C6F7E9138063FC0 140E91380C1FE0EC180F02387F91383007F8EC600302E07F4A6C7EEB018001036D7E91C76C7E13 06010E6E7E010C6E7E131C496E7E1607017881D801FC4A7ED80FFF4A7EB500C090B512F8A23535 7EB43A>II91 D<000213040007130E000E131C000C13184813300038137000301360007013E0006013C0A338C0 0180A400DE13BC00FF13FEEB81FFA2EA7F80A2383F007E001E133C181775B427>II<12021207120E120C5A1238123012701260A35AA412DEB4FC 1380A2127FA2EA3F00121E09177BB415>96 DII I<153EEC0FFEA2EC007E153EAFEB0FE0EB3FFCEBFC0E3901E003BE3907C000FE485A90C7127E48 143E123EA2127E127CA212FCA9127CA2127E123EA26C147EA26C6C13FE3907C001BE3903E0073F 2601F81E13F838007FF890391FE03E0025367DB42B>II<14FCEB03FF90380F878090381E0FC0EB3C1F137C13789038F80F809038F00700000190C7 FCACB512F8A2D801F0C7FCB3AA487E387FFFE0A21A367FB518>I<90390FC00F8090397FF87FC0 9039F03CE1E03901E01F813A03C00F01C03A0780078000000F80EB00034880A76C5CEB80070007 5C6C6C48C7FC3801E01E3802F03C38067FF838040FC090C9FC120CA2120E1206EA078090B5FC6C 14E06C14F84814FE390F0001FF001EEB003F48EC0F8048140716C0481403A50078EC0780A26CEC 0F00001F143ED80FC013FC3903F003F0C6B512C0D90FFCC7FC23337EA127>IIIIII<3B03E03FC001FE00FF903AFFF007FF80903BE1C0F80E07C03C07 E3007C1803E0D803E490393E2001F001EC146001E890391F4000F801F05CA34991C7FCB3A3486C 496C487EB53B87FFFC3FFFE0A23B227EA140>I<3903E03FC000FFEBFFF09038E1C0F83907E300 7CD803E47F13EC01E87F13F0A35BB3A3486CEB3F80B53887FFFCA226227EA12B>II<3903E03FC000FFEBFFF09038E3C0FC3907E6003ED8 03EC7F01F8148049EB0FC049130716E0150316F0A2150116F8A9ED03F0A316E0150716C06DEB0F 806D131F01ECEB3F0001E6137C9038E381F89038E1FFE09038E03F8091C8FCAB487EB57EA22531 7EA12B>I<90380FE00690383FF80EEBFC0E3801F0033907E0019E9038C000DE485A48C7127E5A 003E143E127EA35AA9127C127EA2123E123F6C147E6D13FE6C7E0007EB01BE3903E0073E3801F8 1E38007FF8EB0FE090C7FCAB157F91380FFFF8A225317DA129>I<3807C0FC38FFC1FEEBC31F39 07C63F80EA03CC13C813D89038D01F0091C7FCA213E0B3A3487EB512C0A219227EA11E>I<3801 FE043807FF8C381F01DC383C007C48133C0070131C12F0A2140CA27EA2007C1300127FEA3FF8EB FF806C13C0000713E0000113F038001FF8EB01FCEB007C00C0133EA2141E7EA37E141C6C133C14 386C137038E701E038C3FFC00080130017247DA21E>I<1330A51370A313F0A212011203120712 1FB512FCA23801F000B11403A814023800F806A2EB7C0CEB3E18EB1FF0EB07E018307FAE1E>I< D803E0131F00FFEB07FFA20007EB003F000380B3A35DA3155F12016D139F00009038011F80D97C 0613FCEB3FFCD907F0130026237EA12B>III< B53801FFF8A23A07FC007F80D801F8EB7E00153800001430017C13706D5B90383F01C0011F5BD9 0F83C7FCEB07C7EB03EE14FC6D5A1300147C14FEA2EB019F9038030F8001077FEB0E0790380C03 E0496C7E90383800F8497F49137C0001800003143FD81FF0EB7F803AFFFC01FFFCA226217FA029 >II<003FB512F0A290388003E0393C0007C00038130F15800030EB1F000070133E147E006013 7C5C495A130300005B495A495A131F91C7FC133E49133013FC5B485A485A000714705B48481360 48C712E05A003E130348130FB6FCA21C217EA022>II E end %%EndProlog %%BeginSetup %%Feature: *Resolution 508 TeXDict begin @a4 %%EndSetup %%Page: 0 1 bop 308 223 a Fm(Design)24 b(and)h(Implemen)n(tation)e(of)i(an)g(Enhanced)g (Ob)t(ject-Orien)n(ted)f(Mo)r(del)g(for)h(the)g(Python)1352 318 y(In)n(terpreted)h(Language)1565 602 y(A)g(Thesis)1407 827 y(in)f(Humanities)f(402)1493 1052 y(Presen)n(ted)j(T)-6 b(o)669 1277 y(The)25 b(F)-6 b(acult)n(y)24 b(of)h(the)g(Sc)n(ho)r(ol)f(of)g (Engineering)g(and)h(Applied)e(Science)1350 1502 y(Univ)n(ersit)n(y)g(of)i (Virginia)1357 1727 y(In)h(P)n(artial)d(F)-6 b(ul\014llmen)n(t)1122 1952 y(of)24 b(the)i(Requiremen)n(ts)f(for)g(the)g(Degree)1073 2177 y(Bac)n(helor)f(of)h(Science)g(Computer)g(Science)1674 2461 y(b)n(y)1451 2686 y(Stev)n(en)g(P)-6 b(.)26 b(Miale)1551 2911 y(Ma)n(y)e(1993)157 3176 y(On)h(m)n(y)g(honor)g(I)g(pledge)g(that)f (this)i(w)n(ork)e(is)h(m)n(y)h(o)n(wn)e(and)h(is)g(done)g(in)g(accordance)f (with)h(Honor)f(Co)r(de)1108 3272 y(guidelines)f(for)i(pap)r(ers)g(in)g (Humanities.)p 161 3468 3107 3 v 1453 3665 a(\(F)-6 b(ull)24 b(signature\))127 3871 y(Appro)n(v)n(ed)p 478 3872 2039 3 v 2088 w(\(T)-6 b(ec)n(hnical)23 b(Advisor\))478 3966 y(\(T)n(yp)r(e)i(Name\)) 1210 b(\(Signature\))p 478 4254 V 2542 4253 a(\(Humanities)24 b(Advisor\))478 4349 y(\(T)n(yp)r(e)h(Name\))1210 b(\(Signature\))p eop %%Page: 1 2 bop 127 1004 a Fl(Preface)127 1636 y Fm(This)28 b(pro)t(ject)g(b)r(egan)g (appro)n(ximately)d(one)j(y)n(ear)g(ago,)h(as)g(a)f(result)g(of)g(a)h(pro)t (ject)f(I)h(w)n(as)f(w)n(orking)e(on)i(for)127 1827 y(Dr.)57 b(P)n(ausc)n(h's)34 b(researc)n(h)g(group.)56 b(W)-6 b(e)33 b(had)g(b)r(een)g(using)f(an)h(in)n(terpreted)f(language)f(kno)n(wn)g(as)i (Tcl)g(to)127 2018 y(create)25 b(virtual)d(realit)n(y)h(applications.)31 b(Unfortunately)-6 b(,)21 b(one)j(of)g(Tcl's)h(main)e(dra)n(wbac)n(ks)g(w)n (as)h(that)g(it)g(w)n(as)127 2209 y(di\016cult)g(to)h(learn)g(and)g(use.)127 2481 y(W)-6 b(e)30 b(b)r(egan)e(to)h(lo)r(ok)f(for)h(a)g(new)g(language,)f (and)h(found)f(Python.)45 b(Not)29 b(only)f(w)n(as)h(it)g(easy)g(to)g(learn)g (and)127 2672 y(use,)e(but)f(it)f(w)n(as)g(also)g(ob)t(ject-orien)n(ted)f (and)h(easily)g(extensible.)35 b(As)26 b(the)g(system)h(progressed,)f(w)n(e)g (b)r(egan)127 2863 y(to)f(mo)r(dify)f(the)h(language,)e(esp)r(ecially)h(the)i (ob)t(ject-orien)n(ted)d(mo)r(del.)127 3134 y(This)18 b(led)h(to)g(com)n (bining)d(these)k(mo)r(di\014cations)d(and)h(impro)n(v)n(emen)n(ts)g(in)n(to) g(this)h(thesis.)32 b(Man)n(y)18 b(of)g(the)h(initial)127 3325 y(ideas)35 b(had)f(to)h(b)r(e)g(c)n(hanged,)i(due)e(not)f(only)g(to)h (practical)e(co)r(ding)h(considerations)f(but)h(philosophical)127 3517 y(reasons)25 b(as)h(w)n(ell.)127 3788 y(The)d(c)n(hanges)g(I)h(ha)n(v)n (e)e(made)i(are)f(curren)n(tly)g(planned)f(to)h(b)r(e)h(folded)e(in)n(to)g (the)i(o\016cial)d(v)n(ersion)i(of)g(Python.)127 3979 y(The)35 b(o\016cial)e(v)n(ersion)h(of)g(Python)g(can)h(b)r(e)g(transferred)g(via)f (FTP)h(from)g(ftp.cwi.nl,)h(in)e(the)h(directory)127 4170 y(/pub/p)n(ython.) 1704 4521 y(i)p eop %%Page: 2 3 bop 127 1004 a Fl(Ac)-6 b(kno)g(wledgemen)g(ts)127 1636 y Fm(I)25 b(wish)g(to)g(express)i(thanks)d(to)h(the)h(follo)n(wing)21 b(p)r(eople:)127 1907 y(Guido)26 b(v)l(an)g(Rossum,)h(author)f(of)g(Python,)h (for)f(designing)f(a)h(w)n(onderful)f(language,)g(helping)f(me)k(when)e(I)127 2098 y(had)e(questions,)g(and)g(advising)f(me)i(on)f(what)g(w)n(as)g (practical)f(and)h(what)g(w)n(as)g(not.)34 b(He)25 b(not)f(only)f(assisted) 127 2289 y(in)h(the)i(design)e(pro)r(cess,)i(but)f(he)g(also)g(help)r(ed)f (me)i(to)e(deduce)i(some)f(of)g(the)g(implemen)n(tation)d(tec)n(hniques)127 2481 y(that)j(I)g(used.)127 2752 y(Randy)d(P)n(ausc)n(h,)i(m)n(y)f(researc)n (h)h(and)e(tec)n(hnical)g(advisor,)h(for)f(allo)n(wing)e(me)k(to)f(w)n(ork)f (for)h(him)f(for)h(the)g(past)127 2943 y(t)n(w)n(o)h(y)n(ears.)127 3214 y(Rob)r(ert)j(DeLine,)i(b)r(oth)e(as)g(the)h(originator)d(of)i(some)h (of)f(the)g(design)g(c)n(hanges)g(and)g(user)i(of)d(man)n(y)h(of)g(the)127 3405 y(mo)r(di\014cations)c(made.)127 3677 y(And,)37 b(\014nally)-6 b(,)34 b(to)g(Dr.)63 b(P)n(ausc)n(h's)35 b(User)g(In)n(terfaces)f(Group,)j (of)d(whic)n(h)g(I)g(ha)n(v)n(e)g(the)h(honor)e(of)h(b)r(eing)g(a)127 3868 y(mem)n(b)r(er.)1693 4521 y(ii)p eop %%Page: 3 4 bop 127 844 a Fl(Con)-6 b(ten)g(ts)127 1393 y Fk(Preface)2862 b(i)127 1661 y(Ac)n(kno)n(wledgemen)n(ts)2388 b(ii)127 1929 y(Abstract)2767 b(vi)127 2197 y(1)71 b(In)n(tro)r(duction)2531 b(1)242 2389 y Fm(1.1)78 b(Pro)t(ject)26 b(Bac)n(kground)68 b Fj(:)39 b(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g (:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(1)242 2580 y(1.2)78 b(Justi\014cation)23 b(for)i(Pro)t(ject)62 b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f (:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(2)242 2771 y(1.3)78 b(Ov)n(erview)25 b(of)f(Rep)r(ort)h(Con)n(ten)n(ts) 55 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:) g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(3)127 3039 y Fk(2)71 b(Theory)30 b(of)g(Ob)5 b(jects)2309 b(4)242 3230 y Fm(2.1)78 b(Basics)25 b(of)g(Ob)t(ject-Orien)n(ted)f(Programming)46 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g (:)g(:)g(:)g(:)g(:)f(:)104 b Fm(4)419 3421 y(2.1.1)88 b(Older)25 b(Metho)r(dologies)36 b Fj(:)j(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:) g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(4)419 3613 y(2.1.2)88 b(The)25 b(Ob)t(ject)51 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f (:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(7)419 3804 y(2.1.3)88 b(Classes)25 b(and)g(Instances)70 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g (:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(8)419 3995 y(2.1.4)88 b(Inheritance)58 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h (:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(9)419 4186 y(2.1.5)88 b(Data)24 b(Protection)74 b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(10)1682 4521 y(iii)p eop %%Page: 4 5 bop 419 70 a Fm(2.1.6)88 b(Abstraction)40 b Fj(:)f(:)g(:)g(:)g(:)f(:)h(:)g(:) g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f (:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(10)242 261 y(2.2)78 b(Review)25 b(of)f(Ob)t(ject-Orien)n(ted)h(Languages)60 b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)f(:)65 b Fm(11)419 453 y(2.2.1)88 b(C++)23 b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(11)419 644 y(2.2.2)88 b(Smalltalk)56 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)f(:)h (:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g (:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(12)419 835 y(2.2.3)88 b(Ob)t(jectiv)n(e-C)32 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:) f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)f(:)65 b Fm(13)419 1026 y(2.2.4)88 b(Ei\013el)24 b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h (:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g (:)g(:)f(:)65 b Fm(14)419 1217 y(2.2.5)88 b Fi(Self)28 b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(15)127 1486 y Fk(3)71 b(Design)2710 b(16)242 1677 y Fm(3.1)78 b(Incorp)r(oration)23 b(of)i Fh(self)i Fm(with)d(metho)r(d)h(calls)42 b Fj(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g (:)g(:)g(:)g(:)f(:)65 b Fm(16)242 1868 y(3.2)78 b(Automatic)24 b(constructor)h(calls)47 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(18)242 2059 y(3.3)78 b(Automatic)24 b(destructor)i(calls)g Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g (:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(19)242 2250 y(3.4)78 b(Protection)25 b(for)g(data)38 b Fj(:)h(:)g(:)g(:)g(:)f(:)h(:) g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g (:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(20)242 2442 y(3.5)78 b(Protection)25 b(for)g(metho)r(ds)f Fj(:)39 b(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:) g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g (:)g(:)g(:)g(:)f(:)65 b Fm(22)242 2633 y(3.6)78 b(Class)25 b(construction)f(in)h(C)76 b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:) g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g (:)f(:)65 b Fm(23)127 2901 y Fk(4)71 b(Implemen)n(tation)27 b(and)i(T)-7 b(esting)1876 b(24)242 3092 y Fm(4.1)78 b(Implemen)n(tation)32 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g (:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f (:)65 b Fm(24)419 3283 y(4.1.1)88 b(Incorp)r(oration)22 b(of)j Fh(self)i Fm(with)e(metho)r(d)g(calls)35 b Fj(:)k(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(24)419 3475 y(4.1.2)88 b(Automatic)24 b(constructor)h(calls)40 b Fj(:)f(:)g(:)f(:)h(:)g (:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g (:)f(:)65 b Fm(25)419 3666 y(4.1.3)88 b(Automatic)24 b(destructor)h(calls)19 b Fj(:)39 b(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g (:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(26)419 3857 y(4.1.4)88 b(Protection)24 b(for)h(metho)r(ds)77 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f (:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(27)419 4048 y(4.1.5)88 b(Protection)24 b(for)h(data)32 b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h (:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g (:)g(:)f(:)65 b Fm(28)419 4239 y(4.1.6)88 b(Class)25 b(construction)f(in)g(C) 69 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:) g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(29)1683 4521 y(iv)p eop %%Page: 5 6 bop 242 70 a Fm(4.2)78 b(T)-6 b(esting)78 b Fj(:)39 b(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f (:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(30)419 261 y(4.2.1)88 b(Incorp)r(oration)22 b(of)j Fh(self)i Fm(with)e(metho)r(d)g(calls)35 b Fj(:)k(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g (:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(30)419 453 y(4.2.2)88 b(Automatic)24 b(constructor)h(calls)40 b Fj(:)f(:)g(:)f(:)h(:)g(:)g(:)g(:)g (:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(31)419 644 y(4.2.3)88 b(Automatic)24 b(destructor)h(calls)19 b Fj(:)39 b(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g (:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(32)419 835 y(4.2.4)88 b(Protection)24 b(for)h(metho)r(ds)77 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g (:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f (:)65 b Fm(33)419 1026 y(4.2.5)88 b(Protection)24 b(for)h(data)32 b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h (:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(34)419 1217 y(4.2.6)88 b(Class)25 b(construction)f(in)g(C)69 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(36)127 1486 y Fk(5)71 b(Conclusion)2550 b(37)242 1677 y Fm(5.1)78 b(Summary)62 b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f (:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g (:)g(:)g(:)f(:)65 b Fm(37)242 1868 y(5.2)78 b(In)n(terpretation)32 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g (:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g (:)f(:)65 b Fm(38)242 2059 y(5.3)78 b(Recommendations)70 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g (:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(39)127 2327 y Fk(Glossary)2752 b(41)127 2596 y(Bibliograph)n(y)2592 b(44)1694 4521 y Fm(v)p eop %%Page: 6 7 bop 127 1004 a Fl(Abstract)127 1636 y Fm(Python)31 b(is)h(an)f(in)n (terpreted)h(programming)d(language)h(that)h(pro)n(vides)g(simple)g(syn)n (tax,)i(a)e(collection)f(of)127 1827 y(useful)g(data)f(t)n(yp)r(es,)j(and)e (an)g(ob)t(ject-orien)n(ted)e(mo)r(del.)49 b(It)30 b(w)n(as)g(dev)n(elop)r (ed)f(b)n(y)h(Guido)g(v)l(an)f(Rossum)i(at)127 2018 y(the)26 b(CWI)f(in)g(Amsterdam.)127 2289 y(The)34 b(ob)t(ject-orien)n(ted)e(mo)r(del) h(of)g(Python)g(w)n(as)h(originally)29 b(limited)k(to)g(pro)n(viding)e(metho) r(ds)j(and)f(data)127 2481 y(ob)t(jects)g(with)e(no)h(protection,)h(as)g(w)n (ell)e(as)i(a)f(cum)n(b)r(ersome)h(syn)n(tax.)55 b(This)32 b(mo)r(del)f(w)n(as)i(redesigned)f(to)127 2672 y(correct)24 b(these)g(problems.)33 b(The)23 b(previous)g(necessit)n(y)g(of)g(calling)e (an)h(instance)h(metho)r(d)g(with)f(the)i(instance)127 2863 y(is)c(no)g(longer)g(required.)32 b(Constructors)20 b(and)f(destructors)i (are)g(no)n(w)e(executed)i(automatically)-6 b(.)28 b(Protection)127 3054 y(for)23 b(b)r(oth)g(v)l(ariables)f(and)h(metho)r(ds)h(w)n(as)f(added.) 33 b(Finally)-6 b(,)21 b(the)j(abilit)n(y)d(to)i(write)h(a)f(class)h (completely)e(in)h(C)127 3245 y(has)i(b)r(een)h(pro)n(vided.)127 3517 y(The)i(new)f(mo)r(del)g(w)n(as)h(then)f(implemen)n(ted)g(b)n(y)g(c)n (hanging)e(v)l(arious)h(sections)i(of)f(the)h(Python)f(co)r(de.)41 b(The)127 3708 y(mo)r(di\014cations)26 b(w)n(ere)j(then)g(tested,)h(some)f(b) n(y)f(actual)f(inclusion)g(in)n(to)g(a)h(ma)t(jor)g(researc)n(h)i(pro)t(ject) e(in)g(the)127 3899 y(Univ)n(ersit)n(y)c(of)h(Virginia)f(Computer)h(Science)h (Departmen)n(t.)36 b(The)25 b(c)n(hanges)h(outlined)e(in)h(this)h(rep)r(ort)g (are)127 4090 y(curren)n(tly)f(sc)n(heduled)g(to)g(b)r(e)g(included)f(with)h (the)g(o\016cial)f(release)i(of)e(Python.)1683 4521 y(vi)p eop %%Page: 1 8 bop 127 933 a Fg(Chapter)57 b(1)127 1816 y Fl(In)-6 b(tro)6 b(duction)127 2368 y Fm(The)34 b(purp)r(ose)g(of)f(the)h(thesis)g(is)g(to)g (impro)n(v)n(e)f(the)h(ob)t(ject-orien)n(ted)e(design)h(of)g(the)h(Python)f (computer)127 2559 y(language)24 b(b)n(y)i(redesigning)f(and)h(reimplemen)n (ting)e(selected)k(parts)e(of)g(the)h(language.)35 b(This)26 b(w)n(as)g(done)h(to)127 2750 y(impro)n(v)n(e)d(the)i(language)c(as)k(a)f (whole)f(and)h(to)g(assist)g(in)g(Univ)n(ersit)n(y)f(of)g(Virginia)f(researc) n(h)j(pro)t(jects.)127 3274 y Ff(1.1)117 b(Pro)6 b(ject)39 b(Bac)m(kground)127 3621 y Fm(Python)e(is)g(a)g(language)e(created)j(b)n(y)f (Guido)f(can)h(Rossum,)k(a)d(researc)n(her)g(at)f(CWI,)h(a)f(go)n(v)n(ernmen) n(t-)127 3812 y(sp)r(onsored)25 b(researc)n(h)h(institute)e(in)h(the)h (Netherlands.)33 b(His)25 b(description)f(of)h(the)h(language)c(is)k(as)f (follo)n(ws:)319 4127 y(Python)18 b(is)g(a)f(simple,)j(y)n(et)e(p)r(o)n(w)n (erful,)f(in)n(terpreted)h(programming)e(language)f(that)i(bridges)h(the)319 4318 y(gap)27 b(b)r(et)n(w)n(een)h(C)g(and)f(shell)h(programming,)e(and)i(is) f(th)n(us)h(ideally)e(suited)i(for)f(\\thro)n(w-a)n(w)n(a)n(y)1695 4521 y(1)p eop %%Page: 2 9 bop 319 70 a Fm(programming")23 b(and)i(rapid)f(protot)n(yping)e([vR93b)o(,)k (abstract].)127 415 y(One)h(of)f(Python's)h(adv)l(an)n(tages)e(o)n(v)n(er)h (other)h(languages)e(of)h(its)h(kind)f(is)h(that)g(it)f(is)h(ob)t(ject)g (orien)n(ted.)38 b(The)127 606 y(mo)r(del,)31 b(lik)n(e)d(the)i(language)e (itself,)i(is)g(rather)g(simplistic;)h(classes)f(and)f(instances)h(can)g(b)r (e)g(de\014ned,)h(and)127 797 y(inheritance)24 b(is)h(allo)n(w)n(ed.)32 b(No)25 b(data)f(protection)g(is)h(pro)n(vided.)127 1069 y(The)32 b(simplicit)n(y)e(of)i(the)g(mo)r(del,)i(ho)n(w)n(ev)n(er,)g(presen)n(ts)f (man)n(y)e(problems.)55 b(First,)35 b(the)d(syn)n(tax)f(of)h(a)g(class)127 1260 y(hasn't)26 b(b)r(een)h(completely)e(re\014ned.)38 b(Eac)n(h)26 b(metho)r(d)g(m)n(ust)h(b)r(e)g(de\014ned)f(to)g(accept)h Fh(self)h Fm(as)f(a)f(parameter,)127 1451 y(and)31 b(calls)f(to)h(class)h(metho)r(ds)g (m)n(ust)f(pass)h(self)f(directly)-6 b(.)51 b(Besides)32 b(b)r(eing)e(cum)n (b)r(ersome,)k(programmers)127 1642 y(frequen)n(tly)24 b(forget)g(to)h (include)f Fh(self)k Fm(as)d(a)g(parameter)g(to)g(a)h(metho)r(d,)f(th)n(us)g (leading)f(to)h(program)f(error.)127 1913 y(Second,)31 b(there)g(is)g(no)e (data)h(protection)f(in)g(Python.)49 b(An)n(y)29 b(data)g(ob)t(ject)h(b)r (elonging)e(to)i(an)g(instance)f(or)127 2105 y(metho)r(d)c(b)r(elonging)d(to) i(a)h(class)g(ma)n(y)f(b)r(e)i(accessed,)g(regardless)f(of)f(the)h(nature)g (of)f(the)h(requester.)35 b(Third,)127 2296 y(Python)f(do)r(es)h(not)f(allo)n (w)e(either)i(constructors)h(or)g(destructors,)i(metho)r(ds)e(whic)n(h)f(are) g(automatically)127 2487 y(called)25 b(up)r(on)g(instan)n(tiation)d(or)27 b(destruction)e(of)g(an)h(instance.)36 b(Finally)-6 b(,)24 b(Python)h(do)r(es)h(not)g(allo)n(w)e(classes)127 2678 y(to)j(b)r(e)h (written)f(en)n(tirely)f(in)h(C.)g(This)g(is)h(b)r(ecause)f(a)h(metho)r(d)f (m)n(ust)h(b)r(e)f(a)h(Python)e(function)g(rather)h(than)127 2869 y(an)n(y)d(t)n(yp)r(e)i(of)e(function,)g(Python)h(or)g(C.)127 3397 y Ff(1.2)117 b(Justi\014cation)39 b(for)f(Pro)6 b(ject)127 3744 y Fm(The)22 b(purp)r(ose)f(of)g(this)h(thesis)g(is)g(to)f(\014x)g(these) i(problems,)f(in)f(order)h(to)g(impro)n(v)n(e)e(the)i(Python)f(language.)30 b(In)127 3936 y(brief,)21 b(the)g(design)f(goals)g(are)g(to)h(eliminate)e (the)i(need)g(for)f Fh(self)p Fm(,)k(th)n(us)d(impro)n(ving)d(the)j(syn)n (tax;)g(implemen)n(t)127 4127 y(data)26 b(protection,)g(constructors,)h(and)f (destructors;)j(and)d(enable)g(classes)h(to)g(b)r(e)g(written)f(in)g(either)h (C)f(or)127 4318 y(Python.)1695 4521 y(2)p eop %%Page: 3 10 bop 127 70 a Fm(The)21 b(c)n(hanges)g(are)g(then)g(to)g(b)r(e)g(incorp)r (orated)f(in)n(to)f(the)j(Python)e(language,)g(th)n(us)h(pro)n(viding)d(a)j (net)g(b)r(ene\014t)127 261 y(for)27 b(Python)g(programmers)g(and)f(users.)42 b(Also,)28 b(Python)e(is)i(curren)n(tly)e(used)i(as)g(a)f(scripting)f (language)f(in)127 453 y(the)32 b(User)i(In)n(terfaces)e(Group,)i(a)e (researc)n(h)h(team)f(in)g(the)g(Departmen)n(t)g(of)g(Computer)f(Science)i (headed)127 644 y(b)n(y)26 b(Dr.)39 b(Randy)25 b(P)n(ausc)n(h,)i(and)f(of)g (whic)n(h)g(the)h(author)e(is)i(a)g(mem)n(b)r(er.)39 b(Man)n(y)25 b(of)h(the)h(mo)r(di\014cations)d(ha)n(v)n(e)127 835 y(already)g(b)r(een)h (incorp)r(orated)f(in)n(to)g(Alice,)h(a)g(virtual)f(realit)n(y)f(to)r(olkit)g (whic)n(h)h(utilizes)h(Python.)33 b([DeL93])127 1364 y Ff(1.3)117 b(Ov)m(erview)41 b(of)e(Rep)s(ort)g(Con)m(ten)m(ts)127 1712 y Fm(Although)25 b(the)j(design)f(goals)f(are)i(straigh)n(tforw)n(ard,)d(the) i(decisions)g(that)g(m)n(ust)h(b)r(e)g(made)g(are)f(not.)41 b(Dif-)127 1903 y(feren)n(t)26 b(languages)e(ma)n(y)h(b)r(e)i(more)f(op)r(en) g(or)g(restrictiv)n(e)g(on)f(the)i(issue)f(of)g(data)f(protection,)g(for)h (instance.)127 2094 y(The)i(nature)g(of)f(the)h(language)e(itself)h(-)h(lo)n (w)f(or)h(high)f(lev)n(el,)h(in)n(terpreted)f(or)h(compiled)f(-)h(m)n(ust)h (b)r(e)f(tak)n(en)127 2285 y(in)n(to)c(accoun)n(t)g(with)h(resp)r(ect)h(to)f (design.)127 2556 y(Hence,)h(the)g(nature)f(of)g(ob)t(ject-orien)n(ted)f (programming)f(m)n(ust)j(b)r(e)g(examined,)f(and)g(along)e(with)i(it)g(man)n (y)127 2747 y(of)k(the)g(languages)f(that)h(ha)n(v)n(e)f(b)r(een)i(dev)n (elop)r(ed)e(and)h(their)g(re\014nemen)n(t)h(of)f(this)g(philosoph)n(y)-6 b(.)43 b(This)29 b(is)h(a)127 2939 y(requiremen)n(t)c(for)h(designing)d(the)j (mo)r(di\014cations.)36 b(After)26 b(the)h(design)f(is)h(complete,)g(the)g(c) n(hanges)f(will)f(b)r(e)127 3130 y(implemen)n(ted)f(and)h(tested.)1695 4521 y(3)p eop %%Page: 4 11 bop 127 933 a Fg(Chapter)57 b(2)127 1816 y Fl(Theory)66 b(of)h(Ob)11 b(jects)127 2368 y Fm(In)35 b(order)h(to)f(redesign)g(the)h(Python)f(mo)r (del,)j(a)d(basic)g(kno)n(wledge)e(of)i(the)g(theory)g(of)g(ob)t(ject-orien)n (ted)127 2559 y(programming)23 b(\(also)i(kno)n(wn)f(as)i(OOP\))g(is)g (required.)35 b(Kno)n(wledge)23 b(of)i(other)h(ob)t(ject-orien)n(ted)e (languages)127 2750 y(is)h(also)g(helpful,)f(as)h(m)n(uc)n(h)g(can)g(b)r(e)h (learned)f(from)g(the)g(w)n(orks)g(of)g(others.)127 3279 y Ff(2.1)117 b(Basics)38 b(of)h(Ob)6 b(ject-Orien)m(ted)40 b(Programming)127 3712 y Fe(2.1.1)97 b(Older)32 b(Metho)s(dologies)127 4033 y Fm(Standard)16 b(programming)f(languages)g(use)j(what)f(is)g(kno)n(wn)f(as)i (pro)r(cess)g(abstraction.)30 b(Pro)r(cess)19 b(abstraction)127 4224 y(is)27 b(the)g(idea)e(that)h(programs)g(consist)h(of)f(data)g(and)f (functions.)37 b([Seb89)o(,)28 b(page)e(322])g(The)g(functions)f(then)1695 4521 y(4)p eop %%Page: 5 12 bop 127 70 a Fm(tak)n(e)38 b(data)f(as)h(parameters,)k(and)c(ma)n(y)f(return) i(v)l(alues)e(or)h(ev)n(en)g(c)n(hange)f(the)h(data)g(itself.)71 b(What)38 b(is)127 261 y(imp)r(ortan)n(t)26 b(to)h(note)h(is)f(that)g(the)h (functions)e(and)h(data)g(are)h(in)f(no)g(w)n(a)n(y)f(connected.)41 b(F)-6 b(or)28 b(instance,)g(tak)n(e)127 453 y(the)e(follo)n(wing)21 b(pseudo)r(co)r(de:)450 891 y Fh(variable)44 b(list:)e(array[50])i(of)e (integers)450 987 y(variable)i(size:)e(integer)450 1178 y(function)i (add_to_list\(va)q(ria)q(bl)q(e)i(the_list,)e(the_size,)g(new_item\))g(is)774 1274 y(the_size)f(=)e(the_size)j(+)d(1)774 1369 y(the_list[the_si)q(ze])46 b(=)41 b(new_item)450 1465 y(end)450 1656 y(//)g(sample)i(code)450 1847 y(add_to_list\(l)q(ist)q(,)j(size,)c(3\))127 2270 y Fm(The)20 b(ab)r(o)n(v)n(e)e(example)h(clearly)g(presen)n(ts)h(a)g(problem;)h(the)f (list)g(and)f(its)g(size)i(are)f(con)n(tained)e(in)h(t)n(w)n(o)g(di\013eren)n (t)127 2461 y(v)l(ariables.)52 b(This)31 b(could)g(easily)g(lead)g(to)h (programmer)f(error.)55 b(Supp)r(ose)31 b(the)i(size)f(of)f(another)g(list)h (w)n(as)127 2652 y(passed)e(to)g(the)h(function)d Fh(add_to_list)p Fm(;)38 b(it)29 b(w)n(ould)g(cause)h(the)g(program)f(to)h(malfunction;)g (data)f(could)127 2844 y(b)r(e)k(o)n(v)n(erwritten,)g(causing)f(subtle)g (glitc)n(hes)g(that)g(w)n(ould)f(b)r(e)i(di\016cult)e(to)i(trace.)56 b(It)33 b(is)f(also)g(somewhat)127 3035 y(cum)n(b)r(ersome.)127 3306 y(Then,)h(the)f(concept)g(of)f(an)g(abstract)h(data)e(t)n(yp)r(e)i(w)n (as)f(in)n(tro)r(duced.)53 b(In)31 b(its)h(most)g(simplistic)e(form,)k(an)127 3497 y(abstract)f(data)g(t)n(yp)r(e)g(is)g(a)h(w)n(a)n(y)e(of)h(organizing)d (data)i(in)n(to)h(a)g(structure)h(whic)n(h)e(can)i(b)r(e)g(passed)f(in)n(to)g (a)127 3688 y(function.)f(P)n(arts)26 b(of)f(the)g(structure)h(can)g(then)f (b)r(e)h(accessed.)35 b(The)25 b(ab)r(o)n(v)n(e)f(co)r(de)i(lends)f(itself)f (w)n(ell)g(to)h(this:)450 4127 y Fh(structure)44 b(ListType:)774 4222 y(variable)f(items:)g(array[50])h(of)d(integers)774 4318 y(variable)i(size:)g(integer)1695 4521 y Fm(5)p eop %%Page: 6 13 bop 450 166 a Fh(function)44 b(add_to_list\(va)q(ria)q(bl)q(e)i(List,)c (new_item\))i(is)774 261 y(List.size)g(=)c(List.size)45 b(+)40 b(1)774 357 y(List.items[List)q(.si)q(ze)q(])46 b(=)40 b(new_item)450 453 y(end)450 644 y(//)h(sample)i(code)450 835 y(variable)h(myList:)f (ListType)450 1026 y(add_to_list\(m)q(yLi)q(st)q(,)i(3\))127 1462 y Fm(This)29 b(is)g(m)n(uc)n(h)h(more)f(con)n(v)n(enien)n(t)f(for)h(the) g(programmer.)46 b(Ho)n(w)n(ev)n(er,)30 b(there)g(are)g(still)e(sev)n(eral)h (problems)127 1653 y(with)d(this)g(approac)n(h.)37 b(First,)28 b(an)n(y)e(p)r(ortion)f(of)h(co)r(de)h(has)f(the)h(abilit)n(y)d(to)i(mo)r (dify)g(the)g(in)n(ternal)f(v)l(ariables)127 1844 y(of)36 b(a)g(List.)67 b(This)35 b(leads)h(to)g(decreased)h(reliabilit)n(y)-6 b(,)35 b(as)h(a)h(piece)f(of)f(co)r(de)i(ma)n(y)e(mo)r(dify)g(the)h(v)l(ariables)127 2035 y(suc)n(h)g(that)f(a)g(later)g(op)r(eration)f(will)f(fail.)63 b(\(F)-6 b(or)35 b(instance,)j(freeing)d(the)h(memory)f(used)h(b)n(y)f(the)h (items)127 2227 y(arra)n(y)-6 b(.\))37 b(More)27 b(imp)r(ortan)n(tly)-6 b(,)25 b(ho)n(w)n(ev)n(er,)h(it)h(causes)g(the)g(co)r(de)g(whic)n(h)f (accesses)j(the)e(in)n(ternal)e(v)l(ariables)g(to)127 2418 y(b)r(ecome)i(dep)r(enden)n(t)f(up)r(on)g(the)h(implemen)n(tation)d(of)i(a)g (List.)38 b([Mey88)o(,)28 b(page)e(22])g(If)g(the)h(programmer)f(is)127 2609 y(calling)h(functions)g(suc)n(h)j(as)f Fh(add_to_list)p Fm(,)36 b Fh(delete_from_lis)q(t)p Fm(,)g(and)29 b Fh(sort_list)p Fm(,)34 b(whether)c(a)f(list)f(is)127 2800 y(implemen)n(ted)i(as)g(an)g(arra) n(y)g(or)g(link)n(ed)f(list)h(is)h(irrelev)l(an)n(t.)48 b(If)30 b(the)h(programmer)f(accesses)i(the)f(v)l(ariable)127 2991 y Fh(List.items)p Fm(,)f(it)25 b(b)r(ecomes)h(relev)l(an)n(t.)127 3263 y(Second,)c(the)h(programmer)e(is)h(no)n(w)f(dep)r(enden)n(t)g(on)h (what)f(t)n(yp)r(e)g(a)h(v)l(ariable)d(is.)33 b(There)23 b(w)n(ould)d(b)r(e)i (di\013eren)n(t)127 3454 y(functions)33 b(to)h(add)f(a)h(n)n(um)n(b)r(er)g (to)g(a)g(list)f(and)h(to)g(a)g(binary)e(tree.)62 b(Finally)-6 b(,)34 b(it)g(is)g(di\016cult)f(to)h(mak)n(e)g(a)127 3645 y(new)c(t)n(yp)r(e) g(of)f(list)h(-)g(p)r(erhaps)g(one)g(that)f(main)n(tains)f(a)i(sorted)g(list) g(-)g(without)e(writing)g(an)i(en)n(tirely)e(new)127 3836 y(structure)37 b(and)e(new)g(functions.)64 b(F)-6 b(or)36 b(instance,)i(if)d(the)h(add)f (function)e(for)j(a)f(sorted)h(list)f(w)n(as)h(called)127 4027 y Fh(add_to_sorted_)q(li)q(st)p Fm(,)f(then)27 b(the)h(programmer)g(w)n(ould) e(ha)n(v)n(e)h(to)g(implemen)n(t)g(a)h(corresp)r(onding)e(delete)127 4219 y(function,)40 b(ev)n(en)e(if)f(the)h(delete)g(function)e(didn't)i(c)n (hange;)44 b(otherwise,)d(programmers)c(w)n(ould)g(quic)n(kly)1695 4521 y(6)p eop %%Page: 7 14 bop 127 70 a Fm(b)r(ecome)26 b(confused.)127 534 y Fe(2.1.2)97 b(The)32 b(Ob)5 b(ject)127 855 y Fm(The)36 b(fundamen)n(tal)d(concept)j(in)f (OOP)i(is)f(the)g(notion)e(of)h(an)h(ob)t(ject.)65 b(An)36 b(ob)t(ject)g(is)g(a)f(collection)f(of)127 1047 y(v)l(ariables,)22 b(whic)n(h)h(hold)f(data,)h(and)g(metho)r(ds,)i(functions)d(whic)n(h)g(op)r (erate)h(on)g(that)g(data.)33 b(It)24 b(is)f(similar)g(to)127 1238 y(a)k(structure,)i(except)f(that)f(metho)r(ds)h(are)f(also)g(con)n (tained)f(within)f(the)j(structure.)41 b(Here)29 b(is)e(an)g(example)127 1429 y(of)e(a)g(List)g(ob)t(ject:)450 1878 y Fh(object)43 b(List:)774 1973 y(variable)g(items:)g(array[50])h(of)d(integers)774 2069 y(variable)i(size:)g(integer)774 2164 y(function)g(add\(variable)j (new_item\))e(is:)1097 2260 y(List.size)g(=)d(List.size)j(+)d(1)1097 2355 y(List.items[Lis)q(t.s)q(iz)q(e])46 b(=)41 b(new_item)774 2451 y(end)450 2642 y(//)g(sample)i(code)450 2833 y(variable)h(myList:)f (List)450 2929 y(myList.add\(3\))127 3362 y Fm(Not)20 b(only)g(is)h(the)g(co) r(de)g(more)g(succinct,)h(but)e(it)h(is)g(easier)g(to)f(comprehend.)33 b(List)21 b(is)g(an)f(ob)t(ject)h(whic)n(h)e(holds)127 3553 y(data)31 b(-)g Fh(items)j Fm(and)d Fh(size)j Fm(-)d(and)g(a)h(metho)r(d)f (called)f Fh(add)p Fm(.)55 b(The)32 b(metho)r(d)f(is)h(no)n(w)e(in)n (tegrated)g(with)h(the)127 3744 y(data.)40 b(The)28 b(programmer)f(is)g(no)h (longer)e(requesting)h(an)g(op)r(eration)f(on)h(a)g(piece)h(of)f(data)g(-)g (instead,)h(it)f(is)127 3936 y(requesting)c(for)h(an)g(ob)t(ject)g(to)g(do)g (something)f(to)h(itself.)33 b(The)24 b(main)g(di\013erence)g(b)r(et)n(w)n (een)g(the)h(ob)t(ject)f(and)127 4127 y(the)c(previous)g(example)f(of)h(an)f (abstract)h(data)f(t)n(yp)r(e)i(is)f(that)f(ob)t(jects)i(dep)r(end)f(on)g (pro)r(cedural)f(abstraction,)127 4318 y(while)d(abstract)g(data)h(t)n(yp)r (es)g(dep)r(end)g(on)g(t)n(yp)r(e)f(abstraction,)i(or)f(the)g(abilit)n(y)d (to)j(create)h(structures.)33 b([Co)r(o91)n(])1695 4521 y(7)p eop %%Page: 8 15 bop 127 70 a Fe(2.1.3)97 b(Classes)33 b(and)e(Instances)127 391 y Fm(The)26 b(previous)e(example)h(created)h(a)g(single)e(ob)t(ject,)i (rather)g(than)f(a)h(t)n(yp)r(e)f(of)g(ob)t(ject.)36 b(In)25 b(ob)t(ject-orien)n(ted)127 582 y(languages,)c(there)h(are)h(actually)c(t)n (w)n(o)i(comp)r(onen)n(ts)h(to)g(an)f(ob)t(ject:)33 b(the)22 b(class,)h(or)f(the)h(`t)n(yp)r(e')f(of)g(an)f(ob)t(ject;)127 774 y(and)k(the)g(instance,)g(a)g(particular)f(v)n(ersion)g(of)h(the)h (class.)127 1045 y(Th)n(us,)k(the)f(user)h(can)e(de\014ne)h(a)g(class)g (called)e Fh(List)p Fm(;)33 b(it)c(will)e(not)h(b)r(e)i(an)e(actual)f(ob)t (ject,)j(but)f(a)g(guideline)127 1236 y(for)24 b(creating)g(instances.)34 b(Instances)25 b(of)f(the)h(class)g(can)g(then)f(b)r(e)i(created,)f(th)n(us)g (creating)f(individual)d(lists)127 1427 y(that)28 b(can)g(b)r(e)h (manipulated.)41 b(Eac)n(h)28 b(instan)n(tiation)d(of)j(a)g(class)g(has)h (its)f(o)n(wn)f(data,)i(but)f(shares)h(metho)r(ds)127 1618 y(with)24 b(other)i(instan)n(tiations)21 b(of)k(the)h(same)f(class.)450 2070 y Fh(class)43 b(List:)774 2165 y(variable)g(items:)g(array[50])h(of)d (integers)774 2261 y(variable)i(size:)g(integer)774 2356 y(function)g (add\(variable)j(new_item\))e(is:)1097 2452 y(List.size)g(=)d(List.size)j(+)d (1)1097 2547 y(List.items[Lis)q(t.s)q(iz)q(e])46 b(=)41 b(new_item)774 2643 y(end)450 2834 y(//)g(sample)i(code)450 3025 y(variable)h(firstList:)g (List)450 3121 y(variable)g(secondList:)h(List)450 3312 y(firstList.add)q (\(3\))450 3408 y(secondList.ad)q(d\(5)q(\))127 3843 y(firstList)34 b Fm(and)28 b Fh(secondList)34 b Fm(b)r(oth)29 b(ha)n(v)n(e)g(v)l(ariables)e (called)i Fh(items)j Fm(and)d Fh(size)p Fm(,)j(as)e(w)n(ell)e(as)i(a)g(metho) r(d)127 4035 y(called)24 b Fh(add)p Fm(;)j(ho)n(w)n(ev)n(er,)e(the)h(con)n (ten)n(ts)f(of)f(the)i(v)l(ariables)d(are)j(di\013eren)n(t.)1695 4521 y(8)p eop %%Page: 9 16 bop 127 70 a Fe(2.1.4)97 b(Inheritance)127 391 y Fm(Inheritance)23 b(is)h(the)h(abilit)n(y)c(to)j(de\014ne)g(a)g(new)g(class)g(based)g(on)g(one) g(or)g(more)h(previous)e(classes.)34 b(The)24 b(new)127 582 y(class)h(can)f(acquire)g(v)l(ariables)e(and)i(metho)r(ds,)i(and)e(has)g(the) h(abilit)n(y)d(to)i(selectiv)n(ely)g(c)n(hange)f(the)i(b)r(eha)n(vior)127 774 y(of)g(its)g(\\base")f(classes.)127 1045 y(The)d(list)f(in)g(the)h (previous)f(example)g(dep)r(ends)h(en)n(tirely)f(up)r(on)g(the)h(order)g(in)g (whic)n(h)e(n)n(um)n(b)r(ers)i(w)n(ere)h(added;)127 1236 y(adding)j(5)i(and)g (3)g(w)n(ould)e(result)j(in)e(a)i(list)e(con)n(taining)e(the)k(n)n(um)n(b)r (er)f(5,)h(follo)n(w)n(ed)c(b)n(y)j(the)g(n)n(um)n(b)r(er)h(3.)40 b(An)127 1427 y(in)n(teresting)26 b(idea)g(w)n(ould)f(b)r(e)j(to)e(create)i (a)f(list)f(whic)n(h)g(sorted)h(the)g(list)g(after)f(eac)n(h)h(addition,)e (so)j(that)e(the)127 1618 y(list)g(w)n(as)h(alw)n(a)n(ys)e(in)i(n)n(umerical) f(order.)39 b(Instead)27 b(of)g(de\014ning)e(an)i(en)n(tirely)f(new)h(class,) h(SortedList)e(could)127 1810 y(simply)e(inherit)h(from)f(List.)450 2261 y Fh(class)43 b(SortedList:)i(inherit)e(from)f(List)774 2356 y(function)h(add\(variable)j(new_item\))e(is:)1097 2452 y(List.add\(new_i)q(tem)q(\))1097 2547 y(sort\(List.item)q(s\))774 2643 y(end)127 3079 y Fm(Inheritance)32 b(allo)n(ws)g(programmers)h(to)g (reuse)h(as)g(m)n(uc)n(h)f(co)r(de)h(as)g(p)r(ossible;)j(new)c(features)g (can)g(b)r(e)h(in-)127 3270 y(corp)r(orated)29 b(without)e(rewriting)h (pre-existing)g(co)r(de,)j(as)e(demonstrated)g(ab)r(o)n(v)n(e.)46 b(Multiple)27 b(inheritance)127 3461 y(also)j(exists;)j(this)e(allo)n(ws)d(a) i(new)h(class)f(to)h(inherit)e(from)h(more)h(than)f(one)g(class.)50 b(This)30 b(feature)g(is)h(v)n(ery)127 3652 y(con)n(tro)n(v)n(ersial,)23 b(and)i(is)g(b)r(ey)n(ond)g(the)g(scop)r(e)h(of)f(this)g(thesis.)1695 4521 y(9)p eop %%Page: 10 17 bop 127 70 a Fe(2.1.5)97 b(Data)31 b(Protection)127 391 y Fm(One)e(ma)t(jor)f (problem)g(with)g(the)h(List)g(class)g(as)h(written)e(is)h(that)f(a)h (programmer)f(is)h(allo)n(w)n(ed)d(to)j(mo)r(dify)127 582 y(the)g(items)f (and)g(size)h(v)l(ariables)d(directly)-6 b(.)41 b(This)28 b(is)h(not)e (desirable;)j(an)n(y)d(additional)d(functionalit)n(y)g(could)127 774 y(easily)k(b)r(e)h(incorp)r(orated)e(in)n(to)h(either)h(the)g(original)d (class)j(or)g(a)g(sub)r(class)g(\(a)g(class)g(whic)n(h)e(inherits)i(from)127 965 y(another)c(class.\))35 b(In)25 b(fact,)g(allo)n(wing)d(the)k(user)g (access)h(means)f(that)f(a)g(c)n(hange)g(in)g(the)g(implemen)n(tation)e(of) 127 1156 y(List)i(w)n(ould)f(cause)i(co)r(de)f(failure.)127 1427 y(Data)33 b(protection)f(is)i(the)g(abilit)n(y)d(to)j(protect)f(data)g (ob)t(jects)h(and)f(ev)n(en)h(metho)r(ds)g(from)f(unauthorized)127 1618 y(access.)h(The)19 b(List)h(class)g(could)f(b)r(e)h(rewritten)f(so)h (that)f(the)h(v)l(ariables)e(items)i(and)f(size)h(w)n(ould)e(b)r(e)i (accessible)127 1810 y(only)25 b(within)g(the)j(metho)r(ds)f(de\014ned)f(in)h (List;)h(nothing)d(else)i(w)n(ould)e(b)r(e)i(able)f(to)h(access)h(them.)39 b(Not)27 b(only)127 2001 y(w)n(ould)e(this)h(increase)g(reliabilit)n(y)-6 b(,)23 b(but)j(it)h(also)e(forces)i(the)f(programmer)g(to)h(view)e(a)h(List)h (not)f(as)g(a)h(set)g(of)127 2192 y(v)l(ariables)c(and)i(metho)r(ds,)h(but)f (as)g(an)g(ob)t(ject)g(whic)n(h)f(follo)n(ws)f(commands.)127 2656 y Fe(2.1.6)97 b(Abstraction)127 2977 y Fm(Pro)r(cedural)32 b(abstraction)e(is)i(highly)e(desired)j(in)f(ob)t(ject-orien)n(ted)e (programming.)53 b(It)32 b(means)g(that)g(the)127 3169 y(programmer)c(no)h (longer)e(has)i(to)g(concern)g(himself)f(with)g(the)h(implemen)n(tation)d(of) i(a)h(class;)i(rather,)f(the)127 3360 y(programmer)24 b(can)g(simply)f(deal)g (with)h(a)g(prepac)n(k)l(aged)e(ob)t(ject)i(that)g(has)g(a)g(set)h(of)f (callable)d(metho)r(ds.)35 b(An)127 3551 y(example)24 b(is)i(as)f(follo)n (ws:)450 4002 y Fh(class)43 b(List:)774 4098 y(function)g(add\(item\))774 4193 y(function)g(delete\(item\))774 4289 y(function)g(sort\(item\))1676 4521 y Fm(10)p eop %%Page: 11 18 bop 127 70 a Fm(These)20 b(primitiv)n(es)f(allo)n(w)e(programmers)j(to)g(w)n (ork)f(at)h(a)g(higher)f(lev)n(el)g(than)g(if)g(they)h(w)n(ere)g(concerned)g (ab)r(out)127 261 y(the)26 b(implemen)n(tation)c(of)j(a)g(List,)h(or)f(if)f (they)i(w)n(ere)f(forced)g(to)g(call)g(functions)e(suc)n(h)j(as)f(add)p Fh(_)p Fm(to)p Fh(_)p Fm(list.)127 791 y Ff(2.2)117 b(Review)41 b(of)d(Ob)6 b(ject-Orien)m(ted)40 b(Languages)127 1138 y Fm(In)27 b(order)f(to)h(design)f(a)h(b)r(etter)g(mo)r(del)f(for)g(Python,)h(a)g(study) f(w)n(as)h(made)f(of)g(some)i(of)e(the)h(ma)t(jor)f(ob)t(ject-)127 1329 y(orien)n(ted)31 b(languages)e(a)n(v)l(ailable)f(to)r(da)n(y)-6 b(.)51 b(They)31 b(are)g(ordered)h(b)n(y)f(usage;)k(C++)c(and)g(Smalltalk)d (are)k(the)127 1520 y(most)26 b(common)e(ob)t(ject-orien)n(ted)g(languages)f (used)j(to)r(da)n(y)-6 b(,)24 b(while)g Fi(Self)h Fm(is)g(largely)f(a)h (researc)n(h)h(pro)t(ject.)127 1792 y(By)20 b(studying)g(these)h(languages,)f (it)h(is)g(hop)r(ed)f(that)h(the)g(designer)f(can)h(learn)f(from)h(previous)f (exp)r(erimen)n(ts,)127 1983 y(and)25 b(th)n(us)g(create)h(a)f(higher-qualit) n(y)c(mo)r(del.)127 2447 y Fe(2.2.1)97 b(C++)127 2768 y Fm(C++)28 b(is)g(curren)n(tly)f(the)h(most)h(p)r(opular)d(ob)t(ject-orien)n(ted)g (language.)40 b(Designed)27 b(b)n(y)h(Bjarne)f(Stroustrup)127 2959 y(in)h(the)h(early)f(to)g(mid)g(1980s,)h(it)f(w)n(as)g(based)h(on)f(C,)h (a)f(compiled)g(language)e(whic)n(h)h(enjo)n(y)n(ed)g(widespread)127 3151 y(p)r(opularit)n(y)22 b(at)j(the)h(time)f(and)g(still)f(do)r(es)i(to)r (da)n(y)-6 b(.)127 3422 y(In)31 b(C++,)h(data)e(ob)t(jects)h(and)g(metho)r (ds)g(asso)r(ciated)f(with)g(a)h(class)g(can)g(ha)n(v)n(e)f(three)h (di\013eren)n(t)g(kinds)f(of)127 3613 y(protection:)j(public,)24 b(wherein)h(all)f(ha)n(v)n(e)g(access;)j(protected,)e(wherein)g(an)g (instance)f(of)h(that)g(class)g(or)g(an)n(y)127 3804 y(descendan)n(t)31 b(class)g(has)f(access;)36 b(and)30 b(priv)l(ate,)h(where)g(only)f(an)g (instance)h(of)f(that)g(particular)f(class)i(has)127 3995 y(access.)127 4267 y(Instances)22 b(ha)n(v)n(e)f(v)l(ariables)f(for)h(not)g(only)g(the)h (class)g(it)f(is)h(a)g(mem)n(b)r(er)g(of)g(but)f(all)g(sup)r(erclasses)i(of)e (that)g(par-)1676 4521 y(11)p eop %%Page: 12 19 bop 127 70 a Fm(ticular)23 b(class.)34 b(Multiple)21 b(inheritance)i(is)h (also)f(supp)r(orted.)34 b(C++)23 b(also)g(allo)n(ws)f(metho)r(ds)i(to)g(b)r (e)h(o)n(v)n(erriden)127 261 y(in)g(sub)r(classes,)h(but)f(the)h(original)c (metho)r(d)j(m)n(ust)h(b)r(e)g(sp)r(eci\014ed)f(as)h(virtual.)32 b([Str91)o(,)26 b(page)f(181-211])450 713 y Fh(class)43 b(List)f({)774 808 y(int)f(size;)774 904 y(int)g(items[50];)774 999 y(void)h(add\(int)h (item\);)450 1095 y(})450 1286 y(void)f(List::add\(int)k(item\))c({)774 1382 y(size++;)774 1477 y(items[size])i(=)d(item;)450 1573 y(})127 2122 y Fe(2.2.2)97 b(Smalltalk)127 2443 y Fm(Smalltalk)20 b(w)n(as)j(the)g(\014rst)h(ma)t(jor)f(ob)t(ject-orien)n(ted)e(language.)31 b(It)23 b(w)n(as)g(dev)n(elop)r(ed)f(in)h(the)g(1970s)f(at)h(Xero)n(x)127 2634 y(P)-6 b(AR)n(C)33 b(based)i(on)e(ideas)h(b)n(y)g(Dr.)62 b(Alan)33 b(Ka)n(y)-6 b(.)59 b(An)35 b(in)n(terpreted)e(language,)i(it)f(has) g(undergone)f(man)n(y)127 2825 y(revisions;)25 b(Smalltalk-80)c(is)k(the)h(v) n(ersion)e(discussed)i(here.)35 b([GR83)o(])127 3096 y(In)f(Smalltalk,)f(all) f(program)h(units)h(are)g(ob)t(jects.)59 b(Eac)n(h)34 b(ob)t(ject)g(can)g(ha) n(v)n(e)e(priv)l(ate)h(\(but)g(not)h(public\))127 3288 y(data)26 b(ob)t(jects)h(as)g(w)n(ell)e(as)i(public)f(metho)r(ds,)h(and)g(is)f(an)h (instance)f(of)g(a)h(particular)e(class.)39 b([Seb89)o(,)28 b(pages)127 3479 y(462-463])450 3930 y Fh(class)43 b(name)607 b(List)450 4025 y(superclass)j(Object)450 4121 y(instance)44 b(variable)g(names)82 b(size)1460 4217 y(items)1676 4521 y Fm(12)p eop %%Page: 13 20 bop 450 70 a Fh(new)774 166 y(^)40 b(super)j(new)450 357 y(add:)f(item)450 453 y(\(et)g(cetera\))127 888 y Fm(In)27 b(some)h(resp)r(ects,)i(Smalltalk)24 b(is)k(similar)e(to)h(Python.)40 b(V)-6 b(ariables)25 b(are)j(un)n(t)n(yp)r (ed;)g(in)e(other)i(w)n(ords,)f(they)127 1079 y(are)g(not)g(prede\014ned)g (as)h(in)n(tegers,)g(strings,)g(etc.,)h(but)e(rather)g(are)h(de\014ned)f(b)n (y)g(w)n(a)n(y)f(of)g(executable)h(co)r(de.)127 1271 y(Smalltalk,)f(lik)n(e)h (Python,)h(is)g(in)n(terpreted.)43 b(One)28 b(main)f(di\013erence)h(lies)g (in)f(the)i(re\014nemen)n(t)f(of)g(the)g(OOP)127 1462 y(abilities)23 b(of)i(the)g(t)n(w)n(o)g(languages.)127 1926 y Fe(2.2.3)97 b(Ob)5 b(jectiv)m(e-C)127 2247 y Fm(Ob)t(jectiv)n(e-C)26 b(is)h(the)g(second) g(ob)t(ject-orien)n(ted)f(language)e(based)j(on)g(C;)g(th)n(us,)h(it)f(comp)r (eted)g(with)f(C++.)127 2438 y(Although)k(it)i(w)n(as)g(adopted)g(as)g(the)h (o\016cial)e(language)f(b)n(y)i(NeXT,)h(it)f(has)g(not)g(met)h(with)f(the)h (success)127 2630 y(C++)25 b(has)g(had.)127 2901 y(Class)e(de\014nitions)e (consist)i(of)g(t)n(w)n(o)f(\014les:)34 b(the)23 b(in)n(terface)g(\014le,)g (whic)n(h)g(lists)g(data)f(ob)t(jects)h(and)g(metho)r(ds,)h(as)127 3092 y(w)n(ell)e(as)i(the)g(base)g(class)g(if)f(necessary;)i(and)e(the)h (implemen)n(tation)d(\014le,)j(whic)n(h)e(con)n(tains)g(executable)h(co)r(de) 127 3283 y(for)i(the)g(metho)r(ds.)35 b([PW91,)26 b(pages)f(63-65])450 3734 y Fh(//)41 b(Interface)k(to)c(class)h(List)450 3926 y(@interface)j (List:)d(Object)450 4021 y({)774 4117 y(int)f(size;)774 4212 y(int)g(items[50];)450 4308 y(})1676 4521 y Fm(13)p eop %%Page: 14 21 bop 450 70 a Fh(-)41 b(add:)h(\(int\))h(item;)450 166 y(-)e(delete:)i (\(int\))g(item;)450 261 y(-)e(sort;)450 453 y(//)g(Implementatio)q(n)46 b(of)41 b(class)h(List)450 644 y(@implementati)q(on)k(List)450 739 y(-)41 b(add:)h(\(int\))h(item)450 835 y({)774 931 y(size)f(=)e(size)i(+) f(1;)774 1026 y(items[size])j(=)d(item;)450 1122 y(})450 1217 y(\(et)h(cetera\))127 1653 y Fm(V)-6 b(ariables)23 b(cannot)h(b)r(e)h (rede\014ned)h(b)n(y)e(sub)r(classes;)j(metho)r(ds,)e(on)g(the)g(other)g (hand,)g(can)g(b)r(e.)34 b(Ob)t(jectiv)n(e)24 b(C)127 1844 y(is)h(in)g(man)n(y)g(w)n(a)n(ys)f(mo)r(deled)h(on)g(Smalltalk.)127 2309 y Fe(2.2.4)97 b(Ei\013el)127 2630 y Fm(Ei\013el)28 b(is)h(a)g(compiled)f (ob)t(ject-orien)n(ted)f(language)f(dev)n(elop)r(ed)h(b)n(y)i(Dr.)45 b(Bertrand)28 b(Mey)n(er.)45 b(It)29 b(emphases)127 2821 y(classical)24 b(soft)n(w)n(are)g(engineering)f(tec)n(hniques)i(suc)n(h)h(as)f(reusabilit)n (y)-6 b(,)23 b(correctness,)k(and)e(main)n(tenance.)127 3092 y(Ei\013el)35 b(supp)r(orts)h(b)r(oth)f(public)g(and)g(priv)l(ate)f(data)h (ob)t(jects,)k(priv)l(ate)34 b(b)r(eing)h(the)h(default.)64 b(All)35 b(public)127 3283 y(ob)t(jects)25 b(m)n(ust)g(b)r(e)g(explicitly)d (declared)i(using)g(the)h(exp)r(ort)f(command.)34 b(An)24 b(example)g(class)h (is)g(as)g(follo)n(ws:)450 3734 y Fh(class)43 b(LIST)f(export)774 3830 y(add,)g(delete,)h(sort)450 3926 y(feature)774 4021 y(size:)f(INTEGER;) 774 4117 y(items:)g(ARRAY[INTEGER)q(];)774 4308 y(add)f(\(item:)i(INTEGER\))h (is)1676 4521 y Fm(14)p eop %%Page: 15 22 bop 854 70 a Fh(\(et)42 b(cetera\))127 506 y Fm(Ei\013el)28 b(also)f(allo)n(ws)e(m)n(ultiple)h(inheritance)h(and)g(a)h(n)n(um)n(b)r(er)g (of)f(sp)r(ecialized)g(features)h(to)f(insure)h(program)127 697 y(correctness,)h(including)24 b(assertions.)39 b([Mey88)o(,)28 b(pages)f(475-488])d(There)k(is)f(also)f(an)g(Ei\013el)h(v)l(arian)n(t)e (called)127 888 y(Sather,)j(whic)n(h)e(sacri\014ces)h(some)h(of)e(the)i(soft) n(w)n(are)e(engineering)f(tec)n(hniques)i(in)f(order)h(to)g(create)h(a)f (more)127 1079 y(practical)d(language.)31 b([Omo91)o(])127 1544 y Fe(2.2.5)97 b Fd(Self)127 1865 y Fi(Self)27 b Fm(is)h(an)f(exp)r (erimen)n(tal)e(language)g(that)i(is)g(b)r(eing)f(dev)n(elop)r(ed)g(b)n(y)h (Sun)g(Microsystems)h(and)e(Stanford)127 2056 y(Univ)n(ersit)n(y)-6 b(.)50 b(It)32 b(is)f(unique)f(among)g(the)i(languages)d(listed)i(here)h(b)r (ecause)f(it)g(do)r(es)h(not)f(ha)n(v)n(e)f(classes)i(or)127 2247 y(v)l(ariables.)319 2603 y Fi(Self)25 b Fm(is)g(an)f(ob)t(ject-orien)n (ted)f(language)f(for)i(exploratory)f(programming)f(based)j(on)f(a)h(small) 319 2794 y(n)n(um)n(b)r(er)k(of)f(simple)g(and)f(concrete)i(ideas:)40 b(protot)n(yp)r(es,)29 b(slots,)h(and)d(b)r(eha)n(vior.)42 b(Protot)n(yp)r(es)319 2985 y(com)n(bine)29 b(inheritance)e(and)h(instan)n (tiation)e(to)i(pro)n(vide)g(a)h(framew)n(ork)e(that)i(is)g(simpler)g(and)319 3176 y(more)c(\015exible)f(than)f(most)i(ob)t(ject-orien)n(ted)e(languages.) 32 b(Slots)24 b(unite)g(v)l(ariables)e(and)i(pro)r(ce-)319 3368 y(dures)d(in)n(to)d(a)h(single)g(construct...)33 b(Finally)-6 b(,)18 b(b)r(ecause)i Fi(Self)g Fm(do)r(es)f(not)g(distinguish)f(state)h (from)319 3559 y(b)r(eha)n(vior,)30 b(it)f(narro)n(ws)f(the)i(gaps)f(b)r(et)n (w)n(een)g(ordinary)f(ob)t(jects,)j(pro)r(cedures,)g(and)e(closures.)319 3750 y([US87)o(])127 4105 y(Because)g(of)e(this,)j(and)d(due)i(to)f(the)h (rather)f(obtuse)h(syn)n(tax,)f Fi(Self)h Fm(has)f(neither)g(b)r(een)h (widely)e(used)i(nor)127 4297 y(its)c(ideas)g(utilized)f(in)h(man)n(y)f (other)h(languages.)1676 4521 y(15)p eop %%Page: 16 23 bop 127 933 a Fg(Chapter)57 b(3)127 1816 y Fl(Design)127 2368 y Fm(This)24 b(section)h(of)f(the)h(thesis)h(will)d(discuss)i(the)g(design)f (c)n(hanges)h(for)f(Python,)h(as)g(w)n(ell)f(as)h(their)f(rationale.)127 2559 y(The)f(c)n(hanges)g(include)f(the)h(elimination)d(of)i(the)h(need)h(to) f(pass)g Fh(self)p Fm(,)j(constructor)d(and)f(destructor)i(calls,)127 2750 y(data)g(protection)f(for)h(b)r(oth)g(v)l(ariables)e(and)i(metho)r(ds,)i (and)e(the)g(abilit)n(y)e(to)i(construct)h(classes)g(en)n(tirely)f(in)127 2941 y(C.)127 3471 y Ff(3.1)117 b(Incorp)s(oration)39 b(of)f Fc(self)i Ff(with)f(metho)s(d)e(calls)127 3818 y Fm(As)e(originally)30 b(designed,)36 b(Python)d(required)h(that)g Fh(self)i Fm(-)f(the)f(instance)g (ob)t(ject)g(-)g(b)r(e)h(accepted)f(as)h(a)127 4009 y(parameter)25 b(to)g(class)h(metho)r(ds.)34 b(F)-6 b(or)25 b(example:)1676 4521 y(16)p eop %%Page: 17 24 bop 450 70 a Fh(class)43 b(List:)774 166 y(def)e(add\(self,)j(item\):)1097 261 y(self.items.app)q(end)q(\(i)q(tem)q(\))450 453 y(x)d(=)g(List\(\))204 b(#)41 b(create)i(an)e(instance)j(of)d(class)i(List)450 548 y(x.add\(3\))286 b(#)41 b(this)h(command)i(or)450 644 y(List.add\(x,3\))86 b(#)41 b(this)h(one)g(do)f(the)h(same)g(thing)127 1055 y Fm(This)29 b(syn)n(tax)f(causes)j(man)n(y)d(problems.)47 b(First,)31 b(programmers)e (frequen)n(tly)f(forget)h(to)g(put)g Fh(self)j Fm(at)d(the)127 1246 y(b)r(eginning)22 b(of)j(a)g(parameter)g(tuple.)33 b(This)25 b(w)n(ould)e(only)g(generate)i(an)g(error)g(if)g Fh(self)i Fm(w)n(as)d(accessed)j(in)d(the)127 1437 y(metho)r(d.)33 b(Otherwise,)25 b(parameters)f(w)n(ould)d(hold)i(unexp)r(ected)g(v)l(alues;)h(for)f (instance,)h(if)f(the)h(metho)r(d)f(add)127 1628 y(w)n(as)i(de\014ned)g(as)h (ha)n(ving)d(one)i(parameter)g(named)g(item,)h(then)f(its)h(v)l(alue)d(when)i (called)f(w)n(ould)g(b)r(e)i(a)f(tuple)127 1820 y(with)i(t)n(w)n(o)f(v)l (alues;)j(the)f(\014rst)g(v)l(alue)e(w)n(ould)g(b)r(e)i(the)g(instance)f (\(i.e.)42 b Fh(self)p Fm(\))29 b(and)e(the)h(second)g(v)l(alue)e(w)n(ould) 127 2011 y(b)r(e)g(the)f(n)n(um)n(b)r(er)h(that)e(add)h(w)n(as)g(called)f (with.)127 2282 y(Besides)c(causing)f(programmer)g(error,)j(the)e(syn)n(tax)f (also)g(is)i(rather)f(a)n(wkw)n(ard;)f(most)i(other)f(OO)g(languages)127 2473 y(automatically)i(handle)j(setting)h(the)g(v)l(alue)f(of)g(the)i(curren) n(t)f(instance.)36 b(Finally)-6 b(,)24 b(the)j(reason)f(for)f(it)h(b)r(eing) 127 2664 y(there)c(w)n(as)f(simply)f(a)h(matter)h(of)e(con)n(v)n(enience)h (when)g(classes)h(w)n(ere)f(\014rst)h(implemen)n(ted.)32 b(Python)21 b(actually)127 2856 y(mo)r(di\014es)e(the)g(list)f(of)h(parameters)g(passed)g (to)g(a)g(metho)r(d,)h(putting)e(the)h(instance)g(ob)t(ject)f(at)h(the)g(b)r (eginning;)127 3047 y(when)24 b(the)g(user)i(t)n(yp)r(es)e(the)g(command)g Fh(x.add\(3\))p Fm(,)29 b(the)24 b(add)g(metho)r(d)g(actually)e(gets)i(a)g (parameter)g(list)g(of)127 3238 y Fh(\(x,3\).)37 b Fm(Th)n(us,)25 b Fh(self)i Fm(is)f(required)f(in)f(order)i(to)f(kno)n(w)f(what)g(the)i (curren)n(t)g(instance)e(is.)127 3509 y(The)36 b(prop)r(osed)g(design)f(w)n (ould)g(no)g(longer)g(require)i Fh(self)h Fm(in)d(the)i(list)e(of)h (parameters.)67 b(Instead,)39 b(the)127 3700 y(instance)30 b(w)n(ould)f(automatically)e(b)r(e)32 b(inserted)e(in)n(to)g(the)h(v)l (ariable)e(name)h(space)i(\(the)f(lo)r(cal)e(dictionary\))127 3891 y(whenev)n(er)18 b(the)h(metho)r(d)f(is)h(called.)30 b(This)18 b(w)n(ould)f(allo)n(w)f(for)i(the)g(follo)n(wing)c(syn)n(tax)k(when)g(a)g (class)h(is)f(de\014ned:)450 4318 y Fh(class)43 b(List:)1676 4521 y Fm(17)p eop %%Page: 18 25 bop 774 70 a Fh(def)41 b(add\(item\):)1097 166 y(self.items.app)q(end)q(\(i)q (tem)q(\))127 584 y Fm(Th)n(us,)26 b(lik)n(e)e(other)h(ob)t(ject-orien)n(ted) f(languages,)f(the)j(programmers)f(w)n(ould)f(not)h(ha)n(v)n(e)g(to)g (concern)g(them-)127 775 y(selv)n(es)h(with)e(acquiring)f(the)i(curren)n(t)h (instance)f(ob)t(ject.)127 1302 y Ff(3.2)117 b(Automatic)37 b(constructor)h(calls)127 1649 y Fm(The)25 b(previous)e(example)h (demonstrated)h(ho)n(w)e(classes)j(can)e(b)r(e)i(created)f(in)f(Python;)g (executing)g Fh(Class\(\))127 1841 y Fm(returns)32 b(an)f(instance)g(of)g(t)n (yp)r(e)g Fh(Class)p Fm(.)56 b(There)31 b(are)h(man)n(y)f(cases,)j(ho)n(w)n (ev)n(er,)f(when)e(the)h(user)g(w)n(an)n(ts)f(to)127 2032 y(initialize)16 b(certain)k(v)l(ariables)d(when)i(an)h(instance)f(is)g(created.)33 b(F)-6 b(or)20 b(example,)g(when)f(a)h(new)f(List)h(is)g(created,)127 2223 y(setting)27 b(the)i(size)f(of)f(the)i(list)e(to)h(zero)g(w)n(ould)e(b)r (e)j(necessary)-6 b(.)42 b(In)28 b(Python,)h(this)e(can)h(b)r(e)h(done)e(man) n(ually)-6 b(,)127 2414 y(b)n(y)25 b(de\014ning)f(an)h(initializatio)o(n)c (metho)r(d)k(and)f(calling)f(it.)450 2848 y Fh(class)43 b(List:)774 2944 y(def)e(init\(\):)1097 3039 y(self.size=0)450 3231 y(x)g(=)g(List\(\)) 124 b(#)40 b(create)j(an)e(instance)j(of)d(List)450 3326 y(x.init\(\))206 b(#)40 b(initialize)45 b(it)127 3744 y Fm(One)25 b(ob)n(vious)d(problem)i(is) h(that)f(the)g(initialization)c(metho)r(d)k(\(also)f(called)h(a)g (constructor\))g(migh)n(t)g(not)g(b)r(e)127 3936 y(called,)k(due)h(to)f (programmer)g(error.)43 b(This)28 b(w)n(ould)f(cause)h(the)h(program)e(to)h (fail)f(if)g(the)i(constructor)f(did)127 4127 y(something)d(critical)f(to)i (the)g(op)r(eration)f(of)g(the)h(instance,)g(suc)n(h)h(as)f(v)l(ariable)d (initialization)e(or)26 b(op)r(ening)f(a)127 4318 y(net)n(w)n(ork)f (connection.)1676 4521 y(18)p eop %%Page: 19 26 bop 127 70 a Fm(A)26 b(solution)f(that)h(most)g(ob)t(ject-orien)n(ted)f (languages,)g(including)e(C++)j(and)g(Smalltalk,)e(use)j(is)g(to)f(allo)n(w) 127 261 y(metho)r(ds)d(with)f(a)h(certain)f(name)h(\()p Fh(new)h Fm(in)f(the)g(case)h(of)e(Smalltalk,)f(or)i(the)g(name)g(of)f(the)h(class)g (in)g(the)g(case)127 453 y(of)d(C++\))g(to)g(b)r(e)h(called)e(automatically)e (when)j(an)g(instance)g(is)g(created.)33 b(Not)20 b(only)f(do)r(es)i(this)f (impro)n(v)n(e)f(the)127 644 y(c)n(hances)25 b(for)f(a)g(correct)i(program,)e (but)g(it)h(is)f(also)g(v)n(ery)g(space)h(e\016cien)n(t,)h(requiring)c(just)j (one)f(line)g(instead)127 835 y(of)h(t)n(w)n(o)f(to)h(create)h(an)f (instance.)127 1106 y(This)17 b(abilit)n(y)e(w)n(ould)h(b)r(e)j(extremely)e (useful)h(in)f(Python,)i(esp)r(ecially)d(as)i(there)h(is)f(no)f(w)n(a)n(y)g (to)h(de\014ne)f(v)l(ariables)127 1297 y(without)f(executing)i(co)r(de.)32 b(Th)n(us,)20 b(in)d(the)i(previous)e(example,)j(the)e(statemen)n(t)h Fh(x)40 b(=)h(List\(\))21 b Fm(w)n(ould)c(create)127 1489 y(an)26 b(instance)g(of)g(class)h Fh(List)p Fm(,)i(call)d(the)h Fh(init)h Fm(metho)r(d,)f(and)f(return)h(an)g(initialized)c(instance.)37 b(The)27 b(tuple)127 1680 y(follo)n(wing)21 b(the)26 b(class)f(name)g(could)f (b)r(e)i(used)g(as)g(a)f(parameter)g(list)g(to)g(call)f Fh(init)j Fm(with.)127 1951 y(Ho)n(w)n(ev)n(er,)38 b(since)f(man)n(y)f(Python)f (classes)i(already)e(ha)n(v)n(e)h(a)g(metho)r(d)g(called)f Fh(init)p Fm(,)41 b(giving)34 b(this)i(name)127 2142 y(constructor)d(status)g (w)n(ould)f(break)h(existing)e(co)r(de.)58 b(In)34 b(Python,)g(names)g (surrounded)f(b)n(y)f(t)n(w)n(o)h(under-)127 2333 y(scores)27 b(imply)e(sp)r(ecial)g(signi\014cance;)h(therefore,)g(the)h(name)f Fh(__init__)k Fm(w)n(as)25 b(c)n(hosen.)37 b(Finally)-6 b(,)24 b(note)i(that)127 2525 y(constructors)f(are)h(not)f(necessary;)h(if)f(the)g (metho)r(d)g(is)h(not)f(found,)f(it)h(is)g(not)g(called.)127 3054 y Ff(3.3)117 b(Automatic)37 b(destructor)i(calls)127 3401 y Fm(The)29 b(case)h(ma)n(y)e(also)h(b)r(e)g(made)g(that)g(an)f(automatic)g (destructor)h(-)g(that)g(is,)h(a)f(metho)r(d)g(whic)n(h)f(is)i(called)127 3592 y(up)r(on)25 b(deletion)f(of)h(an)h(instance)f(-)h(is)g(required.)35 b(In)26 b(man)n(y)f(compiled)f(languages,)g(an)h(instance)h(ma)n(y)f(wish)127 3783 y(to)30 b(free)g(resources,)j(suc)n(h)d(as)g(memory)-6 b(,)31 b(\014les,)g(or)f(screen)h(space,)h(when)d(it)h(is)g(destro)n(y)n(ed;) i(the)e(destructor)127 3975 y(pro)n(vides)24 b(a)h(con)n(v)n(enien)n(t)f(w)n (a)n(y)g(of)h(doing)e(this.)127 4246 y(In)h(Python,)f(this)h(is)g(not)f(as)h (m)n(uc)n(h)g(of)f(an)g(issue.)34 b(Eac)n(h)24 b(ob)t(ject)g(in)f(Python)g (has)h(a)f(reference)i(n)n(um)n(b)r(er;)g(this)1676 4521 y(19)p eop %%Page: 20 27 bop 127 70 a Fm(indicates)27 b(ho)n(w)h(man)n(y)g(ob)t(jects)g(curren)n(tly)g (ha)n(v)n(e)g(access)i(to)e(that)g(ob)t(ject.)44 b(When)28 b(an)g(ob)t(ject's)h(reference)127 261 y(coun)n(t)c(b)r(ecomes)h(zero,)g(it)f (is)g(destro)n(y)n(ed.)34 b(\(This)25 b(is)g(ho)n(w)f(an)h(instance)g(is)g (destro)n(y)n(ed)g(-)g(it's)h(coun)n(t)e(b)r(ecomes)127 453 y(zero.\))67 b(Ho)n(w)n(ev)n(er,)38 b(when)d(an)h(instance)f(is)h(destro)n(y) n(ed,)j(all)c(v)l(ariables)f(b)r(elonging)f(to)i(the)i(instance)e(are)127 644 y(destro)n(y)n(ed)25 b(as)g(w)n(ell;)g(th)n(us,)h(there)f(should)g(b)r(e) g(no)g(resources)i(to)e(free)h(up.)127 915 y(Ho)n(w)n(ev)n(er,)39 b(they)d(ma)n(y)g(still)f(b)r(e)i(useful,)i(particularly)34 b(for)i(our)g(researc)n(h;)43 b(when)37 b(a)f(graphical)e(ob)t(ject's)127 1106 y(reference)22 b(coun)n(t)e(go)r(es)i(to)e(zero,)j(it)e(could)f(disapp)r (ear.)32 b(Th)n(us,)22 b(the)f(metho)r(d)g Fh(__del__)p Fm(,)k(if)c(presen)n (t,)h(is)g(called)127 1297 y(whenev)n(er)j(an)g(instance's)g(reference)i (coun)n(t)d(b)r(ecomes)j(zero.)127 1826 y Ff(3.4)117 b(Protection)39 b(for)g(data)127 2174 y Fm(In)25 b(order)f(to)h(insure)g(that)f(programmers)g (use)i(the)f(pro)n(vided)e(abstractions)g(\(for)h(the)h(List)g(class,)h(the)f (add,)127 2365 y(delete,)e(and)e(sort)g(metho)r(ds\),)i(the)f(in)n(ternal)e (v)l(ariables)f(of)i(a)g(class)h(m)n(ust)g(ha)n(v)n(e)f(the)g(abilit)n(y)e (to)i(b)r(e)h(protected)127 2556 y(from)31 b(access)h(b)n(y)e(other)h(ob)t (jects.)52 b(Not)30 b(only)g(will)f(this)i(ensure)h(abstraction,)f(but)g(it)f (will)f(also)i(impro)n(v)n(e)127 2747 y(reliabilit)n(y)22 b([Seb89)o(,)k (page)e(323])h(.)127 3019 y(Languages)j(suc)n(h)i(as)g(C++)g(and)f(Ob)t (jectiv)n(e)g(C)h(allo)n(w)d(the)j(user)h(to)e(explicitly)e(declare)j(whic)n (h)e(data)h(are)127 3210 y(to)e(b)r(e)h(priv)l(ate)e(and)h(whic)n(h)g(are)g (to)h(b)r(e)g(public;)f(this)h(is)f(done)g(when)h(the)f(class)h(is)g (declared.)40 b(This)27 b(design)127 3401 y(prop)r(oses)e(a)h(similar)d (design)i(for)g(Python:)450 3852 y Fh(class)43 b(List:)774 3948 y(access)f(size,)h(items:)g(private)774 4043 y(def)e(add\(item\):)774 4139 y(\(et)g(cetera\))1676 4521 y Fm(20)p eop %%Page: 21 28 bop 127 70 a Fm(The)29 b Fh(access)k Fm(command)28 b(is)i(follo)n(w)n(ed)c(b) n(y)j(an)n(y)g(n)n(um)n(b)r(er)g(of)g(v)l(ariables)e(separated)j(b)n(y)f (commas;)j(this)d(list)127 261 y(is)i(then)g(follo)n(w)n(ed)d(b)n(y)j(a)f (colon)g(and)g(the)i(t)n(yp)r(e)f(of)f(protection)g(a)n(w)n(arded)f(to)i (those)g(v)l(ariables.)49 b(T)n(yp)r(es)31 b(of)127 453 y(protection)24 b(include:)127 808 y Fk(Public)40 b Fm(Accessible)25 b(to)g(all.)127 1063 y Fk(Guarded)39 b Fm(Accessible)25 b(to)g(an)n(y)g(metho)r(d)g(in)f(an)h (instance.)127 1317 y Fk(Priv)-5 b(ate)39 b Fm(Accessible)25 b(only)f(to)h(the)h(metho)r(ds)f(of)g(a)g(certain)g(class.)127 1673 y(In)k(addition,)f(read)h(and)f(write)h(attributes)f(can)h(b)r(e)g(giv)n (en.)44 b(These)30 b(can)f(b)r(e)g(com)n(bined)f(in)h(an)n(y)f(w)n(a)n(y)-6 b(.)44 b(An)127 1864 y(example:)450 2315 y Fh(class)f(List:)774 2411 y(access)f(size,)h(items:)g(private,)g(public)g(read)774 2506 y(access)f(foo:)g(public)774 2602 y(def)f(add\(item\):)935 2697 y(...)127 3133 y Fm(In)23 b(this)g(case,)h(the)f(v)l(ariables)e Fh(size)k Fm(and)e Fh(items)i Fm(can)e(b)r(e)g(read)g(b)n(y)g(an)n(y)f(ob)t (ject,)i(but)e(can)h(only)f(b)r(e)h(mo)r(di\014ed)127 3324 y(b)n(y)i(the)h(add)f(metho)r(d)g(de\014ned)g(in)g(class)h(List.)35 b(In)25 b(addition,)e(an)n(y)i(metho)r(d)g(de\014ned)g(in)g(a)h(sub)r(class)f (of)g(List)127 3515 y(will)e(not)h(b)r(e)h(able)f(to)g(mo)r(dify)f(those)i(t) n(w)n(o)f(v)l(ariables;)f(this)h(w)n(ould)f(b)r(e)i(p)r(ossible)f(if)g(the)g (v)l(ariables)f(had)h(b)r(een)127 3707 y(declared)h Fh(guarded)p Fm(.)1676 4521 y(21)p eop %%Page: 22 29 bop 127 70 a Ff(3.5)117 b(Protection)39 b(for)g(metho)s(ds)127 418 y Fm(In)17 b(addition,)f(man)n(y)g(OO)h(languages)d(allo)n(w)g (protection)i(for)g(metho)r(ds)h(as)g(w)n(ell.)30 b(It)17 b(is)g(o)r (ccasionally)c(desirable)127 609 y(that)31 b(a)h(certain)f(metho)r(d)g(not)h (b)r(e)g(used)g(as)g(an)f(abstraction,)h(esp)r(ecially)e(if)h(unauthorized)f (or)i(incorrect)127 800 y(usage)25 b(of)f(the)h(metho)r(d)g(in)f(question)g (w)n(ould)f(cause)j(failure)d(of)h(the)h(program.)33 b(As)26 b(the)f(original)d(v)n(ersion)i(of)127 991 y(Python)h(do)r(es)g(not)g(supp)r (ort)g(the)h(abilit)n(y)c(to)j(protect)g(metho)r(ds,)h(this)f(design)g(prop)r (oses)g(them.)127 1262 y(When)h(de\014ning)e(a)i(class,)g(a)f(group)g(of)g (metho)r(ds)h(w)n(ould)e(b)r(e)i(de\014ned)f(as)h(public)f(or)g(priv)l(ate)g (b)n(y)g(b)r(eginning)127 1454 y(the)g(blo)r(c)n(k)f(with)g Fh(public:)37 b Fm(or)24 b Fh(private:)p Fm(,)29 b(in)c(order)g(to)f (indicate)g(the)h(protection)e(alloted)g(to)i(that)f(blo)r(c)n(k.)127 1645 y(The)f(blo)r(c)n(k)e(w)n(ould)g(b)r(e)i(terminated)f(b)n(y)h(either)f (the)h(termination)e(of)h(the)h(class)g(de\014nition)d(or)j(the)g(presence) 127 1836 y(of)i(another)f(blo)r(c)n(k.)33 b(Public)25 b(is)g(the)h(default)d (protection,)i(for)f(reasons)i(of)f(bac)n(kw)n(ards)e(compatibilit)n(y)-6 b(.)450 2287 y Fh(class)43 b(List:)774 2383 y(def)e(add\(item\):)976 2478 y(...)774 2574 y(def)g(delete\(item\):)976 2670 y(...)450 2765 y(private:)774 2861 y(def)g(list-access-on)q(ly)q(\(\))q(:)976 2956 y(...)127 3392 y Fm(In)23 b(this)f(particular)f(case,)k(while)c(an)n(y)h (ob)t(ject)h(could)e(call)h(the)h(metho)r(ds)g Fh(add)h Fm(and)f Fh(delete)p Fm(,)j(only)c(the)h(three)127 3583 y(metho)r(ds)i(of)g(class)h Fh(List)h Fm(can)e(execute)h(the)f(metho)r(d)g Fh(list-access-o)q(nl)q(y)p Fm(.)1676 4521 y(22)p eop %%Page: 23 30 bop 127 70 a Ff(3.6)117 b(Class)39 b(construction)f(in)h(C)127 418 y Fm(The)31 b(last)g(planned)f(design)g(c)n(hange)h(is)g(to)g(add)g(the)g (abilit)n(y)e(to)i(construct)g(classes)h(in)f(C.)g(Curren)n(tly)-6 b(,)32 b(in)127 609 y(order)26 b(to)f(create)i(a)e(class)h(whic)n(h)f(can)g (supp)r(ort)h(instances)g(and)f(sub)r(classing,)g(the)h(class)g(m)n(ust)g(b)r (e)g(written)127 800 y(en)n(tirely)d(in)g(Python.)33 b(While)23 b(this)g(is)h(the)g(most)g(common)g(usage,)g(it)f(limits)g(the)h (extensibilit)n(y)d(of)i(Python.)127 1071 y(The)f(researc)n(h)h(here,)h(for)e (instance,)h(consists)g(of)e(man)n(y)h(prepac)n(k)l(aged)e(classes;)25 b(while)c(they)h(could)f(b)r(e)i(writ-)127 1262 y(ten)18 b(in)f(Python,)i(it) e(w)n(ould)f(b)r(e)i(m)n(uc)n(h)g(more)g(e\016cien)n(t)g(to)f(co)r(de)h(them) g(in)f(C,)h(since)g(C)g(is)g(a)f(compiled)g(language.)127 1454 y(Since)i(Python)f(is)h(written)g(in)f(C,)i(including)c(the)j(p)r(ortions)f (that)h(de\014ne)g(classes,)i(the)f(mo)r(di\014cations)c(should)127 1645 y(b)r(e)26 b(rather)f(straigh)n(tforw)n(ard.)1676 4521 y(23)p eop %%Page: 24 31 bop 127 933 a Fg(Chapter)57 b(4)127 1816 y Fl(Impl)o(em)-5 b(en)f(tation)62 b(and)k(T)-17 b(esting)127 2510 y Ff(4.1)117 b(Implemen)m(tation)127 2857 y Fm(The)26 b(implemen)n(tation)d(of)i(the)h(en) n(tire)f(pro)t(ject)h(b)r(egan)f(in)g(July)g(1992.)34 b(Most)25 b(of)g(the)h(co)r(ding)f(w)n(as)g(\014nished)127 3048 y(b)n(y)20 b(Decem)n(b)r(er,)j(with)d(some)h(main)n(tenance)e(taking)f(place)i(in)h(the) f(early)g(mon)n(ths)g(of)g(1993.)31 b(Although)18 b(m)n(uc)n(h)127 3240 y(co)r(de)25 b(w)n(as)g(mo)r(di\014ed,)g(most)h(of)e(the)i(c)n(hanges)f (w)n(ere)g(restricted)h(to)f(a)g(few)g(relev)l(an)n(t)f(mo)r(dules.)127 3704 y Fe(4.1.1)97 b(Incorp)s(oration)32 b(of)g Fb(self)h Fe(with)f(metho)s (d)c(calls)127 4025 y Fm(The)23 b(implemen)n(tation)d(b)r(egan)i(on)g(July)g (2nd,)h(1992,)f(and)g(w)n(as)h(\014nished)f(the)h(next)g(da)n(y)-6 b(.)32 b(The)23 b(only)e(mo)r(dule)127 4216 y(a\013ected)28 b(w)n(as)f Fh(ceval.c)p Fm(,)k(the)d(in)n(terpreter.)41 b(The)28 b(mo)r(di\014ed)e(function)g(w)n(as)h Fh(call_function)p Fm(,)34 b(whic)n(h)27 b(w)n(as)1676 4521 y(24)p eop %%Page: 25 32 bop 127 70 a Fm(executed)26 b(when)f(a)g(function)e(or)i(metho)r(d)h(written) e(in)h(Python)g(w)n(as)f(called.)127 341 y(In)30 b(previous)f(v)n(ersions)g (of)g(Python,)i(if)e(the)h(Python)f(function)f(w)n(as)i(actually)d(an)j (instance)f(metho)r(d,)i(the)127 533 y(instance)21 b(w)n(as)h(put)f(at)g(the) h(b)r(eginning)e(of)h(the)h(tuple)f(passed)h(to)f(that)g(metho)r(d.)33 b(This)21 b(w)n(as)h(the)g(reason)f(wh)n(y)127 724 y Fh(self)27 b Fm(w)n(as)e(required)g(in)g(the)g(de\014ned)h(parameter)f(list)f(of)h(a)g (metho)r(d.)127 995 y(This)d(particular)e(piece)j(of)f(co)r(de)g(w)n(as)g (deleted.)33 b(Instead,)23 b(the)g(creation)e(of)h(a)g(lo)r(cal)f(dictionary) f(w)n(as)i(mo)n(v)n(ed)127 1186 y(to)i(the)h(b)r(eginning)d(of)i(the)g (function,)g(and)f(the)i(instance)f(ob)t(ject)g(w)n(as)g(inserted)h(in)n(to)e (the)i(lo)r(cal)e(dictionary)127 1377 y(under)i(the)g(name)g Fh(self)p Fm(.)36 b(This)25 b(sim)n(ulates)f(the)h(old)f(metho)r(d,)i(but)f (do)r(es)g(not)f(require)h(that)g(self)g(b)r(e)g(placed)127 1569 y(in)n(to)f(the)i(tuple)e(in)h Fh(call_function)31 b Fm(and)25 b(remo)n(v)n(ed)g(in)g(the)g(metho)r(d.)127 1840 y(Main)n(tenance)31 b(to)r(ok)h(place)h(on)f(August)h(13,)h(when)f(it)g(w)n(as)g(disco)n(v)n (ered)f(that)g(the)i(previous)e(syn)n(tax)g(for)127 2031 y(calling)25 b(a)j(class)f(metho)r(d)h(with)f(the)g(curren)n(t)i(instance)e(failed.)39 b(Mo)r(di\014cations)25 b(w)n(ere)j(made)f(to)h(the)g(same)127 2222 y(function,)23 b(allo)n(wing)e(it)k(to)f(use)h(the)g(curren)n(t)h(v)l (alue)d(of)h Fh(self)p Fm(,)j(acquired)d(from)g(the)h(lo)r(cal)e(dictionary) -6 b(,)22 b(to)j(b)r(e)127 2413 y(passed)h(to)f(the)g(class)h(metho)r(d.)127 2878 y Fe(4.1.2)97 b(Automatic)29 b(constructor)j(calls)127 3199 y Fm(The)26 b(implemen)n(tation)d(of)j(constructors)g(w)n(as)g(done)f (on)h(July)f(3,)h(1992.)35 b(The)26 b(mo)r(dules)g(a\013ected)g(included)127 3390 y Fh(ceval.c)41 b Fm(and)c Fh(classobject.c)p Fm(,)47 b(whic)n(h)37 b(handle)f(all)h(class-related)f(functionalit)n(y)-6 b(.)67 b(The)38 b(header)g(\014le)127 3581 y Fh(classobject.h)d Fm(w)n(as)29 b(also)f(c)n(hanged)g(in)h(order)g(to)g(allo)n(w)e(a)i(new)h (parameter)f(to)g Fh(newinstanceobje)q(ct)q Fm(,)127 3772 y(the)d(function)d (whic)n(h)h(creates)i(instances)g(of)e(a)h(particular)f(class.)127 4044 y(In)29 b(the)g(function)e Fh(call_builtin)34 b Fm(lo)r(caled)28 b(in)g Fh(ceval.c)p Fm(,)34 b(the)29 b(parameter)g(tuple)f(w)n(as)g(ignored)g (if)g(a)h(clas-)127 4235 y(sob)t(ject)34 b(w)n(as)g(b)r(eing)f(called.)60 b(This)33 b(w)n(as)h(c)n(hanged)f(to)h(allo)n(w)e(the)i(tuple)g(to)g(b)r(e)g (passed.)61 b(This)34 b(allo)n(w)n(ed)1676 4521 y(25)p eop %%Page: 26 33 bop 127 70 a Fm(constructor)25 b(calls)g(to)g(ha)n(v)n(e)f(parameters.)35 b(The)25 b(tuple)f(w)n(as)h(then)h(passed)f(to)g Fh(newinstanceob)q(je)q(ct)p Fm(.)127 341 y(In)19 b Fh(classobject.c)p Fm(,)26 b(the)20 b(function)d Fh(newinstanceobj)q(ec)q(t)24 b Fm(w)n(as)19 b(mo)r(di\014ed)f (to)h(allo)n(w)e(the)i(additional)c(argu-)127 533 y(men)n(t.)33 b(If)21 b(a)g(tuple)g(w)n(as)g(passed)g(in)g(the)g(argumen)n(t)g(list,)g(and) g(the)g(class)h(in)e(question)h(de\014ned)g(a)g(constructor)127 724 y(function)g(\(a)i(function)e(called)h Fh(__init__)p Fm(\),)27 b(then)c(the)h(constructor)e(w)n(ould)g(b)r(e)h(called)f(with)g(the)h (argumen)n(t)127 915 y(list.)62 b(If)34 b(there)h(w)n(as)f(an)g(argumen)n(t)g (list)g(but)h(no)f(constructor,)j(an)d(error)h(w)n(as)f(returned,)k (indicating)32 b(a)127 1106 y(malfunction.)47 b(Also,)31 b(a)f(n)n(um)n(b)r (er)g(of)g(small)f(c)n(hanges)h(w)n(ere)h(made)f(to)g(a)n(v)n(oid)e(w)n (arnings)h(when)h(compiling)127 1297 y(the)c(co)r(de.)127 1569 y(A)58 b(\014x)g(w)n(as)g(implemen)n(ted)f(on)g(Octob)r(er)i(5,)66 b(1992,)f(to)58 b(insure)g(that)f(the)i(v)l(alue)d(returned)j(b)n(y)127 1760 y Fh(newinstanceobj)q(ec)q(t)31 b Fm(w)n(as)25 b(not)f(a)i Fh(NULL)h Fm(v)l(alue.)33 b(A)25 b Fh(NULL)i Fm(return)f(v)l(alue)e (indicates)g(a)h(malfunction.)127 2224 y Fe(4.1.3)97 b(Automatic)29 b(destructor)j(calls)127 2545 y Fm(Destructors)37 b(w)n(ere)h(implemen)n(ted) d(on)i(No)n(v)n(em)n(b)r(er)f(14,)j(1992;)j(the)37 b(mo)r(di\014cations)d(w)n (ere)j(made)g(in)f(the)127 2736 y(\014le)d Fh(classobject.c)39 b Fm(to)33 b(the)h(function)d Fh(instance_deal)q(lo)q(c)p Fm(.)64 b(This)33 b(particular)e(function)h(w)n(as)h(called)127 2928 y(whenev)n(er)25 b(an)g(instance)g(w)n(as)g(to)g(b)r(e)g(deleted.)127 3199 y(Instead)i(of)f(simply)h(releasing)f(the)h(memory)g(o)r(ccupied)g(b)n (y)g(the)g(instance,)h(testing)e(w)n(as)h(done)g(to)g(see)h(if)f(a)127 3390 y(destructor)f(\()p Fh(__del__)p Fm(\))i(metho)r(d)d(w)n(as)g (de\014ned.)34 b(If)25 b(so,)h(then)f(it)g(w)n(as)g(called,)g(then)g(memory)g (w)n(as)g(freed.)127 3661 y(One)33 b(problem)g(w)n(as)g(that,)i(in)e(the)g (destructor)h(metho)r(d,)i(an)c(ob)t(ject)i(could)e(create)i(a)f(reference)h (to)f(the)127 3852 y(instance;)e(if)d(an)h(access)i(to)d(that)h(instance)g(o) r(ccured)g(after)g(deallo)r(cation,)e(a)i(malfunction)d(w)n(ould)i(o)r(ccur.) 127 4044 y(Precautions)d(w)n(ere)h(tak)n(en)f(to)g(insure)h(that)f(an)g(ob)t (ject)g(w)n(ould)f(not)h(b)r(e)h(freed)g(from)f(memory)h(if)f(references)127 4235 y(to)30 b(it)h(w)n(ere)f(created;)k(if)c(the)h(reference)g(coun)n(t)f(w) n(as)h(ab)r(o)n(v)n(e)e(zero,)k(meaning)c(a)h(new)g(reference)i(had)e(b)r (een)1676 4521 y(26)p eop %%Page: 27 34 bop 127 70 a Fm(created,)26 b(then)f(the)h(ob)t(ject)f(w)n(as)g(not)g (deleted.)127 535 y Fe(4.1.4)97 b(Protection)32 b(for)g(metho)s(ds)127 856 y Fm(Implemen)n(tation)17 b(of)h(protection)g(for)g(metho)r(ds)h(b)r (egan)f(in)h(Octob)r(er)g(1992)e(and)i(w)n(as)f(completed)h(in)f(Jan)n(uary) 127 1047 y(1993.)33 b(Three)25 b(mo)r(dules)g(w)n(ere)h(a\013ected)f(b)n(y)g (the)h(c)n(hanges:)33 b Fh(compile.c)p Fm(,)d(whic)n(h)24 b(transforms)h (Python)g(pro-)127 1238 y(grams)c(in)n(to)e(a)i(b)n(yte)g(co)r(de;)h Fh(ceval.c)p Fm(,)k(a)20 b(mo)r(dule)g(whic)n(h)g(executes)i(said)e(b)n(yte)g (co)r(de;)j(and)d Fh(classobject.c)q Fm(.)127 1429 y(The)25 b(Python)g(grammar)g(\014le,)g Fh(Grammar)p Fm(,)k(also)24 b(had)h(to)g(b)r(e)h(c)n(hanged)e(to)h(allo)n(w)e(for)i(new)g(syn)n(tax.)127 1700 y(In)53 b(\014le)h Fh(compile.c)p Fm(,)65 b(the)53 b(function)f Fh(com_classdef)59 b Fm(w)n(as)53 b(mo)r(di\014ed)g(to)g(initialize)d(a)k (list)f(called)127 1892 y Fh(privatemethods)q Fm(.)37 b(The)18 b(in)n(ten)n(t)g(of)f(this)h(list)g(w)n(as)g(to)g(con)n(tain)f(the)h(names)h (of)f(all)f(de\014ned)h(priv)l(ate)f(metho)r(ds.)127 2083 y(A)n(t)26 b(the)g(same)g(time,)h(a)f(new)f(function,)g Fh(com_classmetho)q(ds)q Fm(,)31 b(w)n(as)26 b(de\014ned.)36 b(This)25 b(w)n(as)h(called)f(when)g(the) 127 2274 y(user)f(had)e(de\014ned)g(a)h(blo)r(c)n(k)e(of)h(classmetho)r(ds;)i (the)f(blo)r(c)n(k)f(could)f(either)i(b)r(e)g(lab)r(eled)f Fh(public)j Fm(or)e Fh(private)p Fm(.)127 2465 y(If)i(priv)l(ate,)f(all)g(of) h(the)g(function)f(names)h(w)n(ould)f(b)r(e)i(added)e(to)h(the)h(list)f Fh(privatemethods)p Fm(.)127 2736 y(The)20 b(function)f Fh(build_class)25 b Fm(w)n(as)20 b(c)n(hanged)g(in)g(the)g(\014le)h Fh(ceval.c)p Fm(.)35 b(All)20 b(priv)l(ate)f(functions)g(w)n(ere)i(remo)n(v)n(ed)127 2928 y(from)j(the)g(dictionary)d(of)i(metho)r(ds)h(passed)g(to)g Fh(build_class)p Fm(,)29 b(and)24 b(w)n(ere)g(inserted)g(in)f(their)h(o)n(wn) f(priv)l(ate)127 3119 y(dictionary)-6 b(.)50 b(The)31 b(dictionary)e(w)n(as)i (then)g(passed)h(as)g(an)f(additional)c(parameter)32 b(to)f Fh(newclassobject)q Fm(,)127 3310 y(de\014ned)20 b(in)h Fh(classobject.c)p Fm(.)38 b(The)21 b(priv)l(ate)e(metho)r(d)h(dictionary)e(w)n(as)j(then)f (inserted)h(in)n(to)f(the)h(class)f(data)127 3501 y(structure.)127 3772 y(The)29 b(function)e Fh(class_getattr)35 b Fm(w)n(as)28 b(also)g(mo)r(di\014ed)g(to)h(c)n(hec)n(k)g(the)h(dictionaries)c(for)j(b)r (oth)f(public)g(and)127 3964 y(priv)l(ate)33 b(metho)r(ds.)64 b(If)34 b(the)h(metho)r(d)g(w)n(as)f(found)g(in)g(the)h(priv)l(ate)f (dictionary)-6 b(,)35 b(and)f(the)h(curren)n(t)g(class)127 4155 y(w)n(as)29 b(the)g(same)g(as)g(the)g(class)g(in)g(whic)n(h)e(the)j (priv)l(ate)d(metho)r(d)i(w)n(as)f(de\014ned,)i(then)f(access)h(w)n(as)f (allo)n(w)n(ed;)1676 4521 y(27)p eop %%Page: 28 35 bop 127 70 a Fm(otherwise,)24 b(an)f(access)i(error)f(w)n(as)f(generated.)33 b(A)24 b(b)r(oundfunc)d(ob)t(ject)j(is)f(then)h(returned,)g(whic)n(h)f(con)n (tains)127 261 y(b)r(oth)i(the)g(function)f(and)g(the)i(class)f(to)g(whic)n (h)f(it)h(b)r(elongs.)33 b(Supp)r(ort)25 b(for)f(this)h(w)n(as)g(added)g(in)n (to)f Fh(ceval.c)p Fm(.)127 533 y(A)i(supplemen)n(tary)e(function)g(to)h (allo)n(w)e(protection)h(w)n(as)h(the)h(implemen)n(tation)d(of)i(the)h Fh(get_class)j Fm(func-)127 724 y(tion)35 b(in)f Fj(\177)-20 b Fm(cev)l(al.c.)68 b(This)36 b(w)n(orks)f(b)n(y)h(amending)f(the)i(curren)n (t)f(Python)g(frame)g(to)g(include)f(the)i(curren)n(t)127 915 y(class,)27 b(as)g(w)n(ell)e(as)i(the)g(curren)n(t)f(function)f(and)h(the)h (lo)r(cal)d(and)i(global)e(dictionaries.)36 b(Th)n(us,)26 b(the)h(function) 127 1106 y Fh(eval_code)e Fm(is)d(passed)g(an)f(additional)c(parameter,)23 b(called)d Fh(class)p Fm(.)35 b(This)21 b(is)h(returned)f(when)h(the)f (function)127 1297 y Fh(get_class)31 b Fm(is)26 b(called.)37 b(Also,)27 b(a)f(new)h(t)n(yp)r(e)f(of)g(error,)i Fh(AccessError)p Fm(,)k(w)n(as)26 b(in)n(tro)r(duced)f(to)i(indicate)e(that)127 1489 y(an)c(ob)t(ject)h(could)e(not)h(b)r(e)i(accessed)f(b)r(ecause)h(of)e (its)g(protection.)32 b(Changes)21 b(w)n(ere)h(made)f(to)h Fh(errors.h)j Fm(and)127 1680 y Fh(bltinmdule.c)p Fm(.)127 2144 y Fe(4.1.5)97 b(Protection)32 b(for)g(data)127 2465 y Fm(A)23 b(preliminary)e(design)h(w)n(as)h(written)g(in)f(August)h(of)f(1992,) g(with)g(the)i(\014nal)e(v)n(ersion)g(completed)g(in)h(Marc)n(h)127 2656 y(1993.)40 b(Mo)r(dules)27 b(c)n(hanged)g(include)g Fh(ceval.c)p Fm(,)32 b Fh(compile.c)p Fm(,)h(and)27 b Fh(classobject.c)q Fm(.)47 b(Also,)28 b(some)h(of)e(the)127 2848 y(header)e(\014les)h(w)n(ere)g (c)n(hanged)e(to)i(allo)n(w)d(for)i(di\013eren)n(t)g(function)f(parameters,)i (and)f(the)h(grammar)e(\014le)i(w)n(as)127 3039 y(c)n(hanged)e(to)h(allo)n(w) e(for)i(the)g Fh(access)k Fm(command.)127 3310 y(The)22 b(implemen)n(tation)e (w)n(as)i(similar)f(to)i(that)f(of)g(metho)r(d)g(protection.)32 b(A)23 b(dictionary)d(called)h Fh(accessinfo)127 3501 y Fm(w)n(as)27 b(created;)i(whenev)n(er)e(an)g(access)i(command)d(w)n(as)h(pro)r(cessed)h (in)f Fh(com_access_st)q(mt)33 b Fm(in)27 b Fh(compile.c)p Fm(,)127 3692 y(v)l(ariables)18 b(with)h(the)h(appropriate)e(access)j(righ)n (ts)e(w)n(ere)h(inserted)g(in)n(to)f(the)h(dictionary)-6 b(.)30 b(The)20 b Fh(build_class)127 3884 y Fm(function)j(then)j(passed)f(this)g (information)e(to)i(the)g Fh(newclassobjec)q(t)31 b Fm(function.)127 4155 y(Whenev)n(er)23 b(a)f(new)h(instance)f(w)n(as)g(created,)i(the)f (instance)f(dictionary)e Fh(in_attr)26 b Fm(w)n(as)d(created)f(b)n(y)h(tra)n (v)n(ers-)1676 4521 y(28)p eop %%Page: 29 36 bop 127 70 a Fm(ing)31 b(the)i(class)f(heirarc)n(h)n(y)-6 b(,)33 b(via)f(the)g(function)f Fh(createaccessdic)q(t)p Fm(.)61 b(The)32 b(default)f(v)l(alue)g(w)n(as)h Fh(None)p Fm(,)37 b(a)127 261 y(sp)r(ecial)25 b(v)l(alue)e(in)i(Python.)127 533 y(Tw)n(o)d(additional)e (functions)i(had)h(to)g(b)r(e)h(mo)r(di\014ed;)g Fh(instance_getat)q(tr)29 b Fm(and)23 b Fh(instance_setat)q(tr)q Fm(.)39 b(Be-)127 724 y(cause)25 b(of)f(the)g(c)n(hanges,)h(a)f(lo)r(okup)e(on)i(the)h(attribute)e (dictionary)f(no)i(longer)g(returned)g(the)h(v)l(ariable,)e(but)127 915 y(instead)30 b(an)h(accessob)t(ject,)j(whic)n(h)c(con)n(tains)f(the)j(v)l (ariable,)e(the)i(access,)i(and)c(the)i(class)f(in)g(whic)n(h)f(that)127 1106 y(v)l(ariable)h(w)n(as)j(de\014ned.)59 b(Pro)r(cedures)35 b(called)e Fh(read_access_all)q(ow)q(ed)40 b Fm(and)33 b Fh(write_access_a)q (llo)q(we)q(d)127 1297 y Fm(w)n(ere)26 b(written)g(to)f(determine)h(if)g(a)f (giv)n(en)g(v)l(ariable)f(could)g(b)r(e)j(accessed)g(at)f(that)f(time.)36 b(The)26 b(\014rst)h(returns)127 1489 y(the)f(ob)t(ject)f(if)f(accessible)h (or)h(a)f Fh(NULL)i Fm(if)e(not;)g(the)g(second)h(returns)g(1)f(if)g (accessible)g(or)g(0)g(if)g(not.)127 1953 y Fe(4.1.6)97 b(Class)32 b(construction)h(in)f(C)127 2274 y Fm(The)23 b(implemen)n(tation)d(w)n(as)i (\014nished)h(on)f(Septem)n(b)r(er)i(5,)f(1992.)32 b(Tw)n(o)22 b(\014les)h(w)n(ere)g(mo)r(di\014ed:)32 b Fh(ceval.c)26 b Fm(and)127 2465 y Fh(classobject.c)p Fm(,)31 b(in)25 b(addition)e(to)i(the)g(header)h (\014le)f Fh(classobject.h)p Fm(.)127 2736 y(The)e(mo)r(di\014cation)e (consisted)i(of)g(adding)e(a)i(new)h(ob)t(ject)f(called)f(an)h Fh(instancebuilti)q(nob)q(je)q(ct)p Fm(.)39 b(Similar)127 2928 y(to)25 b(an)g Fh(instancemetho)q(dob)q(je)q(ct)p Fm(,)32 b(it)25 b(handles)f(the)i(case)g(in)f(whic)n(h)f(a)i(metho)r(d)f(is)h(a)f(C)g (function,)f(whereas)127 3119 y(the)32 b(instancemetho)r(d)g(only)e(accepts)j (Python)f(metho)r(ds.)55 b(First,)34 b(acceptance)e(for)g(that)g(particular)e (ob-)127 3310 y(ject)i(w)n(as)g(inserted)g(in)n(to)e(the)j Fh(call_builtin)k Fm(function)30 b(in)h Fh(ceval.c)p Fm(.)57 b(Then,)34 b(c)n(hanges)d(w)n(ere)i(made)f(to)127 3501 y Fh(classobject.c)p Fm(;)46 b(these)36 b(include)f(de\014ning)e(the)j Fh(instancebuilti)q(nob)q (je)q(ct)41 b Fm(and)35 b(returning)f(one)h(if)g(a)127 3692 y(class)25 b(metho)r(d)h(is)f(found)f(to)h(b)r(e)h(a)f(C)g(function.)127 3964 y(A)36 b(minor)f(\014x)g(w)n(as)h(implemen)n(ted)e(on)i(Octob)r(er)g (12,)i(to)d(allo)n(w)e(for)j(the)f(passing)g(of)g Fh(self)j Fm(as)e(the)g(\014rst)127 4155 y(parameter)20 b(to)g(a)g(C)g(function,)f(the) h(other)g(parameter)g(b)r(eing)f(the)i(argumen)n(t)e(list.)32 b(This)19 b(w)n(as)h(accomplished)1676 4521 y(29)p eop %%Page: 30 37 bop 127 70 a Fm(in)25 b Fh(call_builtin)p Fm(.)127 599 y Ff(4.2)117 b(T)-10 b(esting)127 947 y Fm(This)18 b(section)g(do)r(cumen)n(ts)h(some)g (of)f(the)h(testing)f(of)g(the)h(c)n(hanges)f(made)h(to)f(the)h(Python)f (language.)30 b(Not)18 b(all)127 1138 y(tests)28 b(are)e(included)f(in)h (this)g(rep)r(ort;)i(extensiv)n(e)e(testing)f(to)r(ok)h(place)g(during)f (implemen)n(tation.)34 b(Instead,)127 1329 y(tests)26 b(w)n(ere)g(selected)g (in)f(order)g(to)g(sho)n(w)g(a)g(correct)h(basic)f(implemen)n(tation.)127 1600 y(In)30 b(this)g(section,)i(results)f(directly)e(from)h(the)h(Python)f (in)n(terpreter)g(ha)n(v)n(e)g(b)r(een)g(inserted)h(in)n(to)e(the)i(do)r(c-) 127 1792 y(umen)n(t.)46 b(While)29 b(the)h(author)e(do)r(es)i(not)f(wish)f (to)i(do)r(cumen)n(t)f(the)g(en)n(tire)g(language)e(in)i(this)g(rep)r(ort,)i (it)e(is)127 1983 y(helpful)e(to)i(kno)n(w)f(that)h(a)g(line)f(b)r(eginning)e (with)j(the)g(three)h(c)n(haracters)f Fh(>>>)i Fm(mean)e(the)g(b)r(eginning)e (of)i(a)127 2174 y(blo)r(c)n(k,)c(while)g(the)h(prompt)f Fh(...)37 b Fm(implies)25 b(con)n(tin)n(uation)d(of)j(an)g(ab)r(o)n(v)n(e)g(blo)r(c)n (k.)34 b(This)25 b(is)h(an)g(artifact)e(of)h(the)127 2365 y(Python)g(in)n (terpreter,)g(rather)h(than)e(an)h(asp)r(ect)h(of)f(the)g(language)e(itself.) 127 2636 y(Finally)-6 b(,)38 b(note)f(that)f(all)g(c)n(hanges)h(except)g(the) h(protection)d(c)n(hanges)i(and)g(the)g(destructor)h(ha)n(v)n(e)e(b)r(een)127 2827 y(incorp)r(orated)21 b(in)n(to)h(the)i(Alice)e(system,)j(whic)n(h)d(is)h (b)r(eing)f(used)i(b)n(y)f(a)g(large)f(subset)i(of)e(the)i(User)g(In)n (terfaces)127 3019 y(group.)32 b(F)-6 b(ew)23 b(problems)f(ha)n(v)n(e)g(b)r (een)h(encoun)n(tered,)h(and)e(all)f(of)h(those)h(errors)h(w)n(ere)f (corrected)g(early)f(in)g(the)127 3210 y(b)r(eta-testing)i(pro)r(cess.)127 3674 y Fe(4.2.1)97 b(Incorp)s(oration)32 b(of)g Fb(self)h Fe(with)f(metho)s (d)c(calls)127 3995 y Fm(In)f(order)g(to)f(test)i(the)f(functionalit)n(y)c (of)j(this)g(mo)r(di\014cation,)f(sev)n(eral)i(tests)h(w)n(ere)f(used.)39 b(The)27 b(initial)d(test)127 4187 y(consisted)h(of)g(a)g(simple)g(call)f(to) h(a)g(class)h(with)e(the)h(new)h(metho)r(d,)f(one)g(whic)n(h)f(w)n(as)h (successful.)1676 4521 y(30)p eop %%Page: 31 38 bop 127 70 a Fh(>>>)42 b(class)g(myclass:)127 166 y(...)203 b(def)42 b(set\(x\):)127 261 y(...)527 b(self.x=x)127 357 y(...)203 b(def)42 b(get\(\):)127 453 y(...)527 b(return)42 b(self.x)127 548 y(...)127 644 y(>>>)g(inst=myclass\(\))127 739 y(>>>)g(inst.set\(10\))127 835 y(>>>)g(inst.get\(\))127 931 y(10)127 1333 y Fm(The)29 b(next)h(test)g(w)n(as)f(to)g(insure)g(that)g(a)g(class)h(metho)r(d)f(could)g (b)r(e)g(called)g(within)e(another)i(class.)46 b(T)-6 b(o)29 b(do)127 1524 y(this,)c(a)h(sub)r(class)f(w)n(as)g(created)h(whic)n(h)e (called)g(its)h(paren)n(t)g(class.)127 1942 y Fh(>>>)42 b(class)g (baseclass\(mycl)q(as)q(s\):)127 2037 y(...)203 b(def)42 b(set\(x\):)127 2133 y(...)527 b(print)42 b('setting)i(to)d(',x)127 2228 y(...)527 b(myclass.set\(x\))127 2324 y(...)203 b(def)42 b(get\(\):)127 2420 y(...)527 b(x=myclass.get\(\))127 2515 y(...)g(print)42 b('got)g(',x)127 2611 y(...)127 2706 y(>>>)g(inst=baseclass\()q(\))127 2802 y(>>>)g(inst.set\(5\))127 2898 y(setting)h(to)82 b(5)127 2993 y(>>>)42 b(inst.get\(\))127 3089 y(got)82 b(5)127 3600 y Fe(4.2.2)97 b(Automatic)29 b(constructor)j(calls)127 3921 y Fm(The)23 b(sole)g(test)h(w)n(as)f(to)g(create)h(a)f(class)h(with)e(a)h (constructor,)h(call)e(it,)i(and)f(test)h(to)f(see)h(if)f(the)g(v)l(ariables) e(set)127 4112 y(b)n(y)k(the)g(constructor)h(to)r(ok)e(place;)h(it)g(w)n(as)g (successful.)1676 4521 y(31)p eop %%Page: 32 39 bop 127 70 a Fh(>>>)42 b(class)g(myclass:)127 166 y(...)203 b(def)42 b(__init__\(x\):)127 261 y(...)527 b(self.x=x)127 357 y(...)203 b(def)42 b(get\(\):)127 453 y(...)527 b(return)42 b(self.x)127 548 y(...)127 644 y(>>>)g(inst=myclass\(3\))127 739 y(>>>)g(inst.get\(\))127 835 y(3)127 1369 y Fe(4.2.3)97 b(Automatic)29 b(destructor)j(calls)127 1689 y Fm(F)-6 b(or)23 b(this)g(mo)r(di\014cation,)e(t)n(w)n(o)h(tests)i(w)n(ere)f(run.)34 b(The)23 b(\014rst)g(test)h(set)g(a)e(global)f(v)l(ariable)f(when)j(the)g Fh(__del__)127 1881 y Fm(metho)r(d)c(w)n(as)f(called;)i(this)f(allo)n(w)n(ed) d(easy)j(v)n(eri\014abilit)n(y)-6 b(.)28 b(The)19 b(second)g(test)h(w)n(as)e (to)h(insure)g(that)f(an)h(instance)127 2072 y(w)n(as)25 b(not)g(destro)n(y)n (ed)g(if)f(the)i(destructor)f(made)h(a)f(cop)n(y)f(of)h(that)g(instance.)33 b(Both)25 b(w)n(ere)h(successful.)127 2509 y Fh(>>>)42 b(class)g(a:)127 2605 y(...)203 b(def)42 b(__del__\(\):)127 2701 y(...)527 b(global)42 b(x)127 2796 y(...)527 b(x=3)127 2892 y(...)127 2987 y(>>>)42 b(y=a\(\))127 3083 y(>>>)g(del\(y\))127 3179 y(>>>)g(x)127 3274 y(3)127 3370 y(>>>)g(class)g(b:)127 3465 y(...)203 b(def)42 b(__del__\(\):)127 3561 y(...)527 b(global)42 b(x)127 3657 y(...)527 b(x=self)127 3752 y(...)127 3848 y(>>>)42 b(y=b\(\))127 3943 y(>>>)g(del\(y\))127 4039 y(>>>)g(x.x=3)127 4135 y(>>>)g(x)127 4230 y()1676 4521 y Fm(32)p eop %%Page: 33 40 bop 127 70 a Fe(4.2.4)97 b(Protection)32 b(for)g(metho)s(ds)127 391 y Fm(Tw)n(o)e(tests)i(w)n(ere)f(run)g(for)g(this)g(mo)r(di\014cation.)48 b(The)31 b(\014rst)h(test)f(consisted)g(of)f(a)h(class)g(with)f(public)g(and) 127 582 y(priv)l(ate)20 b(metho)r(ds;)j(the)e(public)e(metho)r(ds)j(called)d (the)j(priv)l(ate)d(metho)r(ds.)33 b(F)-6 b(rom)21 b(the)g(prompt,)h(an)f (instance)127 774 y(could)j(call)g(the)i(public)e(metho)r(ds,)i(but)f(not)g (the)g(priv)l(ate)f(ones.)127 1225 y Fh(>>>)42 b(class)g(myclass:)127 1320 y(...)203 b(def)42 b(public_method\()q(\):)127 1416 y(...)527 b(print)42 b('in)g(public)g(method')127 1512 y(...)527 b(self.private_me)q (tho)q(d\()q(\))127 1607 y(...)42 b(private:)127 1703 y(...)203 b(def)42 b(private_method)q(\(\):)127 1798 y(...)527 b(print)42 b('in)g(private)h(method')127 1894 y(...)127 1990 y(>>>)f(inst=myclass\(\)) 127 2085 y(>>>)g(inst.public_met)q(ho)q(d\(\))127 2181 y(in)f(public)i (method)127 2276 y(in)e(private)i(method)127 2372 y(>>>)f(inst.private_me)q (th)q(od\()q(\))127 2467 y(AccessError:)j(private_metho)q(d)127 2563 y(Stack)d(backtrace)j(\(innermost)f(last\):)208 2659 y(File)e ("",)i(line)e(1)127 3094 y Fm(The)30 b(second)h(test)g(w)n(as)g(to)f (insure)g(that)g(a)h(descendan)n(t)f(of)g(a)g(class)h(con)n(taining)c(a)k (priv)l(ate)e(metho)r(d)h(also)127 3285 y(could)e(not)g(access)h(it;)i(it)d (also)g(pro)n(v)n(ed)f(successful,)j(generating)d(an)h Fh(AccessError)34 b Fm(after)28 b(an)g(attempt)h(to)127 3477 y(call)24 b(a)h(priv)l(ate)f (metho)r(d.)127 3928 y Fh(>>>)42 b(class)g(subclass\(mycla)q(ss)q(\):)127 4023 y(...)203 b(def)42 b(main\(\):)127 4119 y(...)527 b(print)42 b('trying)h(public)g(methods')127 4215 y(...)527 b(self.public_met)q(hod)q (\(\))127 4310 y(...)g(print)42 b('trying)h(private)h(methods')1676 4521 y Fm(33)p eop %%Page: 34 41 bop 127 70 a Fh(...)527 b(self.private_me)q(tho)q(d\()q(\))127 166 y(...)127 261 y(>>>)42 b(inst=subclass\(\))127 357 y(>>>)g(inst.main\(\)) 127 453 y(trying)h(public)g(methods)127 548 y(in)e(public)i(method)127 644 y(in)e(private)i(method)127 739 y(trying)g(private)g(methods)127 835 y(AccessError:)i(private_metho)q(d)127 931 y(Stack)d(backtrace)j (\(innermost)f(last\):)208 1026 y(File)e("",)i(line)e(1)208 1122 y(File)g("",)i(line)e(6)127 1651 y Fe(4.2.5)97 b(Protection)32 b(for)g(data)127 1972 y Fm(Tw)n(o)24 b(tests)h(w)n(ere)g(com) n(bined)f(in)n(to)f(a)i(single)e(class)i(for)f(this)h(particular)e(test.)34 b(The)25 b(purp)r(ose)g(w)n(as)f(to)g(insure)127 2163 y(that)f(public)f(v)l (ariables)g(could)h(b)r(e)h(written)f(and)g(read)h(b)n(y)f(all,)g(and)g(that) g(priv)l(ate)f(v)l(ariables)g(could)h(only)f(b)r(e)127 2355 y(written)j(and)f(read)i(b)n(y)e(the)i(class.)34 b(As)26 b(seen,)h(it)e(is)g (a)g(success.)127 2788 y Fh(>>>)42 b(class)g(myclass:)127 2884 y(...)203 b(access)43 b(foo,)f(bar:)g(public)127 2980 y(...)203 b(access)43 b(qux:)f(private)127 3075 y(...)203 b(def)42 b(setqux\(x\):)127 3171 y(...)527 b(self.qux=x)127 3266 y(...)203 b(def)42 b(getqux\(\):)127 3362 y(...)527 b(return)42 b(self.qux)127 3458 y(...)127 3553 y(>>>)g(inst=myclass\(\))127 3649 y(>>>)g(inst.foo=3)127 3744 y(>>>)g(inst.foo)127 3840 y(3)127 3936 y(>>>)g(inst.bar=10)127 4031 y(>>>)g(inst.bar)127 4127 y(10)127 4222 y(>>>)g(inst.qux=22)127 4318 y(AccessError:)j(qux)1676 4521 y Fm(34)p eop %%Page: 35 42 bop 127 70 a Fh(Stack)42 b(backtrace)j(\(innermost)f(last\):)208 166 y(File)e("",)i(line)e(1)127 261 y(>>>)g(inst.setqux\(22\))127 357 y(>>>)g(inst.qux)127 453 y(AccessError:)j(qux)127 548 y(Stack)d (backtrace)j(\(innermost)f(last\):)208 644 y(File)e("",)i(line)e(1)127 739 y(>>>)g(inst.getqux\(\))127 835 y(22)127 1268 y Fm(The)28 b(second)g(test)h(w)n(as)f(to)f(insure)h(that)g(b)r(oth)f Fh(write)k Fm(and)c Fh(read)j Fm(access)f(parameters)g(w)n(ork)n(ed)e(correctly)-6 b(.)127 1459 y(This)36 b(w)n(as)g(done)g(b)n(y)g(creating)g(a)g(v)l(ariable)e (that)i(allo)n(w)n(ed)e(it)i(to)g(b)r(e)h(written)f(priv)l(ately)-6 b(,)37 b(but)f(accessed)127 1650 y(publically:)127 2099 y Fh(>>>)42 b(class)g(myclass:)127 2194 y(...)203 b(access)43 b(var:)f(public)h(read,)f (private)127 2290 y(...)203 b(def)42 b(setvar\(x\):)127 2385 y(...)527 b(self.var=x)127 2481 y(...)127 2577 y(>>>)42 b(inst=myclass\(\)) 127 2672 y(>>>)g(inst.var=3)127 2768 y(AccessError:)j(var)127 2863 y(Stack)d(backtrace)j(\(innermost)f(last\):)208 2959 y(File)e ("",)i(line)e(1)127 3055 y(>>>)g(inst.setvar\(3\))127 3150 y(>>>)g(inst.var)127 3246 y(3)127 3678 y Fm(The)22 b(\014nal)f(test)j(w) n(as)e(to)g(insure)g(that)g(descendan)n(t)g(classes)h(could)f(not)f(access)j (priv)l(ate)d(v)l(ariables.)31 b(The)23 b(test)127 3870 y(also)h(succeeded:) 127 4318 y Fh(>>>)42 b(class)g(myclass:)1676 4521 y Fm(35)p eop %%Page: 36 43 bop 127 70 a Fh(...)203 b(access)43 b(var:)f(private)127 166 y(...)203 b(def)42 b(setvar\(x\):)127 261 y(...)527 b(self.var=x)127 357 y(...)203 b(def)42 b(getvar\(\):)127 453 y(...)527 b(return)42 b(self.var)127 548 y(...)127 644 y(>>>)g(class)g(subclass\(mycla)q(ss)q(\):) 127 739 y(...)203 b(def)42 b(writetest\(\):)127 835 y(...)527 b(self.var=3)127 931 y(...)203 b(def)42 b(readtest\(\):)127 1026 y(...)527 b(self.var)127 1122 y(...)127 1217 y(>>>)42 b(inst=subclass\(\))127 1313 y(>>>)g(inst.writetest\()q(\))127 1409 y(AccessError:)j(var)127 1504 y(Stack)d(backtrace)j(\(innermost)f (last\):)208 1600 y(File)e("",)i(line)e(1)208 1695 y(File)g ("",)i(line)e(3)127 1791 y(>>>)g(inst.readtest\(\))127 1887 y(AccessError:)j(var)127 1982 y(Stack)d(backtrace)j(\(innermost)f (last\):)208 2078 y(File)e("",)i(line)e(1)208 2173 y(File)g ("",)i(line)e(5)127 2722 y Fe(4.2.6)97 b(Class)32 b(construction)h(in) f(C)127 3043 y Fm(This)g(functionalit)n(y)d(is)j(the)h(most)g(di\016cult)f (to)g(test,)k(b)r(ecause)d(it)g(requires)g(extensiv)n(e)f(co)r(ding)f(for)h (ev)n(en)127 3234 y(the)d(simplest)f(of)f(tests.)45 b(Ho)n(w)n(ev)n(er,)28 b(this)g(abilit)n(y)e(is)i(curren)n(tly)g(b)r(eing)f(used)i(in)f(the)g(Alice) g(virtual)e(realit)n(y)127 3426 y(to)r(olkit,)d(and)i(this)g(functionalit)n (y)c(has)26 b(b)r(een)f(do)r(cumen)n(ted)g(to)g(w)n(ork.)34 b([DeL93)o(])1676 4521 y(36)p eop %%Page: 37 44 bop 127 933 a Fg(Chapter)57 b(5)127 1816 y Fl(Conclusion)127 2510 y Ff(5.1)117 b(Summary)127 2857 y Fm(The)30 b(previous)e(v)n(ersion)h (of)g(Python)g(w)n(as)g(restrictiv)n(e)h(as)f(to)h(the)g(abilities)d(of)i (classes.)48 b(No)29 b(kind)f(of)h(data)127 3048 y(protection)g(w)n(as)i(pro) n(vided,)g(the)g(syn)n(tax)f(w)n(as)g(a)n(wkw)n(ard,)g(neither)h (constructors)g(nor)g(destructors)g(w)n(ere)127 3240 y(supp)r(orted,)f(and)e (classes)i(could)e(only)g(b)r(e)h(written)f(in)h(Python,)h(not)e(in)h(C.)g (The)g(purp)r(ose)g(of)f(this)h(thesis)127 3431 y(w)n(as)22 b(b)r(oth)h(to)f(redesign)h(Python)f(to)g(allo)n(w)f(these)i(features)g(and)f (to)h(implemen)n(t)e(them,)k(an)d(attempt)g(whic)n(h)127 3622 y(w)n(as)j(successful)h(in)f(all)e(accoun)n(ts.)127 3893 y(Data)k(protection) g(consists)i(of)e(restricting)h(access)h(to)f(b)r(oth)g(metho)r(ds)g(and)g (data;)h(an)e(ob)t(ject)h(can)g(either)127 4084 y(b)r(e)g(public,)f(meaning)f (all)g(can)i(access,)h(or)f(priv)l(ate,)f(meaning)f(access)j(is)e(restricted) h(to)g(the)f(o)n(wner)g(of)g(the)127 4276 y(ob)t(ject.)33 b(This)23 b(w)n(as)f(implemen)n(ted)g(for)h(metho)r(ds)g(b)n(y)g(allo)n(wing)c(blo)r(c) n(ks)j(of)g(metho)r(ds)i(to)e(b)r(e)i(declared)e(either)1676 4521 y(37)p eop %%Page: 38 45 bop 127 70 a Fh(public)28 b Fm(or)d Fh(private)p Fm(.)38 b(F)-6 b(or)25 b(data,)g(an)g Fh(access)j Fm(command)c(w)n(as)h(pro)n(vided)f(to)h (sp)r(ecify)g(the)g(protection.)127 341 y(Previously)-6 b(,)23 b(metho)r(ds)i(w)n(ere)g(required)g(to)f(ha)n(v)n(e)g(an)g(additional)d (parameter,)k(called)e Fh(self)p Fm(.)36 b(The)25 b(instance)127 533 y(v)l(ariable)18 b(w)n(as)j(then)g(inserted)g(in)n(to)e(the)i(parameter)g (tuple)f(b)r(efore)h(executing)e(the)i(metho)r(d.)33 b(Programmers)127 724 y(can)25 b(also)f(write)h(classes)h(completely)e(in)h(C)g(rather)h(than)e (in)h(Python.)127 995 y(Finally)-6 b(,)30 b(Python)g(also)f(had)i(not)f(allo) n(w)n(ed)e(the)j(programmer)f(to)g(sp)r(ecify)h(constructors)g(or)f (destructors;)127 1186 y(that)23 b(is,)h(metho)r(ds)f(whic)n(h)g(are)g (called)f(up)r(on)h(the)g(creation)f(or)i(deletion)d(of)i(an)g(instance,)g (resp)r(ectfully)-6 b(.)33 b(An)127 1377 y(imp)r(ortan)n(t)25 b(c)n(hange)g(w)n(as)h(to)h(allo)n(w)d(an)i Fh(__init__)k Fm(metho)r(d)c(as)h (a)f(constructor,)h(and)f(a)g Fh(__del__)k Fm(metho)r(d)127 1569 y(as)c(a)f(destructor.)127 2098 y Ff(5.2)117 b(In)m(terpretation)127 2445 y Fm(Data)20 b(protection)g(has)i(resulted)f(in)g(a)g(n)n(um)n(b)r(er)h (of)e(b)r(ene\014ts.)34 b(Not)21 b(only)f(do)r(es)h(it)g(insure)h(that)e (programmers)127 2636 y(will)h(use)i(the)g(pro)n(vided)d(abstractions)i(and)g (create)h(sub)r(classes)g(or)f(ev)n(en)h(new)f(classes)i(if)d(they)i(are)g (not,)g(but)127 2827 y(program)d(reliabilit)n(y)e(is)k(also)e(increased,)j (since)e(the)h(programmer)f(relies)g(on)g(the)h(abstraction)e(rather)h(than) 127 3019 y(the)26 b(implemen)n(tation.)127 3290 y(The)36 b(c)n(hange)g(in)f (syn)n(tax)h(for)g(de\014ning)e(class)j(metho)r(ds)f(has)h(freed)f (programmers)g(from)g(a)g(previously)127 3481 y(cum)n(b)r(ersome)26 b(syn)n(tax.)33 b(As)26 b(a)f(result,)h(programs)e(are)h(less)h(lik)n(ely)d (to)i(fail,)f(and)g(all)g(Python)h(programs)f(will)127 3672 y(ha)n(v)n(e)d(a)g(standard)g(name)h(for)f(the)h(instance;)h(previously)-6 b(,)20 b(the)i(instance)g(could)e(b)r(e)i(b)r(ound)f(to)h(an)n(y)e(v)l (ariable,)127 3863 y(not)25 b(just)g Fh(self)p Fm(.)127 4135 y(The)e(abilit)n(y)d(to)j(write)g(classes)h(in)f(C)g(pro)n(vides)f(not)h (only)e(increased)j(execution)e(sp)r(eed,)i(but)f(has)h(extended)1676 4521 y(38)p eop %%Page: 39 46 bop 127 70 a Fm(the)33 b(functions)e(a)n(v)l(ailable)e(to)j(a)g(class)h(b)n (y)f(allo)n(wing)d(access)34 b(to)e(all)f(of)h(those)h(callable)d(from)i(C.)h (Finally)-6 b(,)127 261 y(the)33 b(abilit)n(y)d(to)i(sp)r(ecify)h (constructors)g(and)f(destructors)h(pro)n(vides)f(increased)h(p)r(o)n(w)n(er) f(b)n(y)g(allo)n(wing)d(the)127 453 y(programmer)f(to)g(de\014ne)h(v)l (ariables)d(automatically)-6 b(,)26 b(without)g(the)j(previous)f(requiremen)n (t)g(of)g(calling)e(an)127 644 y(initialization)20 b(or)25 b(destruction)g(metho)r(d)g(man)n(ually)-6 b(.)127 1173 y Ff(5.3)117 b(Recommendations)127 1520 y Fm(The)31 b(curren)n(t)h(goal)d(is)j(to)f(in)n (tegrate)f(the)h(c)n(hanges)g(I)g(ha)n(v)n(e)g(made)g(with)f(the)i(actual)d (release)j(of)f(Python,)127 1712 y(th)n(us)g(letting)e(a)h(wider)g(range)g (of)g(programmers)h(b)r(ene\014t)f(from)h(the)g(impro)n(v)n(ed)e(ob)t (ject-orien)n(ted)g(mo)r(del.)127 1903 y(The)h(task)g(should)f(b)r(e)h (rather)g(simple,)h(b)r(ecause)g(the)f(latest)g(release)g(of)g(Python)f(has)h (not)g(included)e(an)n(y)127 2094 y(drastic)d(c)n(hanges.)127 2365 y(There)33 b(are)g(a)g(n)n(um)n(b)r(er)g(of)f(problems)h(that)f(could)g (b)r(e)h(\014xed,)i(ho)n(w)n(ev)n(er.)56 b(When)33 b(a)g(Python)f(program)g (is)127 2556 y(imp)r(orted)e(\(the)i(rough)e(equiv)l(alen)n(t)e(of)i(C's)i Fh(#include)p Fm(\),)k(a)31 b(b)n(yte)g(compiled)f(\014le)h(with)f(the)h (extension)f(of)127 2747 y Fh(.pyc)35 b Fm(is)e(generated.)56 b(The)33 b(next)f(time)h(the)g(\014le)g(is)g(imp)r(orted,)h(the)f Fh(.pyc)i Fm(\014le)d(will)f(b)r(e)i(loaded)f(instead.)127 2939 y(Unfortunately)-6 b(,)26 b(due)i(to)f(the)h(implemen)n(tation)d(metho)r (d,)k(protection)e(will)e(not)j(b)r(e)g(activ)n(e)f(when)h(a)f Fh(.pyc)127 3130 y Fm(\014le)d(is)g(imp)r(orted.)33 b(While)24 b(an)g(easy)g(w)n(a)n(y)f(to)h(solv)n(e)f(this)h(problem)g(is)g(to)g (eliminate)e(the)j Fh(.pyc)h Fm(\014le)e(and)f(th)n(us)127 3321 y(nev)n(er)28 b(encoun)n(ter)g(it,)h(the)f(correct)h(tec)n(hnique)e(w)n (ould)f(b)r(e)i(to)g(reimplemen)n(t)g(the)g(metho)r(d)g(of)f(passing)g(the) 127 3512 y(protection)c(information)e(from)j(the)h(compiler)e(to)h(the)h(in)n (terpreter.)34 b(Instead)24 b(of)f(storing)g(protection)g(data)127 3703 y(in)i(v)l(ariables,)e(the)j(information)c(should)i(b)r(e)i(inserted)f (in)n(to)g(the)g(actual)f(b)n(yte)h(co)r(de.)127 3975 y(Also,)e(v)l(ariables) e(are)i(no)n(w)f(asso)r(ciated)h(with)f(a)h(particular)e(instance;)i(in)g (other)g(w)n(ords,)g(an)g(instance)f(could)127 4166 y(ha)n(v)n(e)31 b(only)g(one)h(v)l(ariable)d(named)j Fh(var)p Fm(.)56 b(Unfortunately)-6 b(,)31 b(this)h(implies)f(that,)i(if)e(a)h(class)g(inherits)g(from)1676 4521 y(39)p eop %%Page: 40 47 bop 127 70 a Fm(t)n(w)n(o)28 b(classes)h(with)f(t)n(w)n(o)g(separate)h(v)l (ariables)d(called)i Fh(var)p Fm(,)k(failure)27 b(will)g(o)r(ccur.)45 b(The)28 b(metho)r(d)h(C++)f(uses)127 261 y(to)f(o)n(v)n(ercome)h(this)f(is)h (to)g(allo)n(w)d(an)i(instance)g(to)h(ha)n(v)n(e)f(v)l(ariables)e(b)r(ound)i (at)g(eac)n(h)h(class,)h(rather)f(than)f(at)127 453 y(the)33 b(instance)f(lev)n(el.)55 b(This)32 b(w)n(ould)f(allo)n(w)g(b)r(oth)h(v)l (ariables)e(to)j(co-exist,)h(as)f(long)e(as)i(there)g(w)n(asn't)f(an)n(y)127 644 y(am)n(biguit)n(y)22 b(ab)r(out)j(whic)n(h)f(one)h(w)n(as)g(b)r(eing)f (accessed.)127 915 y(Both)31 b(of)g(these)i(c)n(hanges)e(require)h(a)f(fair)g (amoun)n(t)g(of)g(co)r(ding,)h(with)f(minimal)f(c)n(hanges)h(to)h(the)g (design.)127 1106 y(Ho)n(w)n(ev)n(er,)40 b(care)e(m)n(ust)h(b)r(e)f(tak)n(en) f(with)g(the)h(second)g(prop)r(osal)e(to)h(insure)h(bac)n(kw)n(ards)e (compatibilit)n(y)-6 b(.)127 1297 y(When)22 b(instance)f(v)l(ariables)f(are)i (created)g(without)e(an)h Fh(access)k Fm(de\014nition,)20 b(the)i(lo)r (cation)e(m)n(ust)i(b)r(e)g(b)r(ound,)127 1489 y(and)j(the)g(lo)r(cation)e(m) n(ust)j(allo)n(w)d(older)h(Python)h(programs)g(to)g(function)e(correctly)-6 b(.)1676 4521 y(40)p eop %%Page: 41 48 bop 127 1004 a Fl(Glossary)127 1556 y Fk(Abstract)31 b(Data)f(T)n(yp)r(e)38 b Fm(A)22 b(data)g(t)n(yp)r(e)g(in)g(whic)n(h)f(the)i(follo)n(wing)18 b(are)23 b(true:)33 b(that)22 b(the)h(represen)n(tation)e(of)319 1747 y(b)r(oth)i(the)g(data)f(and)g(the)h(metho)r(ds)g(are)g(asso)r(ciated)f (with)g(a)g(single)g(ob)t(ject;)i(and)e(that)g(the)h(metho)r(ds)319 1938 y(are)j(the)f(only)f(w)n(a)n(y)g(of)h(accessing)g(the)h(data.)33 b([Seb89)o(,)26 b(page)f(323])127 2185 y Fk(Class)39 b Fm(A)25 b(series)i(of)d(metho)r(ds)i(whic)n(h)e(de\014nes)i(the)f(b)r(eha)n(vior)f (of)g(all)g(instances)h(of)g(that)g(class.)127 2431 y Fk(Constructor)41 b Fm(A)27 b(metho)r(d)f(whic)n(h)f(is)h(called)f(when)h(an)g(instance)g(is)g (created.)38 b(In)26 b(Python,)g(the)h(name)f(of)319 2622 y(the)g(metho)r(d)f (is)g Fh(__)p Fm(init)p Fh(__)p Fm(.)127 2869 y Fk(Data)30 b(Abstraction)41 b Fm(The)23 b(programming)d(philosoph)n(y)g(whic)n(h)i(allo) n(ws)f(data)g(and)h(functions)g(to)g(b)r(e)i(asso-)319 3060 y(ciated)k(together,)h(with)f(the)h(pro)n(vided)e(functions)g(b)r(eing)g(the) i(sole)f(metho)r(d)h(of)f(manipulating)c(the)319 3251 y(data.)127 3498 y Fk(Data)30 b(Protection)40 b Fm(The)33 b(abilit)n(y)e(of)h(a)i(class)f (or)g(instance)g(to)g(limit)f(the)h(a)n(v)l(ailabili)o(t)n(y)28 b(of)33 b(its)g(metho)r(ds)319 3689 y(or)k(data)f(ob)t(jects.)70 b(This)36 b(forces)i(programmers)e(utilizing)e(those)k(classes)f(to)g(use)h (the)f(pro)n(vided)319 3880 y(abstractions.)127 4127 y Fk(Destructor)j Fm(A)25 b(metho)r(d)f(whic)n(h)g(is)g(called)g(when)g(an)g(instance)g(is)g (destro)n(y)n(ed.)34 b(In)24 b(Python,)h(the)g(name)f(of)319 4318 y(the)i(metho)r(d)f(is)g Fh(__)p Fm(del)p Fh(__)p Fm(.)1676 4521 y(41)p eop %%Page: 42 49 bop 127 70 a Fk(Dictionary)41 b Fm(A)25 b(Python)g(data)f(t)n(yp)r(e)h(whic)n (h)g(allo)n(ws)e(names)i(to)h(b)r(e)f(asso)r(ciated)g(with)f(an)n(y)g(t)n(yp) r(e)i(of)e(data.)127 325 y Fk(Implemen)n(tation)35 b Fm(The)23 b(term)g(used)g(for)f(the)h(pro)r(cess)h(of)e(writing)f(or)h(mo)r(difying)e (a)i(computer)h(program.)127 579 y Fk(Inheritance)40 b Fm(The)25 b(abilit)n(y)d(of)j(a)g(class)g(to)h(selectiv)n(ely)e(rede\014ne)h(the)h (metho)r(ds)f(of)g(another)f(class.)127 834 y Fk(Instance)39 b Fm(An)20 b(ob)t(ject)g(whose)f(b)r(eha)n(vior)g(is)h(sp)r(eci\014ed)g(b)n (y)g(the)g(class)h(of)e(whic)n(h)g(it)h(is)g(a)g(mem)n(b)r(er.)34 b(While)19 b(the)319 1025 y(metho)r(ds)28 b(are)f(sp)r(eci\014ed)h(b)n(y)f (the)g(class,)h(data)f(ob)t(jects)g(are)g(asso)r(ciated)g(with)f(the)i (instance.)39 b(Th)n(us,)319 1216 y(there)26 b(ma)n(y)f(b)r(e)h(m)n(ultiple)d (instances)i(of)g(a)g(particular)f(class;)h(only)f(the)i(metho)r(ds)f(are)h (shared.)127 1471 y Fk(Metho)r(d)40 b Fm(Executable)24 b(co)r(de)i(whic)n(h)e (sp)r(eci\014es)i(an)f(action)f(to)h(tak)n(e)g(when)g(it)f(is)i(called.)127 1725 y Fk(Ob)5 b(ject)38 b Fm(A)30 b(structure)h(whic)n(h)e(consists)h(of)f (v)l(ariables)f(and)h(metho)r(ds)h(whic)n(h)e(can)i(access)h(the)f(v)l (ariables.)319 1916 y(In)c(Python,)f(all)f(metho)r(ds)h(and)g(v)l(ariables)e (are)i(implemen)n(ted)g(as)g(ob)t(jects.)127 2171 y Fk(Ob)5 b(ject-orien)n(ted)39 b Fm(A)20 b(programming)e(metho)r(dology)g(based)i(on)g (the)h(principle)d(of)i(w)n(orking)e(with)h(ob)t(jects)319 2362 y(that)26 b(ha)n(v)n(e)f(b)r(oth)h(data)f(and)g(metho)r(ds)h(asso)r (ciated)f(with)g(them.)37 b(Op)r(erations)25 b(are)h(then)g(p)r(erformed)319 2553 y(b)n(y)f(calling)e(the)j(pro)n(vided)d(metho)r(ds.)127 2807 y Fk(Priv)-5 b(ate)39 b Fm(A)28 b(t)n(yp)r(e)g(of)f(protection)g(in)g (whic)n(h)g(only)f(the)i(class)h(in)e(whic)n(h)g(the)h(metho)r(d)g(or)g(data) f(is)h(de\014ned)319 2999 y(has)e(access.)127 3253 y Fk(Public)40 b Fm(A)25 b(lac)n(k)f(of)h(protection.)127 3508 y Fk(Pro)r(cess)30 b(Abstraction)41 b Fm(The)e(programming)e(philosoph)n(y)f(whic)n(h)i(allo)n (ws)f(the)i(programmer)g(to)g(call)319 3699 y(functions)24 b(to)h(accomplish)f(certain)h(tasks,)h(rather)f(than)g(reimplemen)n(t)f(the)i (task)f(eac)n(h)g(time.)127 3953 y Fk(T)-7 b(uple)38 b Fm(A)26 b(Python)e(data)g(t)n(yp)r(e)i(whic)n(h)e(consists)h(of)g(a)g(series)i(of)d (ob)t(jects.)1676 4521 y(42)p eop %%Page: 43 50 bop 127 1004 a Fl(Bibliograph)-6 b(y)127 1507 y Fm([Co)r(o91])48 b(William)22 b(R.)j(Co)r(ok.)32 b(Ob)t(ject-orien)n(ted)23 b(programming)g(v)n(ersus)i(abstract)g(data)e(t)n(yp)r(es.)34 b(In)24 b(J.)i(W.)431 1699 y(de)40 b(Bakk)n(er,)i(W.)f(P)-6 b(.)40 b(de)g(Ro)r(ev)n(er,)k(and)39 b(G.)i(Rozen)n(b)r(erg,)i(editors,)g Fa(F)-6 b(oundations)43 b(of)e(Obje)l(ct-)431 1890 y(Oriente)l(d)32 b(L)l(anguages)p Fm(,)i(Lecture)c(Notes)f(in)f(Computer)h(Science,)h(pages)f (151{178,)e(New)i(Y)-6 b(ork,)431 2081 y(1991.)24 b(Springer-V)-6 b(erlag.)127 2336 y([DeL93])43 b(Rob)r(ert)34 b(DeLine.)63 b(Alice:)53 b(A)35 b(rapid)f(protot)n(yping)e(system)k(for)e (three-dimensional,)h(in)n(terac-)431 2527 y(tiv)n(e,)30 b(graphical)d(en)n (vironmen)n(ts.)45 b(Master's)30 b(thesis,)i(Univ)n(ersit)n(y)27 b(of)i(Virginia,)f(Departmen)n(t)h(of)431 2718 y(Computer)24 b(Science,)i(1993.)127 2972 y([GR83])67 b(Adele)17 b(Goldb)r(erg)f(and)h(Da)n (vid)e(Robson.)20 b Fa(Smal)t(ltalk-80:)32 b(the)20 b(language)i(and)g(its)d (implementation)p Fm(.)431 3164 y(Addison-W)-6 b(esley)g(,)23 b(Reading,)g(Mass.,)k(1983.)127 3418 y([KA90])66 b(Setrag)32 b(Khosha\014an)e(and)i(Razmik)g(Abnous.)55 b Fa(Obje)l(ct)35 b(Orientation:)49 b(Conc)l(epts,)37 b(L)l(anguages,)431 3609 y(Datab)l(ases,)29 b(User)g(Interfac)l(es)p Fm(.)37 b(John)24 b(Wiley)g(and)h(Sons,)g(Inc.,)h(New)g(Y)-6 b(ork,)24 b(1990.)127 3864 y([Kee89])56 b(Son)n(y)n(a)28 b(E.)i(Keene.)48 b Fa(Obje)l(ct-Oriente)l (d)33 b(Pr)l(o)l(gr)l(amming)h(in)e Fi(Common)i(Lisp)p Fm(.)48 b(Addison-W)-6 b(esley)g(,)431 4055 y(Reading,)23 b(Mass.,)k(1989.)1676 4521 y(43)p eop %%Page: 44 51 bop 127 70 a Fm([Mey88])38 b(Bertrand)d(Mey)n(er.)66 b Fa(Obje)l(ct-oriente)l (d)39 b(softwar)l(e)g(c)l(onstruction)p Fm(.)68 b(Pren)n(tice)37 b(Hall,)g(Englew)n(o)r(o)r(d)431 261 y(Cli\013s,)24 b(NJ,)i(1988.)127 516 y([Omo91])38 b(Stephen)24 b(M.)g(Omoh)n(undro.)31 b(The)25 b(Sather)f(language.)30 b(T)-6 b(ec)n(hnical)22 b(rep)r(ort,)j(In)n (ternational)c(Com-)431 707 y(puter)k(Science)g(Institute,)h(Berk)n(eley)-6 b(,)24 b(CA,)h(June)g(1991.)127 962 y([PW91])53 b(Lewis)31 b(J.)i(Pinson)e(and)g(Ric)n(hard)g(S.)h(Wiener.)54 b Fa(Obje)l(ctive-C)34 b(Obje)l(ct-Oriente)l(d)g(Pr)l(o)l(gr)l(amming)431 1153 y(T)-6 b(e)l(chniques)p Fm(.)37 b(Addison-W)-6 b(esley)g(,)23 b(Reading,)h(Mass.,)i (1991.)127 1407 y([Seb89])64 b(Rob)r(ert)19 b(W.)i(Seb)r(esta.)26 b Fa(Conc)l(epts)f(of)d(Pr)l(o)l(gr)l(amming)k(L)l(anguages)p Fm(.)j(Benjamin/Cummings,)18 b(Red-)431 1598 y(w)n(o)r(o)r(d)24 b(Cit)n(y)-6 b(,)24 b(CA,)h(1989.)127 1853 y([Str91])81 b(Bjarne)36 b(Stroustrup.)69 b Fa(The)40 b(C++)e(Pr)l(o)l(gr)l(amming)k(L)l(anguage)p Fm(.)73 b(Addison-W)-6 b(esley)g(,)38 b(Reading,)431 2044 y(Mass.,)26 b(second)f(edition,)f(1991.)127 2299 y([US87])83 b(Da)n(vid)21 b(Ungar)h(and)h(Randall)e(B.)i(Smith.)31 b Fi(Self)p Fm(:)i(The)23 b(p)r(o)n(w)n(er)g(of)f(simplicit)n(y)-6 b(.)29 b(T)-6 b(ec)n(hnical)21 b(rep)r(ort,)431 2490 y(Stanford)i(Univ)n(ersit)n(y)-6 b(,)24 b(Stanford,)f(CA,)j(1987.)127 2744 y([vR93a])47 b(G.)27 b(v)l(an)d(Rossum.)36 b(Python)25 b(Library)g(reference.)37 b(T)-6 b(ec)n(hnical)23 b(rep)r(ort,)k(CWI,)f(Amsterdam,)h(Jan-)431 2935 y(uary)d(1993.)127 3190 y([vR93b])43 b(G.)27 b(v)l(an)e(Rossum.)37 b(Python)26 b(reference)h(man)n(ual.)35 b(T)-6 b(ec)n(hnical)24 b(rep)r(ort,)j(CWI,)f (Amsterdam,)i(Jan-)431 3381 y(uary)c(1993.)127 3636 y([vR93c])52 b(G.)25 b(v)l(an)e(Rossum.)32 b(Python)23 b(T)-6 b(utorial.)29 b(T)-6 b(ec)n(hnical)22 b(rep)r(ort,)j(CWI,)f(Amsterdam,)h(Jan)n(uary)d (1993.)431 3827 y(Python)i(is)i(a)n(v)l(ailable)21 b(b)n(y)k(FTP)h(from)f (ftp.cwi.nl,)f(in)h(/pub/p)n(ython.)1676 4521 y(44)p eop %%Page: 45 52 bop 127 70 a Fm([KA90)o(])26 b([Kee89])g([vR93a)n(])g([vR93c)o(])1676 4521 y(45)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF .