Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 71 CS110 Lecture 8 February 19, 2004 Announcements –hw3 due tonight –hw4 available, due Thursday February 26 –exam Tuesday March 2 Agenda –questions.

Similar presentations


Presentation on theme: "Lecture 71 CS110 Lecture 8 February 19, 2004 Announcements –hw3 due tonight –hw4 available, due Thursday February 26 –exam Tuesday March 2 Agenda –questions."— Presentation transcript:

1 Lecture 71 CS110 Lecture 8 February 19, 2004 Announcements –hw3 due tonight –hw4 available, due Thursday February 26 –exam Tuesday March 2 Agenda –questions –Shapes application –counting –signatures –scope –classes vs objects –how parameters really work

2 Lecture 72 Shapes A 20x10 Screen with 3 HLines: ++++++++++++++++++++++ +RRRRRRRRRR + +GGGGGGGGGGGGGGG + +BBBBBBBBBBBBBBB + + ++++++++++++++++++++++ draw 3 Boxes (2 overlapping): ++++++++++++++++++++++ + + RRRR + + RGGGGGGG + + GGGGGGG + + GGGGGGG GGGGGGG + + GGGGGGG + + ++++++++++++++++++++++ Character graphics on your terminal

3 Lecture 73 Counting 1,2,3,... (everyday, mathematics) 0,1,2,... (computer science) Screen models (x,y) coordinates –y value increases as you read down –(0,0) is upper left hand corner –Each location holds one pixel – a character –Frame of + ’s is not part of Screen 5  3 Screen with G at position (3,1), & at position (0,2) 0 1 2 3 4 + + + + + + + 0 + + 1 + G + 2 + & + + + + + + + +

4 Lecture 74 for loop start test step for (int i = 0; i < 5; i=i+1) { System.out.println(2*i + 1); body } Prints 1, 3, 5, 7, 9 on successive lines –do start –if test is true do body do step go back and test again –else loop is done, so do first line after body Use a for loop when you know how many repetitions you want (else use while loop) See ForDemo.java in JOI

5 Lecture 75 for loop HLine paintOn() method (lines 47,48) for ( int i = 0; i < length; i++ ){ s.paintAt( x+i, y, paintChar ); } Counts from i = 0 to i = length-1, executing what’s in the body each time –i=0: ask Screen s to put paintChar at (x,y) –i=1: ask Screen s to put paintChar at (x+1,y) –i=2: ask Screen s to put paintChar at (x+2,y) –and so on … at (x+length-1,y)

6 Lecture 76 for loop for ( int i = 0; i < length; i++ ){ s.paintAt( x+i, y, paintChar ); } Variable i is declared inside for statement Surround body with braces {...} for safety i++ is short for i = i+1 (or i += 1 ) Can do the same job other ways: for (int col=x+len-1; col >=x; col-- ){ s.paintAt( col, y, paintChar ); }

7 Lecture 77 while can replace for : int i = 0; while (i < 3) { for(int i=0;i<3;i++){ System.out.println(i); //ditto i++; } } for can replace while : //ask() returns boolean boolean more; for( ; ask(); ) { while ( ask() ) { // do something // do something } } for and while note empty start step start test step body

8 Lecture 78 for and while for loop better than while loop –fewer lines –control all on one line at top of loop –elegant, idiomatic –natural when loop count known in advance while loop better than for loop –reads more like pseudocode (English) –natural when loop count not known in advance (set somehow in body)

9 Lecture 79 Signatures HLine paintOn messages in HLine unit test (main) –line 106: hline1.paintOn(screen) –line 108: hline1.paintOn(screen, 0, 1) Two declarations for paintOn in HLine.java: –line 39: paintOn(Screen, int, int) –line 52: paintOn(Screen) line 54 delegates work to first paintOn (could use this ) JVM uses shape of message to select method Signature: method name & types of parameters

10 Lecture 710 Scope scope of a variable or method: where its unadorned name is visible to the program Usually: the block { … } where it’s declared Examples from HLine.java –scope of all fields: lines 15-114 –scope of screen (line 100) : lines 100-113 –scope of length (line 25): lines 25-29 –scope of i (line 41): lines 41-43 Scope of a method is the class it’s declared in public declaration does not change scope

11 Lecture 711 Scope To see a method or field outside its scope, qualify the name of the method or field: –account.getBalance() –System.out –this.contents But –account.balance will fail because balance is private

12 Lecture 712 static Java keyword for belongs to whole class rather than to an instance of the class Static things are rare, objects are common: too much static is bad design public static void main( ) –main() is a static method - it can run before any objects are created with new –TestShapes (like many testing programs) is all static: there is a TestShapes class, but never a TestShapes object (although main uses objects

13 Lecture 713 What can main() see? HLine is meant to be a client class –private fields –public getters, setters, other methods as appropriate HLine has a static main method, for unit testing main in HLine –can’t refer to length field or paintOn method, since those belong only to HLine objects –can instantiate an HLine object, and then send it a paintOn message

14 Lecture 714 Static tools in the library To invoke a static method, send a message to the class (there is no object) - syntax ClassName.methodName( args ) Math.sqrt( x ) Calendar.getInstance() a factory method -Java designers chose this rather than new Calendar UnitTest.java line 21: HLine.main(args) sends message to HLine class to run main() there

15 Lecture 715 static fields Syntax for accessing static field: ClassName.fieldName (e.g. System.out ) (no System constructor, no System object) Like global variables (in other languages) In Integer class (part of Java API) public static final int MAX_VALUE = 2147483647; final : Java keyword for “can’t be changed” int big = Integer.MAX_VALUE; // OK Integer.MAX_VALUE = 255; // error Naming convention for final fields: ALL_CAPS

16 Lecture 716 How parameters really work Box.java line 143 sends a message: box2.paintOn( screen, 2, 2 ); Execution shifts to method at Box.java line 52: public void paintOn( Screen s, int x, int y) Value of parameter – s in method is value of screen in message –x in method is (first) 2 in message –y in method is (second) 2 in message

17 Lecture 717 How parameters really work Name of parameter ( s ) in method declaration need not match the name of the value in the message ( screen ) You can’t even think they should match: –The value in the message might not even have a name (the 2 in the example) –The method can be written before the client (in some other class) has even been imagined - and the client programmer does not have access to the source code with the method declaration The type of the value in the message must match the type in the method declaration

18 Lecture 718 In Box main screen: Screen box1: Box box2: Box width: int 3 width:4 pntCh:'G' int char

19 Lecture 719 In Box paintOn screen: Screen box1: Box box2: Box s: Screen x: int 2 this: Box y: int 2 width: int 3 width:4 pntCh:'G' int char out of scope


Download ppt "Lecture 71 CS110 Lecture 8 February 19, 2004 Announcements –hw3 due tonight –hw4 available, due Thursday February 26 –exam Tuesday March 2 Agenda –questions."

Similar presentations


Ads by Google