Kihagyás

1. előadás

Előadó: Kozsik Tamás

Kezdés: 10:15

Minden előadáson kvízek (15-20 percenként)

Java

  • C alapú szintax
  • OOP
    • Class - based
  • Imperatív
  • JVM (Java Virtual Machine)
    • Platformfüggetlen
    • ~~Write~~ Compile once, run everywhere
  • Erősen típusos
  • Statikus + dinamikus típusrendszer
  • Generikus, ~~Konkurens~~ nyelvi eszközök
  • Erőforrásintenzív

Java Language Specifications

int lnko(int a, int b)
{
    while(b != 0)
    {
        int c = b % a;
        a = b;
        b = c;
    }
    return a;
}

Hello World:

class HelloWorld {
    public static void main( String[] args ){
        System.out.println("Hello world!");
    }
}

Tanuljuk meg, mint egy mantrát :)

Objektumelvű programozás

Egységbezárás

Adat és rajta értelmezett alapműveletek

  • "Pont" objektum
  • "Racionális szám" objektum
  • "Sorozat" objektum
  • "Ügyfél" objektum
p.x = 0;
p.y = 0;
p.move(3, 5);
System.out.println(p.x);

Metódusok

Java:

p.x = 0;
p.y = 0;
p.move(3, 5);

C:

p.x = 0;
p.y = 0;
move(p, 3, 5);

Osztály

class Point {
    int x, y;
    void move(int dx, int dy) {...}
}

Példányosítás (instantiation)

  • Objektum létrehozása osztály alapján
  • Javában: mindig a heapen
    • (Heap: dinamikusan allokált)
Point p = new Point();

Példa: szövegek

String name = "James Arthur Gosling"
String[] names = name.split(" ");
String abbrev = names[names.length-1] + ", "
                + names[0].charAt(0) + ".";

Java program lefordítása

Java programok felépítése

  • [modul (module)]
  • csomag (package)
  • osztály (class)
  • tag (member)
    • adattag (mező, field)
    • metódus (method)

Java forrásfájl

  • Osztálynévvel
    • Kis- és nagybetű érzékeny
  • .java kiterjesztés
  • Fordítási egység
  • Csomagjának megfelelő könyvtár
  • Karakter kódolás

Megjegyzés: CamelCase naming convension

Fordítás, futtatás

  • A "Tárgykód" a JVM bájtkód (.class)
  • Nem szerkesztjük statikusan
  • Futtatás: bájtkód interpretálás + JIT
    • JIT: Just-in-time compilation
$ javac ./HelloWorld.java
$ java HelloWorld
Hello world!

Java programok futása

  • Végrehajtási verem (execution stack)
    • Aktivációs rekordok
      • Lokális változók
      • Paraméterátadás
  • Dinamikus tárhely (heap)
    • Objektumok tárolása

Absztrakció

  • Egységbezárás (encapsulation)
  • Információelrejtés

Osztály, objektum, példányosítás

Point.java

class Point { //Osztálydefiníció
  int x, y;   // mezők
}

Main.java

class Main
{
    public static void main(String[] args) // főprogram
    {
        Point p = new Point();  // példányosítás (heap)
        p.x = 3;                // (innentől) objektumok
        p.y = 5;                // állapotának változtatása
    }
}

Előáll egy Main.class és egy Point.class

$ ls
Main.java Point.java
$ javac *.java
$ ls
Main.class Main.java Point.class Point.java
$ java Main

Mezők alapértelemezett inicializációja

class Point {
  int x = 3, y = 3;
}

class Main {
  public static void main( String[] args ) {

    Point p = new Point();
    System.out.println(p.x + " " + p.y);
  }
}

Osztály metódusok

class Point {
  int x, y;
  void move( int dx, int dy ) {
    // (`this`: implicit paraméter)
    this.x += dx;
    this.y += dy;
    // ebben az esetben elhagyható a this:
    // y += dy;
  }
}


class Main {
  public static void main( String[] args ) {
    Point p = new Point();
    p.move(3,3); // p -> this, 3 -> dx, 3 -> dy
  }
}

Konstruktorok

class Point
{
    int x, y;
    Point(int x, int y) // elfedés
    {
        this.x = x;
        this.y = y;
    }
}

class Main
{
  public static void main( String[] args )
  {
    Point p = new Point(0,3);
    System.out.println(p.x + " " + p.y);
  }
}
  • Metódusoknál mindig van megadva visszatérési érték típus
  • Konstruktornál sosincs
  • Automatikusn generál default konstruktort, ha nem csinálunk
Point(){} // Üres konstruktor (ez a default)