Adam Lipowski

Java - podstawy programowania

Java – j
ęzyk powstały do tworzenia aktywnych stron internetowych  we wczesnych latach 90-tych.

Dlaczego Java?

- Uproszczony C++, jednak wolny od niektórych jego mankamentów (brak wielokrotnego dziedziczenia, brak struktur (tylko klasy), niemożność przedefiniowywania operatorów, brak arytmetyki wskaźnikowej).
-
-
Elegancki j
ęzyk programowania zorientowanego obiektowo
z wbudowaną (bardzo dużą) biblioteką klas.

- Kontrola typów na etapie kompilacji,  mechanizm obsługi wyjątków, wbudowane w język elementy współbieżności.
-
-
- Dost
ępność (darmowe!),  przenośność (Linux, Unix, Windows, MacOS, Android,...
).

-
Standardowo wyposa
żona w procedury graficzne (AWT, Swing, Java Foundation Classes), dźwiękowe (które są przenośne!).  Rozszerzenia: Java3D, Java Media Framework (np.filmy).

- Zawiera pakiet Java Database Connectivity  API umożliwiający łączenie się aplikacji i apletów z relacyjnymi bazami danych. Pakiet ten oparty jest na powszechnym standardzie w programowaniu baz danych - SQL.

- Uniwersalne środowisko programowania w sieci klient-serwer: aplety - programy wykonujące się w środowisku przeglądarki; serwlety - zapewniaja obsługę i zarządzanie transakcjami po stronie servera (Java Servlet API); aplikacji - mogących sięgać do Internetu (lub intranetu) za pomocą wbudowanych bibliotek sieciwych.

- Język do tworzenie tzw. middleware - oprogramowania pośredniczącego i integrującego działanie aplikacji napisanych w różnych językach oraz działających (nawet jednocześnie) na różnych platformach systemowych i sprzętowych. Jednym z projektów jest CORBA - Common Object Request Broker Architecture).

- Język do przetwarzania dokumentów XML (Extended Markup Language - biznesowo zorientowana wersja HTML)

