Úvod do programovacích jazyku˚ (java) · package chess; import java.lang.*; import...

82
Úvod do programovacích jazyk ˚ u (Java) Michal Kr ´ atk´ y [email protected] Katedra informatiky A1004 http://www.cs.vsb.cz/kratky ´ Uvod do programovacch jazyk˚ u (Java) – p. 1/82

Upload: others

Post on 07-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Úvod do programovacíchjazyku (Java)

Michal Kratky

[email protected]

Katedra informatiky

A1004

http://www.cs.vsb.cz/kratky

Uvod do programovacch jazyku (Java) – p. 1/82

Page 2: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Zápocet a zkouška

Zápocet >= 21b (ze 40 možných). Dvasemestrální projekty.

Predmet ukoncen klasifikovaným zápoctem.Min. 30b z 60 možných.

Uvod do programovacch jazyku (Java) – p. 2/82

Page 3: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

JDK a vývojováprostredí

http://java.sun.com – JDK – JavaPlatforma, aktuální verze 1.5

http://www.eclipse.org – Eclipse,vývojové prostredí

http://jikes.sourceforge.net/ –rychlý prekladac

Uvod do programovacch jazyku (Java) – p. 3/82

Page 4: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Literatura

B. Eckel: Thinking in Java. 2002,http://www.mindview.net/Books/TIJ

Sun MicroSystems: Sun Developer Network.2005, http://java.sun.com

R. Szturc: Introduction to Programming(Java). Department of Computer Science,VŠB – Technical University of Ostrava, 2004,http://www.cs.vsb.cz/java/index.html

Uvod do programovacch jazyku (Java) – p. 4/82

Page 5: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 1

public class Example1

{

public static void main(String[] args)

{

int i = 5;

int j = i + 3;

System.out.println("i=" + i + ", j=" +

j + "\n");

}

}

i=5, j=8Uvod do programovacch jazyku (Java) – p. 5/82

Page 6: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 2

public class Example2

{

public static void main(String[] args)

{

int i = 6, j = 3;

int div = i / j;

int mod = i % j;

System.out.println("div = " + div +

", mod = " + mod + "\n");

}

}

div = 2, mod = 0Uvod do programovacch jazyku (Java) – p. 6/82

Page 7: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 3

public class Example3

{

public static void main(String[] args)

{

int i = 6;

System.out.println("i = " + (-i));

System.out.println("i = " + (++i));

System.out.println("i = " + (i++));

System.out.println("i = " + i);

}

}

i = -6 i = 7 i = 7 i = 8Uvod do programovacch jazyku (Java) – p. 7/82

Page 8: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 4

public class Example4

{

public static void main(String[] args)

{

float a = (float)9.0;

if (a / 3 == 3.0)

{

System.out.println("ok");

}

}

}Uvod do programovacch jazyku (Java) – p. 8/82

Page 9: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 5

public class Example5

{

public static void main(String[] args)

{

int value = 1 << 2;

System.out.println(value);

}

}

4

00000001 << 2 = 00000100

Uvod do programovacch jazyku (Java) – p. 9/82

Page 10: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Complement –negative numbers

-1, 1 = 00000001

˜00000001 = 11111110 + 1 = 11111111 = 255

-1 >> 2 = -1

-1 << 2 = -4 (11111011 + 1 = 11111100)

-1 >>> 30 = 3

Uvod do programovacch jazyku (Java) – p. 10/82

Page 11: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 6

public class Example6 {

public static void main(String[] args)

{

boolean val = true;

double res = 0.0;

res1 = (val == true) ? 1.0 : 3.0;

res2 = (val) ? 1.0 : 3.0;

System.out.println(res1 + "," + res2);

}

}

1.0, 1.0

Uvod do programovacch jazyku (Java) – p. 11/82

Page 12: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 7

public class Example7

{

public static void main(String[] args)

{

double val = 3.14;

int res = (int)val;

System.out.println(res);

}

}

3

Uvod do programovacch jazyku (Java) – p. 12/82

Page 13: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 7.5

public class Example7DOT5

{

public static void main(String[] args)

{

int res = 0, a = 2, b = 1;

if ((res = a + b) > 2)

{

System.out.print("ok");

}

}

}

ok

