Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:

Hasonló előadás


Az előadások a következő témára: "Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:"— Előadás másolata:

1 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

2 getClass()‏ final („végleges”)‏ segítségével lekérhetjük az objektum osztályát, ősosztályát void PrintClassName(Object obj) { System.out.println("The Object's class is " + obj.getClass().getName()); } Object createNewInstanceOf(Object obj) { return obj.getClass().newInstance(); }

3 Egymásba ágyazott osztályok I. class TartalmazoOsztaly{... class BeagyazottOsztaly {... } } 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

4 Egymásba ágyazott osztályok II. anonymous public class kezelo implements ActionListener { … } hourField.addActionListener(new kezelo()); helyette: hourField.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { Integer.parseInt(e.getActionCommand); } )‏

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

6 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

7 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 public interface StockWatcher extends PStockWatcher{ final String sunTicker = "SUNW"; final String oracleTicker = "ORCL"; final String ciscoTicker = "CSCO"; void valueChanged(String tickerSymbol, double newValue); }

8 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 StockApplet extends Applet implements StockWatcher {... public void valueChanged(String tickerSymbol, double newValue) ‏ { if (tickerSymbol.equals(sunTicker)) {... } else if (tickerSymbol.equals(oracleTicker)) {... } else if (tickerSymbol.equals(ciscoTicker)) {... } } }

9 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)‏

10 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ó: com.company.package package graphics; public class Circle extends Graphic implements Draggable {... }

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

12 Csomagok – példa src/world/HelloWorld.java package world; public class HelloWorld { … } src/world/moon/HelloMoon.java package world.moon; public class HelloMoon { … } world.HelloWorld myWorld = new world.HelloWorld(); import world.*; import world.moon.HelloMoon; import java.util.*; HelloMoon myMoon = new HelloMoon(); S tring holeName = myMoon.getHoleName();

13 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, toString, finalize)‏ System (in, out, err, setIn, setOut, setErr, gc, exit, arrayCopy, currentTimeMillis)‏ 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, StringTokenizer,...)‏ 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)‏

14 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 }

15 Kései kötés (late binding)‏ Shape s = new Circle(); s.draw(); 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 PrivateOverride { private void f() { System.out.println("private f()"); } public static void main(String[] args) { PrivateOverride po = new Derived(); po.f(); } class Derived extends PrivateOverride { public void f() { System.out.println("public f()"); }

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

17 RTTI Class objektum – minden általunk használt osztályhoz static Class Class.forName(name, …)‏ Class.newInstance()‏ public final Class Object.getClass()‏ 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)‏

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

19 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

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


Letölteni ppt "Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:"

Hasonló előadás


Google Hirdetések