ࡱ> ` b^jbjb 4ddWM~~~((( # # #8X#\#4{8#:.$"P$P$P$g(g(g(7777777,-:R< 8(g('|g(g(g( 8)((P$P$58)))g((P$(P$7)<ThT6((g(7))6h((7# 2 #)77K80{8.7 =) = 7)($Teaching Java with OO first David Gries Computer Science Cornell University 1. Introduction Good morning! I thank you for inviting me to give this presentation. It is a pleasure to be here. This talk is aimed at educators, especially those who teach the first programming course, although I hope everyone will find it interesting and provocative. I was led to talk about the teaching of programming because of the debates that have been taking place on whether OO should be taught before procedural concepts or even whether OO can be taught first! I have strong opinions on the matter, which are based on 41-years of teaching, research in the field of formal programming methodology, and ten years of experience teaching programming using Java. My ideas are not widely known, and I hope that this presentation will spur debate and change some opinions. Here is a list of references on OO first: portal.acm.org/citation.cfm?id=1189136.1189183. A SIGCSE debate on the issue [i] was preceded and followed by much mail on the SICGSE mailing list, and Kim Bruce wrote a summary of the discussion [j]. But rather than summarize what others have said, I prefer to tell you directly my views on how to teach OO. In preparation for this talk, I spent a great deal of time looking at Java texts. It was an eye opener, and it caused me to review the principles on which I base my teaching of programming. So, I will begin by discussing some principles and give examples from the literature that violate these principles. These almost universal violations, I argue, contribute to the state of affairs in teaching programming whether OO based or not. 2. Some pedagogical principles Let me turn your attention to the excellent PhD thesis [h] of Michael Caspersen of Aarhus, completed in June 2007. This thesis presents research and conclusions on the teaching of programming that is based on sound theories of pedagogy and cognition as well as experience. It deals with teaching OO, but its findings are applicable in more general domains. It is the best study on this topic that I have seen. Among other things, Caspersen discusses two important principles concerning teaching novices: Principle 1: Reveal the programming process, in order to ease and promote the learning of programming. Principle 2: Teach skills, and not just knowledge, in order to promote the learning of programming. Teaching methodological programming skills cannot be done in a lecture or two. There may be lectures on stepwise refinement (or stepwise improvement, according to Caspersen), loop invariants, and OO design. But every lecture should deal in some way with programming skills e.g. when the teacher develops first the spec of a method and then the method body, or discusses local variables and where they should be declared, or writes a class invariant for every class, or develops a suite of test cases in a JUnit class. The development of skill, rather than simply transfer of knowledge, should be our aim. From my point of view, few texts treat methodological skills appropriately. They teach programs, not programming. They focus largely on knowledge, not skill. Indeed, I would claim that computer scientists in general do not think much about the programming process and have little idea about how to teach programming. In this sense, the field of formal programming methodology has failed. All through the 1970s and 1980s research went on in this field, research that helped me learn how to teach programming skills, often in an informal manner but based on a formal theory of programming. The field has not embraced the idea, to say the least. And I find it a tragedy that most students in CS can graduate without ever having heard the term loop invariant, much less used it. I wont mention principals (1) and (2) again in my lecture, for I focus on how OO can be taught first. But rest assured that these principals are always in my mind when teaching. Here are a few more principles. Principle 3: Present concepts at the appropriate level of abstraction. We all believe that abstraction is important in CS, perhaps more so than in other disciplines. Abstraction is discussed in many places. Colburn and Shute [c] conclude that abstraction through information hiding is a primary factor in CS progress and success. For Burg and Thomas [d], abstraction is arguably the most fundamental intellectual activity in the field of CS. Gunter Gorz [e] discusses abstraction as a fundamental concept in teaching CS. One well-known text says that, a good abstraction hides the right details at the right time so that we can manage complexity. I was co-author of the influential report Computing as a discipline [f], which discussed the three major paradigms, or cultural styles, used in CS: theory, abstraction (modeling), and design. But, in spite of this talk, most texts do not use abstraction appropriately. For example, many texts describe variables and assignment in terms of computers: A variable is a name for a memory location used to hold a value of some particular data type. When [the assignment statement is] executed, the expression is evaluated and the result is stored in the memory location . The computer must always know the type of value to be stored in the memory location associated with a variable. An object reference variable actually stores the address where the object is stored in memory. This computer-centric view gives the impression that only a computer can execute a program. If students are taught hat only a computer can execute a statement, how can they learn to hand-trace execution? More importantly, the introduction of computing concepts in terms of the computer can create unnecessary and confusing detail. Lest you think that I am alone in believing that a programming language definition should be computer independent, I quote from the definition of Algol 60 [g]: The purpose of the algorithmic language is to describe computational processes. A variable is a designation given to a single value. Assignment statements serve for assigning the value of an expression to one or several variables . The process will in the general case be understood to take place in three steps as follows: 4.2.3.1. Any subscript expressions occurring in the left part variables are evaluated in sequence from left to right. 4.2.3.2. The expression of the statement is evaluated. 4.2.3.3. The value of the expression is assigned to all the left part variables, with any subscript expressions having values as evaluated in step HYPERLINK "http://www.masswerk.at/algol60/report.htm#4_2_3_1"4.2.3.1. There you have it. No reference to a computer. The confusion really sets in when one describes objects and classes in terms of a computer. Discussions of pointers to objects in memory, heaps, and other implementation-related terms just confuse. For example consider this passage, taken from a text: An object has its own unique identity, which distinguishes it from all other objects in the computers memory An objects identity is handled behind the scenes by the Java virtual machine and should not be confused with the variables that might refer to that object. Far better is to have a model for classes and objects that rises above the computer, especially if that model can be based on an analogy to which students can relate. Later, I will show you such a model. Principle 4: Order material so as to minimize the introduction of terms or topics without explanation: as much as possible, define a term when you first introduce it. This seemingly obvious principle is extremely difficult to follow when teaching Java, and I cannot claim to adhere completely to it. I do believe that following it almost forces you to teach OO first, because almost every line of a program deals with a class or object. But even when teaching OO first, this principle is difficult to follow. In some cases, a spiral approach is needed. For example, one can introduce methods in a way that allows the student to start writing methods whose bodies are simple assignments or returns; later, one then explains methods in depth. As an example of violation of Principle 4, some texts introduce applets before they discuss subclasses, so the students cannot understand the programs they are shown. In the explanation of an applet, the terms extends and inheritance are used without explanation. I have also seen texts that slip in a cast or two without ever fully explaining what casts are. Principle 5. Use unambiguous, clear, and precise terminology. Here is terminology that doesnt work. Pointer and reference. Students do not know what a pointer is. Even after you explain, they still have difficulty understanding what an assignment statement b= c; means when c contains a pointer. With appropriate abstraction away from the computer, these terms are unnecessary. Inheritance. In my opinion, the specification of Java makes a big mistake in its use of this term. According to the spec, private variables are not inherited, even though they appear in every object of the subclass! Only ones that are directly accessible are inherited. I prefer to use the term the way it is used in English. A child may inherit a million dollars, but the terms of the inheritance may prohibit access to the money until the child is 21. In the same way, all fields and methods are inherited they appear in every folder of a subclass. That they may not be referenced directly has no bearing on the issue of inheritance. Formal parameter and actual parameter. These unfortunate terms were introduced in Algol 60. After introducing them, most texts tend to drop the adjective, resulting in ambiguity and confusion. Far better is parameter and argument. One text says that, The semantics of an assignment statement for primitive types and for objects is different, and another says that, When an object is passed to a method, we are actually passing a reference to that object. These are wrong and confusing the confusion being that the authors think an object is assigned or passed to a method. In summary, utmost clarity of terminology is necessary, for our choice of terminology can influence how easy or hard it is for students to grasp the concepts. There are other principles that we should follow in teaching programming, but these will give you an idea of my general philosophy. Let me now turn to a consideration of teaching objects first. 3. Facilitating the teaching of objects first Several ideas come together to facilitate the teaching of objects first. I dont have time to talk about them all, so let me just list them and talk about two of the more important ones: An IDE that eliminates the need for Java applications and that can be used to demo during lecture. A model of classes and objects in terms that students can understand. Closed labs, in which students follow instructions to learn something, using the computer, with TAs and consultants available for help. Biweekly quizzes that indicate what student should understand are currently important. One-on-one sessions, for all students, at least one during the semester. I will talk a bit about the IDE, but my main emphasis will be on the model of classes and objects. 4. Removing the need for Java applications The straightjacket of static method main for executing programs makes it difficult to teach Java, especially when trying to teach OO first. What frees us is an IDE that allows any expression or statement to be evaluated or executed immediately, without requiring an application. The use of such an IDE changes drastically what, when, and how one teaches, as I will demonstrate in this lecture, although I cannot do so in a paper such as this. I use such an IDE. In every lecture, I demo some aspect of Java or of programming methodology. I develop programs and test them in class. My students dont learn about applications and method main until the tenth or eleventh week of the course. Two IDEs are recommended for this purpose. First, DrJava has had its interactions since its beginning. Second, BlueJ has added a command window that gives the same facility. I cannot impress upon you enough what a freeing experience it is not to need an application when teaching. 5. A model of classes and objects There are two aspects to a programming language: the algorithmic aspect how one writes sequences of instructions The algorithmic aspect, and Structural/organizational aspect Back in the good old days, the second aspect was essentially ignored, because the main feature for organization was the subroutine, or procedure, or function. It was a rather flat organizational structure. Want more functionality? Just add some more subroutines. OO changes all that, as you know. When teaching OO first, it is important to explain these two aspects to the students, to make clear to them that the structural aspect will be studied first, and to keep them aware of it from time to time. In the next section, I will discuss the order of presentation of material, but here, I want to explain in some detail our model for classes and objects. In our model, a class is a file drawer of a file cabinet, and the manila folders in the cabinet are the objects of the class. The class definition describes the contents of each manila folder (object), as one might expect. When introducing the model to students, I bring actual manila folders, filled with pieces of paper giving the fields and methods of the object. I draw an object to look like a manila folder. The name of the class appears in the upper right part of the folder. This tells us what file drawer it belongs in. The tab of the manila folder contains the name of the object well talk about this in a minute. In the folder, I place the instance variables (the type of a variable is optional) and the instance methods. I make the point that the whole method appears in the folder, but I draw only the signature of the method. The position of these components in the folder has no meaning at all; I place them wherever we want. The name on the tab of a folder, in this case a0, is chosen by whoever creates (draws) the folder. The only rule is that different folders have different names. If the computer creates a folder, we have no say in what name is chosen, much like we have no say in the address given to a house we are constructing. If I create-draw a folder, I get to choose its name. The class name C acts like a type. The values of the type are the names of objects of the class the names on the manila folders of class C. In this paragraph are two variables, both containing the name of the manila folder drawn above. His makes sense, in the following way. Suppose we are modeling a dentist office and the manila folders are patients records. Both the secretary, John, and the accountant, Mary, might have access to the folder, and they access it by opening the file drawer and finding it. The inclusion of fields in a manila folder (or object) is natural. We explain the inclusion of the methods as follows. In a dentist office, each staff member knows how to carry out some tasks the secretary can create a folder and insert the patients name and address, the nurse can make entries on a diagram of the teeth, the accountant knows how to deal with deposits. If we place the instructions in each folder, written as methods, then anyone can carry out any of the tasks, providing more flexibility. The importance of this model of classes and objects should not be underestimated, for the following reasons: The analogy helps students understand what an object is, right from the beginning. It is not in terms of the computer. The pictorial nature of an object makes the concept concrete. Students can see what an object is. A huge problem with current texts is that they provide no consistent pictorial presentation. On the other hand, we draw objects often, and we force our students to draw them. This makes other points easier to explain later, as we will see. Both the fields and the methods appear in an object. The inclusion of the methods in extremely important for later understanding of how the body of a method can reference a field of the class, as we will see later. The words pointer and reference are not used. Instead, we have a new type of value, the names on manila folders. Automatically, one can see what an assignment statement like John= Mary; does: it places in variable John a copy of the name that is in variable Mary. We do not use UML diagrams for objects. UML diagrams have no place for the name of the object the name on the tab of the manila folder and this name is a necessary and important part of the object. It is this name that leads to easier understanding on the part of the student. To the right is an example of a drawing an object of subclass Circle. The partition for Circle is at the bottom, and partitions for successive superclasses are drawn above. The subclass inherits all the components defined in the superclasses, and you would see them all there if we had drawn them all; we omitted some to save space. The format is used to explain overriding. Given a method call, look for a matching method starting at the bottom of the object and search upward until it is found. This bottom-up rule automatically find the overriding method will be found (if the method is defined in a superclass). The figure below shows the file drawer for a class C, with two objects, or manila folder. In addition, you can see in the file drawer a static variable and a static method. So, the single copy of each static component goes directly in the file drawer.  I cannot overemphasize the value of these diagrams in helping students learn what an object is. They are not difficult to understand or draw. Once the students grasp the idea, these diagrams can be used to explain various concepts. For example, every programming language as well as logic uses an inside-out rule to determine what references mean I know of only one text that describes this rule. Consider an assignment v= nob;. To find variable nob, search outward through enclosing constructs until the declaration of v is found. Suppose this assignment is in method toString in object a0. Look first in the block in which the assignment appears, then in successive surrounding blocks. If not found, look in the surrounding context, which is object a0. If it is not there, look in the surrounding context, which is the file drawer. As I said, this general inside-out rule is used in some manner, with perhaps some restrictions and changes, in every programming language. Why not explain it in this fashion to students? Our model for classes and objects has other advantages and important ramification, for example with an explanation of inner classes, and the flattening of the class structure, which Java does when it compiles. However, we dont have time to go into this here. Outline of teaching OO first Now that you know the OO model, you can appreciate the order in which OO can be taught. I teach two 50-minute lectures per week, and in between the students have a 50-minute lab. 1. Expressions, variables, declarations, and assignment, with types int, double, char, and boolean and casting. Lab 1. Practice evaluating expressions using DrJava. 2. Objects. Creation of JFrame objects and calls on methods in the objects, all demoed using DrJava. The students see what happens immediately. 3. Definition of a subclass of JFrame. Students see a declaration and use of two methods: a function to compute the area of a JFrame window and a function to make its width equal to its height. Lab 2. Write similar methods in the lab. 4. Fields, getter/setter methods, JUnit testing. 5. Static variables, the class hierarchy, class Object. Lab 3. Practice with static variables and JUnit testing. This ends the pure structure/organization part, and a thorough study of the procedural aspect ensues, including the steps in executing a method call (like drawing a frame or activation record for the call). Interspersed in these lectures on the procedural aspect will be sublectures on constructors in subclasses, overriding, the inside-out rule, this and super, method equals, casting, and operator instanceof. By the end of lecture 11, all aspects of OO that we teach have been introduced. The first programming assignment, due 2.5 weeks into the course, is to right a class that maintains information about rhinos name, birth date, whether tagged or not, who their mother and father are, if known (as rhino objects). They right getter/setter methods, constructors, and comparison functions, e.g. to see whether one rhino is older than other. Only the assignment and return statements may be used no conditional expressions. References [a] Westin, L.K., and M. Nordstrom. Teaching OO concepts a new approach. ASEE/IEEE Frontiers in Education Conf., 20-23 Oct., Savannah, GA. F3C-6-11. [b] Becker, B. Pedagogies for teaching CS1 with Java.  HYPERLINK "http://www.cs.uwaterloo.ca/~bwbecker/papers/javaPedagogies.pdf" http://www.cs.uwaterloo.ca/~bwbecker/papers/javaPedagogies.pdf. [c] Colburn, T., and Gary Shute. Abstraction in computer science. Minds and Machines 17, 2 (July 2007), 169-184. [d] Burg, J., and S. Thomas. Computer science: from abstraction to invention.  HYPERLINK "http://www.cs.wfu.edu/~burg/ papers/AbstractionToInvention.pdf" www.cs.wfu.edu/~burg/ papers/AbstractionToInvention.pdf [e] Gunther, Gortz. Abstraction as a fundamental concept in teaching computer science. www8.informatik. uni-erlangen.de/ IMMD8/staff/Goerz/rennesa.ps.gz. [f] Denning, P., et al. Computing as a discipline. CACM 22, 2 (Feb 1989), 63-70. [g] Backus, J.W., et al. Revised report on the algorithmic language Algol 60. CACM 6, 1 (Jan 1963), 117. [h] Caspersen, M.E. Educating Novices in the Skills of Programming. PhD Dissertation, Computer Science, University of Aarhus, Denmark, June 2007. [i] Astrachan, O., et. al. Resolved: objects early has failed. Debate at SIGCSE 2005. [j] Bruce, K. Controversy on how to teach CS1: A discussion on the SIGCSE-members mailing list. Inroads (Dec 2004). [k] Gries, D., and P. Gries. Multimedia Introduction to Programming Using Java. Springer Verlag, NY. 2005.  Throughout, text means introductory programming text, and computer science is abbreviated as CS.  Quotes from texts are given without citation. These are representative of many texts. The purpose is not to denigrate individuals but simply to show the state of affairs. David Gries. Teaching programming, with OO first PAGE  PAGE 2 NO_HI$ %   D E   L M p & ' VWlmQfgٴheIheI6CJNHheIheI5CJjheIheI0JCJUheIheI6CJheIheICJNHheIheICJheIheI5G*;NO_Y O p )S $ x` a$gdeI $xa$gdeI $a$gdeI$a$gdeI]^a^&+WX*+bc ">?!"YZ+,]uvheIheIB* CJaJph%heIheICJNHaJheIheICJaJheIheI5CJheIheI6CJNHheIheICJNHheIheI6CJheIheICJ=EXY^ABpqwxzHI-ппжККККпппqжп*jheIheI0JB*CJUaJph$heIheI6B*CJNHaJph heIheI6B*CJaJphheIheICJNHheIheICJ!heIheIB*CJNHaJphheIheIB*CJaJphheIheIB* CJaJph%!heIheIB* CJNHaJph%,zZ-la !%""#%@'~''()8+ $xa$gdeI $x^a$gdeI $ x` a$gdeI\]qr$HI1278stK L )!,!F!G!u!v!!!!ԾԾԾԾԾԾԾԫԕ{{{{{{heIheICJNHheIheIB* CJaJ ph"g+jheIheICJOJQJUaJ %jheIheICJOJQJUaJ heIheICJNHaJ heIheICJheIheICJaJ !heIheIB*CJNHaJphheIheIB*CJaJph0!!""'#(#Q#R######$!$b$c$$$ % %>%?%%%&&&&&&&&+','?'@'M's't'}'~'''((<(=({(|(((((((O*P*****0+1+8+]+f+g+++++,, , , ,heIheI56CJheIheI6CJNHheIheI6CJheIheI5CJheIheICJheIheICJNHL ,,,,I,J,,,,,1-2-[-\---... ///V0W01#2U2V22233433333I4J444<5=5^5_555556t6u666'7(77788M9N9]999::춥 heIheICJmHnHsHtH1jheIheICJOJQJUmHnHsHtHheIheI5CJheIheI5heIheICJNHheIheICJheIheI6CJA8+,-z-.. //'0m00L111#2345566gdeI $$a$gdeI $xa$gdeI$ & F hhx^ha$gdeI $a$gdeI $ x` a$gdeI66678M9:;<k>j@@iBBMCDvE$F4FFGHJ $ x^ a$gdeI$ & F (x^`a$gdeI $ x` a$gdeI $ & Fxa$gdeI:::;;U;V;;;<<<<k>l>>>????E@F@@@1A2AAAAA$B&B'B*BCC/C2CCCCCDD0D1DDDEEEEEEFFG'GGGGG H!H#H$HTH\HHHEIFIIII˿˿heIheI6CJNHheIheI6CJheIheICJNH-jheIheIOJQJUmHnHsHtHheIheICJKIIIIJJ,K-K+L:LMMMM$N%N0O1OP!POPPPPPQQQ#Q%Q)Q/Q6Q>Q?QDQJQyQ{QQQ R RuRvRRRRRRR'S)S_SeSTTGTHTTTTTTTTTTU(U2UUUVV1W2W9WheIheI5CJheIheI5jheIheICJUheIheICJNHheIheICJheIheI6CJLJJKKENOP!PPDQyQ RRR'S_SSgT4UU9WDWWXYgdeI $xa$gdeI $a$gdeI $ x` a$gdeI9WDWvWwWWWXX]X^X_XXXXXXX_Y`YYYYYYYYZZ7Z8Z>ZzZZZZZZZZֻֻznznznzheIheI6CJaJheIheICJaJheIheIB* CJaJphheIheI0JCJNHj\FheIheICJUheIheI6CJheIheI0JCJjDheIheICJUjheIheICJUheIheICJNHheIheICJheIheI5&YYZZ<[[$\\]f]^^E^F^O^P^Q^\^]^^^_^`^a^b^ &#$gdeI &`#$gdeI$a$gdeI $xa$gdeIZ[[ [&[P[~[[[[[(\Z\[\\\]]]]]]+],]9]?]O]b]d]f]g]h]]]]]^^E^F^Ѹѯ|shshs||heIheICJNHheIheICJheIjheI0JUheIheI6CJNHheIheI6CJjheIheI0JCJUheIheICJheIheI6CJaJheIheICJNHaJheIheICJaJheIheI6CJaJ0heIheICJNHaJ0heIheICJaJ0'F^G^M^N^O^Q^R^X^Y^Z^[^\^^^_^a^b^heIheICJheIheI0JCJmHnHuheIheI0JCJjheIheI0JCJUheI heI0JjheI0JU4 00P:peI/ =!"#$% P 0TbbKXZ[4j&͎ojh4b xZ `uuXCqz$6eKH\#DvemTW lBR鑸5{&=Vm*ڦGzmz9N㤲%X,;X-pݿy̟ v[GX_V>qʚw>:neUnC׽`Ą],>K죇'rْ}dSmkN&3%(͖,b)5qWzGxĉ!kbP|.PАJ#T&(N)ۚ_UKSIf2Y{"E凹diګ{4Xdf2 Cpd8Ief=cM;4-!k>)H. vjbX;nOȲL:$kx4f lq&UMQk'z"5h5e Q`^>4WjXvnfJ[iefGGw-b }aevȞ|;({= ]px&y|W e`Sl=ʥ%օ2f(qP 6&ߌ[PVJ(%oB 7|/* %%Լ%oA 7Q % %% ތoQ0v %- %(y;;pp߇PN %ීUہV݃WD ~Z"X (J(|%(?HZB-F P3Pk5ƾ[סףPP~7=+E JC (y/ {QB77Q%cQ7%5{qP\=W+J2N,!vPJJ&6c߉lPJO$J [JO3Q c3C ,Jˡ|%Ef"JP~%8:D %߅((@V`{ 7J%,`O}/~)Ad4JA B QI;c?(c( J?N`DZp(D"'Q4?J~%%?Q18*J"J%e=c(gt_+cW %%ϡ(MB3[K9H57c#i|1YH%H #C(A#4~%h"J(AeeKt`.t):Xujct07Lg J6`ѭ:8+kZ]JUUnZRew*kaB}lua@k޳M%˵dW9,;\ԤY9{I&׍WjI VHgW^R+NؠWVI5[Ov_꠶؃:ͨ=[vIzXwYg NNYݼ4B3Y쪗3u9tb -v߱Q̹*Yt8mr(}].f ԛ2AG]u dٝoP\t$C$:)v\SjHj$؅leث0p-| ֗NƻFݎu`]R:JLX5xjuT rUV޻snv*])_h ~V1+u^{+krae+3Pz#7 7ֆMb܉Ζi fyEwHP ~##B*w>fY&;KE]]t\嘢osIuYs/SR3m}79BMS@⪄CҨC2uxTEP}:&{4  W1spH7pLTq! U s?1pEB$חHZ:C`&Txvϒqn(襮8"`ZsL|ZX{HY莍`XT`{Fϛ;nuu$!{D%KYxB9sRw$f|>y,xbLeIu^!DEJ;ʆ}02  (kz*:\ -z޺"bRv&5WD[wl]$8-s~乢ԭ^FIuki+h웘Ƃ3xJymW]ZH6eO%`d64!G^S,"BW =G-!smveړ@:-ש/sj\*-<*IieIoSm\u I^Ɠ6}s5yY1%>;jkZh};J<7֓*k]/Nbs{A{MOoU=Q٪ܛOmzhv$N[G-mZwܢmSY;iic%\Tja\[yQ}ߪv7"NO3z4ܺxyYy#]J'v/^մlYvR;mʁ-zG[6]\fNHOU-@T k_< @6u8ÞMr-7RoQ|AZG()joa+򻆑冬&mr{|Gyռwu| 8{FWu/&f6S+j;\Oodm=;bG}ǛP_ނ* ,LJt.o%B1ZCҌ˚Hd~;_tJPDbxԊF'7dN"7FG̃v1?IXCÀ;8bq,W7"5 PrΖ7{m΁Bn&7=Ky^!n?]ĭ+nECCB4.+QGhb,7Q\>1OqvGbEጅ"Xb(O Gc#kA6EyP4xG G d4DFPCtTc&1gXdnqMHwH\lnꃿ1MWs=i2ǫvGGGGw7b1ywO~Ԡw `_C}ڸ麿#ԇW*Sl)y23z!ưa—ġTq"g&L6߱j{Xfss|@ Ob24?P,JEz 9|=a4Z->s—0e+xXx @o:Fy(:m.݁ bIeF.Sb-RoǂΚhhN`&{.ɷYi*1c1Âeח` +OG̈́^O:~俐g.OpTc'r!?(wb0Xv2-h\UQsM`_Eӥn"bcLD܇@H4 :<x 5VTZi'@)n?f£C Сۓ*ړa9j̞Mo֡hX6`rҚV2@TȜ \(ҟE!F CBFa XUƇ3%tP41:l!$1Y;;Hy{ ?PΧ&b@G-Xpq<8/-$QytfU rf%'F3Ԥy>ӏ3S%kOT<`p{Bm0b0ǰ ڄM͐5L54V`+JY|LLHkC~:"f|~~mغĈ8 2!4ϻ KZiYXwXHU%wḧfC'hhd4jY hCŭP8!C<)L)=-eL~6p"~e-ȢXcQ\Y2bBn̾=|(CfBa^Im}9M~ޓɦ 'wYt@R< G45`,h¼K\#ck;V4161x;&.MtrhblY]po^AM\+4qxe9oҤs M L޴I,rl&Mvrmh^I<_S>6 mYW]rCHNgiOz]{Uq|6hsurowvhsMϓtzf?Zqo@Sq)/F'ۥy4_ b/ϥO-/RgrCJNiA> GO$l-Ђs4}WCwgN3\4-[IיzW_l5Hcg6iFӁ4:M3fg^!w3wlN;9@A^> ;*c#]r.7یD{r3Z@LۅEW>t%?ߌ$Z֔˄ët3E<_9f4}[hZSZPjmu<@N6ؚѼx6l|t8n}}k}O@ FH 7yu4':-RPx49׌8V5OžAP^q_y5{"]v.5v h^-K(]ғ;q4㭑ygNм~Z?D3ҏ_}NJ7oi@37׉YڗКoؙwkMNӚ,T ʩǃ|7Hd c4Ӯq`t~ 1<-8&Mv5Frpf ˸4ʵL3NӌU|=' **:X:NW9P ߋ3*M_:OӢ|{'dӣ8k@3Mހg[ ڥqojNiM[|g' M{,3jT]nwm+{R/6MvB wcP5~wk44f1iW4_20˫W;3xؿ/i{la7lb֤-ت4QL9ɪh*h5ܞho-pOc[YM{|/jn4>МU伩`7g7jlm伵OsVAc ?+7iָ\u:7-Zr17W2oo_:K z`z;ݦ "zHyq О+b*5M%^}w@ RS)c{w3f6Bg3Zi\bUTìA^\nb]Rӕc@hw%ݱHLIMp1Cuc"ば*k0FaԄgď fhL[BCwW0Ťbp;_!y!c<2I!r̢f x p+XY8?'x drʳ?SZY@1L{rFEnp̪8V lio['.LX:!tIV90 7Xހ f}$&cpKĤwj^ݽ-+*ݘFb*ƜrLRx- Tcҍ /t# 7:elHUˏcoCM+ƿ:Pq1+hI& bB1Qk"K.I;΢e|^ۓ՘c((7"fCƬZ̮Zh̎R&Z HL%EKAҵ&001iOAkNLjM/֤ CXտs $3IVTaJ}B1`]o7nt4fJHYU{1ì U@MxL`*/&'^OR~5 /P7ݷ^IV(ڶi#}m/lX߶M!e%𲺞З[߯m?l/VM _ {!ïn_b|bN/:>[\/O?N˫vt=ښJON8~]϶'/?'knfFnBw53DMgлF%Wj'PNG  IHDRG'gAMABO pHYs.#.#x?v"tEXtSoftwareQuickTime 7.2 (Mac OS X)tIME8`RO^IDATxOlTI~ǟmD"-D36'boQo62v=0Rd{DJd4G"H9Mv2C 8RDvߟߏPu[_ikkh?ޏ:DD@@$ U4jT @ҀHP5I i@$ 27rtЙ7 )Sw?9X  5SQkU\}u֌xuvDqHw5Dž1CSgm5VOG&_(VV&c$T=5rۻBN?{4^f,'JKZk~>ۓ~06 =du[M􀵤5l>z[2=8?%ߕPtloCj*;!?Ҟ/޽{{ܽ!P5%r T ʽ\%drh=x;5JfP5ݗSڃKRٝVm|AsKÃ'`f 44K|ۉT SI:u2֠jPC]~b> 4. s$XjAd4(+Odz3|`G-|+1"hwTTU,TPjìfFTjLJ:oeA({+C;?!=Imv;-՚_$sDV[d *9ܟZ:]ꊁMͰK_ \L(Z6/1赥E`UO~Q~AI8uǩ}Ã'#Td93lC|2_\Y-5vKܢ%gϋBgCԎ,-R{̨m!\ U䄨ꇋ|:TaXt'TMY5@,>3*%nabyί(Nr,~$H"aW6#+"1xȉQAvG}jx#=1AaWα퀘Ob|TVb:&!#_X29ԗk2DWoOkf-stNQY$CF:H¦^:>Ckk@ R-@/JĪAV{,oY^De0'%zuϩ7OyRơ9d{zS9vtSblhAP^ۅضMMY#Aʫt0=Bie)bU 3J=#UPSGҖ?Qt.>_10ꀎ[j#MV9@RAFp<*]m1U!<nnW* U;r1d@;sîCv;| Dx;w̮ubUCQ>[oUC_oO"˝((ڜ@ >˩/PU\ ب3TibD }#V)T8oVghk;Nly 2Z ]]A z>`z )XɷÕd3徫y0oa9Z63\]P#S*vo1O8'yJ|BAt|W"1& Tj p?`a9x -ΡՆAP&Ӻ{w)ؚQ4Mo vǛ'?Q?׊~TFXJK2LЄ!\"'j"T @t(b t}0@p!Ixi$l樈TX95-9-bjpy{Y'a qczB^Li jj+OJRCl| i @$ U4jT @ҀHP5I i@$ U4jT @ҀHP5I i@$ U4jF_)mm+Jɟf)-t^$?P~>#U˹ mHiÝÃX~I@\%M:1@W80b۰ٽWMzR]݃!82 X7&>V] 5YTC[h-JwZw;EW.1(C;E6'I&ڃ bG%]Vݦzg(~5|n"GCWV>}-WW/ WMZF˨rsClƊϰ39jjcۻ~o]w<\PP6.fI¯YC*dlhA#i^,b+D\݌6'qS2=zf1:oN3++2X IU(A_w/HBɢì(iTTvRvSwP'Qb[!ԅ3Sj=7/&؝?sC<ǑgVs[UFGd R;F/  őD$1]'GApKcsgkyUgUƌ~5?ϙ1mn(#BsէG—Jъ*r[ Ø?9{#򭸍|~\xr&,Uq~a⺞P,#'S56d~yByVOu9 9/|- ܂k(t{u|$-+T$Qq5ΩKh<.y4?+2<;B(=M-ʕQgi;>o6c zJT3SڂNV;mӊ#OA` * Zq{UTm.xVuJ3e5֍5WL+@ ;#<\7 ,lx NU+P9AnzH‰KǩXnAqdUd1_sZ~G=\}y+x+n uP%.pK9Ƈ 7:"s@Еl{ Y kEcne ؽ9$`*$oR4S Pݽoxiaf}-&A0ȔXTlb("$Q!N_sFx/2|*#jN ?_<"^ a=]=NV*Cgn_E!gv&Z0sGwZ% )MQs86"\2IoqE>~%>ҕ1qph*jPt4tI)΀taI4 B3Rm.D/ >0:wbk/AYá}`F( *C8o8$f[& "WVvw_)m?m4rum1j$&gRl#R $MhX6͔1JH^%N!} עq hcFX/.&'&pw>= ~<|D]^5wj+삊_ae =ʤ-wK?ii[}07K =pnh"tfр;NuQnlQ" )P 6WD\EzGҭzǨ T cgTm~-qKw1>h@wUڔOGJG1=NڽAooUS5,q <:N]9xDh~s`G~M SF_mh_!0*ÄPlQo8GAvApa)Xf#pXK54j;X|.Ujd(1^toݕ`P$Ex#ȐvfeTLLlcMXlrfӻp"Jck vEWa[W)V.ĵLťS۱x07+G!-Gf`n.LEtO u}ƶֆ\s d{ ,j`2ezoa2y}}GXL6Z4*z|7@39,uv~tUV Ģb>'QXb{vVt)¦^- y,lkbqںp7xKpˡ`L=84>)'w6[FcUNU3!m!0B |/^cm-3r 4 XLx V-Z&ڢ RLvd>]֫$񻘳l"D]*a\W {؊uL)9ݬZ|ׂOg! V-Miw0(azrv᪭h {;tJHۃCzW;GV@E%DB٤.%h(;;lDMsjC!Clv[1`~(cJ/Xt.L &ef~AAO*L`HotlN/;CFpbk|uO#ie }]:~mASA˙r˨I+}lV )#9Fz _:܁O1`llN: qB kl ~zqH,l` p@ X?{'pƆ2k!kqq=h5Y%uzЈ19 DbǴ kiVG(zЧz.y;{E=c,̨ cIV`U>\aSKIφf'*}oCX;MO:HKnpyp_1d[է46~Bx`3j6:2.}u*V4x=ƉVNSێ9 ƯVE8@nh С/nb#2~Q3ycmeXx3Ά-T=JOؚ[r9A;AU=v^鶉6զ46ުՇ0R|IX3MgWA_>=(0'XgOU{~qqidC;"_ģO0 mi(j/(d3"P`b2RTaUUBbĘB(E|9#+je{\݃M<q3]subƂf0ءu=fI*BV-S 3 Ns‘vV-SVk"F {cL(D& qW;MZHpbF?ZHKW]wYL'-*l%!0 V-Z&qKTeee//7<}O?-:P~;]\;Ҡ yy!/܆j :KJ@Z Jgg_<77}i$%GMwdϘx߁mc?G%$8w^~bzb!`C'ҥ΋$Y|>js>z~ǐ1:G#8y3Jdo(Ve@9TGj!3Tk.}Q4Ix=MkpDYw(ZyA;]4p!֌,R$ϻ{6]hNl*{]tWCUvuCnL=;x|.׎(gXs10%"B&4IRxf{Fiig5NK@G'=yK3a&wpLخ/ ; x$ӺW#oFy% ʉݘ2$wfJ* x s+2eCY:S;yte[sm(0J=FW [8/׼ANqɍLo dEEmP2&9U"iwFZ q\+TG9>R09*T=B@ܪ'Y g*p1Ɉ8?q(DIj>}^]Rљ)Ub)uj 9Ćx%w<^8YApI[I>zm> "Z6VdN41Lr>ē|DkŴh aV4Z;w\B$t4|* Mmt/|Jʝbkm`BsfoDmf7pvKǙ\aOG>?EI%Y ?/KjSR qqvùT@'u!0oBKvg#ئ,Nh6vGϴ+R71٘>4„kZ :i1ٗ3%Ƙ']- 9ȃ(w ATǎHJ AP͗5mar3USVD( ?Ʉη"ܧߝ9B"~hd7D#ըY| IKRÃ_qNSbYؾvy@Crm!ޑTo("Thx} lq~XwTV!&#E`;aK,j3'[>ēN) ]g3! @H%|յW L|X6+OC]" :9S-{y @1ʡZEUqDvP@M+b\y|B2cMkV|mnv1R@;`ँ/We-+`+חN?[p . orNr*X&T{Z0Ip ~]G9RjpMUij9' ^tD4I)u'Jlj (k1R4Ө-8.;K_h V"`Zh 4BeBlQ;E"$0~(hj1M!8%}m"A}fT|Hn8nyQSD5I`5 K-ce/nS4KDR4Pܼɗ d%P"hg!۩cLįpu=_$824-@FWc 8Q ehhԌհY%̤њ 6dXE ᅻC ڄ]pm{2= o M>JZEӈ5B\+`^}T9m\, Fn4Jp[cgw3 .[V;#A:IːTkӎrQS tW<K1U"U=5ûSeFN7M(_;8ꎕ~,Y)\jи)/ .5<'|2]w<+ RΔ.u٨G5Ѵ/_,mnD'; %DQbU&e?;_]cyjmi4w$UIGfG_ۂ2_3NYZZV]hžr꣘|yq Rm/9WtR&eاVnxiJr+OPnwWS T@/(v?ܿ?@Y*П?|i-0?iŽoR!K ,Ӽava"ds`-VlG'r~豷р&ǣHn- "rۃe9.h]վ c0 Zet+Jծ3^ƓHOmfDGuMvo|]#=m밾GE1<c˰v$~zFPzdlIqK'Bj|54iiaJWZhMJU.k6Lvn!kG-_;Vq=,CkZ!Dh6R ݩ8i{MŏaYu\iB{xQ^"oYnߒfs.PBF|:=Vg]G'K 1vAU+rj\Z*TkWW k&8Bv! _ԇT*h4/]D91͛fuisƻ^܆I]B_vdUHɫ\fϮڽ]n_%KGm [XR PC? +$55pX=ol@""mw0 Hh%|Oۮ[DKGcvį䱧m)T|3^kW'2uwwkYp3qLL2ߚ_]4d\]"{moBل_[H vD ՂPYDjT B!R-UCZH T jA"ՂP5Djx,?|Dvwl_GVPBb<­7/2[>kmc,퐕eDE,LpTV<~XgsS",>;=N+~:x,,4Weo>wyOF 3*c mAK"e0 ۜR 9WmI/o)\2`ك8KY5 FZpzl{1qc YTЪLwhx=4@Hj;jz` h"[+4x?K8>9gɦ 14p>Ab~%i+ߍ & 䶣򵫓F)C<ʬ5[ce r^v 6(0^44d +1E3̿Vښ3*tzwJ5SE k/54L>mgXcTDWw)%Y ^4w lh.ac4 Xl᧎Ts ^s瀁[nd5CXkl+::gUcݧM[~ʅeK*ۈTj 5_^qo:j}bCIEsE#vq-s0  n/&boKP u5Zw)bN)n^:1| X^k7@1MMdPP,Jk7\F7_7:Y(df_~hx˵(I0u}:AWWs ZL_zc93p_ODz+.(,eVib~mn=cA VGIܾ۟1c ".AxS IJEgn%RU- W צ"}@qXXsz53Uy&;U]idkh"d],lE q@\ W`v9%QƗyZ0f#F-zUS ƣ~s? ^4_Kv/h=,#^q9hWVϸ 2 3«xeG&/>ty+&új.O +R"$Ǹp {Vpl^ȡ{+\՘E1L(w zBǟr hZ⻲5j K64R5[S"a.J#*Z<Cݩ sxdlMb-M(l*@?5awW%7w7j^fT3 /j0^T6NiwD˫T͞<Gkfث/cw'xc,5(I;}LM4X" J5:"sαoA`2rb̹ %egw\\D%85KE$ba8E]D{aYV~u4ٍgW2sT\2.\}jTڄ"FHyB}u\5M{kվn$y4B! 8h2. EcS>̀0Ś+?"%&reFq[@ i"җz.VW$'yR Wn}.ӈh R]._Þ1tnm-fe求T zB(Ty5T V$W.!e!2_-EZH T jA"ՂP5DjT B!R-UCZH T jA"ՂP5DjT B!R-Uc偢 B  Cx:B$~s!پCo?)*7B!R]Z^&e,uOߋ \H T jA"ՂP5DjT B!B8v7?Uǟܘ)63H-k9fT SjzΉ+kW's׺@BLL}s4(ҜsҺBj!ef/Ԧvwm77'߬D4}b iTqk}!R-coqȹsΟ{3L;d\- Ft,ư!Pvn}vfU-;4g|5>Z|v~yUk|׿ka֭ϑ1Ok@kKo06gED4Xq!{{GqiC#{,#y0F<3kcRȏMpƜDfED_G C%RwR1b[$li*,>UFH?27 YO7%1 h?;CQldnA'?ukWO?^PVɒBWh)ξW~rncn/|Nrt.׎m=,rחNpS৥E;I5*j*bUb n9ܶ IDAT1৴DЍ7(+‰.Oy~|]ğW ^  Q^ŗg~j<t0~E9mbBM >d(4REFQ3t%YR4l~X60:UTD8E'`E@?56 d3 XBxPC e!xӪTkY()(BYqX d2{g ZS )D$k@)4 6iq;:^Ch%YBj K zۗɥ7]hd@ w!Vń?0U0~d2ݲ1xpjeF[IS%Pa,F&A 7dv#Ynoٮ7.jaK/*-Iu[>TA˒VbԄX@Ql|nnDU-ԫV|CZ<= Ѭ!#kt 0KƎ>AS6ij~ K-AsOJрfᡍ *8 I.Iow"m4hhHL7x}Z۩lbQ O΁s0AcbBO&2(O"õVDڲhԑ}5+bq;^OkWO!u4;;6jMhWd*iA4DsT Bͣ; uƜOa˚6rʌ9 -}N\:_˥bU3wg𱒻RL-T4Es]ooyƧL;)U`~cH5 y+<8 kx͞kOL]ڔ# 1@ORP\sc)5MDZN<4pCg;=4FEO?Dt$̫ki&(1nvB½?;tcU:!]V5x͖K'3 s9}5uIh;yv\e j3 !Vzuqt<y$Бynk3=W֬hϫ|̆YDf'Y\gϖ`*.ٔSgb1Jt@Ɏj^zulEA!:ACWiorWL#^9|%U/dƥy02tBr>Faٻᣰl\ AHRlƐ( atxŠ|"3_i>߈g \d%ƨ؀:Nzi/qAۢ#"[>1PQnXM2EwQGJ}]TaXbNsaiu:1mU:I|k ݵQU=jn(L]rZ,:PؓGl -|qQiʲi2 E!F(}Qw Ɏ-gg^&3 drơqA F~"lSdP?gAwT>1͗Xq(%K}ZǑu7lgW e965.dBB}?Y@&w2i4Fh^\SS7sie\)#(ǸQ!,2j>v鵚bٜh~1 DØti/p(u(9C&:|s@;}yO@ {3LaUߣY4Puq} u܎_v^sW93 .>\Āz]ݵ3r樋]€n/ sQR")սӠPZvlJuiLS2S;içSz3M }O$C {>Xt#_BݥebrH?2I"C;M:El #+"m WGZ݅ NiM"Ě *9lэ#e#%BTU3 }X7GG ma!o B>fYwR'T9fVuyʝ |r-XJlEl'0ϴE&Nrn44i.k8y5AҺ!kyVq2 w<QPPx긞R y|fk5Y9֩cp'W=uk[Dj{xԝpZŦ%xޛ7?kT&ZŲm=sh_mK_7WPחN?ZI[@iW(f炧57\k{GͱpZBQήGie}{=[hLՕυHcG=>{:tSu|R|Cڇ.SY+;6G sH&uGȹ>' %`CiUP\-U+sh m3+\Z~wm?O7%\qpS}r;_ >-Tȍm.%_Ʒ:l%" ߼֫o-'_17*HuIb;xphP6=S? iyhdO1IkYI9vwC-=^FqEBee[bDXψ^RDZ!C$)^vaqvG46CR .UCZH T jA"ՂP5DjT B!R-UCZx&_\߸Tџ"O>}uW*8;'kftb^Qm`ҏdUWJق5;fj6 Erwy]{vuQ1{F+xn+Uƕ3h{ӄuauxZ357N(/ʙJS"͆ x|- Hhq 7_{kɾ_U ^ o0{7JC⪐[o0-hB˳샡mX~Cߣc{aRQ}[=\E=kǛN/d *a*sb7m/Վg^~E{ mƪ; ULJhi4v6sGRF#w*-1xЪQ~KD1}bDF:@#xaޮ#)*m jyK,HS|'7fymFK )C`aH U"c'AƎaRZSqfعlgRf,Vu-4|Oi;]/&8K6AoPCYe>e$?^nEMqKʰuB4hUW_̢zJgfK/a6fxx7x|/0i>HSφNuWGk< UWƕ@pWCmh]ʰQ&!JUU-$^+AmR=12/h {:7q3P->BfJʾ-ceܬ14N@&',?e&BՋ6ғga占H~]jq`^$v?6ֳ&>$ty(뺚u\ ۍNKc?/d"+^,:+UH'Bpc*@6'ҴcaQjof5o3}gHg<j9̣@ْHӃ2LfkL 讹:},8<?JBm?^p5 7u&?"cb-ޙJNZŽ5l`G Czb22ۥuK;2B7a"‘@Er2Qj;r^+)]l\9 c`` u6Hǡ*DP¡H';,xOaHFWǎc7{hb1WACkH7fP"B27a+fYZiOg)˯X˳&2djEϑ}vB9WhXĕ'2=G!7՛&oVωtTJ0 tI5rzu:NŽ$7=u䎒Dy 肽6Ǘa|aME"  ŨEzSUŝ;K6puP5}<+GmՈiUOR[V-j7o~L>oI! 42_c=~PIZAQTf&Z<9Y=wAwˌ Zg T;3rXh_Zf(|np+)zu(E 5ptbx*E>w:6l ю?~N%'Uo_͜z Gx# >̿9xǝ[gz+%/$fr:w^ WX"i:F]iS{kUxu2>7 P"ݱ/Ws./Z^}+PokџoSGhiy 2W^^vB6[>?3[?7[ktҏӸϵA x.C ֻ+EO:oqh_ﺥG&R=_0w_𮄭 <8FTTS7mFݧ&&w_14]?/q%&/DfVt<=\;a[t|v$l?;TVhW+&xmsцa{-u`wp!̵FVR4owu_l'lLOmZOدj5˙Mt<1(et̳BtTlopE,?V%h/ܦ5ul =]MzATu#9w3+eЕ6lsWW:wԎClq=zaxB9q8N׋nw!JyykG6;lZ{?eҫ$4tm6m}yT豷_ٓSpe>/-Gg̽Ph GG 'aG_( ~_=>ZNyr6y}ràf7`ͬ"~wxEeϜ>sfA''oR^;x|  n3{{t¦18:zg۫ sj&/1BBcwН:GJJLlqȇ٥mAε *ގ2NR={L疂 1f6|(D]'X59#0<>aYێKGd!o#.DH+H[f>f zkr]=Y@+4L$~;v<\W'7s(w- ǃ/:{/f5[i&)>ɯ*jl{* YK=4Eƾނb*AUH6]4u?xYJ5t0EHJ_6R?>DZ>wT2mamMφ2D 2j`__jY}_+ OM4wM+r9\I [[ ,ľxHliM{$OVRU۴~n9+V,ޱziVbY[W [*4ckq/CJًK R͝NpDX2N捴Z05pfUoB*p- 6I>-D'/yT#r<ydlRW5ݛbpZѕ'M" Q# oPi7l7YQ7dQc4jeJ ZH~%@Z! Lzx!RZ-D qlkx,*[89@F'lfCzuս u@xi0/JC:cc 2@Rκ)PB<3pato5o ~Z-YRjmPѹ(踜D C|VVhCD8v-lcU]t3kGJL~ZHN߁mOmڽ҈T ycx@EKhBr3_*Zh "R-UCZF)>6 Aqդ %OՁՂP5DjT B!R-UCZH T jA"ՂP5DjT B!R-UCZH T jA~wy!GH/Aׯ_ǿ?я6/ΌN\Ǣs!,:B;wϽ㹢"4^WBnRt.&hR B!R-UCZH T jA"ՂP5dZ\Yco0DY~h~ڍ7[،iܼ'x֫T : IDATo}WNz~:vK3qphdso6CB@7oei tB%35"BLL}yV?tx{6t )(Drgk[O^nM~wϦHdpcOT^_K>5rϭ$J{tI52҂9 3@+pg6=;r\䙏5(z߻\;lT^_lfrܥ$S"Ez![3hb42M5/Sq9PttSbDg{薡WownYvwyOC$mDK OKC*Oĝf$$҇FүhK'w#87ap#@JƵ!i N*3hf՞IYU|],?ͮ+R& d)ҽiuWb3%dB RUY0<=:S6ۜ,w8eps!WuG#_ZBGsZYTnhV8O9ROA 6pVb 6n݁NabmXJA.ȹݞ֓39p/0AHݙIt3?\Usֺ]zҭo׮'NA ܁3ء;[oO1WZ3qEWZAwkƟ]Kꥵ⢭Mjw:ls%-gÇelrrPB2;"o tWsȤe9%pRlz¯LW7/"b"~Gaa%p9W9c R0xOD[7gZ/L"o0Vcw䠆kX_>6Q0!8<,/!T %UyP!^姍.yڞzYBmB6pX~iO ;ЦTdGuN/oOd֭2%HujT B!R-UCZH T jA"ՂP5 t\>xB.?ws!1k\*KDq*!} T jA"ՂP5DjT B!R-UCZH T jA"ՂP5DjT BXwkϽYlf! RͥOWht}-n::jIEīo˷9WS@U>vK3xH zK'^5 mn}F|rcF,GCzI=pJOdPuGaHo+!mH۽;-ʂ:Ȣq-\\û\;=4Bۋ~tΣs{ 3^bv/ XRHiR| ?|g@ <8̓i6HC_Rb5wGG/ᝡD_ێ^X=oԫTjG>.]>zm/& /3`[)I$TxJ=;L9ݡg>b|K3~)C wv4hEW_|OSrz[t|v"ց  m`'5- ?.ħtx61"g&>PU ރwb,ijhSG|ocF߁m_3BCŶGC{a&_ 4 ;}f;0*2]>_A_Yz_cp֌ddWo%MܘeFl*cƟ1^AW0^2ț%bRS;q8> <=`Lr&i\Z=_͛2gZ (HCiv6o4? ƻk (,%A| i>ol.\gIqUBǹՂo 7hn7AWDK3~l2i"ARoҺ}ux}w0wÛ92O>bD^Tp.+OPCFOL]f-́jw Y*i\H<̰BPmeqx6<'+oZ1Wa]:zmuo*AVnV/-.JL+%h\ᦻi(#xi:V3DJN%8K?%& ɴ"bПZ"_T٥(~qNh eRMGi"v 2ۖ d,J́H}I {JZrg&><' k-=C_ӭaw+RX  0JVIo]@:fNr|To{{w/5.?v.FߥԱP\oZm-"vRuN•pn] *41u|m[H\5qۋd{ s,A[ĵfY%%{:&qIQ׋1;Y]p])M/ Z_;@Đj٣c R鮹u#%-myb``_ZIų_5[u )PWL+w>IfOY˭S¨e e\]nɀ={Ğ-{{Gd/.y˳=z7or M1Թ%bO(yyMv^v{@,_ڋK]`Fvj^XmӡqDޱ'|HunWCbyEpvmiڍM>uFpƅjI p+ ~ 6@ 8gg GW :zRMs9+HgDZ7/jc5v_2{ YC :-ڠ2IhǸۘMؒom6?vʣyOZ$Ɏпhi|X[3<Ҹ43vUanW-`vu,0%y4Bxjh%dIh{!7ot߁m4>g3 ^֭/!!E8*H\;B`돷6V <>>pcşPuB)$}ݚb5l^Qt ~U^ ki!qj.ֈyeYs˔pq$KvbCˉE2O"_"U5UrŒT+J%`E\@&ҎL/|ⱬw"<La)7!Ocuԇm簽Fe:84! # R Qߣ_ȍ?E+!eegjiviĖj7ٷiΫ)<"|wBD "B);JV{q=a!$[[ 'a4B/cs m%U촵kW%>;ĨaP~Naqhk]R-H{iƳc ɕNյK.}w'Zզm!s0KV"E?5T}niEA@7۔IDAT_^䛖9 dgjVlڝG{h9;sG}Ndquw \qS;'%LI0z7+ޣ#C \3MwDQSZTԲ 1(K  6=ZC`kPzPs^_<sL;K6vd;_m!6$얧ph;oQ[ҷO$!gNR 43BMOsi*ˑTVk[ĥql뙔m\J#TB*0:ŀ\[w$^.)U(3)K5*tŊ$彋\Mϊ z]5{QtusI..HR,c6YMUV<DzSER-=hjU E 9ߝBHY'rn8.5t>=B#q x@Bɉ)̬pK3Pǜ4nw@ 3k2:OK.n@Ȃ;񤺯1`v ԇܱ4:jm֖+F [#U*v ,4Fo#S6/Tx{wma6Cg|@C\>J -g^]P:72T1-߼qHYz1/M6=NU\%P nB,ը1Z1G3iK|V:9(Ik }u#{)5a^CT  ;H3剉8^yX$Aj;>Tu~Eէu~Sr4z;v$U}s.5S"T Ҏt ]!H@t ]!H@t ]!H@t ]!H@t ]!H@t ]!;+sΗ(t8;.PV8KI G5R)EAB. AB. AB.1̹˯f4; ni[I @Hyϡ=Idʥ]Ԛw'>/M&T.UA h5s1,1tqF0=yw~n::\2-.}qW$@C+߼2~(9:@#mG[׳͏@[XB/9C%J .oN?$_@\R nK @ctacDoAWNsaJ5gy/jdK4 s=tOӡ-g2AoxG/?7=hN \P!R8LhTSI$'m\X"2rE@=ۻU7x f_zwg2.dnrGڎ2P^wA @c+H<`pq_WO]]>^*h .܁@xGrңA[__;u[RI&ں 9p?}}OoPr W3P3?73cP6UJ$:Hh0*TC[0;HkllZ%ZeWow̎^jYҗUFc##Cޝ!Չ!,t%9IsRWOf]h`P͐LT<}tEȈ]]z5ܜ7|Xe N.W%KE6s۫[Ce.Y67bH<PvUkޜ~sCo݇9hc+F.w+ =sIFOX`J`~~~Ϟ=Qwgox8 bq˅/J܈lqv:qbqy囹ۿ1 sxUzPG,ŋ{zzHYz|ֵ_J4PMU#%E AB. AB. DI*{QߝK &]r}cۂDD-UR879-IrWI"i۶1N ot)PAI!zzz.\ MXϾI"~_k/%p)ѤF7ηPuCI"lYt !s']4oH@4?~9kY AB. AB.Lҗ _LdöQW @Y4 ]@"+C9k?wn\}oAsz\6Tрt(I64 ͛)Դ @|O洵- +޺~pjePMu Hi9jo<:wtyߕc.sPu H8(oN?c?WWkd@  HɁ٨x:Sc]KD]ff TD8uwGv  H;yE/H$Pрt(7N[ɕ@-.E'Xjh@an#d%F @>_Vݚ5Z4 ]m `рt ]!H"p1(UW_o>Z\ra '7G`:P6rzQ@_4 ]@L++g6=i¢Z>Zʇt1I;nߵ/}dzЕ˛haP"O躦9ɜ\N\YV.Rtj@{[뙧(QLMMMzY M-[UK aijᅡ#jANUJU"Iw66s% ja|d^ku{~M81sR/Oo8yAϿu}7:&RRFCvZF'&+Mi U{kUAWG4EEH+}tNbuC݉ڝLJfUy#ڟ+.!פġ;9ikR}V]-隻B$E&CP'fN~"Hm]άy4"W;vH А^Vԑ}Azrzr{[#)̌@bHQ9)X><6tC22^9{wSOA+4U;Rkd4׋a,k|dzTT=];ufŲS8BUZFnc*~&O..;SlhP:{4Z)|=7t(<ݻ߻3t \|`Q;lθu!T)8sxbOO~Xօog2ssI_ߓmG|yy={Ms3=`_]e,"w#[ j8kJ%R}R}2TEoBڊrx'x} W!2uyB?zM $~Ғ+H@>E% !F +R΁$ W[s&KݎfeeF3t{:tK &8;̵A(dK;`aPMJ(%]a.XF_:KRÃa" whP,O'chJLAbI|h9KDje n97ݾ?91sR:W[7l>A^x 14lg DBJSSy?*Դt L/w҂nt[e }jަ~xp@iXϜ 'Pie^¼S k(8X[ 5,H$Q89=T!Q^J\ӢtH߇~l,(~=8kvq!yPL)yT9c+p*$l'v_9h"Y b{;l]]&n 8nZpә`|xNwӖ<wL^g!xMƆ OdrC$=1:SS,|cvMH]'˂9  HT4ADQK/ȿq_7LKIl +&jQu'3c0IkH>~z+$1BN=UΙdZ[#m㿖vwvF /MIwIYthvH4"荋g~qeԮ2 2^{-jټä"u^\J$џK4Kuw(F쟮Oʿť/_ }z&Sڷԥlڼf&{E;{f\կ kޭT1U[@5U;RjPwa MM=AK]NwJѠtD3'8Dt8;g.^ӣ#H!t ]!H@tHݬ E.D  0oz  B* ]HP \!H@t ]!H@t ]!H@t ]!H@t ]!H@t ]!H@t ]!H@t ]!H@t ]!H@O2.Od,$]06=M#oC_=߰\k%Z\= !U/VhڗG`~~~Ϟ=Yu>,UH!W|_zt'~p 'vu9:wtJ\YHi;.kkL)w]n*ek"1nE2w]wc'@%/I$}GұU@hH׏>Ó?xQz2cR*Rh ǃʾ'?ٿ>?1 ׫G}0j:/ .t 7*Գ+ߨ(@D1IʁJvTv)$R΅/J/O/w"sW-L5GݶD R^,JO$;7oV4Z4˛ٗ ̷[tW(bcRYIմ:pp#S./y^<]+Yu}z6]^Ke7eb6Eg3 t[iA)%Tu7( T?}̌U2KRT?,'8_}tw(" &A) ۿX"8in]X\R|Օ{}-xfj",R@vPE5I1 1^l;X啍Kf)o&m(.,~!۱zo;M6^JR%I\G0o~ FA.t(tްAҖQ-2G) ݅J=49~g\}KQ̋AGBCb_nWU?ĠOm׊kYS.gL_u](iJ* ߿QhP0>jCYN}f5A\*WE۔e᫡Aͻ >HZS[A [r}o ٱ^Ͳ~UjMC>o// UѠ`PRb4|%09[s\.SRA!8J\'N#isg\8R+ʅ4?E*^Y2| Ub>+sɏvt|.6p IDATba)RZV6KM :GŨbR\^-\#/DD΁#eSJ4p+BѲ7"z hPC*wA2W%,MOfz,^v_4?KywPhwn|mv;f يhlzvPAMCG=4sץ)Ԥu,(ɖGzްbC{$ gό뇪qQҲ];Xh gxv~ׅj~EϮhmD1벅|(Wt4(9h15$- _j"5#J5nI!rSwTwd#$UݜYxo_{X7eNҘ@wjG-}f@9-o٦w6%]0O_ ZUr̖v 1=LH8+K}7zpgN$B5u%uiU +B\AU>_h [E=e N1JF6J4!H !k~]ANesTQYYt,%߆+?x}, NdϵcZIG`=(;s1L:{Ѡ3'n40ϸNXoUu% {Ӥ%t_22:Sl5-9ޡ5(׻[/ZR'a5hRРJFܡltTWݗ.,: ,E`4T(.Sh`JEf}UT6*+SZWWnO >3E2rh1[kh:Zͦб?rGsFd@4R.P2_I]yTN6#*}ҩ?̙vZǛȃ/IyKI1_ )BuHd hھe5IT;zuJ/ ~oV9-} RhP^3@@(ܶ:tn;?*uLX㈋eĊtfhos:rh7X)?y R.=*},1?BUo`7eGnh`(הec jH*jDȤc cߞŻSo}v ;f?e "NzX*Wjl͙,'h3WR:9@~l}}ra[>r?D~̯/ոkOHNWyj<+Sw>rl)+)> Bn0}ߩB Pat:ӻc^=eIkoq黓|hP3U>S(g"]d$ZE'ᅭNחկ)W_~SU\+ne)zzrD¾mYA6}qU>iR 3YPkJRѠ/b,[|PAѺ̯.?<6wU2w?[f0|}wK7酜tun}m4VEɥRYR+dRٜ"l|a˾Mw}ީC%F8Պ)7S;eG$ܢNG'}\Q!;}IbeֺZ4هү6w Rdw̯Wh f| DajF9#9Q}MwZb4M_;?,;V,U@B LM={g쎳T"$V}/('TE&8mލ2晒$xͥ:rھKTI\HIP9f/QN ::%.;H3 7 B3c~=>呇Srȵdk>nQFxVK%1è뎅@}(8*[{fHc( ef[׳ICzn7E4BP$+`C%'Y۸婹^B.!?S|9.9 z!Kɖ1vL 5O xtݯ=;nP₺!N=I3]3O\}9Rg{K-#HMr6zhvwH6H4c}Hj^yʮ.DPO!j4<:ֹMʙP"N@+b ]mjә͙M$ __Pz%9Wcg@4M9'hʋt ]!H@t ]!H@848;\3KhLDAкB. AB. AB. AB. AB. M&j Bݸy3"kIPcJ ajz&"dd>=t)t^x!"l ]t ]!H@t ]!H@M̻$$]?I7:1tY , y9HME较?I*z.,-9"C<et+/ɿ=ZIUv0)eIe]Z, vk @ _OFQ"b| CGN-R,<(vSex߲!eَ"_,`Rג.F5Crn(gur#wke$rϟ;^T6,&K-\HaF%V9l#]yʟ2>2RTsSRd 5gzTO˵V k7̛˒4BwggMUflxx}VπZA`#qS79WOs;}#@;~#^xqe U(%dmU-Cw0弯:~${;+-<5Zݥ*wt!A]}ĩIu1{k9?s]K O*;d\"^S+k1z~Ҝ+8 tA:%XN.Kbxl*B|8{F-*nWOhOR '('fN2PNJ/T힗 eoe')j6;[dž7v3[[R@J9o#dͶN9>\Y=ltNRy]Q=V*g\;[_O eŦ-^qam5iboJ$DXHȾdEOZ2yP uFjN}7;IyCo_щ rjB?dY7u܅^غ;tgZi<1:`Ic3iW>NmV4#pLE'V!tg֫>}I9з1GuΔ[@w2D(J/F(K[% -{D$x`o *H\r'ٗg|% QGa)kgA%)Aboj P7 D4߹ >ӦjFgAdt!$[&fIp̶݈ǹ(ށ\^>i4YD? JcK]抵 AGh(2W˭92 xvV/z}jmhGƧҒYטO=IF^&S6M,.Ag1C'M^]24A\U%Ұ,ڣ^&lqΤp .r*9YO6l9  B}0fBCt 1P=ٷcNDԲLjZl᫕Ʊ1M*]S3ygp/;ɲa><N5A+1`5?s烦_7'cD"sT%uB5ՠ$l9 NlHCWz\oO`NV֋R&/ijjzw6IwvuhCyR^}į rh4olsr:~h9XOcnZwߛxm)LMnwhG&rbueG'&b#Y=WZo>474KnDFCѥ.]pru؜OׯI\GGځᢾN>\Y8{s@[S=y̡vFb|lY1d50Bª3 jPiL̬D8]3g2꛾O%'rNy܍1h{d4]-&Q'LT]ݜww[V(0t\9~9yxhuTSSDA.j3Tsd$IDcN,ur";:aЍ7o4wvvyx'{?+ ]-{'S33qMl\Guy8>2}RlB 4??ٛAWoA*QVof&bw{1n6 led&IIHI !#R¼,*'L v4ώ;JCyi)hTdWVnO<@.ؘë<uIbA:32FEJa$斱DK҅@745N:d@~рfdm^|IU!n DP殎u#/r0W6P 9srS1|wȒ"ȿǻK?ᖯ;MK/*Sx2B9w'fe&( "9Ngc>+˦j0P+QEo{9t@iGs:-7I*er- n\tOn1 J[ ]!H@t ]! fܱc}ݗTQ@Jϒ.hM/.HRt`sb椓K,H maiiڪlkmԴ18mx?៮_S4M9qlM-[6!MUw yY_;]]p} *,UuMÃ5q=W3xIV\d>}nN fƒKʋrw%]h ;tk{rJ<ϜsWL2кU2p哓]O>@ozx6Cj6a_m< E=/HK/mIOz֦8:x#N̜4sowW g2ze>j##%Wڎ^v:L>]Gt*ICCI˿_DJO\>Z0CѲS\l~+wzA+VjWQ]e RZ ~pލ'c<M]ϫynvjzs"QϢdF[,[vX /?Haj..2ge]zfٔ|G-GxCjxZ2z]W7|oPVw *O7ҕ72A?l\HR"^-5HE"fJPˁulߎ72xoqُMf*rͤ],@$ gprN;hM{ )Cpu_S3x\ Ñ3O;= [ ;(*LeKa0AK_^x|#[E테i:]PаIAݼopfIKd .f"bbhv}Ҽ& ≮r̃@%Tl{1~bYD0?<6a&cܢteÛI ɐlL"XF^z@l.rY-A*w!T +dwIW3;@5}BV(ߝP'cX[:4l1oŞ(*B*:@: eI Footnote TextaJ@&@@ eIFootnote ReferenceH*4@"4 eIHeader  !4 @24 eIFooter  !.)@A. eI Page Number wbXccbX# #z#z#z#z#z)#+4S>mEgNbXo{*;NO_YOp)S zZ-la%@!~!!"#8%&'z'(( ))'*m**L+++#,-.//000012M3456k8j::i<<M=>v?$@4@@ABDDEEEHIJ!JJDKyK LLL'M_MMgN4OO9QDQQRSSTTv?$@4@@ABDDEEEHIJ!JJyK9QDQQRSSTT@a^3R^RR_SSSbXXXX29=DFO!!_B$&͎ojh6b$=,!*kb$F%Wj'J+b$AmXD,]2ub$*q;F.e@n ( `d    pA .@cabinetC^S`T^S`T"Z  C *AC_folder Z  C *AtwovarsC Z  C *AsubclassB S  ?M34k8AbXT /T L/T  TN3]3FFFFKK/K6KKK)L/LLLNN(O2OVVVVVVWXcXN33FF/K6KKKxKKKTL[LNN4OOVVVVWXcX::::::::x&flqn".O0Q0g"sh^`o(. XX^X`hH. (L(^(`LhH.   ^ `hH.   ^ `hH. L^`LhH. hh^h`hH. 88^8`hH. L^`LhH.((^(`o(. XX^X`hH. (L(^(`LhH.   ^ `hH.   ^ `hH. L^`LhH. hh^h`hH. 88^8`hH. L^`LhH.h^`OJQJo(hHh^`OJQJo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJo(hHohPP^P`OJQJo(hH hh^h`o(.  ^`hH.  PLP^P`LhH.    ^ `hH.    ^ `hH.  L^`LhH.  ^`hH.  ``^``hH.  0L0^0`LhH.h^`OJQJo(hHhXX^X`OJQJo(hHoh((^(`OJQJo(hHh  ^ `OJQJo(hHh  ^ `OJQJo(hHoh^`OJQJo(hHhhh^h`OJQJo(hHh88^8`OJQJo(hHoh^`OJQJo(hHqn"x0Q"sY        :$                 Y                 @VV0VV; bX @UnknownGTimes New Roman5Symbol3 ArialKM Times-RomanTimes3Times? Courier New;Wingdings Ah/]Ƣɸ"¸ G$>4dX `sc Teaching Java  with OO first David Gries David Gries       Oh+'0! $ @ L X dpx'Teaching Java with OO first0 David GriesNormal David Gries168Microsoft Word 11.0@4W\@l K@Jz@\r GG PICT b HHb bHHTxbb          6kZwwwwwo{wo{wo{wkZ^R^Vg9RV^R^RsNs^g9VZg9Zg9g9cZg9^Ns^^Rg9kZRV^g9wV^g9^g9Z^VZg9^g9V^JRsC ^^kZR^R^^kZg9 ^g9g9RV^kZRg9ZV^g9g9 o{wwo{wwo cNs^g9RZscg9^Z#^g9RcRkZg9g9RRcRNsc^kZc^kZ^VVR^NsZcg9wRckZZV!o{wwkZwq^VRNsNsg9^cNs^g9^R^^Rc^g9c^ZZ^kZcJRRNscV^kZZR^R^kZc^kZJRVR^ o{wwwwy^VcRRVNsg9^^cZg9g9Z^g9RcRkZg9Zcc^NsRkZZw^Z cg9Vg9g9^ZNsVZ^cwR KckZZcNs^kZcVF1NscV^kZZR^cg9^kZc^kZ^VVR^ Q^g9^g9ZV^Nsg9R^V^RVRkZ^kZ^^kZF1NsV^g9VkZg9g9^R# swwwwws ZcRg9cZRNs^g9g9ZR#Vg9V^^g9V^kZg9g9RkZg9^kZV^^Zg9ZNs^g9Vg9Zg9RkZg9R^ W$g9Z^cZg9kZg9Vg9Nsg9^kZkZRkZZ^cZg9kZV^kZcNscZc^g9g9^NssS R^^VNs^kZ^V^sR^g9^^g9^kZVg9^V^Nsg9R^Zg9RZ^kZg9g9JRRV^kZR^^kZRg9^ZRJRZZg9$V^RV^g9^g9Z^JR^^Vg9^kZJRZw^^VJRJRJRg9V^F1^kZ W$cg9VcZg9RkZg9g9Z^^NsVg9^^g9^Nsg9c^g9cJR^kZ^^F1^sQ!^ZZkZ^RZ^o{Nsg9V^kZg9JRg9F1kZg9wg9Rg9o{BR^g9g9cZ^U#NsV^g9VZkZsRcZg9^Rg9kZg9^Nsg9kZVg9g9JR^g9Rg9kZRg9SZ^g9ZRg9g9^g9RkZ^^F1^NsV^g9^^Zc^R^ZkZZ^^g9W$g9^g9g9R^Nsg9R^V^^VRg9^Rg9Nsg9R^VV^Vg9w^kZVZsg9$kZg9^Ns^kZg9VVo{kZVZkZg9^^^^V^kZ^g9^JRg9kZcRg9^g9Rg9^kZg9RVVZg9^^VcZg9kZg9kZNsg9g9Z^^NsVg9Vg9s 7ZVRkZ^R^V^^kZZg9Z^g9ZV^^g9^R^kZF1NsV^Vg9^^g9g9g9RkZg9VZkZc^Zg9^g9Rg9g9Vg9^Z^Zg9g9kZg9Rg9g9ZkZVg9s J^g9Rg9Vg9VRg9g9R^kZZ^g9Nsg9g9^R^V^^Rg9^^cZZg9kZg9g9R^g9^g9VZ^Zg9Zg9^g9g9V^g9V^^g9Rg9g9^Zg9Vg9g9kZsU#JRJRg9Z^^NsVg9R^^ZNsg9g9^kZg9^kZRNs^kZ^Z^^RNskZsRQ^^Nsg9^kZ^g9g9RZkZ^Rg9kZR^^g9JR^ZkZR^g9Rg9^RRg9 ^cZZg9kZJRJRg9^ZVg9R^^ZkZg9RckZZ^g9g9kZ^^+g9V^g9cZ^^NsJR^^kZ^JRW$^^VV^g9^^Rg9NsRZkZ^JRZ^ZV^g9V^^ccg9g9^kZRg9 #Z^g9ZJRwkZg9g9^kZg9F1Rg9^F1^g9g9^kZF1kZ^kZ^^F1^NsV^"ZkZ^NsNsg9^^o{^Rg9g9Zcwg9g9cZg9ZkZg9^kZNsZ^V^R^o{sUg9^kZg9NsZ^kZ^^RRZ^Zg9g9Z^g9Z^kZc^kZ^RR^RkZcsUNsg9R^V^R^g9Z^VZ^g9g9^kZRg9^g9RRg9kZRg9ZV^^kZ^sO^kZ^VVR^^Zg9g9^Rg9RkZ^g9Z^ cZV^c^^kZg9VkZS^kZ^NsV^^g9VR^g9^VZo{Vg9R^Z^^Vo{VNs^cZ+^^VkZZ^^g9R^RZ^kZg9g9^R^^c^kZg9^^kZVg9V^Z^JRkZ^Vg9g9Ns^Nsg9Ro{NsRRg9^Ns^^ZkZg9g9ZRZZV^g9^s qg9Z^g9^F1^^VV^g9g9kZRV^kZRV^Ns^g9Z^V^RRg9^kZ^^kZ^NsV^^kZRg9g9 Q!^^VZ^g9kZ^ZNsR^V^^R^cRkZRg9Z^kZ^^F1NsV^S"Rg9kZg9Z^RkZ^g9kZg9Zg9Rg9g9^^wJRJRg9Rc^^kZs #RkZ^F1^kZRo{R^^g9F1g9NsckZkZVVkZcZkZkZVVkZVNsZkZNs"kZ^RZg9g9^g9cRg9^g9Ns^g9g9^kZNs^kZ^^kZ^NsNsVF1g9RsU^V^R^g9Z^g9g9RZV^kZRkZ^ZRg9kZVcVg9^^VkZVVJRU#VZNsVg9VRg9^^Rg9Zg9^Z^c^g9^kZg9g9Vg9JR^Vg9^Rcg9VU#kZg9g9^kZg9Nsg9^kZ^^VRZ^g9NswZg9^kZg9F1^kZZg9Rg9VVcS"Vg9Ns^g9ZNs^o{kZ^^Rg9ZkZVRZNsNsV^^^V^^VVJRF1kZ^g9ckZ^Z^g9^NsNs^Z^g9kZNsNsg9g9JRV^kZo{$kZRkZ^Z^cRZ^g9Z^kZ^^kZF1NsV^g9^^Zw^g9ZJR^^o{^s Sg9^kZNs^F1^g9kZV^Ns^g9g9V^g9^kZBRg9^kZRg9^kZ^sQ!F1^kZkZ^Rg9R^^g9^NsNs^kZVg9cZ^kZ^Rg9kZNs^g9g9RNswkZU#^kZ^NsV^^Zg9^g9NsZ^g9^^ZNsVkZRg9VRg9o{Vg9^Rg9^g9U#^kZg9g9RkZZkZg9^^V^g9kZZNsg9g9o{g9cg9^^Z^cRkZg9^g9ZJRJRU#Rg9Z^Z^^VkZg9VV^^kZ^^g9VZRNs^g9kZg9RVg9^ZVQVZg9^kZ^JRJRco{R^^kZg9g9kZZ^ Zg9^kZBg9kZg9F1MkZ^^kZg9^g9^kZRZkZ^RwkZg9^RkZ^^kZg9RVg9RR=o{Vc^Rg9^kZRZF1^g9ZZg9g9^g9Ns^S^Nsg9R^^V^^kZg9^g9^ZZg9kZV^g9^^g9^^g9^g9RZV^ g9^Rg9VNsg9RkZg9g9ZRg9^kZV^kZg9g9^^cZkZV^g9F1g9kZc^^F1g9^kZVg9V^ZkZ ^^VkZZR^^VVNsg9U#Z^g9ZJR^g9^kZ^^kZF1B^ZZkZc^kZJR^VJRVZg9^^W$kZg9RkZcg9^kZkZg9^Rg9^^Z^cJRJRg9^^Vg9R^^ZZ^g9kZF1^kZSV^g9cVNskZVg9VZg9^^V^Zg9^Ns^Zg9g9kZ^NsRg9kZRkZVS kZg9g9Rg9g9^kZg9JRJRRg9^kZJRV^Z^kZg9Rc^g9g9VNsg9NsVVU RkZg9R^kZg9VRZRg9^kZVg9VZg9^Zg9g9RF1^Z^^Zg9kZRkZIcZg9^Z^g9ZV^Rg9kZg9Rg9^g9g9cNs^Z^kZVg9VZg9U#g9VR^^ckZ^kZ^^g9c^kZNs^kZg9RRg9g9RkZg9^g9^g9F1g9VU^g9RcRkZg9^sZVg9Nsg9g9cZg9cJR^g9g9Vc^kZc^ZF1kZRckZO Z^g9ZJR^kZ^^kZ^NsV^kZZZg9Rg9kZJRJRV^g9g9JRkZ^^kZ! cR^g9Z^g9NsZw /skZw wwwwwcJRZRRV^RRVZVg9^RNscg9R^g9F1Z"ZZ^kZVJRg9R^kZ^VZRF1^ZJR^^kZR^kZVVZw U#^g9kZZ^^F1^kZg9g9^R^^V^Rg9kZVNso{RVg9g9^Vg9kZRkZV^ZK cg9kZNsg9RkZ^g9^^kZ^Z^RkZZg9kZg9^RZJRR^SVZg9^g9g9VVNs^^g9^Rg9V^Ns^kZ^ VZZ^ZkZg9kZg9^sU#g9ZkZZkZ^NskZZZ^ZVR^g9kZRg9^g9^^kZZZg9^Ns^ZZVVSg9RVg9R^kZw^VZRF4^Rk[^ZVg:^k[F3Nu^ZNvV^Z^Qg9^^NsVVc^ZZRg9g9Z^kZg9 JRkZg9g9^kZg9Z^^VR^^g9 ^^Rg9kZg9^g9ZV^g9^kZ^^kZ^NsNsVRZ^^g9V^g9g9JR^g9^V^^Nu^k[g:Rg:Rk[VVZ^k[^^k[g:g:^^Vg:Rg:sZ^k[F3^RU^^V^Z^Nu^g:k[RRVg:k[RNu^ZZkZ^ JRkZZg9Ns^Zg9^^sO Rg9^^g9g9R^g9V^g9JRR^^V^^^g9cg9kZ^g9^g9VW$V^Nsg9R^^ZkZg9R^RZZRVRg9g9ZNs^g9VZsR^^ZkZSg9^g9kZNsg9^ZcJRkZRg9ZV^JRJRwV^kZRg9V^RkZg9^VUR^kZ^kZg9NsZg9Rg9g9^Vg9Rg9^Rg9^^V^F1ZRg9^^g9RkZU#^^RVZVNs^kZg9^Rg9RkZVF1JRg9kZkZZRg9Vg9g9ZRVg9^^QVZ^NsV^VZJR^g9cZc^ c^Zg9kZRg9g9R^g9w^V+ Ro{JR^ZR^kZR^g9^U#^Vg9Rg9^^ZNsg9g9Rg9kZVZkZVg9R^g9^kZRg9kZVZkZkZJRg9R 5R^kZcg9g9^^Ns^g9g9^Ns^Zg9Rso{M^ZkZ^Z^^g9Vg9Nsg9^^Zg9kZcZcg9B^V^kZ^VR^ IRkZNs^Vg9cV^F1kZg9NsZg9cZ^VVkZg9^ZV^g9ZZ             ՜.+,D՜.+,X hp  'Cornell University$X Teaching Java with OO first Title 8@ _PID_HLINKS'Al0;?http://www.cs.wfu.edu/~burg/ papers/AbstractionToInvention.pdfxd?http://www.cs.uwaterloo.ca/~bwbecker/papers/javaPedagogies.pdfEg*http://www.masswerk.at/algol60/report.htm4_2_3_1{jJ filedrawer cabinetC&  C_folder  twovarsC subclass  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry F6Data G1Table-=WordDocument4SummaryInformation(!DocumentSummaryInformation8CompObjX FMicrosoft Word DocumentNB6WWord.Document.8