Transcript Algoritmiek
Algoritmiek
Variables and Methods
Graphics
Hoorcollege 10 - Ma. 6 nov. 2006
L.M. Bosveld-de Smet
Variables: associatie (1)
Variables: associatie (2)
Objects: instance variables
instance methods
Voorbeeld Object: letter ‘a’
Classes en Objects
Variables: kenmerken
Naam
Data Type
8 primitive types
onbeperkt aantal object of reference types
Bereik (Scope)
Levensduur (Lifetime)
Initialisatie
Declaratie
Variables: verschillende soorten
Local variables
Parameters
Instance variables (non-static fields)
Class variables (static fields)
Variables: overzicht
kenmerk
local variable /
parameter
instance variable
class variable
plaats van
declaratie
vòòr gebruik ergens
binnen method ,
constructor of block;
in method-declaratie
ergens binnen class,
maar buiten methods;
bij voorkeur private
ergens binnen class,
maar buiten methods;
static en bij
voorkeur final
gebruik
waarde slechts van
belang voor method ,
constructor of block
waarde van belang
voor object’s state
en meerdere
meestal gebruikt voor
zichtbaarheid
onzichtbaar buiten
method , constructor
of block
zichtbaar voor alle
methods in de class;
onzichtbaar voor
andere classes
zichtbaar voor alle
methods in de class;
ook zichtbaar buiten
de class, als public
levensduur
start – exit uitvoer
van method ,
constructor of block
object-aanmaak met
new – verdwijnen
van referentie naar
object
start – exit uitvoer
programma
constanten
methods
public class variable: voorbeeld
Constante van de Math class (java API)
public static final double PI = 3.1415926535…;
public class PrintPI {
public static void main (String[] args){
System.out.println(Math.PI);
}
}
Instance variable: voorbeeld
public class Bicycle {
… … …
instance variable
private int speed;
… … …
public Bicycle (int startSpeed) {
speed = startSpeed;
}
constructor:
… … …
Bicycle myBicycle = new
public int getSpeed (){
Bicycle (10);
return speed;
}
getter method:
… … …
}
myBicycle.getSpeed()
public class method: voorbeelden
Methods van de Math class (java API)
public static int round (float a)
public static double sqrt (double a)
public static double random ()
Math.round(5.5)
private class variable / public class
method: voorbeelden
public class Bicycle {
… … …
private int speed;
private int id;
class variable
private static int numberOfBicycles = 0;
… … …
public Bicycle (int startSpeed) {
speed = startSpeed;
id = ++numberOfBicycles;
}
… … …
public static int getNumberOFBicycles(){
return numberOfBicycles;
}
… … …
class method:
}
Bicycle.getNumberOfBicycles
local variables: voorbeeld (1)
public class Adding {
public static void main (String[] args) {
int next=1;
int total = 0;
while (next > 0) {
next = Integer.parseInt(SimpleIO.readLine());
total = total + next;
}
System. out.println("Total is : " + total);
}
}
local variables: voorbeeld (2)
while (workToDo (table)) {
for (int r = 0; r < table.length; r++) {
for (int c = 0; c < table [0].length; c++) {
if (table [r] [c] > 3) {
stamps += 4;
table [r] [c] -= 4;
parameter: voorbeeld
public void setFee (double newFee) {
fee = newFee;
}
parameter
doc.setFee (150.00);
Array parameters
public class WordLists {
public static void main(String[] args)
String[] wordList1 = {"aap", "hond", "varken", "luipaard",
"bever"};
String[] wordList2 = {"hortensia", "roos", "lelie", "geranium",
"magnolia"};
System.out.println ("Longest word list 1: " +
wordList1[longestWord(wordList1)]);
System.out.println ("Longest word list 2: " +
wordList2[longestWord(wordList2)]);
}
private static int longestWord(String[] list) {
int indexLongestWord = 0;
for (int i = 1; i < list.length; i++) {
if (list[i].length() > list[indexLongestWord].length()) {
indexLongestWord = i;
}
}
return indexLongestWord;
}
}
Instance methods
public class Person {
private String name;
public Person () {
name = "no name yet.";
}
public Person (String initialName) {
name = initialName;
}
public void setName (String newName) {
name = newName;
}
public String getName () {
return name;
}
public void writeOutput () {
System.out.println ("Name: " + name);
}
public boolean sameName (Person otherPerson) {
return (this.name.equalsIgnoreCase (otherPerson.name))
}
}
Class methods: examples
public static void callByName (String name) {
system.out.print (name);
}
private static int updateScore (int currentScore, int
points) {
return currentScore + points;
}
Class var./method: gebruik in class
public class <class_name>
<declaratie class variable(s)>
public static void main (String [] args) {
<main body>
}
<declaratie class method(s)>
}
“helpers”
Class methods als “helpers”
“cohesion”
“stepwise refinement”
“top-down decomposition”
Verdeling van taken
Quiz-programma:
Stel een vraag aan de gebruiker
Lees het antwoord van de gebruiker
Controleer of het antwoord correct is
Geef adequate feedback
Hou de score bij
Class “helper” methods
private static String readAnswer (String question) {
SimpleIO.prompt (question);
String userInput = SimpleIO.readLine();
return userInput.trim().toLowerCase();
}
private static boolean match (String userAnswer, String correctAnswer) {
return (userAnswer.equals(correctAnswer));
}
private static void giveFeedback (boolean ok, String hurrah, String
sorry) {
System.out.println (ok ? hurrah : sorry);
}
private static void updateScore (boolean ok) {
if (ok) {
score += 10;
}
}
Gebruik van “helpers” in main
import jpb.*;
public class Quiz {
private static int score;
public static void main(String[] args) {
score = 0;
String userAnswer = "";
boolean isCorrect = false;
userAnswer = readAnswer ("Waarvan is bit de afkorting?\n") ;
isCorrect = match (userAnswer, "binary digit") ;
giveFeedback (isCorrect, "Goed geantwoord!", "Sorry. Verkeerd
antwoord.");
updateScore (isCorrect) ;
userAnswer = readAnswer ("Hoeveel bytes komen overeen met 32
bits?\n") ;
isCorrect = match (userAnswer, "4") ;
giveFeedback (isCorrect, "Het gaat prima zo!", "Wat jammer nu!") ;
updateScore (isCorrect) ;
System.out.println ("Your total score is " + score + " points.");
}
<declaration helpers>
}
Graphics
Graphics class of AWT package
DrawableFrame object en methoden
import java.awt.*;
import jpb.*;
public class <class name> {
public static void main (String[] args) {
// create drawable frame
DrawableFrame df = new DrawableFrame(<frame title>);
df.show() / df.setVisible(true);
df.setSize(<width>,<height>);
// obtain graphics context
Graphics g = df.getGraphicsContext();
//make drawing
<Graphics methods applied to Graphics object>;
// repaint frame
df.repaint();
}
}
DrawableFrame- en Graphicsobjecten
graphics context
frame / window
line
DrawLine class
// draws a line inside a frame
import java.awt.*;
import jpb.*;
public class DrawLine {
public static void main (String[] args) {
// create drawable frame
DrawableFrame df = new DrawableFrame("Line");
df.setVisible(true);
df.setSize(200,200);
// obtain graphics context
Graphics g = df.getGraphicsContext();
// draw line
g.drawLine(50,50,150,150);
// repaint frame
df.repaint();
}
}
Vormen tekenen
Gele achtergrondvorm stoplicht
kleur van de vorm
// Draw background of sign
g.setColor(Color.yellow)
int[] xBackground = {0, 100, 200, 100};
int[] yBackground = {100, 0, 100, 200};
g.fillPolygon(xBackground, yBackground,
xBackground.length);
X coordinaten
van vorm
Y coordinaten
van vorm
5 geneste vierkanten
// Draw five nested polygons to form the stripe on the
// outer border of the sign
g.setColor(Color.black);
int[] xPolygon1 = {5, 100, 195, 100};
int[] yPolygon1 = {100, 5, 100, 195};
g.drawPolygon(xPolygon1, yPolygon1, xPolygon1.length);
int[] xPolygon2 = {6, 100, 194, 100};
int[] yPolygon2 = {100, 6, 100, 194};
g.drawPolygon(xPolygon2, yPolygon2, xPolygon2.length);
int[] xPolygon3 = {7, 100, 193, 100};
int[] yPolygon3 = {100, 7, 100, 193};
g.drawPolygon(xPolygon3, yPolygon3, xPolygon3.length);
int[] xPolygon4 = {8, 100, 192, 100};
int[] yPolygon4 = {100, 8, 100, 192};
g.drawPolygon(xPolygon4, yPolygon4, xPolygon4.length);
int[] xPolygon5 = {9, 100, 191, 100};
int[] yPolygon5 = {100, 9, 100, 191};
g.drawPolygon(xPolygon5, yPolygon5, xPolygon5.length);
Tekenen van stoplicht
// Draw a black rectangle (the traffic signal)
g.fillRect(77, 35, 46, 130);
// Draw red,yellow,and green circles (the traffic
// lights)
g.setColor(Color.red);
g.fillOval(83, 43, 34, 34);
g.setColor(Color.yellow);
g.fillOval(83, 84, 34, 34);
g.setColor(Color.green);
g.fillOval(83, 125, 34, 34);
Tonen van tekst
Monospaced, Bold, 30
SansSerif, Italic, 30
Serif, Plain, 40
Toon tekst: programma
import java.awt.*;
import jpb.*;
public class DisplaySum {
public static void main (String[] args) {
// create drawable frame
DrawableFrame df = new DrawableFrame("Wirth's RULE");
df.setVisible(true);
df.setSize(350,200);
// obtain graphics context
Graphics g = df.getGraphicsContext();
// display text in red monospaced bold font
g.setColor(Color.red);
g.setFont(new Font("Monospaced", Font.BOLD, 30));
g.drawString("DATA STRUCTURES + ", 15, 50);
// display text in green sansserif italic font font
g.setColor(Color.green);
g.setFont(new Font("SansSerif", Font.ITALIC, 30));
g.drawString("ALGORITHMS = ", 15, 100);
// display text in blueserif plain font
g.setColor(Color.blue);
g.setFont(new Font("Serif", Font.PLAIN, 40));
g.drawString("PROGRAMS", 15, 150);
// repaint frame
df.repaint();
}
}