Notes
Slide Show
Outline
1
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
Shapes
  • A 20x10 Screen with 3 HLines:
  • ++++++++++++++++++++++
  • +RRRRRRRRRR          +
  • +GGGGGGGGGGGGGGG     +
  • +BBBBBBBBBBBBBBB     +
  • +                    +
  • +                    +
  • +                    +
  • +                    +
  • +                    +
  • +                    +
  • +                    +
  • ++++++++++++++++++++++


  • draw 3 Boxes (2 overlapping):
  • ++++++++++++++++++++++
  • +                    +
  • + RRRR               +
  • + RRRR               +
  • + RGGGGGGG           +
  • +  GGGGGGG           +
  • +  GGGGGGG  GGGGGGG  +
  • +  GGGGGGG  GGGGGGG  +
  • +           GGGGGGG  +
  • +           GGGGGGG  +
  • +                    +
  • ++++++++++++++++++++++


3
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)
4
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
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
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
for and while
  • 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           }
  •  }


8
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
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
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
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
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
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
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
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
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
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
In Box main
19
In Box paintOn