JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István david@cs.bme.hu



Hasonló dokumentumok
Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Java és web programozás

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java I. A Java programozási nyelv

OOP: Java 8.Gy: Abstract osztályok, interfészek

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Osztályok. 4. gyakorlat

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

JAVA PROGRAMOZÁS 2.ELŐADÁS

Java I. A Java programozási nyelv

Java programozási nyelv 4. rész Osztályok II.

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Programozási nyelv Java

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Szoftvertechnológia alapjai Java előadások

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Abstract osztályok és interface-ek. 7-dik gyakorlat

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Osztálytervezés és implementációs ajánlások

Java és web programozás

OOP: Java 8.Gy: Gyakorlás

Osztálytervezés és implementációs ajánlások

Objektumorientált programozás C# nyelven

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Segédanyag: Java alkalmazások gyakorlat

BME MOGI Gépészeti informatika 8.

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Programozási nyelvek Java

Bevezetés a Python programozási nyelvbe

Java programozási nyelv 5. rész Osztályok III.

Programozási alapismeretek 4.

JAVA PROGRAMOZÁS 3.ELŐADÁS

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Collections. Összetett adatstruktúrák

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Pénzügyi algoritmusok

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Programozási nyelvek Java

III. OOP (objektumok, osztályok)

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error


Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási technológia I.

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

OOP. Alapelvek Elek Tibor

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Bevezetés a Java programozási nyelvbe

7. K: JAVA alapok Konzultáció

Metamodellezés. Simon Balázs BME IIT, 2011.

Objektumorientált programozás C# nyelven

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

C#, OOP. Osztályok tervezése C#-ban

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Objektum orientált programozás Bevezetés

Függőség injekció Konstantinusz Kft 2010

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Java programozási nyelv 6. rész Java a gyakorlatban

Programozási nyelvek II.: JAVA

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

Magas szintű programozási nyelvek 2 Előadás jegyzet

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Bánsághi Anna

C++ programozási nyelv

Java és web programozás

Interfészek. PPT 2007/2008 tavasz.

Bevezetés a Java programozási nyelvbe

Objektum orientált kiterjesztés A+ programozási nyelvhez

Objektumorientált paradigma és programfejlesztés Bevezető

C# osztályok. Krizsán Zoltán

Programozási nyelvek Java

Programozási nyelvek Java

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Segédanyag: Java alkalmazások gyakorlat

C++ programozási nyelv

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozási technológia

Komponens alapú fejlesztés

Programozási nyelvek Java

Bánsághi Anna

Programozás I. Első ZH segédlet

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Komponens alapú programozás Bevezetés

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Átírás:

JAVA nyelvi alapok Adatbányászati technikák (VISZM185) Dávid István david@cs.bme.hu

Bevezető Hol és miért van szükség a JAVÁra az adatbányászatban? Programozott végrehajtás (imperatív, WF ) Platform (JRE ) Nagy adathalmazok kezelése (Cognos, Pentaho BI Suite ) Integrációs feladatok (JCA, EAI ) Mi is a JAVA tulajdonképpen? Platform, nyelv, valamint az ezeken implementált keretrendszerek összessége. Miért épp a JAVA? Ingyenes és nyílt, szemben a.net tel Eszközök széles spektrumán megtalálható (lásd később: platformok)

A Java, mint platform A Java, mint nyelv OO paradigmák Tervezési minták Tooling Eclipse, RCP

A Java, mint platform Java ME, Java SE, Java EE (JME, JSE, JEE) Korábban: J2ME, J2SE, J2EE

Java Virtual Machine (JVM) Virtuális gép koncepció Java Runtime Environment (JRE) Java API classes Platform szolgáltatások elérése Java Virtual Machine (JVM) OS (Windows, Unix, OS X, Android ) Gépi kód előállítása HW (PC, Server, Laptop, Mobile )

API (Application programming interface) Cél Megvalósított funkcionalitás kiajánlása Anélkül, hogy a forrást ki kéne adni Publikus interfész a külvilág felé, de black box struktúra Megvalósítás Megírt, lefordított forráskód JAR fájlba csomagolva Honnan tudjuk, hogy milyen metódusok hívhatók? Javadoc az API hoz Java archive