Uvod do programovacch jazyku (Java) – p. 13/82

Page 14: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 8

public class Example8

{

public static void main(String[] args)

{

int i = 0;

for ( ; i < 8 ; i++)

{

int val = 1 << i;

System.out.println(val);

}

}

}

1 2 4 8 16 32 64 128 ... Uvod do programovacch jazyku (Java) – p. 14/82

Page 15: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 9

public class Example9 {

public static void main(String[] args) {

int val = 1;

int i = 0;

while (val > 0)

{

System.out.print(val + ", ");

val <<= 1;

}

...

1, 2, 4, 8, 16, 32, 64, ... , 1073741824

Uvod do programovacch jazyku (Java) – p. 15/82

Page 16: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle1/11

import java.math.*;

public class Coordinate {

public static int DEFAULT_DIMENSION = 2;

private int mDimension;

private double mValues[];

public Coordinate(int dimension) {

mDimension = dimension;

mValues = new double[mDimension];

}Uvod do programovacch jazyku (Java) – p. 16/82

Page 17: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle2/11

public void SetValue(int order, double value){

if (order >= 0 && order < mDimension) {

mValues[order] = value;

}

}

public double GetValue(int order) {

if (order >= 0 && order < mDimension) {

return mValues[order];

}

else {

return -1.0;

}

}Uvod do programovacch jazyku (Java) – p. 17/82

Page 18: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle3/11

public int GetDimension()

{

return mDimension;

}

public void Print()

{

for (int i = 0 ; i < mDimension ; i++)

{

System.out.print(mValues[i] + ",");

}

System.out.println(" ");

}Uvod do programovacch jazyku (Java) – p. 18/82

Page 19: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle4/11

public static double Distance(Coordinate c1,

Coordinate c2) {

double distance = 0.0;

for (int i=0 ; i < c1.GetDimension() ; i++)

{

double diff=c2.GetValue(i)-c1.GetValue(i);

distance += diff * diff;

}

return Math.sqrt(distance);

}

}

Uvod do programovacch jazyku (Java) – p. 19/82

Page 20: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle5/11

public class Triangle {

public static final int VERTEXES_NUMBER = 3;

private Coordinate mVertexes[];

public Triangle() {

int dimension = 2;

mVertexes = new Coordinate[VERTEXES_NUMBER];

for (int i = 0 ; i < VERTEXES_NUMBER ; i++)

{

mVertexes[i] = new Coordinate(dimension);

}

}Uvod do programovacch jazyku (Java) – p. 20/82

Page 21: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle6/11

public Coordinate GetVertex(int order)

{

if (order >=0 && order < VERTEXES_NUMBER)

{

return mVertexes[order];

}

else

{

return null;

}

}

Uvod do programovacch jazyku (Java) – p. 21/82

Page 22: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle7/11

public double Perimeter()

{

return

Coordinate.Distance(mVertexes[0],

mVertexes[1]) +

Coordinate.Distance(mVertexes[1],

mVertexes[2]) +

Coordinate.Distance(mVertexes[2],

mVertexes[0]);

}

}

Uvod do programovacch jazyku (Java) – p. 22/82

Page 23: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle8/11

import java.io.*;

public class TriangleRun {

private Triangle mTriangle;

...

public static void main(String args[])

{

new TriangleRun().Run();

}

}Uvod do programovacch jazyku (Java) – p. 23/82

Page 24: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle9/11

public TriangleRun()

{

mTriangle = new Triangle();

}

public int Run()

{

byte array[] = new byte[1024];

for (int i=0 ; i < Triangle.VERTEXES_NUMBER ;

{

Uvod do programovacch jazyku (Java) – p. 24/82

Page 25: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle10/11

for (int j=0 ; j<mTriangle.GetVertex(i)

.GetDimension() ; j++) {

try {

System.in.read(array);

String str = new String(array);

double value = Double.parseDouble(str);

mTriangle.GetVertex(i).SetValue(j, value);

} catch (IOException ioe) {

System.out.println( "IO error:" + ioe );

}

}

Uvod do programovacch jazyku (Java) – p. 25/82

Page 26: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example Triangle11/11mTriangle.GetVertex(i).Print();

}

System.out.println("perimeter: " +

mTriangle.Perimeter());

return 0;

}

Uvod do programovacch jazyku (Java) – p. 26/82

Page 27: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Chess – Files1/5

<chess>

<gui>

<model>

<view>

Board.java

ChessRun.java

Uvod do programovacch jazyku (Java) – p. 27/82

Page 28: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Chess – Compilation& Run – 2/5

d:\projs> javac chess\ChessRun.java

d:\projs>set PATH=%PATH%;d:\...\jdk1.5.0_03\bin

d:\projs>set CLASSPATH=%CLASSPATH%;.

d:\projs> java chess.ChessRun

Uvod do programovacch jazyku (Java) – p. 28/82

Page 29: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Chess – ChessRun3/5

/**

* Class of the chess game

*

* @author Michal Kratky

* @created 7.11.2005

*/

package chess;

public class ChessRun {

public static void main(String args[]) {

new Board().Run();

}

}Uvod do programovacch jazyku (Java) – p. 29/82

Page 30: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Chess – Board I4/5

package chess;

import java.lang.*;

import chess.model.*;

public class Board

{

public static int FIELD_NUMBER = 8;

private ChessPiece mGameArray[][];

Uvod do programovacch jazyku (Java) – p. 30/82

Page 31: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Chess – Board II4/5

/**

* Board class constructor

*

* @param value Description of the Parameter

*/

public Board()

{

mGameArray =

new ChessPiece[FIELD_NUMBER][FIELD_NUMBER];

}

...

}Uvod do programovacch jazyku (Java) – p. 31/82

Page 32: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Chess – ChessPiece5/5

/**

* ChessPiece - parent of the all chess pieces

*

* @author Michal Kratky

* @created 7.11.2005

*/

package chess.model;

abstract public class ChessPiece

{

...Uvod do programovacch jazyku (Java) – p. 32/82

Page 33: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Chess – jar file – 6/d:\projs> jar cvfm mymanifest chess.jar chess/*

file: mymanifest

Main-Class: chess.ChessRun

d:\projs>java -jar chess.jar

Uvod do programovacch jazyku (Java) – p. 33/82

Page 34: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

GUI Example -Waterwolf 1/11

WWW browser, HTTP client

Uvod do programovacch jazyku (Java) – p. 34/82

Page 35: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 2/11/**

* Author: Michal Kratky

* Project: WaterwolfForm

* File: WaterwolfForm.java

* Data: 11.12.2005

*/

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.net.*;

import java.io.*;Uvod do programovacch jazyku (Java) – p. 35/82

Page 36: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 3/11public class WaterwolfForm extends JFrame

implements ActionListener

{

public final static int BUFFER_LENGTH =1024;

public final static int TEXT_AREA_ROWS = 20;

public final static int TEXT_AREA_COLUMNS=100;

JTextField mTfUrl = new JTextField("");

JButton mBtnGo = new JButton("Go!");

JTextArea mTextArea = new JTextArea("",

TEXT_AREA_ROWS, TEXT_AREA_COLUMNS);

Uvod do programovacch jazyku (Java) – p. 36/82

Page 37: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 4/11public WaterwolfForm(String strUrl)

{

JLabel lblUrl = new JLabel("URL:");

JPanel northPanel = new JPanel(

new BorderLayout());

mTfUrl.setText(strUrl);

northPanel.add(BorderLayout.WEST, lblUrl);

northPanel.add(BorderLayout.CENTER, mTfUrl);

northPanel.add(BorderLayout.EAST, mBtnGo);

Uvod do programovacch jazyku (Java) – p. 37/82

Page 38: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 5/11JPanel mainPanel = new JPanel();

mainPanel.add(BorderLayout.NORTH,

northPanel);

JScrollPane scrollPane = new JScrollPane(

mTextArea);

getContentPane().add(BorderLayout.NORTH,

northPanel);

getContentPane().add(BorderLayout.CENTER,

scrollPane);

Uvod do programovacch jazyku (Java) – p. 38/82

Page 39: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 6/11// set gui

pack();

setTitle("Waterwolf 0.0001");

// add listeners

mBtnGo.addActionListener(this);

}

Uvod do programovacch jazyku (Java) – p. 39/82

Page 40: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 7/11/** Button events. */

public void actionPerformed(ActionEvent e)

{

System.out.println(mTfUrl.getText());

StringBuffer line = new StringBuffer(

BUFFER_LENGTH);

try

{

URL url = new URL(mTfUrl.getText());

InputStream in = url.openStream();

BufferedInputStream bufIn =

new BufferedInputStream(in);Uvod do programovacch jazyku (Java) – p. 40/82

Page 41: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 8/11// Repeat until end of file

int ch;

while ((ch = bufIn.read()) != -1)

{

line.append((char)ch);

if (ch == ’\n’) {

System.out.print(line);

mTextArea.append(line.toString());

line.delete(0, line.length());

}

}

}Uvod do programovacch jazyku (Java) – p. 41/82

Page 42: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 9/11catch (MalformedURLException mue)

{

JOptionPane.showMessageDialog(this,

"Invalid URL", "Error",

JOptionPane.ERROR_MESSAGE);

}

catch (IOException ioe)

{

JOptionPane.showMessageDialog(this, ioe,

"I/O Error", JOptionPane.ERROR_MESSAGE);

}

}Uvod do programovacch jazyku (Java) – p. 42/82

Page 43: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 10/11/** Run Waterwolf. */

public static void main(String []args)

{

String strUrl = "";

if (args.length == 1)

{

strUrl = args[0];

}

new WaterwolfForm(strUrl).setVisible(true);

}

}

Uvod do programovacch jazyku (Java) – p. 43/82

Page 44: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Waterwolf 11/11

java WaterwolfForm

"http://www.cs.vsb.cz:80/kratky"

Uvod do programovacch jazyku (Java) – p. 44/82

Page 45: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Applet Example -ChessApplet 1/10

Uvod do programovacch jazyku (Java) – p. 45/82

Page 46: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 2/10/**

* Author: Michal Kratky

* Project: ChessApplet

* File: ChessApplet.java

* Data: 11.12.2005

*/

import javax.swing.*;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

Uvod do programovacch jazyku (Java) – p. 46/82

Page 47: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 3/10public class ChessApplet extends JApplet

implements MouseListener

{

public static final int GAME_FIELD_POSX = 0;

public static final int GAME_FIELD_POSY = 32;

public static final int GAME_FIELD_SIZE = 32;

JLabel mLblLocation = new JLabel("");

Image mMainImage;

Uvod do programovacch jazyku (Java) – p. 47/82

Page 48: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 4/10public void init() {

JPanel panel = new JPanel();

panel.add(BorderLayout.WEST,

new JLabel("Location:"));

panel.add(BorderLayout.EAST, mLblLocation);

mMainImage = createImage(400, 400);

drawGameField();

getContentPane().add(BorderLayout.NORTH,

panel);

addMouseListener(this);

}Uvod do programovacch jazyku (Java) – p. 48/82

Page 49: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 5/10public void paint(Graphics g) {

g.drawImage(mMainImage, GAME_FIELD_POSX+0,

GAME_FIELD_POSY+0, this);

}

public void update(Graphics g) {

paint(g);

}

public void mouseClicked(MouseEvent e) {

mLblLocation.setText(e.getPoint().getX() +

", " + e.getPoint().getY());

repaint();

}Uvod do programovacch jazyku (Java) – p. 49/82

Page 50: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 6/10public void mouseExited(MouseEvent e)

{ }

public void mouseEntered(MouseEvent e)

{ }

public void mouseReleased(MouseEvent e)

{ }

public void mousePressed(MouseEvent e)

{ }

Uvod do programovacch jazyku (Java) – p. 50/82

Page 51: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 7/10/**

* Draw chess game field.

*/

public void drawGameField() {

Graphics g = mMainImage.getGraphics();

g.setColor(Color.BLACK);

g.drawRect(0, 0, 8*GAME_FIELD_SIZE,

8*GAME_FIELD_SIZE);

int posx = 0;

int posy = 0;

boolean oddFlag = true;Uvod do programovacch jazyku (Java) – p. 51/82

Page 52: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 8/10for (int i = 0 ; i < 8 ; i++) {

if (!oddFlag)

posx = 0;

else

posx = GAME_FIELD_SIZE;

for (int j = 0 ; j < 4 ; j++) {

g.fillRect(posx, posy, GAME_FIELD_SIZE,

GAME_FIELD_SIZE);

posx += 2*GAME_FIELD_SIZE;

}

posy += GAME_FIELD_SIZE;

oddFlag = !oddFlag;

}}}Uvod do programovacch jazyku (Java) – p. 52/82

Page 53: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 9/10chessapplet.html

<html>

<body>

<applet code="ChessApplet.class"

width="400" height="400"/>

</body>

</html>

Uvod do programovacch jazyku (Java) – p. 53/82

Page 54: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

ChessApplet 10/10

Uvod do programovacch jazyku (Java) – p. 54/82

Page 55: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Model/View Example- Counter 1/12

Uvod do programovacch jazyku (Java) – p. 55/82

Page 56: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 2/12

public interface CounterType

{

public void increment();

public void decrement();

}

Uvod do programovacch jazyku (Java) – p. 56/82

Page 57: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 3/12import java.util.*;

public class Counter extends Observable

implements CounterType

{

private int mValue = 0;

public Counter(Observer o)

{

addObserver(o);

}

Uvod do programovacch jazyku (Java) – p. 57/82

Page 58: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 4/12public void setValue(int value)

{

this.mValue = value;

setChanged();

notifyObservers(new Integer(mValue));

}

public int getValue()

{

return mValue;

}

Uvod do programovacch jazyku (Java) – p. 58/82

Page 59: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 5/12public void increment()

{

setValue(getValue() + 1);

}

public void decrement()

{

setValue(getValue() - 1);

}

}

Uvod do programovacch jazyku (Java) – p. 59/82

Page 60: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 6/12import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class CounterGUI extends JFrame

implements Observer, ActionListener

{

protected JButton mBtnInc =

new JButton("Increment");

Uvod do programovacch jazyku (Java) – p. 60/82

Page 61: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 7/12protected JButton mBtnDec =

new JButton("Decrement");

protected JLabel mLblLabel =

new JLabel("Counter Value");

protected JTextField mTfValue =

new JTextField("0");

protected CounterType mCounter =

new Counter(this);

Uvod do programovacch jazyku (Java) – p. 61/82

Page 62: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 8/12public CounterGUI()

{

setLayout(new BorderLayout(15,15));

setTitle("Counter");

JPanel north = new JPanel();

north.setLayout(new BorderLayout());

north.add(BorderLayout.NORTH, mLblLabel);

north.add(BorderLayout.SOUTH, mTfValue);

Uvod do programovacch jazyku (Java) – p. 62/82

Page 63: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 9/12JPanel south = new JPanel();

south.setLayout(new GridLayout(1,2,15,15));

south.add(mBtnInc);

south.add(mBtnDec);

getContentPane().add(BorderLayout.NORTH,

north);

getContentPane().add(BorderLayout.SOUTH,

south);

pack();

mBtnInc.addActionListener(this);

mBtnDec.addActionListener(this);

}Uvod do programovacch jazyku (Java) – p. 63/82

Page 64: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 10/12public void actionPerformed(ActionEvent e)

{

if (e.getSource() == mBtnInc)

{

mCounter.increment();

}

else if (e.getSource() == mBtnDec)

{

mCounter.decrement();

}

}

Uvod do programovacch jazyku (Java) – p. 64/82

Page 65: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter 11/12public void update(Observable c, Object arg)

{

mTfValue.setText(arg.toString());

}

public static void main(String []args)

{

new CounterGUI().setVisible(true);

}

}

Uvod do programovacch jazyku (Java) – p. 65/82

Page 66: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Example 12/12

Uvod do programovacch jazyku (Java) – p. 66/82

Page 67: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Counter - AdaptermBtnInc.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e)

{

mCounter.increment();

}

});

mBtnDec.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e)

