Transcript GP2

Introductory Programming (GP)
Spring 2006
Lecture 2
We start at 13:00
Slides are available from the course home page
Feel free to print them now
www.itu.dk/courses/GP/F2006
Martin Lillholm
GP2, Martin Lillholm
1
Practical Information
• News Group
– it-c.courses.GP
– Via http://webmail.itu.dk/
• Lab classes
– www.itu.dk/courses/GP/F2006
• Questions ?
GP2, Martin Lillholm
2
Last Week
• A basic computer and its infrastructure
– CPU, main memory, storage, networks, internet, WWW
• Program Development
– Problem, analysis, design, implementation (programming),
testing
• (Java) programs
– Classes, objects, syntax, semantics, reserved words, the simple
anatomy of Java programs
• Compilation and program execution
– Source code, editors (e.g. Notepad); bytecode, compilers
(javac), execution, runtime environment (java).
• Three kinds of Java programs
– ”Normal” via console, programs with GUI, Applets
GP2, Martin Lillholm
3
Today
• More about compilation, runtime environment, classes,
objects, the anatomy of Java programs
• Identifiers
• Variables
• (Primitive) types
• Operators
• Expressions
• Libraries
• Mere about Applets, GUI, and graphics
GP2, Martin Lillholm
4
What is Programming Anyway?
• Problem / task
• Analysis
• Design (evt. OO)
• Implementation (in e.g. Java)
• Compilation
• Testing
GP2, Martin Lillholm
5
From Source Code to Executable
Java Virtual Machine
Task
Source
solution
Compiler
(Editor)
Interpreter
(JVM)
JIT
Hello.java
text (ASCII)
Hello.class
(Java bytecode)
GP2, Martin Lillholm
Result
6
Compilation Time – Run Time
Source
Syntax and type errors
Compiler
Runtime and “semantic” errors
Fortolker
(JVM)
GP2, Martin Lillholm
7
Java Components (again)
• White spaces
– space, tabulator stops (\t), newline (\n)
• Comments
// Single line comment
/* Multiple line
comment ... */
• Reserved words; “core” Java.
• Identifiers
• Syntax rules …
GP2, Martin Lillholm
8
The Anatomy of a Java Program
class ClassName {
// Attributes;
Define the state of objects
// methods;
The work horses of objects
public static void main (String[] args) {
// statements and today’s focus area
}
}
It’s possible to have several classes in one .java file but only one
can and should have a main method.
GP2, Martin Lillholm
9
Methods – Informally Speaking
• Methods are used for grouping and naming sequences of
statements/command.
• Methods can receive input (parameters/arguments) and
output results (return values).
• Methods do “the hard” work in Java programs.
• Methods are typically invoked/called by other methods. A
method call is often a statement in itself.
• Program execution normally always start in the main-method.
• Methods enable task abstraction.
GP2, Martin Lillholm
10
Using Methods
•
If a class has a main method program execution starts with the first
statement here and continues statement by statement.
•
These statements can call other methods than the main method.
•
Methods are always called using zero or more parameters in
parentheses:
write()
area(10)
add(10,20)
•
// call/invoke zero parameter method write
// call/invoke one parameter method area
// call/invoke two parameter method add
Methods can be “hidden” in other classes and/or objects.
System.out.println(“Print a line of text”);
System.out.print(“Another line”);
System.out.println();
•
Notice the . operator
GP2, Martin Lillholm
11
Today’s Focus
• Today we focus on code/statements in the main method.
• But any of them can and will (next time) be used in other
methods.
GP2, Martin Lillholm
12
Identifiers - Names
• Used for all program elements that must be named
– Classes
– Attributes / fields
– Methods
– Parameters
– (Local) variables
– Packages
• Identifier rules:
– First character must be a Java letter
– Then 0 or more Java letter or Java numbers
– Java letter: A,...,Z, a,...z, $, _ (plus some others ...)
– Java number: 0,...,9
– No spaces!
– Syntax diagram ... (L&L page 32)
GP2, Martin Lillholm
13
More about Identifiers
• Examples:
– Legal: HelloWorld, HelloGUI, label, i, j, ...
– Illegal: 3label, !navn
• Conventions
– Classes and packages has an upper case first letter and
upper case all for the first letter of all new words (no
spaces): HelloApplet
– Attributes, parameters, variables, methods has a lower
case first letter and upper case for the first letter of all
new words (no spaces): labelColor
– (Named) constants only upper case and an _ (underscore)
to separate words: MAX_HEIGHT, PI
– More conventions in appendix F
GP2, Martin Lillholm
14
Literals – Constant Expressions
• “Atoms”
• Used for supplying specific data/information to programs
• Grouped in so-called types:
– Numbers
int:
1 2 3 45 -17 (Syntax diagram L&L page 75)
double: 0.1, -45.0, 243.89
– Characters/letters
char:
’a’ ’3’ ’K’ ’ ’
(In reality numbers: ASCII (256), UNICODE(65536))
– Text strings
string: ”Hello World” ”Welcome to GP!” ”h” ””
Escape Sequences: L&L page 67
– Boolean values (truth values)
boolean: true false
GP2, Martin Lillholm
15
Literals – an example
GP2, Martin Lillholm
16
(Local) variables
• A named slot in memory that can be assigned a value and
read one or several times. The actual physical space is
allocated by the runtime environment and the operating
system.
• Variables must be declared before use!
• A variable is local/automatic when declared in a method
• A variable always has a type
– Primitive types:
Integers: byte, short, int, long
Characters: char
Decimal numbers: float, double
Boolean values: boolean
• Why types? Memory usage, robustness, type safety.
GP2, Martin Lillholm
17
Types af numbers and their capacity ...
• Bits ?
Type
Storage
Min value
Max value
byte
short
int
long
8 bits
16 bits
32 bits
64 bits
-128
-32,768
-2,147,483,648
< -9 x 1018
127
32,767
2,147,483,647
> 9 x 1018
float
double
32 bits
64 bits
+/- 3.4 x 1038 with 7 significant digits
+/- 1.7 x 10308 with 15 significant digits
GP2, Martin Lillholm
18
Variable Declarations
• A variable must be declared before first use – why?
(final) type identifier;
int height;
char firstLetter;
boolean isDigit;
String firstName;
Syntax diagram L&L page 69
• Naming convention
GP2, Martin Lillholm
19
Assignments
• Assignment statements are used for assigning values to
variables. Values can be either literals or the result of an
expression – more on expressions later.
• Syntax diagram L&L page 72
• Examples:
height = 23;
firstLetter = ’m’;
isDigit = true;
firstName = ”Martin”;
GP2, Martin Lillholm
20
Simultaneous Declaration and Assignment
Initialisation
• Several variables of the same type can be declared on the
same line
• Variables can have values assigned when they are declared
(initialisation)
int height, weight=50, size;
char firstLetter=’M’;
double num1 = 12.23, num2, num3=-23.0;
• Syntax diagram L&L side 69
• Left- and right-hand side of assignment statements
GP2, Martin Lillholm
21
Example 1
GP2, Martin Lillholm
22
Eksempel 2
GP2, Martin Lillholm
23
(Named) Constants
•
Constants are used to name values that are used one or more times
in a program but doesn’t change value – contrary to variables.
•
Examples could be mathematical constants like PI or the maximally
allowable height MAX_HEIGHT.
•
Naming convention.
•
Why constants?
– No accidental change
– A name is more descriptive than a number
– Several uses  only one change
•
Declared and initialised. Can’t have new values assigned.
•
Declared and initialised like variable but with a final prefix.
final int MAX_HEIGHT = 180;
final double PI = 3.1416;
GP2, Martin Lillholm
24
Expressions
• An expression is a combination of one or more operands and
operators. Operands are values or other expressions. Mostly
used for calculations – later we shall, however, see examples
of String expressions.
• An arithmetic expression calculates numerical values and
consists of zero or more arithmetic operators.
+
-
*
/
%
(binary and unary operators)
• Operands are the input to an expression … the result of the
expression its “return” value.
• Operands can be literals, variables, and expressions.
• Variables used in expressions are (normally) only “read” not
changed. Expressions make up the right-hand side of
assignment statements. (Syntax diagram L&L page 72)
GP2, Martin Lillholm
25
Expressions … Examples
1+2+3+4
2+3*4
10/5
10/4
10.0/4, 10/4.0, 10.0/4.0
5%3
10%5
10
14
2
2
2.5
2
0
int
int
k =
k =
8
12
i=4, int j=4;
k;
i+j;
k+4;
double x=3, double y=1;
double z;
z = x/y + 4;
z = 1/3;
z = 1.0/3;
7.0
0.0
1/3=0.333333
GP2, Martin Lillholm
26
Operator Precedence
• Expressions are evaluated before assignment.
• In generals expressions are evaluated from left to right
• But multiplication and division takes precedence over addition
and subtraction – they have higher precedence.
Precedence level
Operator
1
Unary + -
2
*/%
3
+-+
4
=
String concatenation
• Parentheses are always evaluated first and thus can influence
“normal” evaluation order
GP2, Martin Lillholm
27
Example Expressions and Order of Evaluation
a + b + c + d + e
1
2
3
4
a + b * c - d / e
3
1
4
2
a / (b + c) - d % e
2
1
4
3
a / (b * (c + (d - e)))
4
3
2
1
If in doubt: Use parentheses but don’t overdo it!
GP2, Martin Lillholm
28
Example
GP2, Martin Lillholm
29
Specialised Operators
• Increment and decrement operators ++ and -int a = 5, b;
a++;
b = a++;
b = ++a;
a = a--;
// same as a = a + 1;
• Assignment operators +=, -=, *=, /= etc.
a += 5; // same as a = a + 5;
B *= a + 12 // same as b = b*(a+12);
• Oftentimes referred to as syntactic sugar
GP2, Martin Lillholm
30
Type Conversion
• Java is a strongly typed language.
• It can, however, be necessary and convenient to convert
between types.
• Sometimes, we e.g. want to use an integer as decimal
number 5 = 5.0.
• We never change the type of a variable per se – only its use
and context in expressions.
• Conversions should be and normally are lossless in terms of
information.
– 5  5.0
– 5.5  5
int to double lossless
double to int lossy
GP2, Martin Lillholm
31
Types of Type Conversion
• Widening conversion:
From a ”smaller” data type to a ”bigger”.
short -> int, float -> double.
Usually lossless and thus safe.
• Narrowing konvertering:
From a ”bigger” type to a ”smaller”.
int -> short, double -> float.
Usually lossy and thus unsafe.
GP2, Martin Lillholm
32
Assignment Conversion
• Assignment conversion occurs when a value (result of an
expression) is assigned to variable of a different type.
• Only happens (automatically) when Widening is involved.
• As always the types and values of variables on the right-hand
side of the assignment are unchanged.
int dollars;
float money;
money = dollars; // The value of dollars is
// automatically converted to
// float before assignment.
GP2, Martin Lillholm
33
Promotion Conversion
• Promotion conversion happens automatically when operators
promote the values of their operands in order to add, multiply
etc. them.
• Again – only widening.
float sum, average;
int count;
average = sum/count;
• Also happen during String concatenation – more later.
GP2, Martin Lillholm
34
Casting – Forced Type Conversion
• Programmer controlled and forced type conversion.
• Casting is a powerful tool and should be used judiciously.
• Both widening and narrowing is possible with casting.
• Executed by putting the desired type in parentheses before
the expression that needs to be converted.
int total, count;
float average;
average = (float) total/count;
• Note that casting has higher precedence than binary
operators.
GP2, Martin Lillholm
35
Strings
• String literals in quotation marks: ”Martin Lillholm”
• For now think of Strings as a primitive type – although
they’re not! Notice the capital S in String.
String name = ”Martin Lillholm”;
System.out.println(name);
System.out.println(”Martin Lillholm”);
name = “Jens Hansen”;
System.out.print(name);
GP2, Martin Lillholm
36
String concatenation – The + Operator Again
•
Evaluates from left to right
•
Promotes operands to String:
“A” + 5 = “A” + “5” = “A5”
GP2, Martin Lillholm
37
An Overview of Graphics and Digital Images
• Digital images and/or graphics is made up from pixels
(picture elements)
• An image is typically arranged as a rectangle of pixels
• The width and height measured as number of pixels is the
image’s resolution.
• The number (again in terms of width and height) pixel a
monitor/screen can display is the resolution of the monitor.
GP2, Martin Lillholm
38
Coordinate System
• Any point in an image, in a Window, or on the screen can be
identified by a pair of coordinates (x,y).
• Java and most computer systems use a coordinate system
with the origin in the upper left corner :
(Of the image, the Window, or the screen)
112
(0, 0)
X
40
(112, 40)
Y
GP2, Martin Lillholm
39
Black/white, Gray Scale, and Colour
• Black and white images are represented using black=0 and
white=1.
• Gray scale images typically as an integer number between 0255 (8-bit)
• Colour images typically as a triple (R,G,B) representing an
additive mixture of red, green, and blue.
• R,G, and B are normally integers between 0 og 255
– (0,0,0) er sort
– (255,255,255) is white
– (128,128,128) is a gray ”halfway” between black and
white
– (255,0,0) is red … etc.
GP2, Martin Lillholm
40
The Color Class in Java
• Colours in Java is represented using the class Color. It’s
contained in the package java.awt
• The class contains some predefined colours:
Object
RGB values
Color.black
Color.blue
Color.cyan
Color.orange
Color.white
Color.yellow
(0, 0, 0)
(0, 0, 255)
(0, 255, 255)
(255, 200, 0)
(255, 255, 255)
(255, 255, 0)
• Or can be used to mix new ones.
GP2, Martin Lillholm
41
Drawing Lines using the Graphics Class
10
150
X
20
45
Y
page.drawLine (10, 20, 150, 45);
eller
page.drawLine (150, 45, 10, 20);
GP2, Martin Lillholm
42
Drawing rectangles using the Graphics class
50
X
20
40
100
Y
page.drawRect (50, 20, 100, 40);
GP2, Martin Lillholm
43
Drawing ovals using the Graphics Class
175
X
20
80
bounding
rectangle
Y
50
page.drawOval (175, 20, 50, 80);
GP2, Martin Lillholm
44
More about Applets
•
A “normal” Java-program can be executed using the e.g. Sun runtime
environment (java).
•
A Java applet is designed to be downloaded via the internet and
executed in a browser.
•
Alternatively it can be executed using Sun’s appletviewer.
•
An applet doesn’t have a main method.
•
The paint method can be used instead.
•
The paint-method receives a parameter of type Graphics
•
Graphics objects among other things define a “drawing-context”
•
Example:
Einstein.java (L&L side 97)
GP2, Martin Lillholm
45
An HTML-shell for the Einstein Applet
<html>
<head>
<title>The Einstein Applet</title>
</head>
<body>
<applet code="Einstein.class" width=350 height=175>
</applet>
</body>
</html>
GP2, Martin Lillholm
46