- Standardowo wyposażona w arytmetykę dowolnej precyzji.
-
- 'Kompilator' tłumaczy kod źródłowy na tzw. kod bajtowy (kod pośredni między kodem maszynowym a kodem źródłowym) Zaletą kodu bajtowego jest jego systemowa niezależność. Kod bajtowy uruchamiany jest przez interpreter (spowolnienie, jednak nieznaczne).
Większą szybkość zapewnia 'just in time compilation' lub kompilacja do kodu maszynowego (za cenę przenośności!).
-
- Dynamiczność, niezależność od architektury
, odśmiecacz pamięci,...
(http://www.javagrande.org).

- Bezpieczeństwo. Applety mają tylko ograniczony dostęp do komputera klienta: nie mają dostępu do operacji wejścia/wyjścia, ani do pamięci przydzielonej innym programom (menadżerem bezpieczeństwa może to zmienić). Aplikacje mają jednak pełne możliwości.

Java zawiera standardowe środki  do realizacji niemal wszystkich zadań informatycznych

Literatura:

-K.Walczak  Java - nauka programowania dla początkujących
(W&W, 2002)
-P.K.McBride   Java to proste (Read Me, 2002)
-K.Barteczko, Ćwiczenia z Java. Wykłady i ćwiczenia (MIKOM, 2000)
S.Potts, Java w zadaniach (Robomatic 2001)
-B.Eckel Thinking in Java (Helion, 2003)
-S.N.Kamin, M.D.Mickunas, and E.M.Reingold, ‘An introduction to
 computer computer science using Java’ (MCGraw-Hill, 1998).
R.J.Davies, 'Introductory Java for Scientists and Engineers' (Addison-Wesley)
-D.J.Eck, ‘Introduction to Programming Using Java
-(tylko w wersji elektronicznej:http://math.hws.edu/javanotes




Najprostsze programy

Program 1.

class Hello {
  // Autor AL, 01 luty 2004
  public static void main (String [] args) {
  // Drukuje ‘Hello’
    System.out.println("Hello");
  }
}

Program ten musi być w zbiorze Hello.java
Kompilacja:  javac Hello.java
Uruchomienie: java Hello
Wydruk na terminalu:  Hello

Program 2.

class Temperature {
  // Autor AL, 01 luty 2004
// Zamienia stopnie Fahrenheita na Celsjusza
  public static void main (String [] args) {
  int temperature;   // temperatura w stopniach Fahrenheita
  System.out.print(« Please type the temperature (deg F): »);
  temperature =  36;
//  temperature=Keyboard.readInt()
  System.out.print(temperature);
  System.out.print(«  deg F is »);
  System.out.print(5.0*(temperature-32.0)/9.0);
  System.out.print(« deg C»);
  }// Koniec main
}// Koniec  Temperature


Komentarze

// to jest komentarz

/*  a to jest
     trochę dłuższy
     komentarz  */

/*  dłuższy komentarz
     może zawierać
       komentarz   //  to jest komentarz jednolinijkowy
     jednolinijkowy  */


Wyznaczanie π metodą Monte Carlo

Kwadrat i
                    koło               \ π/4=M/N                      
                                                                  M=liczba punktów wewnątrz okręgu
                                                                   N=całkowita liczba punktów

Program 3

// wyznaczanie p metodą Monte Carlo
 // Autor AL., 9 luty 2004
class Monte_Carlo {
    public static void main(String[] args) {
        double r1,r2;
        int i,m=0,n=10000;
        for (i=1;i<=n;i++){
           r1=Math.random()-0.5;
           r2=Math.random()-0.5;
           if(r1*r1+r2*r2<0.25) m++;
        }
        System.out.println(„Wynik=”+4.*m/n);
    } 
}


Typy proste



Operatory





Deklaracje, łańcuchy, proste operacje numeryczne

- Zmienne typów prostych są automatycznie inicjowane w momencie  deklaracji. Przyjmują wartości  0 (0.0) lub wskazane, np.,
     int i=5;
- W momencie deklaracji zmiennej typu obiektowego tworzona jest wyłącznie referencja to tego obiektu. Tzn. wskazane jest   miejsce w pamięci gdzie może być przechowywany ten obiekt. Obiekty tworzymy za pomocą słowa kluczowego new:
   Button b;
   b=new Button();
- Typ łańcuchowy (obiektowy).
   Zbudowanie obiektu typu string jest możliwe za pomocą użycia literału łańcuchowego (napis w cudzysłowie):
        String s = "ala ma kota";
  
Operator + dokonuje konkatenacji łańcuchów:
        String t1 = "To be ",
                   t2 = "or not to be";
        System.out.println(t1+t2);  // drukuje: To be or not to be
  
Operator + dokonuje również konkatenacji łańcucha i zmiennej typu prostego (po uprzedniej zamianie na łańcuch):
       int i=5;
       String s = "12";
     
System.out.println(s+i);  // drukuje: 125
      System.out.println("4"+"5");  // drukuje: 45
      System.out.println("4"+5);  // drukuje: 45
     
System.out.println(4+5);  // drukuje: 9
      System.out.println("4"+"005");  // drukuje: 4005
     
System.out.println("4"+005);  // drukuje: 45
       System.out.println("4"+5+1);  // drukuje: 451
     
System.out.println("4"+(5+1));  // drukuje: 46
      System.out.println("4"*5);  // błąd
- Stałe.
   final int iterations=100;
   final double x=3.99;
- Prawa strona instrukcji podstawienia wykonywana jest bez uwzględnienia strony lewej
   Przykład
        double d;
         d=1/2;
   
(W rezultacie d przyjmuje wartość 0.0)
    Natomiast podstawienia
      d=1.0/2.0;
      d=1/2.0;
      d= ((double) 1)/2;
    
dają w każdym przypadku 0.5
   
- Operatory unarne ++ i --.
   i=j++;  //  postfix operator: i=j; j=j+1;

   i=++j;  //  prefix operator:  j=j+1; i=j;

- Funkcje matematyczne
 
Lista metod (public static) w klasie java.lang.Math:


Przykład użycia:
     double x,y=1.5,z;
     x=Math.sin(y);
     z=Math.sqrt(x*x+1.0);

Instrukcje sterujące

Instrukcja może składać się z kilku instrukcji elementarnych zgrupowanych w blok
przez ujęcie ich w nawias klamrowy:
If(a<b) {c=a+b;
        d=a*b;
        e=a-b;}



Program 4 (BigNum)

Program zamienia liczby (debt i pop) w łańcuchy, dzieli je na trójki liczb i wstawia przecinki między nimi.

public class BigNum {

public static void main (String args[]) {


    long debt = 3965170506502L;
    long pop = 250410000;

    print ("Dlug narodowy USA w 1992 roku: $", debt);
    print ("Populacja USA w 1992 roku: ", pop);
   

/*
 * metoda print przeksztalca typ long w lancuch z przecinkami
 * rozdzielajacymi trojki cyfr.
 *    String str    etykieta poprzedzajĄca liczbe
 *    long n        liczba do sformatowania i wyswietlenia
 */
public static void print (String str,long n) {
    System.out.print (str);             // drukuje etykiete
    String buf = String.valueOf (n);    // zmienia Integer w String

    int start, end, ncommas, i;
    int buflen = buf.length ();

    ncommas = buflen/3;
    if (ncommas * 3 == buflen) ncommas --;
    start = 0;
    end = buflen-(3*ncommas);
    System.out.print (buf.substring (start, end));
    for (i=0; i<ncommas; i++) {
        start = end;
        end = start+3;
        System.out.print (",");
        System.out.print (buf.substring (start, end));
    }
    System.out.println ("");    // Ostatnia nowa linia
}
}


Konwersja  łańcucha w typ Int lub Double:

int i;
double x;
String s1="123", s2="4.56";
i=Integer.parseInt(s1);
x=Double.parseDouble(s2);
/* Konwersje odwrotne  */
String s3,s4;
s3=String.valueOf(i);
s4=String.valueOf(x);



Struktura programu, uruchamianie

W Javie program jest zestawem klas

Struktura programu:
import ... // deklaracje importu; zwykle, ale nie zawsze potrzebne
public class A{
...
} // koniec definicji klasy A
class B {
...
}// koniec definicji klasy B
...

Klasa: dane i operacje (metody), które można na nich wykonać

Program może być zapisany w jednym albo wielu plikach źródłowych (*.java).
W danym pliku może znajdować się tylko jedna klasa publiczna (public).
Plik z klasą publiczną musi mieć (dokładnie) taką samą nazwę jak ta klasa (A.java).
Kompilacja (javac A.java) tworzy pliki z rozszerzeniem .class (A.class i B.class).

Istnieją dwa sposoby wykonywania programów w Javie:
1) Jeżeli klasa publiczna (A) zawiera metodę public static void main (String [] args)
    wówczas wykonanie aplikacji odbywa się za pomocą komendy java A (nazwa klasy publicznej).
    W ten sposób klasa A zostaje załadowana do JVM (Java Virtual Machine) i sterowanie
    zostaje przekazane do metody main tej klasy (tworzenie obiektów, odwołania do innych klas, metod).
2) Jedna z klas dziedziczy klasę Applet, np..:
        class  MyApplet extends Applet {
        ...
        }
        .....
    Po kompilacji (javac MyApplet.java) powstaje MyApplet.class.
    Musi istnieć jakis zbiór HTML, w którym występuje znacznik:
            <applet code=MyApplet.class ...> plus ewentualne parametry i opcje.
    Po napotkaniu tego znacznika przeglądarka ładuje plik MyApplet.class.
    Wywołany zostaje konstruktor klasy MyApplet (metoda init()).

HTML (hypertext markup language)


 
HTML to język, w którym napisane są strony domowe. Komputer klienta, który pobiera daną strone WWW, wczytuje tekst dokumentu w HTML i używa go do utworzenia obrazu, który jest następnie wyświetlany przez przeglądarkę.

<HTML>
<HEAD>
<TITLE> My first home page</TITLE>
</HEAD>
<BODY>
My name is Adam. I am a physicist.
</BODY>
</HTML>
 

Test

Plik Html  z osadzonym obrazem i hiperlinkiem

<html>
<head>
  <title>My first home page</title>
</head>
<body>
<center><H1>Home page<H1></center>
<h2>My name is Adam. I am a physicist.<br>
</h2>
<img src="my_photo.jpg" width=244 height=326><br>
<A href="http://spin.amu.edu.pl/~lipowski"><h3>Here is my Home Page</h3></A>
</body>
</html>


 
Test


Plik HTML z osadzonym apletem

HelloApplet.java

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class HelloApplet extends Applet {
    public void init(){
       add (new Label(„Hello”));
   }
}

Plik HTML

<HTML>
<HEAD>
<TITLE> My first home page</TITLE>
</HEAD>
<BODY>
My name is Adam. I am a physicist.
I am learning Java. Here is my first applet.
<applet  code=„HelloApplet.class” width=200 height=200>
</applet>
</BODY>
</HTML>

Test


Aplet BigNum

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class BigNum_a extends Applet {
public void init(){


    long debt = 3965170506502L;
    String wydruk="Dlug narodowy USA w 1992 roku: $";

    String buf;
         buf = String.valueOf (debt);    // zmienia Integer w String

    int start, end, ncommas, i;
    int buflen = buf.length ();
    ncommas = buflen/3;
    if (ncommas * 3 == buflen) ncommas -= 1;
    start = 0;
    end = buflen-(3*ncommas);
    wydruk=wydruk+buf.substring (start, end);
    for (i=0; i<ncommas; i++) {
        start = end;
        end = start+3;
        wydruk=wydruk+","+buf.substring (start, end);
    }
    add (new Label(wydruk));
}
}

Test