Java bevezető Beágyazott rendszerek szoftvertechnológiája c. tárgyhoz

Slides:



Advertisements
Hasonló előadás
4. alkalom – Hálózat Kezelés
Advertisements

Adatbányászati technikák (VISZM185)
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Kivételkezelés.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
Java programozási nyelv Filekezelés
Java programozási nyelv Adatbekérés konzolról
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
Devosa Iván Szegedi Tudományegyetem C#. A C# A C# (kiejtése: szí-shárp, esetenként cisz) a Microsoft által a.NET keretrendszer részeként kifejlesztett.
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
Manhertz Gábor; Raj Levente Tanársegéd; Tanszéki mérnök Budapesti Műszaki és Gazdaságtudományi Egyetem Mechatronika, Optika és Gépészeti Informatika Tanszék.
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
Internet tudományos használata
Script nyelvek előadás
Programstruktúrák.
Script nyelvek előadás
Folyamatmanagement eszközök hódítása Teremts rendet a káoszból PPM-el
A Scala programozási nyelv
Webszervizek (JAX-WS, és JAX-RS) bemutatása
Java kódolási konvenciók
Az iskolai könyvtár szolgáltatás típusai
A C++ programozási nyelv
A C++ programozási nyelv
Fejlett Programozási Technikák 2.
C# SZINTAKTIKÁJA Az egyes utasítások végén pontosvessző áll
Lexikális elemző: lex (flex)
Dependency Injection Moq Feladat
PHP-SQL adatbáziskezelő parancsai
Visual Studio Code Metrics
Animációk.
Programozás I. 5. gyakorlat.
Nyelvek típusossága.
Adatbázis-kezelés (PL/SQL)
VB ADATTÍPUSOK.
Script nyelvek előadás
Unity.
Adatszerkezetek.
Rendszerfejlesztés gyakorlat
Tájékoztató az Önkormányzati ASP Projektről
Fejlett Webes Technológiák II.
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Programozás I. 4. gyakorlat.
Informatikai gyakorlatok 11. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Java Programozás 3. Gy: Java GUI Swing, AWT B IT M A N v:
Oracle Adatbázisok kezelése c#-ban
A távoli asztal, valamint az Endnote használata a távoli asztalon
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Szálszinkronizáció.
A szállítási probléma.
B M Java Programozás 2. Gy: Java alapok IT A N Adatszerkezetek
B M Java Programozás 8. Gy: Java alapok IT A N Adatkezelő 4.rész
SQL jogosultság-kezelés
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Java alkalmazások 6. Előadás.
Java alkalmazások 3. Előadás.
Algoritmusok.
Java alkalmazások 1. Előadás.
Java alkalmazások 2. Előadás.
Előadás másolata:

Java bevezető Beágyazott rendszerek szoftvertechnológiája c. tárgyhoz 2017 Erdős Csanád, Györke Péter Összeállította: Orbán Gergely

Áttekintés Alapok Típusok, osztályok Nyelvi elemek, feature-k Rendezés GC, Operátorok, Exception, RTTI... Rendezés Elnevezés, fájlok, Package Hasznos beépített típusok String, Collections IO Threading Hálózat GUI

Filozófia C++-nál egy szinttel magasabban OO (tényleg) Megkötések -> kevesebb hibalehetőség pl. nincs pointer, van garbage collector Erős szolgáltatások (library-k) Platform független 2 szintű fordítás Legközelebbi alternatíva: C#

Fordítás Menete: Just In Time (JIT) compiler source (.java) compile (javac Package/MyClass.java) byte code (.class) interpreter, Virtual Machine (java Package.MyClass) Just In Time (JIT) compiler Futás előtt közvetlenül fordít Kompilált és interpretált nyelvek előnyei Java nem sokkal lassabb, mint a C++ (44%) class-ok tömöríthetők: jar

Futtatás Belépési pont: Hello world: public static void main(String[] args) több is lehet egy projektben Hello world: class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); } }

Típusok Primitív vs Referencia C++ const -> final static Kép forrása: http://www.ntu.edu.sg/home/ehchua/programming/java/J3c_OOPWrappingUp.html

Primitív típusok Értékadáskor másolódik Platform független byte méret Nincs unsigned, csak char (2 byte) C++-nál szigorúbb implicit konverzió byte -> short -> int -> long -> float -> double char -> int -> long -> float -> double Intuitív default kezdőértékek Van boolean de nem konvertálódik Mi nem definiálhatunk új típust int a = 1; int b = a; ++b; System.out.println(a); // 1