A Java, mint platform A Java, mint nyelv OO paradigmák Tervezési minták Tooling Eclipse, RCP

A Java, mint nyelv Jellemzői Objektum orientált Robosztus, biztonságos Architektúra független Nagy teljesítmény Mi kell hozzá, ha futtatni akarom? JRE (implements JVM) Mi kell hozzá, ha fejleszteni akarok? JDK (includes JRE, compilers, etc) A fejlesztés folyamata design time, compile time, run time run time runtime Forráskód írása (design) Fordítás gépi kódra (compile) Futtatás (run)

Osztály Objektum Konstruktor OO alapfogalmak Destruktor, Garbage collector (GC) Metódus Függvény Attribútumok (tagváltozók) Access modifiers Statikus elemek (osztályok, metódusok, változók)

Osztály (Class) Egy konkrét fogalom absztrakciója, illetve annak modellje Pl.: ház, fa, kutya, ember Mivel jellemezhető? Osztály azonosító (class id) kötelező Tulajdonságok (properties) Az osztályon végrehajtható műveletek (method) Absztrakciós szint Kapcsolatok más osztályokkal Visszatérési érték. (void = semmi) class Ember { String nev; int kor; Encapsulation void setkor(int k){ kor = k;

Objektum (Object) Más néven: Példány (Instance) Minek a példánya? Egy osztályé! Példa: Géza az Ember osztály példánya A példányosítás menete: class Ember { String nev; int kor; 0. ismerni kell az osztályt 1. megadjuk a típust és a new kulcsszóval új példányt hozunk létre 2. megadjuk a tulajdonságokat Ember geza = new Ember(); geza.nev = Kiss Géza ; geza.kor = 20;

Kapcsolatok osztályok között Példa: le kell írni a Tanár és Hallgató típusokat Emeljük ki a közös tulajdonságokat, mert Egy csomó közös tulajdonság Meg néhány különböző class Tanar { String nev; int kor; int diplomayear; class Hallgato { String nev; int kor; String kepzeskod;

Kapcsolatok osztályok között Példa: le kell írni a Tanár és Hallgató típusokat class Ember { String nev; int kor; Inheritance (Generalization/ Specialzation) class Tanar { int diplomayear; class Hallgato { String kepzeskod;

Kapcsolatok osztályok között Példa: le kell írni a Tanár és Hallgató típusokat Kérdés: miből fogunk példányokat létrehozni? Ebből NEM. class Ember { String nev; int kor; Inheritance (Generalization/ Specialzation) class Tanar { int diplomayear; class Hallgato { String kepzeskod;

Nem példányosítható! Használjuk ha Absztrakt osztályok Össze szeretnénk gyűjteni osztálytulajdonságok egy halmazát, de nem akarjuk, hogy példányosítsák az osztályt, mert nem egy értelmezett üzleti koncepció Szeretnénk előírni az osztályra valamilyen végrehajtható viselkedést, de szeretnénk előírni ennek kötelező újradefiniálását minden leszármaztatott osztályban (abstract method) abstract class Ember { String nev; int kor; Később megnézzük még egyszer Abstraction

Osztály metódusok Az osztályon, mint struktúrán végrehajtható művelet class Ember { String nev; int kor; void setkor(int k){ kor = k; ugyanaz a hatás! Ember geza = new Ember(); geza.nev = Kiss Géza ; geza.kor = 20; geza.setkor(20);

Default konstruktor Mi történik itt? A new kulcsszó egy speciális osztálymetódust hív Konstruktor: a példány létrehozásáért felelős Szabályok A neve mindig az osztály nevével azonos Nincs visszatérési érték Default konstruktor Ha nincs átadott paraméter Nem kötelező definiálni (implicit definiált) Lehet írni más konstruktorokat is Paraméterezhetők, stb Ember geza = new Ember(); class Ember { String nev; int kor; Ember(){

Összetettebb konstruktorok Ember geza = new Ember(); geza.nev = Kiss Géza ; geza.kor = 20; class Ember { String nev; int kor; Ember(){ Polimorfizmus Ember geza = new Ember( Kiss Géza, 20); Ember(String nev, int kor){ this.nev = nev; this.kor = kor;

Destruktorok, GC Mi lesz a nem használt objektumokkal? A heapen vannak, amíg Destrukor A konstruktor párja. Meg kell hívni és törli az objektumot. JAVÁban nincs! Garbage Collector (GC) Ezzel tehát nem kell explicit törődni (többnyire)

Access modifiers Az objektumhoz való hozzáférés szabályható Tagváltozó és metódusszinten is Public: publikus elem, mindenki hozzáfér Private: csak az osztályon belül érhető el Protected: csak az osztályon belül és a leszármazottakból érhető el Package protected = no modifier class Ember { public String nev; private int kor; class Ember { String nev; int kor; Ember geza = new Ember(); geza.nev = Kiss Géza ; geza.kor = 20;

Bean konvenciók Minden tagváltozó (attribute) private Minden tagváltozót getter és setter metódusokkal érünk el A getterek és setterek publikusak, neveik: getxxx és setxxx class Ember { private String nev; public String getnev(){ return this.nev; public void setnev(string nev){ this.nev = nev; Ember geza = new Ember(); geza.nev = Kiss Géza ; geza.setnev( Kiss Géza );

Statikus elemek Amit eddig láttunk: az osztályokat példányosítottuk Lehet példányosítás nélkül is osztályokkal dolgozni? Igen: static class Greeting { static String sayhello(){ return Hello ; ; Nem kell new Greeting() String hello = Greeting.sayHello(); Van itt példányosítás? Ez mikor jó? Mikor szükséges?

Ciklusok: For, While, Foreach for (int i=0; i<10; i++){ System.out.println(i); int i = 0; while(true)? while (i<10){ System.out.println(i); i++; Collection<Ember> emberek = new ArrayList<Ember>(); emberek.add(geza); emberek.add(bela); int sum; for (Ember e : emberek){ System.out.println( I m + e.getname()); sum += e.getage(); System.out.println( AVG age: + sum/emberek.size());

Hello world! Osztály kulcsszó Az osztály neve Statikus metódus Visszatérési érték nélkül class MyFirstJavaProgram{ public static void main(string args[]){ System.out.println( Hello world! ); Access modifier Kiír valamit a Mégpedig ezt konzolra

Hello world! még egyszer A végrehajtható szekvenciák osztályok metódusaiban vannak. class MyFirstJavaProgram{ public static void main(string args[]){ System.out.println( Hello world! ); Ez a main metódus standard paraméterlistája. Kérdés: miért static a main metódus? Nem minden osztályban van MAIN metódus, de egy programon belül mindig van egy valahol. Ugyanis itt kezdődik a végrehajtás.

Hello advanced world! class Student{ public String name; public Student(String name){ this.name = name; class MySecondJavaProgram{ public static void main(string args[]){ Student s = new Student( Béla ); System.out.println( Hello + s.name +! );

Hello advanced world! class Student{ public String name; public Student(String name){ this.name = name; class MySecondJavaProgram{ public static void main(string args[]){ Student s = new Student( Béla ); System.out.println( Hello + s.name +! ); Nem minden osztályban van MAIN metódus, de egy programon belül mindig van egy valahol. Ugyanis itt kezdődik a végrehajtás.

Hello advanced world! class Student{ public String name; public Student(String name){ this.name = name; Az osztályok lefordulnak gépi kódra. A runtime megkeresi a maint. class MySecondJavaProgram{ public static void main(string args[]){ A main példányosít Student s = new Student( Béla ); egyet a Student System.out.println( Hello + s.name osztályból, +! ); Béla névvel. Konzolra írás.

Összegezés Mindig lesz egy static void main(string args[]) metódus Itt kezdődik a program Osztályok segítségével írunk le összetett struktúrákat Ez bármilyen absztrakt, vagy konkrét fogalom lehet Osztály = struktúra + a rajta végezhető műveletek Általában a maint igyekszünk minimálizálni Kiszervezzük az üzleti logikát Lehetőleg kövessük a bean konvenciókat

OO paradigmák Dynamic dispatch Öröklés (inheritance) Polimorfizmus (polymorphism) Egységbezárás (encapsulation) Absztrakció (abstraction) Open recursion Interfész vs Absztrakt ősosztály

Tömbök és generikusok Korábbi példa: Ember osztály és gyerekei Dinamikus struktúrák Tömbök (Array) int[] elements = new int[10]; Student[] hallgatok = new Student[39]; Generikusok (Generics) int vs Integer? List<Integer> elements = new ArrayList<Integer>(); List<Student> elements = new ArrayList<Student>();

int: primitív típus Boxing Egy nyers 32, vagy 64 bites információegység Integer: objektum típus Egy darab int tagváltozót tartalmaz Mikor melyiket? int: jó performancia, + * / végrehajtható rajta Integer: szerializálható, RMI kompatibilis, generikusokkal működik int i = 6; Integer j = new Integer(i); int k = j.intvalue();

Melyik a jobb és miért? Generikusok List<Student> elements = new ArrayList<Student>(); Student[] hallgatok = new Student[39]; Általános szabály: A tömbök performancia szempontjából erősebbek A generikusok könnyebben kezelhetőek (sok előre megírt kezelő metódus érhető el, mivel kihasználják az öröklési hierarchiát) További szempontok: Kovariáns, kontravariáns és invariáns típusok Típusbiztosság, szálbiztosság Komplexebb generikusok (nem ritka ez sem): <T extends Annotation> T getannotation(class<t> annotationtype) (Ha érdekel: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/annotatedelement.html)

Tervezési minták Design patterns are recurring solutions to software design problems you find again and again in real world application development. (http://www.dofactory.com/patterns/patterns.aspx) Létrehozási minták (Creational patterns) Singleton, Factory, Abstract Factory, Builder, Prototype Strukturális minták (Structural patterns) Composite, Facade, Bridge, Adapter, Proxy, Flyweight, Decorator Viselkedési minták (Behavioral patterns) Observer, Mediator, Memento, Iterator, Strategy, Visitor

Singleton Tervezési minták One instance of a class or one value accessible globally in an application. Factory Provides an abstraction or an interface and lets subclass or implementing classes decide which class or method should be instantiated or called, based on the conditions or parameters given. AbstractFactory Provides one level of interface higher than the factory pattern. It is used to return one of several factories. Forrás: http://www.javacamp.org/designpattern/

Singleton One instance of a class or one value accessible globally in an application. public class ClassicSingleton{ private static ClassicSingleton instance = null; private ClassicSingleton(){; Ehhez hozzá se férünk kívülről! public static ClassicSingleton getinstance(){ if(instance == null){ instance = new ClassicSingleton(); return instance; ClassicSingleton instance = ClassicSingleton.getInstance();

Factory Creates an instance of several derived classes. Product p1 = ApplicationOne.makeProduct(); Product p2 = ApplicationTwo.makeProduct(); Nem kell tudnom, hogy a kód adott helyén milyen Productra van szükségem majd a Factory tudja.

Tooling A Java, mint platform A Java, mint nyelv OO paradigmák Tervezési minták Tooling Eclipse, RCP

Eclipse Első megközelítésben: IDE Valójában: platform+tooling EMF, RCP, SWT, GMF, Mylyn, Equinox, OSGi, VIATRA Knime, IBM Rational/WebSphere/Lotus Tools, Zend Studio

Eclipse IDE Első megközelítésben: IDE Valójában: platform+tooling EMF, RCP, SWT, GMF, Mylyn, Equinox, OSGi, VIATRA Knime, IBM Rational/WebSphere/Lotus Tools, Zend Studio Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi és Információelméleti Tanszék

Ez is Eclipse (Lotus Notes 8)

És ez is (KNIME)

És ez van mögötte (Eclipse architektúra)

Labor környezet Amit a laborban használunk (és a házihoz is ajánlunk) Eclipse Integrated Development Environment (IDE) Java Runtime Environment (JRE) Java API classes WEKA API weka.jar Java Virtual Machine (JVM)

Keywords Class, instance, method, property, access modifier, static Interface vs. abstract base class OO paradigms: inheritance, polymorphism, abstraction Java language structures: arrays, generics Main method Loops: for, while, foreach JVM, JRE, JDK, Eclipse API, javadoc Design patterns: Singleton, Factory