Szoftvertechnolgia alapjai Java eladsok Frhcz Andrs doktorandusz email

  • Slides: 20
Download presentation
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit. bme. hu tárgy honlap: http:

Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit. bme. hu tárgy honlap: http: //home. mit. bme. hu/~fandrew/szofttech_hu. html

get. Class() final („végleges”) segítségével lekérhetjük az objektum osztályát, ősosztályát void Print. Class. Name(Object

get. Class() final („végleges”) segítségével lekérhetjük az objektum osztályát, ősosztályát void Print. Class. Name(Object obj) { System. out. println("The Object's class is " + obj. get. Class(). get. Name()); } Object create. New. Instance. Of(Object obj) { return obj. get. Class(). new. Instance(); }

Egymásba ágyazott osztályok I. class Tartalmazo. Osztaly{. . . class Beagyazott. Osztaly {. .

Egymásba ágyazott osztályok I. class Tartalmazo. Osztaly{. . . class Beagyazott. Osztaly {. . . } } a beágyazott osztály hozzáfér a tartalmazó osztály minden tagjához (private-hez is) gyakran használják eseménykezelésre a beágyazott osztály lehet: teljes anonymous – metódusban definiáljuk

Egymásba ágyazott osztályok II. anonymous public class kezelo implements Action. Listener { … }

Egymásba ágyazott osztályok II. anonymous public class kezelo implements Action. Listener { … } hour. Field. add. Action. Listener(new kezelo()); helyette: hour. Field. add. Action. Listener( new Action. Listener() { public void action. Performed(Action. Event e) { Integer. parse. Int(e. get. Action. Command); } } )

Absztrakt osztály – példa abstract class Cat { String abstract. Class. Name = "Cat";

Absztrakt osztály – példa abstract class Cat { String abstract. Class. Name = "Cat"; //abstract classes can have variables String get. Abstract. Class. Name() { return abstract. Class. Name; } abstract String get. Class. Name(); //this must be implemented } class Himalayan extends Cat{ String class. Name = "Himalayan"; public Himalayan() {} String get. Class. Name() //must have this method { return class. Name; } public static void main(String[] args) { //Cat percy = new Cat(); //can not instantiate an abstract class Himalayan cappuccino = new Himalayan(); System. out. println(cappuccino. get. Abstract. Class. Name()); //output is: Cat System. out. println(cappuccino. get. Class. Name()); //output is: Himalayan } }

Interfészek az interfész egy protokollt definiál mely bárhol megvalósítható segítségével tulajdonképpen megvalósítható a többszörös

Interfészek az interfész egy protokollt definiál mely bárhol megvalósítható segítségével tulajdonképpen megvalósítható a többszörös öröklődés az interfész metódusokat definiál, de nem implementálja őket; definiálhat változókat is különbség az absztrakt osztály és az interfész között: egy interfész nem implementálhat metódusokat egy osztály több interfészt megvalósíthat az interfész nem tagja az osztályhierarchiának

Interfész definiálása az interfész örökölhet (extends – őse a szuper interfész) a metódusok törzs

Interfész definiálása az interfész örökölhet (extends – őse a szuper interfész) a metódusok törzs nélküliek csak static, final módosítók használhatóak minden public interface Stock. Watcher extends PStock. Watcher{ final String sun. Ticker = "SUNW"; final String oracle. Ticker = "ORCL"; final String cisco. Ticker = "CSCO"; void value. Changed(String ticker. Symbol, double new. Value); }

Interfész megvalósítása minden az interfészben deklarált metódust meg kell valóstani az interfészt nem szabad

Interfész megvalósítása minden az interfészben deklarált metódust meg kell valóstani az interfészt nem szabad módosítani! az extends az implements előtt szerepel public class Stock. Applet extends Applet implements Stock. Watcher {. . . public void value. Changed(String ticker. Symbol, double new. Value) { if (ticker. Symbol. equals(sun. Ticker)) {. . . } else if (ticker. Symbol. equals(oracle. Ticker)) {. . . } else if (ticker. Symbol. equals(cisco. Ticker)) {. . . } } }

Csomagok Minden osztály egy csomaghoz tartozik Beépített és saját (felhasználói) csomagok Deklaráció: kód első

Csomagok Minden osztály egy csomaghoz tartozik Beépített és saját (felhasználói) csomagok Deklaráció: kód első sora package xy. gw; Hierarchikus, könyvtárstruktúrának követnie kell Ha nem adjuk meg: default package import (kb. mint C++ include)

Csomagkezelés az osztálykezelés egyszerűbbé tétele feloldja az elnevezési problémákat az összefüggő osztályokat csomagokba lehet

Csomagkezelés az osztálykezelés egyszerűbbé tétele feloldja az elnevezési problémákat az összefüggő osztályokat csomagokba lehet foglalni a csomagon kívül csak a public tagok, osztályok hozzáférhetőek elnevezésre a cégek a cég URL címének inverze használható: company. package graphics; public class Circle extends Graphic implements Draggable {. . . }

Csomagok használata Hivatkozhatunk a tagra a teljes névvel A csomag tagot importáljuk Az egész

Csomagok használata Hivatkozhatunk a tagra a teljes névvel A csomag tagot importáljuk Az egész csomagot importáljuk

Csomagok – példa src/world/Hello. World. java src/world/moon/Hello. Moon. java world. Hello. World my. World

Csomagok – példa src/world/Hello. World. java src/world/moon/Hello. Moon. java world. Hello. World my. World = new world. Hello. World(); package world; public class Hello. World { … } package world. moon; public class Hello. Moon { … } import world. *; import world. moon. Hello. Moon; import java. util. *; Hello. Moon my. Moon = new Hello. Moon(); String hole. Name = my. Moon. get. Hole. Name();

Standard java csomagok java. lang (nyelvi elemek – nem kell importálni!!)) wrapper osztályok (Integer,

Standard java csomagok java. lang (nyelvi elemek – nem kell importálni!!)) wrapper osztályok (Integer, Byte, . . . ) Math (Math. PI, Math. sin(1), statikus!!) Object (ősosztály, clone, equals, to. String, finalize) System (in, out, err, set. In, set. Out, set. Err, gc, exit, array. Copy, current. Time. Millis) Thread (párhuzamos programozás) java. io (IO műveletek, file, nyomtatás, stream-ek használatával) java. net (hálózati kommunikáció, socket, datagramm, URL) java. applet (Appletek) java. util (időzítő, adatszerkezetek (hash, vektor), dátum, String. Tokenizer, . . . ) java. util. regex, java. util. logging, . . . java. awt (grafikus felület, eseménykezelés) javax. swing (újabb grafikus könyvtár. . . ) java. sql (SQL, adatbázis kapcsolat)

Upcasting az új osztály a meglévő osztály egy típusa (ősosztálya) minden üzenetet melyet az

Upcasting az új osztály a meglévő osztály egy típusa (ősosztálya) minden üzenetet melyet az ősosztálynak küldhetünk elküldhető a gyermek osztálynak is a Java erősen típusos nyelv azonban a gyermek referencia ős referenciává alakítása működik (upcasting)! mindig biztonságos (egy specifikusabb megvalósításból megyek egy általánosabbra) ezért nem kell semmilyen módon jeleznünk a fordító számára class Instrument { public void play() {} static void tune(Instrument i) { //. . . i. play(); } } // Guitar objects are instruments // because they have the same interface: public class Guitar extends Instrument { public static void main(String[] args) { Guitar g = new Guitar(); Instrument. tune(g); // Upcasting } }

Kései kötés (late binding) Minden metódus így működik Kivétel final, static (ezzel gyorsíthatjuk a

Kései kötés (late binding) Minden metódus így működik Kivétel final, static (ezzel gyorsíthatjuk a programot, a fordító hatékonyabb kódot generál, a private metódusok is finalként működnek) A private metódus nem felülírható !!! public class Private. Override { private void f() { System. out. println("private f()"); } public static void main(String[] args) { Private. Override po = new Derived(); po. f(); } } Shape s = new Circle(); s. draw(); class Derived extends Private. Override { public void f() { System. out. println("public f()"); } }

Downcasting Az upcasting biztonságos downcasting-nál meg kell vizsgálni a referenciát RTTI (run time type

Downcasting Az upcasting biztonságos downcasting-nál meg kell vizsgálni a referenciát RTTI (run time type identification) Class. Cast. Exception

RTTI Class objektum – minden általunk használt osztályhoz static Class. for. Name(name, …) Class.

RTTI Class objektum – minden általunk használt osztályhoz static Class. for. Name(name, …) Class. new. Instance() public final Class Object. get. Class() instanceof Amikor egy objektumot létrehozunk a JVM megnézi, hogy az adott Class objektum be van-e már töltve, ha nincs akkor betölti (nem töltődik be minden a program elindításakor)

public static void main(String[] args) Kötelező formátum java osztálynév ”elso parameter” Tesztelésre minden osztályba

public static void main(String[] args) Kötelező formátum java osztálynév ”elso parameter” Tesztelésre minden osztályba használható

JAR fájlok kezelése jar cf jar-file input-file(s) – becsomagolás jar tf jar-file – tartalom

JAR fájlok kezelése jar cf jar-file input-file(s) – becsomagolás jar tf jar-file – tartalom megtekintése jar xf jar-file [archived-file(s)] – kicsomagolás java -jar jar-file – futtatás jar uf jar-file input-file(s) – frissítés jarsigner jar-file alias – aláírás jarsigner -verify jar-file - ellenőrzés

 public paint(Babu b) { b. . (); if (b instanceof Lovas) { Lovas

public paint(Babu b) { b. . (); if (b instanceof Lovas) { Lovas l = (Lovas)b; l. . (); } else … }