Referencia típusok C++ referencia szerű, de lehet null Értékadáskor csak a referencia másolódik "Kell new" (stacken nem hozhatók létre) Saját típusaink Tömb is referencia típus MyType a = new MyType(); a.x = 1; MyType b = a; ++b.x; System.out.println(a.x); // 2

Referencia típusok 2 Konstruktor Nincs destruktor! Van default, de csak ha nincs más Nincs destruktor! finalize kerülendő class TypeA { } class TypeB { TypeB(int p) { } TypeA a = new TypeA(); // TypeB b = new TypeB(); // The constructor TypeB() is undefined.

Referencia típusok 3 Van csomagoló osztály a primitív típusokhoz pl. Integer (de ez tipikusan 16+ byte) Vigyázat: immutable Integer a; Integer b; a = new Integer(2); b = a; System.out.println(b == a); // true a++; a--; System.out.println(b == a); // false

Osztályok Kulcsszavak Láthatóság Konstruktor class, extends final class TypeA { } // abstract class TypeB extends TypeA {} // The type TypeB cannot subclass // the final class TypeA abstract class TypeB { protected int i; } class TypeC extends TypeB { TypeC() { super(); super.i = 1; i = 2; Kulcsszavak class, extends max 1 szülő this super(), super.* final abstract Láthatóság public default (package) (protected, private csak belső osztálynál) Konstruktor Ha nincs super() hívás, a fordító pótolja

Tagváltozók static final (csak konstruktorból állítható) Konvenció protected vagy private Publikus elérés: getter, setter class TypeA { protected int i_; public int getI() { return i_; } public void setI(int i) { i_ = i;

Metódusok Láthatóság Lehet abstract Van overload private, protected, public, default (package) Lehet abstract Van overload Csak érték szerinti átadás public static void main( String[] args ){ Dog aDog = new Dog("Max"); foo(aDog); if (aDog.getName().equals("Max")) { //true System.out.println( "Java passes by value." ); } else if (aDog.getName().equals("Fifi")) { System.out.println( "Java passes by reference." ); } public static void foo(Dog d) { d.getName().equals("Max"); // true d = new Dog("Fifi"); d.getName().equals("Fifi"); // true aDog.getName().equals("Fifi"); // true public void foo(Dog d) { d.setName("Fifi");

Object Mindenki az Object-ből származik Virtuális metódusok clone Addig jó, amíg csak primitív és immutable tagjaink vannak equals alapból csak referenciát vizsgál hashCode finalize toString debughoz hasznos final metódusok getClass, notify, notifyAll, wait

Inner class Van referenciája a tartalmazó osztályra class TypeA { private int i; class TypeAA { void print() { System.out.println(i); } static class TypeAB { // Cannot make a // static reference to the // non-static field i // void print() { // System.out.println(i); // } Van referenciája a tartalmazó osztályra Eléri a tartalmazó objektum mezőit Lehet név nélküli (anonymous) static változat nested class-nak hívják nincs referenciája csak strukturálásra Példa (forrás: http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html) public class HelloWorldAnonymousClasses { interface HelloWorld { public void greet(); public void greetSomeone(String someone); } public void sayHello() { // Inner class. class EnglishGreeting implements HelloWorld { String name = "world"; public void greet() { greetSomeone("world"); } public void greetSomeone(String someone) { name = someone; System.out.println("Hello " + name); } } HelloWorld englishGreeting = new EnglishGreeting(); // Anonymous inner class. HelloWorld frenchGreeting = new HelloWorld() { String name = "tout le monde"; public void greet() { greetSomeone("tout le monde"); } public void greetSomeone(String someone) { name = someone; System.out.println("Salut " + name); } }; englishGreeting.greet(); frenchGreeting.greetSomeone("Fred"); } public static void main(String... args) { HelloWorldAnonymousClasses myApp = new HelloWorldAnonymousClasses(); myApp.sayHello(); } }

Interface Kulcsszavak Nincs benne implementáció interface, implements Nincs benne implementáció Többszörös öröklés helyett Minden tagja public Lehet hierarchikus Lehet tagváltozója, de csak final

Garbage collector (GC) "new van, delete nincs" Időnként begyűjti a nem hivatkozott objektumokat Generációkra bontott Némi overhead, cserébe nincs leak Nem célszerű kézzel hívni Kép forrása: http://home.techphernalia.com/2013/01/what-is-the-difference-between-finalize-and-dispose-garbage-collection/

Operátorok, vezérlési szerkezetek Alap szinten C++ Nincs sizeof Van instanceof... ...de nem OO Speciális break egymásba ágyazott ciklusokból goto szerű labelekkel Nincs operator overload

Exception try - catch - finally finally: mindig lefut throws: amit dobhat Kivétel Error RuntimeException void riskyMethod() throws Exception { throw new Exception(); } ... try { myResource.open(); riskyMethod(); } catch (Exception e) { throw e; } finally { myResource.close();

Exception 2 Szerves része a nyelvnek Csak Throwable leszármazottak Beépített Exception osztály és sok specifikus leszármazott Elkapni csak akkor, ha érdemben tudjuk kezelni Bátran dobjuk tovább Kép forrása: http://www.quickmeme.com/Scumbag-Java/?upcoming

Real time type information (RTTI) Típusinformáció futás közben Csábító, de ritkán kell ténylegesen downcasting Beépített könyvtáraknál kellhet getClass név alapján példányosítás

Elnevezési konvenció osztály: CamelCase metódus, lokális változó: lowerCamelCase konstans: pl. MAX_VALUE

Források rendezése 1db forrásfájlban max 1db public class A nevük azonos Nem válik el a deklaráció és a definíció Package-be rendezés Kép forrása: http://hu.opensuse.org/index.php?title=F%C3%A1jl:Package.png&filetimestamp=20101007223111

Package namespace helyett Könyvtárstruktúrához kötött import using helyett lehet/ajánlott itt is csak egy osztályt konvenció: reverse domain név pl. hu.bme.mit.aknakereso Jar-ba tömörítés jar cfe jar-file entry-point input-file(s) java -jar jar-file

Hasznos 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)

String Immutable StringBuilder, String.format Összehasonlítás Minden módosító művelet új Stringet hoz létre StringBuilder, String.format hatékony String létrehozás Összehasonlítás compareTo equals egyenlőség operátor String s1 = "alma"; String s2 = "alma"; String s3 = new String("alma"); System.out.println(s1 == s2); // true System.out.println(s1 == s3); // false System.out.println(s1.equals(s3)); // true

String String műveletek regex támogatás indexOf replace substring split ... regex támogatás

Collections Generikusak ArrayList: tömb helyett (C++ stl::vector) LinkedList (C++ stl::list) HashMap (C++ stl::hash_map) import java.util.ArrayList; import java.util.HashMap; import java.util.List; ... List<Integer> vec = new ArrayList<Integer>(); java.util.Collections.sort(vec); HashMap<String, Double> map = new HashMap<String, Double>(); map.put("key", 1.0); System.out.println(map.get("key"));

Iterator Kollekciók általános kezelése hasNext next remove ListIterator: több funkció ArrayList<String> l = new ArrayList<String>(); Iterator<String> itr = l.iterator(); while (itr.hasNext()) { String element = itr.next(); System.out.printf("%s ", element); }

IO Stream alapú (byte) Reader / Writer: karakteres kezelés buffered: hatékonyabb Don't forget to flush :) Scanner tokenizál bufferelt(karakter(byte))

IO 2 Main() throws FileNotFoundException, IOException { BufferedReader reader = null; BufferedWriter writer = null; try { reader = new BufferedReader( new InputStreamReader( new FileInputStream("valami.txt"))); writer = new BufferedWriter( new OutputStreamWriter( new FileOutputStream("valami.txt"))); } catch (FileNotFoundException e) { System.out.println("Valami hiányzik."); throw e; } finally { if (reader != null) reader.close(); if (writer != null) writer.close(); }

Serialization implements Serializable ObjectInputStream Csak jelzés ObjectInputStream readObject() ObjectOutputStream writeObject() Kép forrása: http://gridgain.blogspot.hu/2012/12/java-serialization-good-fast-and-faster.html

Serialization 2 class CustomClass implements Serializable { } ... ObjectOutputStream oos = null; ObjectInputStream ois = null; try { oos = new ObjectOutputStream(new FileOutputStream(fname)); oos.writeObject(new CustomClass()); } finally { oos.close(); } ois = new ObjectInputStream(new FileInputStream(fname)); CustomClass c = (CustomClass)ois.readObject(); ois.close();

Threading Processzen belül Tud párhuzamosan futni Gyorsabb váltás Tud párhuzamosan futni implements Runnable vagy extends Thread Kezelés start, join, yield Szinkronizáció synchronized Metódus vagy kódblokk, előbbi preferált Adott objektumra vonatkozik wait, notify, notifyAll Hatékony egymásra várakozás Kép forrása: http://syshex.wordpress.com/2011/10/06/java-threading-and-concurrency-introduction/

Threading 2 class CustomClass implements Runnable { public void run() { try { Thread.sleep(0); } catch (InterruptedException e) { } } ... CustomClass c = new CustomClass(); Thread t = new Thread(c); t.start(); t.join();

Socket TCP kommunikáció (van UDP változat is) new Socket getInputStream getOutputStream close ServerSocket accept

Socket példa class Client implements Runnable { public void run() { try { Socket s = new Socket("localhost", 4444); BufferedReader r = new BufferedReader( new InputStreamReader( s.getInputStream())); String line; while ((line = r.readLine()) != null) { System.out.println(line); } r.close(); s.close(); } catch (IOException e) { System.out.println("failed"); class Server implements Runnable { public void run() { try { ServerSocket ss = new ServerSocket(4444); Socket cs = ss.accept(); BufferedWriter w = new BufferedWriter( new OutputStreamWriter( cs.getOutputStream())); w.write("Hello"); w.flush(); w.close(); cs.close(); ss.close(); } catch (IOException e) { System.out.println("failed"); }

GUI: AWT, Swing Fa szerkezet JFrame, JDialog JPanel JMenuBar root elemek JPanel contentPane helyére bármi csoportosítására JMenuBar menü tipikusan a frame-be JComponent közös ős (rootok kivételével)

JComponent extends Container extends Component addMouseListener addKeyListener add setLayout(LayoutManager) setPreferredSize Minimum, Maximum is nem minden LayoutManager törődik vele setAlignmentX és Y

LayoutManager BorderLayout BoxLayout (1D) CardLayout (lapozható) FlowLayout (sorfolytonos) GridBagLayout flexibilis rács, főleg GUI builderrel GridLayout (rács) GroupLayout (főleg GUI builderrel) SpringLayout (relatív elhelyezkedés)

Rajzolás paintComponent felülírása repaint() hívás Rajzolás Graphics-szal, Graphics2D-vel. repaint() hívás repaint(x, y, w, h): hatékonyabb, lehet többször is class MyPanel extends JPanel { ... protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("This is my custom Panel!", 10, 20); g.setColor(Color.RED); g.fillRect(x, y, w, h); g.setColor(Color.BLACK); g.drawRect(x, y, w, h); } } package painting; import javax.swing.SwingUtilities; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.BorderFactory; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionAdapter; public class SwingPaintDemo3 { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } private static void createAndShowGUI() { System.out.println("Created GUI on EDT? "+ SwingUtilities.isEventDispatchThread()); JFrame f = new JFrame("Swing Paint Demo"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new MyPanel()); f.pack(); f.setVisible(true); } } class MyPanel extends JPanel { private int squareX = 50; private int squareY = 50; private int squareW = 20; private int squareH = 20; public MyPanel() { setBorder(BorderFactory.createLineBorder(Color.black)); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { moveSquare(e.getX(),e.getY()); } }); addMouseMotionListener(new MouseAdapter() { public void mouseDragged(MouseEvent e) { moveSquare(e.getX(),e.getY()); } }); } private void moveSquare(int x, int y) { int OFFSET = 1; if ((squareX!=x) || (squareY!=y)) { repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET); squareX=x; squareY=y; repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET); } } public Dimension getPreferredSize() { return new Dimension(250,200); } protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("This is my custom Panel!",10,20); g.setColor(Color.RED); g.fillRect(squareX,squareY,squareW,squareH); g.setColor(Color.BLACK); g.drawRect(squareX,squareY,squareW,squareH); } }

Egyéb jótanácsok Verziókövetés GUI editor Kollaborációhoz elengedhetetlen SVN Git GUI editor WindowBuilder Eclipse Netbeans http://xkcd.com/1188/

További anyagok Magyarázós példák: http://docs.oracle.com/javase/tutorial Bruce Eckel: Thinking in Java, 4th edition Alapoktól és átfogó Ingyen letölthető a 3. kiadás http://mindview.net/Books/TIJ4 Berg, Fritzinger: Java felsőfokon Magyar nyelvű Kép forrása: http://www.quickmeme.com/College-Freshman/