{

mCounter.decrement();

}

});Uvod do programovacch jazyku (Java) – p. 67/82

Page 68: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken1/12 – Motivace

Uvod do programovacch jazyku (Java) – p. 68/82

Page 69: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken2/12 – Úvod

Vlákno (thread) reprezentuje samostatnouposloupnost príkazu provádených voperacním systému.

Vlákno x proces. Vlákno je odlehcenýmprocesem.

Stav vlákna (Thread.State): nové (new),bežící (runnable), ukoncené (terminated), . . . .

V operacním systému je možné nastavitprioritu vlákna.

Uvod do programovacch jazyku (Java) – p. 69/82

Page 70: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken3/12

Pro implementaci vlákna využijeme trídujava.lang.Thread.

Možnosti:Trída dedí ze trídy Thread.Trída implementuje rozhraníjava.lang.Runnable.

Uvod do programovacch jazyku (Java) – p. 70/82

Page 71: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken4/12

public class ComputeThread extends Thread

{

String mId;

double mParameter;

public ComputeThread(String id, double prm)

{

mId = id;

mParameter = prm;

}

Uvod do programovacch jazyku (Java) – p. 71/82

Page 72: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken5/12

public void run()

{

System.out.println("Thread " + mId + " run");

double value = 2.34;

for (int i = 1 ; i < Integer.MAX_VALUE ; i++)

{

value += (double)i * mParameter;

}

System.out.println("Thread: " + mId +

", Value: " + value);

}Uvod do programovacch jazyku (Java) – p. 72/82

Page 73: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken6/12

public static void main(String []args)

{

new ComputeThread("1", 1.1).start();

new ComputeThread("2", 1.2).start();

new ComputeThread("3", 1.3).start();

}

}

