Java és web programozás

Hasonló dokumentumok
Java és web programozás

Osztályok. 4. gyakorlat

Java és web programozás

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

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

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

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

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.

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

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

Java és web programozás

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

Programozási nyelvek Java

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

C++ programozási nyelv Konstruktorok-destruktorok

Programozási alapismeretek 4.

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Programozási nyelvek Java

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

Programozás II. 4. Dr. Iványi Péter

Programozás C++ -ban

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

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

é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

C++ programozási nyelv Struktúrák a C++ nyelvben

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

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?

Szoftvertechnológia alapjai Java előadások

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Programozási nyelvek Java

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

Programozási nyelvek Java

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

Bevezetés, a C++ osztályok. Pere László

Programozás C++ -ban

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

C++ programozási nyelv

Web-technológia PHP-vel

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

BME MOGI Gépészeti informatika 8.

Programozás I. Első ZH segédlet

Osztály és objektum fogalma

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?

Objektumorientált programozás C# nyelven

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

Objektumelvű programozás

Származtatási mechanizmus a C++ nyelvben

Objektumok inicializálása

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

3. Osztályok II. Programozás II

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozási nyelvek Java

Java és web programozás

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

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

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

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

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

Programozás alapjai II. (2. ea) C++

1. Egyszerű (primitív) típusok. 2. Referencia típusok

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Programozás C++ -ban 2007/7

4. Öröklődés. Programozás II

Pénzügyi algoritmusok

Elemi Alkalmazások Fejlesztése II.

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

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

Programozási nyelvek Java

Java III. I I. Osztálydefiníció (Bevezetés)

Objektumorientált programozás C# nyelven

ISA szimulátor objektum-orientált modell (C++)

Java III. I I. Osztálydefiníció (Bevezetés)

4. Gy: JAVA osztályok

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Objektumorientált programozás C# nyelven

Szoftvertechnológia alapjai Java előadások

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

Szoftvertechnolo gia gyakorlat

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

Kalapácsvetés 2016 szöveges

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Programozás C++ -ban 2007/4

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

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

Pénzügyi algoritmusok

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

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

Objektumorientált programozás IX. Osztályok, objektumok

Programozás C++ -ban

Objektumorientált programozás C# nyelven

C++ programozási nyelv

Java IX. telkezelés a Java-ban

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

Java programozási nyelv

Programozási nyelvek II.: JAVA, 3. gyakorlat

Átírás:

Budapesti Műszaki Egyetem 2015. 02. 11.

2. Előadás

Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált...

Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Idők kezdetén: Ránézésre semmi szerkezet Csak az érti aki írta Jóformán lecserélhetetlenné teszi a programozót

Struktúrált programozás Struktúrált adatok, műveletek Áttekinthetőbb, hordozhatóbb Nem túl hatékon, nehezen cserélhető

