Title: CS 1312
1CS 1312
- Introduction to
- Object Oriented Programming
- Lecture 2
- January 11, 2001
2Computer Numbers
- Integers (byte, short, int, long)
- whole numbers
- exact
- Relatively limited in magnitude (1019)
- Floating Point (float, double)
- fractional
- often approximations (0.33333)
- larger magnitude (10308)
- Actually hold signed mantissa exponent
- 6.023 x 1023
3List of Data Types
Primitive Type Default Value boolean
false char
'\u0000' (null) byte (byte) 0 short
(short) 0 int
0 long
0L float 0f double
0d void
N/A
Note At times, the Java Language Specification
refers to void as a primitive, though other parts
(e.g., s. 14.7) say void is not a primitive as
in C/C. One cannot cast to a void type in Java.
4Data Type Ranges
Type
Size
Min
Default
Max
boolean
false
1
false
true
char
'\u0000' (null)
16
byte
(byte) 0
8
-128
127
short
(short) 0
16
-32,768
32,767
int
0
32
-2,147,483,648
2,147,483,647
long
0L
64
-9,223,372,036,854,775,808
9,223,372,036,854,775,807
float
0.0F
32
Approx 3.4E38 with 7 significant digits
double
0.0D
64
Approx 1.7E308 with 15 significant digits
void
Not truly min and max.
5Understanding Casting
Last class, we covered some basics of
casting. Sometimes an explicit cast is required,
sometimes its not.
float f2 11.234f int y f2
int x 10 float f1 x
Which one requires a cast to compile? Why?
6Understanding Casting
To understand when we need casting, lets look
closely at an example.
Lets work with these two types and
identifiers int x char c
The real question is, How BIG are these data
types in memory?
7Recall
We already discussed the sizes of various data
types in Java. You are guaranteed to have four
bytes in each and every int. We can think of an
int as a container--much like a box.
cereal box
Nutritional Facts Serv. Size 1 int Amount per
Serving Calories 0 Daily
Value Total Bytes 4 100
8And recall...
A char on the other hand is only 2 bytes. Its
smaller than an int. We might imagine it as a
smaller container.
tuna can
9So...
A char is 2 bytes, and an int is 4 bytes. So
when we code the following int x
char c We get
Symbol Picture of
Memory
x
0000 0000
0000 0000
0000 0000
0101 0110
Each block is one byte
c
0100 0001
0000 0000
10Reality Check
Will a can of tuna fit into a box of cereal?
Yes, the can is smaller.
Will a box of cereal fit into a can of tuna? Not
neatly, the box is larger.
11In a similar vein...
Will a char fit into an int? Will an int fit
into a char?
Symbol Picture of
Memory
x
c
12Reality Check
What if you wanted to fit HALF the box into the
can. That would fit!
For example, if we know the top half of the box
is empty, we can throw it away!
13Explicit Casting Intentional Loss of Precision
int x 45 char c A c (char) x //
cast needed
Symbol Picture of
Memory
x
c
cast needed!
14Testing Yourself
Fill in the blank.
What happens when we do this int someInt
2000 long longNumber longNumber
(long) someInt Is that cast legal? Is that cast
required?
15Another Example
float f int i, j i 9 j 2 f i / j
Returns 4 because of integer truncation!
If that is not what was intended, Three possible
solutions
f (float) i / j
f (float) i / (float) j
f i / (float)j
16Another example
We also have to consider how Java preserves the
sign of a value through casting. Consider the
eight bytes used for an int. The highest bit is
used for a sign (plus or minus, through a 0 or 1).
int
Sign bit
31 bits for data
17Casting and Sign
Casting is not merely chopping one data type into
another. The VM doesnt merely throw away half
of the information. The sign is preserved.
Preserves sign bit
byte
int
18Another Example
Suppose we had some very, very old data, where
the date was expressed in a int (four byte)
format, such as
19291031
This is very crude, but some old data source
(e.g., tape archives) might have this format.
19public class CutData public static void
main(String args) int iDate 20001225 //
this is how it was read in byte byDay (byte)
(iDate 100) System.out.println ("The day was
" byDay) iDate iDate / 100 byte
byMonth (byte) (iDate 100) System.out.print
ln ("The month was " byMonth) iDate iDate
/ 100 short sYear (short)
iDate System.out.print ("The year was "
sYear) // CutData
Explicit Cast needed
20When working in the opposite direction
(accumulating bytes and shorts into an int), no
casting is needed, because we do not lose
precision or information.
public class PackDate public static void
main(String args) byte month 12 byte
day 25 short year 2000 int date
year 10000 month
100 day System.out.print
ln ("The date " date) //
PackDate
21Casting Test Your Knowledge
- Given
- int start 10
- float temp 5.5f
- temp (int) temp start
- What does temp now hold?
Quick Review
22Test Your Knowledge
- Heres the problem
- int iVar 10
- float fVar 23.26f
- // gives compile-time error
- iVar iVar fVar
- Which solution works best?
3
230
4
1
232
232
2
Quick Review
Same Compile Error
23Shorthand Operators
- counter counter 1 OR counter
- counter counter - 1 OR counter--
- counter counter 2 OR counter2
- counter counter 5 OR counter5Last
two examples perform operation first (eg.
counter2) then performs the assignment.
Quick Review
Understand this, but please avoid these types of
expressions.
24The Short End of Shorthand
Be careful to avoid clever expressions with
shorthand notations. For example, we can declare
a variable called _. (Yes, and underline
character alone is a valid name.)
int _ 1 We can then use a combination of
operators to make Morse code _
- --_ - _-- Yes, this is valid however, its
completely unreadable. (Your replacement will not
appreciate this style!)
25Documentation Comments
Quick Review
- Three ways to do it
- // comments out everything until the end of the
line - / comments out everything until the /
- (There are no nested comments as in C.)
- /
- This is syntax for Javadoc comments (similar
to second style - of commenting, but allows for HTML formatting
features. - /
- For CS1302, use Javadoc comments
Lets work a javadoc example
26Javadoc Simple Example
import java.util. / HelloComments.java
Created Wed Jan 12 181729 2000
_at_author David Dagon _at_version 98 beta
/ public class HelloComments /
A ltbgt VERY lt/bgt simple variable. /
public int x 10
Javadoc comments must appear above the item they
modify. In the case of class comments, place
them BELOW the import statements.
Recall HTML is OK!
27Simple Example (contd)
/ This comment is reproduced twice,
because of the comma delimited
declaration of ints. The solution would
be to use separate lines for each
declaration. / public int y 4, z
11 / The Main method. This
method is the starting point of this
program, when this class is run.
_at_param args The arguments from the command line.
/ public static void main(String args)
// HelloComments
28Et Voila...
29Javadoc (Contd)
- You may include HTML tags (but avoid structuring
tags, like ltH1gt, etc.) - Javadoc comments should immediately preceed the
declaration of the class, field or method. The
first sentence should be a summary. Use the
special javadoc tags--_at_. When '_at_' tags are used,
the parsing continues until the doc compiler
encounters the next '_at_' tag.
_at_see ltclass namegt _at_see ltfull-class namegt _at_see
ltfull-class namemethod.namegt _at_versio
n
You might refer back to these notes once you
start writing your own javadoc comments.
_at_author _at_param _at_return
_at_exception
_at_deprecated // jdk 1.1
_at_since
// jdk 1.1 _at_serial // jdk 1.2
30Announcements
31All about me.
- Instructor Monica Sweat
- sweat_at_cc.gatech.edu
- Office Hours TBA or by appt.Where CCB 119 on
first floor of College of Computing
building(Take a left as you enter front door)
32Useful Stuff
- Course web page
- www.cc.gatech.edu/classes/AY2001/cs1312/
- My web page
- www.cc.gatech.edu/sweat
- Newsgroups
- git.cc.class.cs1312.announce
- git.cc.class.cs1312.program
- git.cc.class.cs1312.questions
- git.cc.class.cs1312.lab
- git.cc.class.cs131x.misc
- git.cc.class.cs131x.macusers
33A Question for You
Did you know a take home quiz was handed
out during the first class? Did you know its
due next week during recitation? If you need a
copy, see the class web page. Make sure you are
reading .announce!!!
34Questions?
35Constants
Quick Review
- CS1501/CS1311
- ltCONST_IDgt is ltconstant valuegt
- MIN_PASSING is 60
- PI is 3.14159
- Java
- public final static lttypegt ltIDergt ltvaluegt
- public final static int MIN_PASSING 60
- public final static float PI 3.14159f
- Details on why this syntax to come soon...
36Printing to Screen
- CS1501/CS1311
- print (ltargumentsgt)
- Java
- System.out.println(ltargumentgt)
- System.out.println( ) // prints blank line
- System.out.println(5) // prints 5
- System.out.println(Hello World) // prints
Hello World - println vs. print in Java
- println includes carriage return at end, hence
the next print or println starts new line - print not carriage return included.causes next
print or println to begin on same line
Quick Review
37MethodMadness
38Caution
Before we can talk about methods in Java, we need
to look at programming languages in general,
from a very high level. Dont be alarmed by some
of the syntax on the following slides. The big
picture is whats important, not the coding
details....
39Programming Paradigms
Procedural Programming Imperative
assignment used to create state, and procedures
manipulate state. E.g., C, Assembly, Pascal
int y int x 3 y
manipulateData(x) Functional Programming
Functions (procedures that do not depend on
outside data) are used to provided data. E.g.,
Lisp. (defun check-member (input-item
input-list) (cond ((null input-list)
nil) ((equal input-item
(first input-list)) T) (T
(check-member input-item (rest input-list)))))
40Programming Paradigms
Object-Oriented Programming All data exists
in objects interaction occurs only between
objects. Even numbers are objects that know how
to add themselves. E.g., SmallTalk array
array Array new 5. rect 0_at_0 corner
8_at_9. 1 to array size do item rect
origin item_at_item. array at item put rect
copy . Where does Java fit?
Object-oriented, but not 100 OO, since it
contains primitives, and tolerates some
(hopefully small) degree of procedural
programming.
There are other paradigms, but these three help
explain where Java comes from
41Java Methods
- There exists in Java a single construct, the
method, for both procedures and functions - when a procedure is called for, specify the
return type void before method name - public void printHelloWorld( )
-
- System.out.println(Hello World!)
- // printHelloWorld
- Note All methods must have parentheses for
parameters . . . even if no parameters!
Note the comment
42Java Methods
- Single construct (method) for both procedures and
functions - when a function is called for, specify the
- appropriate return type before method name
- public float average (float num1, float num2,
float num3) -
- float answer
- answer
- (num1 num2 num3)/ 3
- return (answer)
- // of average
43Writing Methods A Larger Look
A Java requirement --Each method belongs to an
object (or class). --It must be unambiguous which
object or class that is when a method
called. --To run an application program, there
must be a class whose name is that of the
program and that class must have a method
called main
for command line parameters
visible to all
nothingreturned
public static void main (String argv)
a class method,not aninstancemethod
Method name
44class A public static void main(...
Thus, each class may have its own main method.
You pick the one you wish to run when invoking
the JVM. This fact becomes critical when we
learn to write debug test mains.
class B public static void main(...
class C public static void main(...
45Method Signatures
The signature of a method consists of the name
of the method and the number and types of formal
parameters to the method. A class may not declare
two methods with the same signature, or a compile
time error occurs. --Java Language
Specification s.8.4.2 Method overloading occurs
where identically named methods have subtle
variations in the method parameters. public int
getCube(int num) return numnumnum
public int getCube(float num) return
(int)(numnumnum) public int
getCube(double num) return (int)
(numnumnum)
cs1311 associated two similar methods by
calling one a helper method. Java lets
you overload instead.
46Methods Common Mistakes
public float average (float num1, float num2,
float num3) float answer
answer (num1 num2
num3)/ 3 return (answer) //
average
Note ending semicolon -- could be viewed as
abstract method (more on abstract methods
later) -- results in unhelpful error message
about abstract methods (more
on this later) -- EASY mistake to make!
47Where do Methods Go?
Just like the main method we saw last time, any
method we create must appear in classes, as
either class or instance members. More on
creating classes and objects shortly . . . For
now, just know that methods belong in a class.
i.e. They are defined inside a class.
48OO Programming Note
Already, weve covered one of the most important
aspects of Object Oriented (OO) programming
Data and methods belong together in a
class. Right now, its sufficient that you
merely know that variables and methods belong in
classes. Later, well see how this enables us to
encapsulate state (the variables) with behavior
(the methods). So, remember this day. Youve
started to learn THE cornerstone of OO
programming.
49Questions?
50Conditionals
51Decision Statements
- CS 1501/1311 pseudocode
- if (condition) then
- statements
- else
- other statements
- endif
- Java
- if (condition)
- single statement
- else
- single statement
- or
- if (condition)
-
- statements
-
- else
-
- statements
52Examples
- CS1311/1501
- test_grade isoftype Num
- test_grade lt- 65
- is_passing isoftype Boolean
- is_passing lt- TRUE
- if (test_grade lt 60) then
- is_passing lt- FALSE
- endif
- print (Is , testGrade,
- passing? , is_passing)
- Java What happens here?
- int testGrade 65
- boolean passing true
- if (testGrade lt 60)
- passing false
- System.out.println
- (Is testGrade
- passing?
- passing)
53Boolean and Relational Operators
- Boolean CS1311/1501 Java
- AND AND
- OR OR
- NOT NOT
! - Relational
- equal to
- not equal to ltgt
! - less than lt
lt - less than or equal to lt
lt - greater than gt
gt - greater than or equal to gt
gt - Note
- Assignment lt-
54Example
if (enrolled passing) // etc.
Java also supports short-circuiting, where only
part of a boolean will be evaluated, as
necessary
if (enrolled(studentNum)
getPassing(studentNum)) // etc.
If first condition is true, it stops evaluation
55A bit o code
- public static void main(String args)
- int quiz1 42
- int quiz2 99
- if(isPassing(quiz1) isPassing(quiz2))
- System.out.println(Passed both quizzes)
-
- public static boolean isPassing(int testGrade)
- boolean passing true
- if (testGrade lt 60)
- passing false
- System.out.println(Is testGrade
- passing? passing)
- return passing
Output?
56Final Answer?
a
b
Is 42 passing? false Is 99 passing? true
Why?
57Multiple Selections via switch
- Use if construct for one selection.
- Use if/else construct for double selection.
- Use switch construct for multiple selection.
(e.g., situations appropriate for
if-elseif-elseif-else)Note - Useful when making a selection among
multiple values of the same variable. - Not useful when selecting among values of
different variables.
58Switch
- switch (ltvariablegt)
-
- case ltvaluegt
- // whatever code you want
- break // optional
- case ltvaluegt
- // whatever code you want
- break // optional
- default
- // whatever code you want
- break // optional
59Multiple Selections via switch
Note the optional default case at the end of
the switch statement. It is optional only in
terms of syntax. switch (iNumber) case
1 System.out.println (One) break
case 2 System.out.println (Two) break
case 3 System.out.println
(Three) break default
System.out.println(Not 1, 2, or 3)
break // Needed??? // switch In
practice you should always include a default
case statement. E.g., 1989 ATT phone system
crash
This would work without the default, but would
be poor technique
60How many days?
- if(month 4 month 6
- month 9 month 11)
- numdays 30
- else if(month 2)
-
- numdays 28
- if(leap)
- numdays 29
-
- else
- numdays 31
61Switch
- switch (month)
-
- case 4
- case 6
- case 9
- case 11
- numdays 30
- break
- case 2
- numdays 28
- if(leap)
- numdays 29
- break
- default / Good idea? /
- numdays 31
62Multiple Selections via switch--Notes
- The switch statement can only be used with
- the following types
- int, char, short byte
- (You can cast floats, doubles, etc.)
- The case values must all be of the same type.
- The case values must all be FINAL constants.
-
63switch (grade) case A case a
countOfAGrades break case B
case b countOfBGrades
break case C case c
countOfCGrades break case D
case d countOfDGrades
break case F case f
countOfFGrades break default
System.out.println(Invalid grade)
break
if (gradeA gradea) countOfAGrades
else if (gradeB gradeb) countOfBGrade
s else if (gradeC gradec) countOfCG
rades else if (gradeD graded)
countOfDGrades else if (gradeF
gradef) countOfFGrades else System.out.p
rintln (Invalid grade)
Multiple Selections via switch
64Before we go too far...
- We often take liberties with good coding practice
just to fit material onto a slide. - Your coding style should reflect clearly and
unambiguously what the code is supposed to do. - Keep in mind your two audiences
- The machine
- Other programmers
65IfStyle 1
- if(ltboolean expressiongt)
-
- // code if true
- // see your TA (not exactly subliminal)
- else
-
- // code if false
- // see your TA (not exactly subliminal)
66IfStyle 2
- if(ltboolean expressiongt)
- // code if true
- // comment
- else
- // code if false
- // comment
67Conditional Assignment
ltbooleangt ? lttrue conditiongt ltfalse conditiongt
boolean b int count b checkCompletion() cou
nt (b) ? 3 1
Note This is not any faster. Its less
readable. It exists only for recovering
C hackers
Must resolve to boolean
If true . . .
. . . if false
68A Semi Partial Conditional Summary
- Control structures
- Two kinds of conditional (summary)
- if ... else ...
- branch on boolean expression
- switch (...) case ... break default ...
- branch on constant value
- dont forget to break !!
69Questions?
70Just a few notes aboutchanges this semester
- No pop quizzes woohoo!
- No Coding Final phew!!!