Uvod do programovacch jazyku (Java) – p. 73/82

Page 74: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken7/12

Pri sekvencním spouštenívýpoctu (4 x DualCoreOpteron 1.8GHz): 45s.Pri využití vláken: 15s.Notebook Intel Pentium M1.7GHz: 200s.

Uvod do programovacch jazyku (Java) – p. 74/82

Page 75: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken8/12

public class ComputeRunnable

implements Runnable

{

...

public void run()

{

...

}

Uvod do programovacch jazyku (Java) – p. 75/82

Page 76: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken9/12

public static void main(String []args)

{

ComputeRunnable cr1 =

new ComputeRunnable("1", 1.1);

new Thread(cr1).start();

// new ComputeThread("1", 1.1).start();

...

}

}

Uvod do programovacch jazyku (Java) – p. 76/82

Page 77: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken10/12 – Trída Thread

Thread.sleep() – uspání vlákna.

wait(), notify(), notifyAll() – metody prosynchronizaci vláken.

setPriority(int priority):Thread. MIN_PRIORITY <= priority <=Thread. MAX_PRIORITY.

Uvod do programovacch jazyku (Java) – p. 77/82

Page 78: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken11 – Synchronizace

Java jako vícevláknový systém se musí starato zabránení modifikace stejného objektu vícevlákny najednou.