Struktúrált programozás Struktúrált adatok, műveletek Áttekinthetőbb, hordozhatóbb Nem túl hatékon, nehezen cserélhető AsteroidVector asteroiddestroyed(asteroid ast) { int n = ast.size; // jobb név: numberofnewasteroids AsteroidVector newasteroids = createasteroidvector(n); int i; for(i = 0; i < n; i++) { newasteroids.push(instantiatefragmentasteroid(ast.pos, n));... return newasteroids;

Moduláris programozás Egy modul egy önálló egység Interfészekkel kapcsolódik más modulokhoz Önállóan fordítható, tesztelhető A modulok nem tudnak egymás működéséről Az adattípusok megjelennek az interfészeken Nehezen cserélhető egy adattípus

Moduláris programozás Egy modul egy önálló egység Interfészekkel kapcsolódik más modulokhoz Önállóan fordítható, tesztelhető A modulok nem tudnak egymás működéséről Az adattípusok megjelennek az interfészeken Nehezen cserélhető egy adattípus AsteroidHandler.c GameHandler.c PlayerController.c Physics.c Renderer.c...

Objektum-orientált megoldás class Asteroid implements Renderable, Destroyable... { private int size; private Position pos;... public AsteroidContainer destroy() { AsteroidContainer newasteroids = new AsteroidVector(size); for(int i = 0; i < size; i++) { Asteroid a = AsteroidFactory.createFragmentAsteroid( pos, size);... return newasteroids; public void render(renderer rend) {...

Objektum-orientált programozás Egységbe zárás Felbontás egyszerűbb feladatokra Megtervezhető a program anélkül, hogy végig kellene gondolni a megírásához szükséges algoritmusokat Interfészek kötik össze az absztrakt részeket Objektum:

Objektum-orientált programozás Egységbe zárás Felbontás egyszerűbb feladatokra Megtervezhető a program anélkül, hogy végig kellene gondolni a megírásához szükséges algoritmusokat Interfészek kötik össze az absztrakt részeket Objektum: Könnyen módosítható Általánosítható Tárolja a saját állapotát Elrejti a belső adatszerkezetét, a műveleteinek algoritmusait Minél absztraktabb annál jobb, a használathoz ne kelljen ismerni a működését Pl: Komplex szám

Komplex szám public class Complex { private float repart_; private float impart_; public Complex() { repart_ = 0; impart_ = 0; public Complex(float repart) { repart_ = repart; impart_ = 0;

public Complex(float repart, float impart) { repart_ = repart; impart_ = impart; public Complex add(complex other) { float repart = this.repart_ + other.repart_; float impart = this.impart_ + other.impart_; Complex retval = new Complex(rePart, impart); return retval;

public Complex(float repart, float impart) { repart_ = repart; impart_ = impart; public Complex add(complex other) { float repart = this.repart_ + other.repart_; float impart = this.impart_ + other.impart_; Complex retval = new Complex(rePart, impart); return retval; Objektum a konkrét adat és a rajta végezhető műveletek Osztály egy típus, melyből létrehozhatunk konkrét példányokat, objektumokat.

Adattakarás javaban private float repart_; private float impart_; Ami private csak az osztályon belülről érhető el, kívülről nem. public dolgok mindenhonnan elérhetőek. Lesz még egy protected jelző is, ez majd ha már örökléssel foglalkozunk. Valamint Java-ban van az elég speciális default, ha nem írjuk ki egyiket se. Ekkor a saját package-én belül elérhetõ, de mindenki másnak private.

Adattakarás javaban private float repart_; private float impart_; Ami private csak az osztályon belülről érhető el, kívülről nem. public dolgok mindenhonnan elérhetőek. Lesz még egy protected jelző is, ez majd ha már örökléssel foglalkozunk. Valamint Java-ban van az elég speciális default, ha nem írjuk ki egyiket se. Ekkor a saját package-én belül elérhetõ, de mindenki másnak private. public class Main { public static void main(string[] args) { Complex comp = new Complex(5, 6); System.out.println(comp.rePart_); // Hiba System.out.println(comp); // Nem hiba

Mindez vonatkozik változókra és függvényekre is Létre lehet hozni egy private függvényt, és public változót is Ezek viszont ritkább esetek A cél mindig az legyen, hogy bárki tudja használni az általatok írt osztályokat, anélkül hogy a forráskódba kellene néznie

Mindez vonatkozik változókra és függvényekre is Létre lehet hozni egy private függvényt, és public változót is Ezek viszont ritkább esetek A cél mindig az legyen, hogy bárki tudja használni az általatok írt osztályokat, anélkül hogy a forráskódba kellene néznie Ezeket nyelvi szinten nem kötelező betartani, lehet minden adattagja egy osztálynak public, de ezzel maga alatt ássa az ember a fát Egy hasznos praktika, ha alsóvonással jelölitek a private adattagokat, nem kötelező, van aki szereti, van aki nem, a lényeg hogy ha egy jelölést már választottatok akkor használjátok azt, a kódotokban mindig legyenek egységesek a jelölések

Dinamikus memória foglalás javaban public class Main { public static void main(string[] args) { Complex comp = new Complex(5, 6); System.out.println(comp.rePart_); // Hiba System.out.println(comp); // Nem hiba new kulcsszóval Egyszerűbb mint C-ben (malloc, realloc, calloc) Cserébe mindennek dinamikusan kell memóriát foglalni Kivételek ez alól a primitív adatszerkezetek, mint az int, float Általában a primitívek kis betűvel kezdődnek, tehát pl a String nem az VáltozoTípusa változónév = new ObjektumTípusa(konstruktor bemenetei)

Konstruktor javaban public Complex() { repart_ = 0; impart_ = 0; public Complex(float repart) { repart_ = repart; impart_ = 0; Konstruktor a definíció és inicializálás egybevonása Nincs visszatérési értéke A paraméter nélküli konstruktor a default konstruktor Amikor new-val létrehozunk egy objektumot a megfelelő konstruktora hívódik meg Lehet private egy konstruktor, de ritkán van értelme

Javaban nincs destruktor Furcsa lehet ez azoknak akik tudnak C++-ban programozni, de javaban nincs destruktor De akkor mi van helyette?

Javaban nincs destruktor Furcsa lehet ez azoknak akik tudnak C++-ban programozni, de javaban nincs destruktor De akkor mi van helyette? Garbage collector Ez annyit tesz, hogy nem akkor szűnik meg egy objektum amikor bezárul a blokk ahol létre lett hozva, hanem amikor ezt a java jónak látja Természetesen olyan objektumokat nem szabadít fel amik használatban lehetnek még

Most egyben public class Complex { private float repart_; private float impart_; public Complex() { repart_ = 0; impart_ = 0; public Complex(float repart) { repart_ = repart; impart_ = 0;

public Complex(float repart, float impart) { repart_ = repart; impart_ = impart; public Complex add(complex other) { float repart = this.repart_ + other.repart_; float impart = this.impart_ + other.impart_; Complex retval = new Complex(rePart, impart); return retval; // Itt új osztály és ezzel új fájl kezdődik public class Main { public static void main(string[] args) { Complex comp = new Complex(5, 6); System.out.println(comp.rePart_); // Hiba System.out.println(comp); // Nem hiba

Bonyolultabb példa public class ComplexVector { private Complex[] coords_; private int dimension_; public ComplexVector(int dimension) { dimension_ = dimension; coords_ = new Complex[dimension]; public ComplexVector(ComplexVector other) { this.coords_ = other.coords_.clone(); this.dimension_ = other.dimension_;

public ComplexVector add(complexvector other) { ComplexVector retval = new ComplexVector(this.dimension_); for (int i = 0; i < retval.coords_.length; i++) { retval.coords_[i] = this.coords_[i].add(other.coords_[i]); return retval; Itt egy Complex tömb az egyik adattag Ez nagyon gyakori lesz, az általatok írt osztályokban nagy részében szintén általatok írt osztályok lesznek az adattagok Ezért is nagyon fontos, hogy rejtett maradjon minden osztály működése Ebben az esetben, ha meg is változik az adatszerkezete vagy a számítási algoritmusa az egyiknek attól még a többivel való kapocs nem romlik el

Amiket kiemelnék az előbbi példából private Complex[] coords_; Így lehet tömböt deklarálni (gyakon már volt) coords_ = new Complex[dimension]; Tömb létrehozása, ilyenkor a default konstruktor hívódik meg sokszor retval.coords_.length; A tömböknek van egy length (hossz) adattagja, így nem is kellene a dimenzióját tárolni

Amiket kiemelnék az előbbi példából private Complex[] coords_; Így lehet tömböt deklarálni (gyakon már volt) coords_ = new Complex[dimension]; Tömb létrehozása, ilyenkor a default konstruktor hívódik meg sokszor retval.coords_.length; A tömböknek van egy length (hossz) adattagja, így nem is kellene a dimenzióját tárolni Ha precíz lettem volna, az összeadásnál vizsgálom, hogy egyáltalán össze lehet-e őket adni Ezt majd hibakezeléssel oldjuk meg, ami a később lesz csak