Kód (blok nebo metoda), který nesmí býtprováden najednou se nazývá kritická sekce.

Príkaz synchronized oznacuje kritickousekci.

Objekt je uzamknut dokud je provádenakritická sekce.

Uvod do programovacch jazyku (Java) – p. 78/82

Page 79: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Programování vláken12 – Synchronizace

public class DataStorage

{

private int contents;

private boolean available = false;

public synchronized int get(int who)

{

// DataStorage locked

...

// DataStorage unlocked

}

}

Uvod do programovacch jazyku (Java) – p. 79/82

Page 80: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Generické datovétypy

List intList = new LinkedList();

intList.add(new Integer(34));

Integer x = (Integer) intList.iterator()

.next();

int value = x.intValue();

Porovnej s

List<Integer> intList =

new LinkedList<Integer>();

intList.add(new Integer(34));

Integer x = intList.iterator().next();

int value = x.intValue();

Uvod do programovacch jazyku (Java) – p. 80/82

Page 81: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Generické datovétypy – Definice

public interface List<E>

{

void add(E x);

Iterator<E> iterator();

}

public interface Iterator<E>

{

E next();

boolean hasNext();

}

Uvod do programovacch jazyku (Java) – p. 81/82

Page 82: Úvod do programovacích jazyku˚ (Java) · package chess; import java.lang.*; import chess.model.*; public class Board {public static int FIELD_NUMBER = 8; private ChessPiece mGameArray[][];

Další Javatechnologie

Datová vrstva: JDBC.

XML technologie: SAX a DOM.

Webové aplikace: Servlet, JSP.

Distribuované aplikace: RMI, CORBA.

Uvod do programovacch jazyku (Java) – p. 82/82