Objektum-elvu programozas (OOP) Java tutorial. Pelda objektumokra. Objektumok. Pelda objektumokra. Pelda objektumokra

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Objektum-elvu programozas (OOP) Java tutorial. Pelda objektumokra. Objektumok. Pelda objektumokra. Pelda objektumokra"

Átírás

1 Objektum-elvu programozas (OOP) ö Objektumok, oszta lyok (adatkozpontu ) ö Esemenyvezerelt programoza s í vs. strukturalt programozas í deklaratıv / imperatıv ö AdatabsztrakciÖ (egysegbe za ras, adatelrejtes) ö Polimorfizmus ö O rokl des ö Dinamikus kotes Objektumok ö (Program) entitas: allapot es funkcionalitas ö egyedi, zart (interfesz), konzisztencia ö Attribu tumok, esemenyek ö Attribu tum - va ltozö (adattag) ö Esemenykezel - alprogram (metö dus) Kor x-koord: 0 y-coord: 0 Sugar: 1 egyseg Terűlet: Nagyıt Kicsinyıt Eltol Pelda objektumokra Alkalmazott Nev: Gipsz Jakab Munkahely: ELTE Fizetes: 200e Ft FizetestEmel FeladatotAd Pelda objektumokra Pelda objektumokra Kor Alkalmazott Kor Alkalmazott Kozeppont: OrigÖ Sugar: 1 egyseg Terűlet: Nev: Gipsz Jakab Munkahely: ELTE Fizetes: 200e Ft Kozeppont: OrigÖ Sugar: 1 egyseg Terűlet: Nev: Gipsz Jakab Beosztas: tanarseged Fizetes: 200e Ft Nagyıt Kicsinyıt FizetestEmel FeladatotAd Nagyıt Kicsinyıt FizetestEmel FeladatotAd Eltol Eltol 1

2 Kapcsolatok objektumok kozott ö Osztaly: hasonlö objektumok gy jtemenye í Struktóralis hasonlo sag (reprezentacio ) í Funkcionalis hasonlö sag (viselkedes) Tıpus: tıpusertekek halmaza Peldanyosıtas (osztaly objektum) RelaciÖ k: is-a, has-a ö AggregaciÖ k, asszocia ciö k Pelda objektumok kapcsolatara Nagyıt Kicsinyıt Eltol Kor Kozeppont: OrigÖ Sugar: 1 egyseg Terűlet: Pont x-koord: 0 y-koord: 0 Eltol Pelda: osztalyok es kapcsolataik Pelda: osztalyok es kapcsolataik (2) Ember Kor Kozeppont: Pont Sugar: Szam Terűlet: Szam Nagyıt Kicsinyıt Eltol x-koord: Szam y-koord: Szam Eltol Pont Alkalmazott Nev: String Beosztas: String Fizetes: Szam FizetestEmel FeladatotAd Beosztott F nok Nev: String Osztalyok, objektumok a Java nyelvben Osztaly = sema: objektumok reprezenta ciö ja nak megada sa Objektum: egy osztaly egy peldanya minden objektum valamilyen osztalybö l szarmazik peldanyosıtassal Reprezenta ciö : peldany adattagok, peldany metö dusok Osztaly: tıpus 2

3 Az Alkalmazott osztaly public class Alkalmazott { String nev; String beosztas; int fizetes; void fizetestemel( int mennyivel ){ fizetes += mennyivel; Az Alkalmazott osztaly public class Alkalmazott { String nev; String beosztas; int fizetes; void fizetestemel( int mennyivel ){ fizetes += mennyivel; Alkalmazott.java Alkalmazott.java Az Alkalmazott osztaly public class Alkalmazott { String nev; String beosztas; int fizetes; void fizetestemel( int mennyivel ){ fizetes += mennyivel; int szobaszam; Alkalmazott.java javac Alkalmazott.java java Alkalmazott F program public class Alkalmazott { Alkalmazott.java public class Program { public static void main( String[] args ){ Alkalmazott a; a = new Alkalmazott(); Program.java javac Program.java java Program Feladat ö Keszıtsd el a Pont osztalyt! ö Tulajdonsagok: x es y koordinata ö M velet: eltola s í dx es dy ertekekkel 3

4 F program public class Alkalmazott { Alkalmazott.java F program public class Alkalmazott { Alkalmazott.java public class Program { public static void main( String[] args ){ Alkalmazott a; a = new Alkalmazott(); Program.java javac Program.java java Program public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); Program.java javac Program.java java Program F program public class Alkalmazott { Alkalmazott.java public class Program { public static void main( String[] args ){ new Alkalmazott(); Program.java javac Program.java java Program Objektumok ta rola sa ö Dinamikus memö riakezeles szűkseges ö Ada, C: mutatö k (pointerek) ö Java: referencia k Alkalmazott a; Az a valtozö ban az objektum memö riabeli cımet ta roljuk. A deklara ciö hatasa ra nem jon letre objektum! Objektum letrehozasa ö Az a valtozö hoz objektum hozzarendelese a = new Alkalmazott(); ö Pelda nyosıta s: valamilyen oszta lybö l a new opera torral (memö riafoglala s a mellekhata s, a kezd cım a kifejezes erteke) new Alkalmazott() ö Az a referencia a new opera torral letrehozott objektumra mutat 4

5 Feladat ö Keszıts f programot a Pont osztalyhoz. Hozz letre benne egy Pont objektumot. MetÖ dus meghıva sa public class Alkalmazott { MetÖ dus meghıva sa public class Alkalmazott { void fizetestemel( ){ public void fizetestemel( ){ public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestemel(40000); public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestemel(40000); Adattag elerese public class Alkalmazott { int fizetes; Adattag elerese public class Alkalmazott { public int fizetes; public void fizetestemel( ){ public void fizetestemel( ){ public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetes = ; a.fizetestemel(40000); public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetes = ; a.fizetestemel(40000); 5

6 Feladat ö A llıtsd be a letrehozott Pont koordinatait, told el a definialt metö dussal, vegűl ırd ki a keperny re a koordinatak u j erteket. Adattagok definia la sa ö Adattag = peldanyvaltozö ö Adattag megada sa - va ltozö deklara ciö public class Alkalmazott { int fizetes; public void fizetestbeallıt( ){ public void fizetestemel( ){ Adattagok inicializa la sa public class Alkalmazott { int fizetes = ; public void fizetestbeallıt( ){ public void fizetestemel( ){ public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestemel(40000); Adattagok automatikus inicializa la sa: pelda public class Alkalmazott { int fizetes; public void fizetestbeallıt( ){ public void fizetestemel( ){ Olyan, mint: int fizetes = 0; public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestemel(40000); Adattagok automatikus inicializalasa: implicit kezd ertek ö Pelda nyva ltozö k eseten tortenik í alprogram loka lis va ltozö jara nincs (fordıtasi hibat okoz, ha el zetes ertekadas nelkűl prö baljuk hasznalni!) í peldanyvaltozö k eseten nehez lenne betartani ezt a szabalyt, ezert inicializal automatikusan ö Pl. szam tıpusok eseten nulla (0 vagy 0.0), boolean eseten false, char eseten \u0000 ö Nem illik kihasznalni! 6

7 Feladat ö A Pont osztalyban az x es y adattagokat explicit inicializald 0-ra! Adattagok definia la sa: pelda k int fizetes=200000, pö tlekok, levonasok=fizetes/4; LathatÖ sa g va ltoztata sa: public int fizetes = ; Nem mö dosıthatö ertek va ltozö k ( konstansok ) final double ADÜ KULCS = 25; Hivatkoza s pelda nyva ltozö kra public class Alkalmazott { OsztalydefinıciÖ n belűl public int fizetes; public void fizetestemel( int mennyivel ){ fizetes += mennyivel; Ásajat adattagra public boolean tobbetkeresmint(alkalmazott masik){ return fizetes > masik.fizetes; public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetes = ; mas objektum adattagjara Mas osztalyban Min sıtett nev MetÖ dusok ö MetÖ dus: alprogram, amely egy objektumhoz van kapcsolva ö Az Áels parameter az objektum ö Pelda ul Java ban a.tobbetkeresmint(b) Ada ban tobbetkeresmint(a,b) ö U zenetkűldeses szintaxis ö Mellekhata sos fűggveny í eljaras: void visszateresi ertek MetÖ dusok definıciö ja ö Fejb l (specifika ciö bö l) es torzsb l a ll public void fizetestemel( int mennyivel ){ fizetes += mennyivel; ö Fej: mö dosıtö k, a visszateresi ertek tıpusa, azonosıtö nev, parameterlista, ellen rzott kivetelek ö Parameterlista: (int x, int y, char c) ö Szignatu ra: azonosıtö, parameterek tıpusa public void fizetestemel( int mennyivel ){ fizetes += mennyivel; 7

8 Pelda k metö dusdefinıciö kra int lnko( int a, int b ){ while( a!=b ) if( a>b ) a-=b; else b-=a; return a; public void fizetestduplaz(){ fizetes *= 2; Alaptıpusokra ertek szerinti parameteratadas U res parameterlista Kilepes metö dusbö l ö Ha nem void a visszateresi ertek tıpusa, akkor kell return utasıtas, amivel megadjuk a visszateresi erteket ö Ha nincs visszateresi ertek (void), akkor is lehet return utasıtas, amivel kilephetűnk void f(){ while(){ if() return; Kilepes metö dusbö l ö Ha nem void a visszateresi ertek tıpusa, akkor kell return utasıtas, amivel megadjuk a visszateresi erteket ö Ha nincs visszateresi ertek (void), akkor is lehet return utasıtas, amivel kilephetűnk void f(){ while(){ if() break; VezerlesmegszakıtÖ utasıta sok ő continue - kilep a ciklusmagbö l ő break - kilep a ciklusbö l ő return - kilep a metö dusbö l A visszateresi ertek megadasa ö A fordıtö ellen rzi, hogy fűggveny eseten mindenfelekepp lesz visszateresi ertek, azaz a vezerles mindig eljut egy return utasıtashoz ö HasonlÖ an a metö dusok loka lis va ltozö i kapcsan vegzett ellen rzeshez (inicializaltsag) ö Fordıtasi idej dontes 8

9 Feladat ö Keszıtsd el a Kor osztalyt! ö Tulajdonsagok: kozeppont (Pont) es sugar (double) ö M veletek: eltol es nagyıt í eltol: dx es dy ertekekkel a kozeppontot kell eltolni í nagyıt: a sugarat szorozni faktor-ral Kozvetlen adathozzaferes megtiltasa public class Alkalmazott { int fizetes; public void fizetestbeallıt( int osszeg ){ fizetes = osszeg; public void fizetestemel( ){ public class Program { public static void main( String[] args ){ Alkalmazott a = new Alkalmazott(); a.fizetestbeallıt(200000); a.fizetestemel(40000); Tıpusinvarians meg rzese public class Alkalmazott { double fizetes, evesfizetes; public void fizetestbeallıt(int uj){ fizetes = uj; evesfizetes = 12*fizetes; Feladat ö A Kor osztalyban vezess be egy u j attribu tumot, a terűletet tartsuk benne nyilvan. Ird meg a sugaratbeallıt m veletet! ö Hasznald a Math.PI erteket ö A m veletek legyenek publikusak, az attribu tumok ne! ö Keszıts lekerdez m veleteket a sugarhoz es a terűlethez, melyek publikusak. (Az adattagok nem publikusak!) A lekerdez m veletek neve megegyezhet a lekerdezett attribu tum nevevel. Tıpusinvarians meg rzese public class Kor { double sugar, terőlet; public void sugaratbeallıt(double r){ sugar = r; terőlet = sugar*sugar*math.pi; 9

10 Referenciak raallıtasa egy objektumra ö Referencia es objektum egyűttes letrehozasa Alkalmazott a = new Alkalmazott(); Feladat ö PrÖ bald ki a Pont osztaly egy objektumaval! ö Referencia raallıtasa meglev objektumra Alkalmazott b = a; A ket referencia ugyanarra az objektumra mutat. b.fizetestemel(10000); U res referencia ö Ha egy valtozö erteke null, akkor nem mutat objektumra. Alkalmazott c = null; ö A null referencia minden osztalyhoz haszna lhatö. ö Pelda nyva ltozö k automatikus inicializalasahoz ezt hasznalja a Java ő c.fizetestemel(10000); futasi idej hiba: NullPointerException Nem va ltoztathatö referencia final Alkalmazott a = new Alkalmazott(); a.fizetestbeallıt(100000); a = new Alkalmazott(); A referencia konstans, nem lehet masik objektumra allıtani, de a mutatott objektum megva ltozhat. O sszetett tıpusok ö O sszetett erteket csak objektummal lehet letrehozni: az egyetlen tıpuskonstrukciö ö Minden osszetett ertek dinamikus ö Minden osszetett ertekre referencian keresztűl lehet hozzaferni ö Pl. a tombok is (specialis predefinit) oszta lyok 10

11 Objektum parameterkent public boolean tobbetkeresmint(alkalmazott masik){ return fizetes > masik.fizetes; public void keressenannyitmint(alkalmazott masik){ masik.fizetestbeallıt(fizetes); F programban: a.keressenannyitmint(b); ö Az objektumreferencia ertek szerint adö dik a t: referencia szerinti parameteratadas ö Olyan, mint a C-ben a cım szerinti Mellekhata s ö A metö dusoknak lehet mellekhatasa í az objektumon, amihez tartozik í globalis objektumokon (System.out) í parameterkent atadott objektumokon public class Program { public static void fizetestemel ( Alkalmazott a, int mennyivel ){ a.fizetestemel(mennyivel); Feladat ö A Pont es a Kor osztalyokhoz keszıtsd el a tavolsag() metö dust, mely megadja az objektum tavolsagat egy, a parameterekent atadott Pont objektumtö l. ö A Kor osztalyban definialj peldanymetö dust, mely a parameterekent atadott pont objektumot a kor objektum kozeppontjaba allıtja: public void kozeppontba( Pont p ) Az objektum elettartama ö Nincs olyan utasıtas, amivel objektumot explicit mö don meg lehet szűntetni ö A nyelv biztonsa gossa ga t noveli ö Szemetgy jtes: ha mar nem hivatkoznak egy objektumra, akkor azt meg lehet szűntetni. Alkalmazott a = new Alkalmazott(); a = null; ö Nem biztos, hogy megsz nik a program vege el tt Szemetgy jtes ö Modern nyelvekben gyakori ö Biztonsagossag í tobbszoros hivatkozas eseten: ha az egyik hivatkozason keresztűl megszűntetjűk az objektumot, egy masikon keresztűl meg tovabbra is hasznalni prö baljuk ö Hatekonysag: id es tar ö Ciklikus hivatkoza s ö Szemetgy jt algoritmusok 11

12 Oszta lyszint va ltozö k es metö dusok ö A tyu k es a tojas: programot csak objektumhoz tudunk keszıteni (metö dust), objektumot pedig csak a program futasa kozben tudunk letrehozni. class hello { public static void main( String[] args ){ System.out.println("hello"); Oszta lyszint va ltozö k es metö dusok 2 ö Az objektumoknak vannak attribu tumai es m veletei, amiket az osztalydefinıciö ban adunk meg: pelda nyva ltozö k es (peldany)metö dusok. public class Alkalmazott { int fizetes = 0; public void fizetestemel( int mennyivel ){ Oszta lyszint va ltozö k es metö dusok 3 ö Az osztalyoknak is lehetnek: osztalyszint valtozö k es osztalyszint metö dusok. Ezeket is az osztalydefinıciö ban adjuk meg, de a static mö dosıtö szö val: static int nyugdıjkorhatar = 60; public static void nyugdıjkorhatartemel( int mennyivel ){ nyugdıjkorhatar += mennyivel; int eletkor; Oszta lyszint va ltozö k es metö dusok 4 ö A peldanyvaltozö k minden objektumhoz (az osztaly minden peldanyahoz) letrejonnek, az osztalyszint valtozö k az osztalyhoz jonnek letre; azaz csak egy van, es minden objektum osztozik rajta. ö A peldanymetö dusok egy objektumhoz tartoznak: az els (kvazi implicit) parameter az objektum; osztalyszint metö dusok az osztaly m veletei, az "els parameter" az osztaly. ö Az osztalyok is picit olyanok, mint az objektumok. (Azzal, hogy vannak attribu tumaik es esemenykezel ik.) Oszta lyszint va ltozö k es metö dusok 5 ö Az oszta lyszint va ltozö k: í kifejezhetik, hogy ugyanaz az attribu tumertek van minden objektumhoz (nyugdıjkorhatar) í az osztaly allapotat rogzıthetik (kavepenz) static int kavepenz = 0; public int kaverabefizet(){ fizetes -= 100; kavepenz += 100; static public kavetvesz(){ 12

13 Oszta lyszint va ltozö k es metö dusok 6 ö A static dolgokhoz nem kell objektum; a f program is ilyen volt. ö A proceduralis programozas imitalasa: í osztaly - modul í osztalyszint metö dus - alprogram ö "Globalis ertekek", pelda: System.out, Math.PI. F program m kodese ö Egy Java program egy osztaly "vegrehajtasanak" felel meg: ha van statikus main nev metö dusa. ö A java-nak megadott nev osztalyt inicializalja a virtualis gep (pl. az osztalyvaltozö it inicializalja), es megprö balja elkezdeni a main-jet. Ha nincs main: futasi idej hiba. ö Vegeteres: ha a main vegeter, vagy meghıvjuk a System.exit(int)-et. (Kilepesi allapot, nulla szokott a normalis allapot lenni.) ö A main feje: amit eddig csinaltunk. (Elvileg az args nev helyett lehet mas is, de az a megszokott.) A String[]-be kerűlnek a virtualis gepnek atadott extra parameterek. C- ben ugyanez: argc, argv. Pelda public class Argumentumok { public static void main( String[] args ){ if (args.length > 0) { for (int i=0; i < args.length; i++) System.out.println(args[i]); else { System.out.println("nincsenek argumentumok"); static va ltozö k inicializa la sa ö Ugyanu gy, mint a peldanyvaltozö knal: az el fordulas sorrendjeben. static int i = 1; static int j = 1; ö peldanyvaltozö k: minden peldany letrehozasakor ö osztalyvaltozö k: egyszer, az osztaly inicializaciö jakor ö osztaly inicializaciö ja: az els ra vonatkozö hivatkozas kiertekelesekor (pl. peldanyosıtas, metö dus meghıvasa, valtozö hozza feres) static va ltozö k inicializa la sa 2 ö inicializatorban lehet mar deklaralt osztalyszint valtozö, de nem lehet pelda nyva ltozö ; pelda nyva ltozö inicializatoraban viszont lehet osztalyszint va ltozö static int k = i+j-1; boolean tulkoros = eletkor > nyugdıjkorhatar; ö automatikus inicializaciö van: implicit kezd ertek 13

14 Hivatkoza s oszta lyszint valtozö ra ö Objektumon es osztalyon keresztűl egyarant. Alkalmazott a = new Alkalmazott(); a.nyugdıjkorhatar Alkalmazott.nyugdıjKorhatar Hivatkoza s oszta lyszint va ltozö ra 2 ö min sıtes nelkűl: az aktualis objektum osztalyanak osztalyszint valtozö jara ö objektumos min sıtessel ö osztalyos min sıtessel; objektumok, peldanyok hianyaban is m kodik public class Szamozott { static int kovetkez = 1; public final int SORSZAM = kovetkez ++; ö A pelda nyva ltozö k inicializatora minden peldanyosıtaskor kiertekel dik. (Ez a mellekhatasos kifejezeseknel fontos!) es osztalymetö dusra ö Csak az osztalyvaltozö khoz ferhet hozza, a pelda nyva ltozö khoz nem. (Nincs aktua lis peldany, mert akkor is vegrehajthatö, ha nincs peldany.) a.nyugdıjkorhatartemel(5); Alkalmazott.nyugdıjKorhatartEmel(5); Feladat ö A Kor osztalyhoz ırj illeszkedik() m veletet, mely eldonti, hogy a parameterkent megadott Pont objektum illeszkedik-e a korvonalra - egy adott t reshataron belűl. A t reshatar erteke a Kor osztaly jellemz je. ö A Pont osztalyhoz keszıts m veletet, amely a parameterkent atadott ket Pont objektum altal meghatarozott szakasz felez pontjat adja vissza. A this pszeudovaltozö ö Az osztalydefinıciö n belűl a peldanymetö dusokban this nevvel hivatkozhatunk az aktualis objektumra. ö A static metö dusokban a this persze nem hasznalhatö. ö Ez egy predefinit nev. ö Noha a this.valami-hez altalaban nem kell a min sıtes, id nkent azert szűkseg lehet ra. Es olyan is van, amikor maga a this kell (pl. atadni parameterkent). boolean kevesebbetkeresmint( Alkalmazott masik ){ return masik.tobbetkeresmint(this); public void fizetestbeallıt( int fizetes ){ this.fizetes = fizetes; 14

15 Feladat ö A Kor osztaly sugaratbeallıt metö dusanak formalis parametere legyen ugyanu gy elnevezve, mint a sugar attribu tum. Nevűtkozesek ö PeldanyvaltozÖ es formalis parameter neve megegyezhet. Pelda: el bb ELFEDES ö MetÖ dusnev es valtozö nev megegyezhet, mert a () megkűlonbozteti ket a hivatkozaskor. int fizetes; public int fizetes(){ return fizetes; Nevek tu lterhelese ö ugyanazt a nevet hasznalhatom tobb metö dushoz, ha kűlonboz a szignatu ra í szignatu ra: nev plussz parameterek tıpusanak sorozata í "metö dusnev tu lterhelese" í meghıvaskor az aktualis parameterek szama es (statikus) tıpusa alapjan dont a fordıtö (nem szamıt a visszateresi ertek, mert anelkűl is meg lehet egy metö dust hıvni) í valaminek illeszkednie kell, kűlonben fordıtasi hiba Pelda void fizetestemel( int novekmeny ){ fizetes += novekmeny; void fizetestemel(){ fizetes += 5000; void fizetestemel( Alkalmazott masik ){ if (kevesebbetkeresmint(masik)) fizetes = masik.fizetes; Pelda void fizetestemel( int novekmeny ){ fizetes += novekmeny void fizetestemel(){ fizetestemel(5000); void fizetestemel( Alkalmazott masik ){ if (kevesebbetkeresmint(masik)) fizetes = masik.fizetes; a.fizetestemel(10000); a.fizetestemel(); a.fizetestemel(b); a.fizetestemel(10000); a.fizetestemel(); a.fizetestemel(b); 15

16 Feladat ö Keszıts kozeppontos tűkrozest vegz m veleteket a Pont es a Kor osztalyokban. ö A m veleteket meg lehessen hıvni Pont objektummal is es ket koordinataval (cx,cy) is! ö ValÖ sıtsd meg a kozeppontos tűkrozes m veleteket u gy, hogy egymast hıvjak! O rokl des ö Oszta ly kiegeszıtese u j tagokkal (pelda nyvaltozö kkal, metö dusokkal). ö Szűl osztaly, gyermekosztaly. Tranzitıv lezart: s, leszarmazott. ö orokles: a szűl tagjaival is rendelkezik public class Fonk extends Alkalmazott { int beosztottakszama = 0; public void ujbeosztott( Alkalmazott beosztott ){ Oszta lyhierarchia ö az orokl desi relaciö t grafkent megadva osztalyhierarchianak is nevezik ö egyszeres orokl des eseten ez egy (iranyıtott) erd ö Java-ban van egy "univerzalis sosztaly", az Object, minden osztaly ennek a leszarmazottja í ha nem adunk meg extends-et, akkor implicit extends Object van í Object: predefinit, a java.lang-ban van definialva í olyan metö dusokat definial, amelyekkel minden objektumnak rendelkeznie kell í minden, ami nem primitıv tıpusu (int, char, stb.), az Object leszarmazottja ö tehat az osztalyhierarchia egy iranyıtott fa Hozza feresi kategö ria k ö InformaciÖ -elrejtes: nem jö, ha "mindenki mindent lat". í a program komponensei jö l meghatarozott, sz k interfeszen keresztűl kapcsolö dnak ossze í egy komponensen belűl er s koheziö, komponensek kozott korlatozott, sz kıtett interfesz í a program novekedese nem okoz exponencialis, csak linearis komplexitas-novekedest í nyelvi tamogatas ajanlott az informaciö elrejtesehez, hogy ne a programozö nak kelljen mindenre figyelni Hozza feresi kategö ria k 2 ö Komponensek a Java programokban: els sorban osztalyok es csomagok szintjen. í Amivel mi most foglalkozunk: minden egy (nevtelen) csomagban, pl. minden hasznalt osztaly egy konyvtarban lefordıtva. í Osztalyok szintjen: adattagok es metö dusok. ö Pelda: í Kor osztaly (sugar es terűlet) í Alkalmazott osztaly (fizetes es evesfizetes) í Csak egyszerre lehet babralni, hogy a tıpusinvarians megmaradjon: metö duson keresztűl lehessen csak csinalni. 16

17 MÖ dosıtö szavak: public, private, protected ö minden tag pontosan egy hozzaferesi kategö riaban lehet, ezert ezen mö dosıtö szavak kozűl max. egyet lehet hasznalni egy taghoz ö Felnyilvanos tagok: ha nem ırunk semmit. í azonos csomagban definialt osztalyok (objektumai). ö Nyilvanos tagok: public í kűlonboz csomagokban definialt osztalyok is elerik í ıras/olvasas szabalyozasa: nincs "read-only" í megoldas: lekerdez fűggvennyel (akar ugyanazzal a nevvel is lehet) ö Privat tagok: private í csak az osztalydefinıciö n belűl erhet el í az osztaly minden objektuma í jö lenne egy meg szigoru bb is, de ilyen nincs ö Vedett tagok: protected í a felnyilvanos kategö ria kiterjesztese: azonos csomag, plussz a leszarmazottak í Az orokolt tagok mindig ott vannak, de nem mindig erhet ek el (kozvetlenűl) a gyerekb l, csak ha a szűl ezt megengedi a hozzaferesi mö dosıtokkal. ö Pl. egy private valtozö hoz/metö dushoz nem fer hozza, csak esetleg kozvetett u ton, mas (orokolt) metö dusokon keresztűl. Feladat ö Keszıtsd el a SzınesPont osztalyt a Pont osztaly leszarmazottjakent. j tulajdonsag: szın. j m veletek: szın beallıtasa es lekerdezese. A szın attribu tum legyen priva t. Inicializa ciö A tıpusinvaria ns megteremtese pelda nyosıta skor. ö pelda nyva ltozö k inicializaciö ja ö nehezkes a peldanyosıtast "felparameterezni" (de nem lehetetlen, lasd a Szamozott peldat) ö inicializalas egy extra metö dussal, pl. init ö mas megoldas lenne a Factory, amikor az osztaly egy osztalyszint metö dusat lehetne haszna lni pelda nyosıta sra Factory metö dus public class Alkalmazott { static public Alkalmazott peldanyosıt( ){ Alkalmazott a = new Alkalmazott(); return a; ö meg mindig veszelyes, jobb nyelvi szinten osszekapcsolni a peldanyosıtast es az inicializa la st 17

18 Konstruktorok ö programkö d, ami a pelda nyosıta skor "automatikusan" vegrehajtö dik ö hasonlıt a metö dusokra, de nem pont ugyanolyan (nem tag, mert pl. nem orokl dik) ö a konstruktor neve = az osztaly nevevel ö parametereket vehet a t ö tobb (kűlonboz szignatu raju ) konstruktor is lehet egy osztalyban ö csak pelda nyosıta skor hajtö dhat vegre (new mellett) ö a visszateresi tıpust nem kell megadni, mert az adott class Alkalmazott { public Alkalmazott( String nev, int fizetes ){ this.nev = nev; this.fizetes = fizetes; this.evesfizetes = 12*fizetes; public Alkalmazott( String nev ){ this.nev = nev; this.fizetes = 40000; this.evesfizetes = 12*fizetes; ö MÖ dosıtö k kozűl csak a hozzaferesi kategö riat adö k hasznalhatö k (vannak egyebkent masok is, pl. a final). ö A torzs olyan, mint egy void visszateresi ertek metö duse, a parameter nelkűli return-t hasznalhatjuk. ö Szokas: ugyanazokat a neveket hasznalhatjuk konstruktor formalis parameternek, mint a pelda nyva ltozö knak (this haszna lata). ö Meghıvhat egy masik konstruktort is, this nevvel: az els utasıtas lehet csak! public Alkalmazott( String nev ){ this(nev,40000); ö A konstruktorok el tt a rendszer lefoglalja a tarat. ö ha a programozö nem ır konstruktort, akkor letrejon egy implicit, ami public, parameter nelkűli es űres torzs public F nok(){ ö A hozzaferesi kategö riak vonatkoznak a konstruktorokra is. ö Haszna lat: new uta n parameterek megadasa. í Aktualis argumentumok a konstruktornak: ezek dontik el, hogy melyik konstruktor hıvö dik meg. í Ha nem ırtunk konstruktort, akkor nem adunk at parametert es az implicit konstruktor hıvö dik meg. ö A konstruktor nem orokolhet, de meghıvhatö (a this-hez hasonlö an) a szűl osztalybeli konstruktor a legels sorban: super nevvel. public class F nok extends Alkalmazott { public F nok( String nev, int fizetes ){ super(nev,fizetes); beosztottakszama = 0; public F nok( String nev ){ this(nev,100000); 18

19 ö Ha egy konstruktor nem hıv meg masik konstruktort, akkor implicit mö don egy parameter nelkűli super() hıvas kerűl bele; ha nincs parameter nelkűli konstruktora a szűl nek, akkor fordıtasi hiba. ö Az implicit konstruktor űres, tehat abba is bekerűl implicit super. public class SzınesPont extends Pont { int szın = 0; implicit generalö dik: public SzınesPont() { super(); public class Negyzet { int oldal; public Negyzet( int oldal ){ this.oldal = oldal; ö A super megel zi az osztalydefinıciö ban szerepl pelda nyva ltozö inicializa la sokat, a tobbi resze a konstruktornak viszont csak utanuk jon. ö Egy protected konstruktort csak super-kent lehet meghıvni a csomagon kıvűl, new-val csak csomagon belűl lehet. public class SzınesNegyzet extends Negyzet { int szın = 0; Feladat ö A Pont es Kor osztalyokhoz keszıts konstruktorokat. A Pont osztalyhoz csak egyet, aminek a koordinatakat lehet atadni. A Kor oszta lyhoz ha rmat: í aminek a sugar mellett egy Pont objektumot, í illetve a kozeppont koordinatait lehet atadni, í valamint egy parameter nelkűli konstruktort ö Melyik Kor konstruktor hıvhat meg egy masikat? Mit jelentenek a kűlonboz lehet segek? ö Miert nem fordul a SzınesPont osztaly? Javıtsd Inicializa lö blokkok ö Utasıtasblokk a tagok (peldany- es osztalyszint valtozö k es metö dusok) es konstruktorok kozott, az osztalydefinıciö n belűl. class Szamozott { ö Osztalyinicializator es peldanyinicializator (az utö bbi csak a Java 1.1 Ö ta). Az osztalyszint inicializator a static kulcsszö val kezd dik. static int kovetkez = 0; public final int SORSZAM = kovetkez ++; int fact; { fact = 1; for (int j=2; j<=sorszam; j++) fact *= j; class A { static int i = 10, ifact; static { ifact = 1; for (int j=2; j<=i; j++) ifact *= j; 19

20 ö osztalyszint inicializator: az osztaly inicializaciö jakor fut le, az osztalyszint konstruktorokat helyettesıti (hiszen olyanok nincsenek) ö peldanyinicializator: peldanyosıtaskor fut le, a konstruktorokat egeszıti ki; pl. oda ırhatjuk azt, amit minden konstruktorban vegre kell hajtani (nevtelen osztalyoknal is jö, mert ott nem lehet konstruktor) ö tobb inicializalö blokk is lehet egy osztalyban ö vegrehajtas (mind osztaly-, mind peldanyszinten): a valtozö k inicializalasaval osszefesűlve, definialasi sorrendben; nem hivatkozhatnak kes bb definialt valtozö kra ö nem lehet benne return utasıtas ö a peldanyinicializator az osztaly konstruktora el tt fut le, de az sosztalyok konstruktora utan ö nem szoktuk a "tagok" koze sorolni Destruktorok ö marpedig nincsenek, hiszen szemetgy jtes van ö megis, tudomast szerezhetűnk az objektum megsemmisıteser l, ami fontos bizonyos applikaciö knal ö finalize metö dust kell ırni (az Object-ben van definialva). Adott forma protected void finalize() throws Throwable { ö pontosan nem definialt, hogy mikor hıvö dik meg: ami biztos, hogy a tarterűlet u jrafelhasznalasa el tt "Destruktorok" osztalyokhoz ö osztalyszinten is van ilyen: static void classfinalize() throws Throwable { ö ha mar nem rendelkezik peldanyokkal, es mas mö don sem hivatkoznak ra, akkor az osztaly torolhet O rokl des megint ö az orokl des reven kö d-u jrafelhasznalas jon letre, ami í a kö d redundanciajat csokkenti í nem csak a programozast konnyıti meg, hanem az olvashatö sagot es a karbantarthatö sagot is noveli ö az orokl des nem csak kö dmegosztast jelent, hanem altıpus kepzest is í tervezesi szint fogalom ö egy parcialis rendezes Altıpusossa g ö a gyermek rendelkezik a szűl osszes attribu tuma val ö minden esemenyre reagalni tud, amire a szűl ö ezert minden olyan helyzetben, amikor a szűl t hasznalhatjuk, hasznalhatjuk a gyermeket is: í a gyermek tıpusa a sz lö tıpusanak egy altıpusa í (hiszen a tıpus = megszorıtas arra, hogy egy erteket milyen helyzetben szabad hasznalni) 20

21 Pelda: F nok resze Alkalmazott ö az Alkalmazott m veleteit meghıvhatjuk egy F nokre is F nok f = new F nok("jancsi",20000); f.fizetestemel(20000); int i = (new F nok("juliska")).fizetes(); ö egy Alkalmazott forma lis parameternek a tadhatö egy F nok aktualis Alkalmazott a = new Alkalmazott("Fredi"); if( a.tobbetkeresmint(new F nok("beni")) ) ö egy Alkalmazott tıpusu referencianak ertekűl adhatö egy F nok peldany Alkalmazott a = new F nok("winnetou"); Polimorfizmus, tobbalaku sa g ö ugyanaz a m velet meghıvhatö Alkalmazottal es F nokkel egyarant: tobb tıpussal rendelkezik a m velet ö egy rogzıtett tıpusu (pl. Alkalmazott) valtozö hivatkozhat tobb kűlonboz tıpusu objektumra (Alkalmazott, F nok) ö ez a fajta polimorfizmus az u n. altıpus polimorfizmus (subtype vagy inclusion polimorfizmus). Van masfele is, pl. parametrikus polimorfizmus, ami az Ada generic-re hasonlıt Polimorfizmus: Cardelli-Wegner ö univerza lis í parametrikus í altıpus (inclusion) ö ad-hoc í tıpuskenyszerıtes (coercion) í nevek tu lterhelese (overloading) Pelda parametrikus polimorfizmusra (Ada) generic type T is private; procedure Swap ( a, b: in out T ) is c: T := a; begin a := b; b := c; end Swap; procedure IntegerSwap is new Swap(Integer); procedure BooleanSwap is new Swap(Boolean); a: Integer := 42; b: Integer := 33; IntegerSwap(a,b); Pelda parametrikus polimorfizmusra (funkcionalis nyelvek, pl. Clean) swap :: (a,a) -> (a,a) swap (x,y) = (y,x) swap (42,33) eredmenye (33,42) 21

22 Va ltozö k tıpusa statikus: a va ltozö deklara ciö ja ban megadott tıpus dinamikus: a valtozö altal hivatkozott objektum tenyleges tıpusa ö a dinamikus mindig a leszarmazottja a statikusnak (vagy maga a statikus) ö a statikus tıpus allandö, de a dinamikus tıpus valtozhat a futas soran Alkalmazott a = new Alkalmazott("Adel"); Fonk b = new Fonk("Balazs"); Alkalmazott c = new Fonk("Cecil"); a = c; a = new Alkalmazott("Andras"); a = b; Object tıpusu va ltozö k ö felelnek meg a tıpus nelkűli mutatö knak í mindenre hivatkozhatnak, ami nem primitıv tıpusó Object o = new Alkalmazott("Olga"); o = new Kor(); nem megy: o.fizetestemel(20000); Alkalmazott a = o; A statikus tıpus szerepe ö Egy objektumreferencia (vagy objektum kifejezes) statikus tıpusa donti el azt, hogy mit szabad csinalni az objektummal í pl. azt, hogy milyen m veletek hıvhatö k meg ra ö Nem szabad peldaul az alabbiakat, mert fordıtasi hiba: Object o = new Alkalmazott("Olga"); o.fizetestemel(20000); Alkalmazott c = new F nok("cecil"); F nok b = c; Kűlonbseg az altıpusossag es a kö dkiterjesztes kozott ö Pelda: í a Negyzet az altıpusa a Teglalapnak í a Teglalap megkaphatö a Negyzetb l u jabb adattagok felvetelevel ö az OO nyelvek tobbsege nem tesz kűlonbseget a kett kozott, mindkett t ugyanazzal a nyelvi eszkozzel (orokl des) tamogatjak ö inkabb az altıpusossag mellett definialjunk orokl dest í tisztabb tervezeshez vezet (esetleg felesleges kö d aran, mint pl. Negyzetben a "b") Java-ban: Er s (strong) tıpusellen rzes ö igyekszik fordıtasi id ben tıpushelyesseget biztosıtani (static typing) ö esetenkent futasi idej ellen rzeseket is csinal (dynamic typing) 22

23 TıpuskonverziÖ ö automatikus (implicit) ö explicit Automatikus tıpuskonverziö ö altıpusok eseten í szu kebb halmazba tartozo erteket egy búvebb halmazba tartozo ertekkekonvertal 1) objektumok eseten: egy leszarmazott osztalyba tartozö objektumot az sosztalyba tartozö kent kezel int i = (new F nok("juliska")).fizetes(); 2) primitıv tıpusok eseten is definial a nyelv altıpusokat, ıgy: b < c s < i < l < f < d az l < f eseten informaciö vesztes lehet (pontossag) b = 12 is jö, egesz literalt fordıtasi id ben bajtta tud alakıtani a reprezentaciö t meg kell valtoztatni Explicit tıpuskonverziö : tıpuskenyszerıtes ö búvebbúl szu kebbet csinal: adatvesztú, nem biztonsagos ö pl. float-bö l int-et: Math osztaly kerekıt m veletevel ö pl. egeszek sz kıtese eseten a fels bitek vesznek el ö objektumok eseten: ha hiba, akkor ClassCastException megel zes: instanceof operator Object o = new Alkalmazott("Olga"); Alkalmazott a = (Alkalmazott) o; ((Alkalmazott)o).fizetestEmel(20000); Feladat ö Keszıtsd el a SzınesKor osztalyt a Kor osztaly leszarmazottjakent. j m veletei: a szın beallıtasa es lekerdezese. ö Ne vezess be u j adattagot: a szınes korok szınet a kozeppontjuk szıne hatarozza meg, amely nem kozonseges pont, hanem szınes pont. if( o instanceof Alkalmazott ) ((Alkalmazott)o).fizetestEmel(20000); Nevek u jrahasznosıta sa ö Felűldefinialas (redefining) í orokl des menten ö Tu lterheles (overloading) í valtozö vs. metö dus (zarö jelek) í metö dus vs. metö dus (parameterezes) ö Elfedes í peldanyva ltozö vs. metö dus parametere (this) 23

24 Tu lterhelesre pelda ö Ugyanolyan nevvel tobb m velet. ö A parameterezes donti el, mikor melyikre gondolunk. ö Gondoljunk a konstruktorokra class Alkalmazott { void fizetestemel(){ void fizetestemel( int mennyivel ){ Tu lterhelesre pelda ö Ugyanolyan nevvel tobb m velet. ö A parameterezes donti el, mikor melyikre gondolunk. ö Gondoljunk a konstruktorokra class Alkalmazott { void fizetestemel(){ fizetes += 1000; void fizetestemel( int mennyivel ){ fizetes += mennyivel; Tu lterhelesre pelda ö Ugyanolyan nevvel tobb m velet. ö A parameterezes donti el, mikor melyikre gondolunk. ö Gondoljunk a konstruktorokra class Alkalmazott { void fizetestemel(){ fizetestemel(1000); void fizetestemel( int mennyivel ){ fizetes += mennyivel; class Alkalmazott { Tu lterhelesre pelda public static void main( String args[] ){ Alkalmazott a = new Alkalmazott(); a.fizetestemel(1500); a.fizetestemel(); void fizetestemel(){ fizetestemel(1000); void fizetestemel( int mennyivel ){ fizetes += mennyivel; Felűldefinia la s ö a gyermek osztalyban bizonyos esemenyekre maskepp kell (vagy legalabbis lehet) reagalni, mint a szűl osztalyban: ö a szűl - (vagy s)osztalybeli metö dust felűldefinialjuk a gyermekben class Teglalap { double kerőlet() { return 2*(a+b); class Negyzet extends Teglalap { double kerőlet() { return 4*a; ö orokolt metö dushoz u j definıciö t rendelűnk ö csak peldanymetö dusok eseten 24

25 Ha mast kell csinalnia Az orokolt metö dus ö hasznalhatö a super.valami() is a felűldefinialt metö dus eleresere class Alkalmazott { int pótlek() { return nyelvvizsgakszama*5000; class F nok extends Alkalmazott { int pótlek() { return nyelvvizsgakszama* beosztottakszama*1000; class Alkalmazott { int pótlek() { return nyelvvizsgakszama*5000; class F nok extends Alkalmazott { int pótlek() { return super.pótlek() + beosztottakszama*1000; Feladat ö Keszıts tostring m veletet a Pont es a SzınesPont osztalyokhoz, mely az ilyen objektumokrö l adatokat szolgaltat egy String formajaban. (Az adatok az attribu tumok ertekei legyenek.) A metö dus az alabbi specifikaciö val rendelkezzen: public String tostring() Dinamikus kotes (late binding) ö mindig a dinamikus tıpus szerinti m velet hıvö dik meg ö futas kozben valasztö dik ki az a metö dus, ami vegrehajtö dik ö C++ virtual -- Java: teljesen dinamikus Alkalmazott a = new Alkalmazott(); F nok f = new F nok(); int i = a.pótlek(); int j = f.pótlek(); a = f; int k = a.pótlek(); ö meg az orokolt metö dus torzseben is dinamikus kotes van class Alkalmazott { int teljesfizetes() { return fizetes() + pótlek(); Feladat ö A Pont osztalyban definialjunk println metö dust, mely kiırja a pontot a szabvanyos kimenetre. (Ehhez, implicit mö don, az el z feladatban ırt tostring metö dust hasznaljuk.) ö Nezzűk meg, hogyan m kodik az orokolt println metö dus a SzınesPont objektumokon! 25

26 Felűldefinia la s szaba lyai ö a szignatu ra megegyezik ö a visszateresi tıpus megegyezik ö a hozzaferesi kategö ria: nem sz kıthet private < felnyilvanos < protected < public ö specifikalt kivalthatö kivetelek: nem b vıthet ha a szignatö ra ugyanaz, akkor mar nem lehet tö lterheles, ezert ha a t bbi feltetel nem oke, akkor fordıtasi hiba protected Integer add( Vector v ) throws A, B { public Integer add( Vector v ) throws C { Legyen: class C extends A { Altıpusossag egy megkozelıtese ö "types as sets", tıpusertekhalmazok tartalmazasa ö az altıpusu ertek mindig hasznalhatö, ha a b vebb tıpusu kell ö kontra- es kovariancia, invariancia class X { Integer add( Vector v ) throws A, B { class Y extends X { public Integer add( Vector v ) throws C { X x = new X(); class C extends A { Y y = new Y(); Vector v = new Vector(); A legfontosabb/legelterjedtebb OO nyelvek ö Simula 67 ö Smalltalk ö C++ ö Eiffel ö Java x.add(v) y.add(v) Variancia m velet parameter: invariancia (pl. Java) class Gyerek { class Sıel extends Gyerek { void szobatarsatrendel( Sıel szobatars ){ Sıel szobatars(){ class Sıel Lany extends Sıel { void szobatarsatrendel( Sıel szobatars ){ Sıel szobatars(){ Variancia m velet parameter: kontra-variancia (nem Java!) class Gyerek { class Sıel extends Gyerek { void szobatarsatrendel( Sıel szobatars ){ Sıel szobatars(){ contra-class Sıel Lany extends Sıel { void szobatarsatrendel( Gyerek szobatars ){ Sıel Lany szobatars(){ 26

27 Variancia m velet parameter: ko-variancia (pl. Eiffel, nem Java!) class Gyerek { class Sıel extends Gyerek { void szobatarsatrendel( Sıel szobatars ){ Sıel szobatars(){ co-class Sıel Lany extends Sıel { void szobatarsatrendel( Sıel Lany szobatars ){ Sıel Lany szobatars(){ A ltalaban megengedhet lenne m velet felűldefinialasa eseten ö kontravariancia (ellentetes valtozas) az alprogram parametereben í a parameter tıpusa b vebb: tobb parametert elfogadö ö a visszateresi ertek tıpusara kovariancia í a visszateresi ertek sz kebb: nem ad olyat vissza, amit az sbeli sem ö ahol egy bennfoglalö tıpusu valamit hasznalok, ott lehet helyette egy altıpusbelit hasznalni; s t, meg tobb kornyezetben hasznalhatom az altıpusbelit, hiszen az specialisabb, tobb informaciö t hordozö Pelda kontravarianciara (NEM JAVA!) Gyerek gy = new Gyerek(); Sıel s1 = new Sıel (), s2 = new Sıel (); Sıel Lany slany = new Sıel Lany(); slany.szobatarsatrendel(gy); s1.szobatarsatrendel(s2); s1.szobatarsatrendel(slany); s1 = slany; s1.szobatarsatrendel(s2); Eiffel-ben (Bertrand Meyer) megengedett m velet felűldefinialasa eseten ö kovariancia (egyűttvaltozas) a felűldefinialt alprogram parametereben í az altıpusbeli m veletben a szűl beli parametertıpusanak egy altıpusa szerepel ö a visszateresi ertek tıpusara is kovariancia Sıel s1 = new Sıel (), s2 = new Sıel (); Sıel Lany slany = new Sıel Lany(); s1.szobatarsatrendel(s2); s1 = slany; s1.szobatarsatrendel(s2); NEM J츐! Meg egy pelda Eiffel-b l ö Egy altıpusbö l elhagyhatö k bazistıpusbö l orokolt m veletek. ö Ez megserti azt a szabalyt, hogy az altıpusu ertek mindig hasznalhatö ott, ahol a bazistıpusu ertek. ö Bizonyos esetekben programozastechnikailag kenyelmes tud lenni. Peldaul: a Madar repűl a Pingvin nem repűl 27

28 Visszaterve a Java-hoz ö invariancia (nem-valtozas) az alprogram parametereben í az altıpusban a parameter tıpusa ugyanaz, mint a szűl ben ö visszateresi ertekre is invariancia ö viszont kivetelekre (specialis visszateresi ertek) ko-variancia, es lathatö sagra (ami a parameterekre hasonlıt) kontra-variancia ö tu lterheles: a szignatu ra kűlonboz, tehat azt definialja felűl, amivel megegyezik a szignatu ra ö felűldefinialasnal igyekezzűnk meg rizni a jelentest, inkabb csak a kiszamıtas mö dja legyen mas Heterogen adatszerkezetek ö Egy adatszerkezetben tobbfele osztalyu objektumot szeretnenk tarolni. í neha jö, neha nem ö Peldaul a predefinit Vector osztalyban Object-ek vannak. ö Egy tombbe is tehetűnk kűlonboz ket egy k z s ö stıpus alapjan. Test[] t = {new Kocka(42.0),new Gomb(33.0) ; a statikus tıpus ugyanaz, a dinamikus tıpus elterhet Tu lterheles: va laszta s a va ltozatok kozott ö ha a szignatu raban szerepl tıpusok slesza rmazott viszonyban a llnak í fordıtasi id ben tortenik a valasztas í az aktualis parameterek statikus tıpusa dont í altıpusossag lehetseges í "legjobban illeszked " í fordıtasi hiba, ha nincs í tıpuskenyszerıtes í rossz stılus, kerűlend a tobbertelm seg void m(alkalmazott a1, Alkalmazott a2) { void m(alkalmazott a, Fonok f) { void m(fonok f, Alkalmazott a) { Elfedes ö osztalyszint metö dusoknal nincs felűldefinialas + dinamikus kotes ö a statikus metö dusokat elfedni lehet ö nem csak a szignatu ranak kell megegyezni, hanem hasonlö szabalyok mint felűldefinialasnal, kűlonben fordıtasi hiba class A { static void alma(int x){ class B extends A { static void alma(int x){ elfedett elerese: 1 super 1 min sıtes 1 tıpuskenyszerıtes Oszta lymetö dus elfedese Alkalmazott a = new Alkalmazott(); F nok f = new F nok(); a.nyugdıjkorhatar() f.nyugdıjkorhatar() Alkalmazott.nyugdıjKorhatar() ((Alkalmazott)f).nyugdıjKorhatar() class Alkalmazott { static public int nyugdıjkorhatar() { return 65; static public int A_nyugdıjKorhatar() { return nyugdıjkorhatar(); class F nok extends Alkalmazott { static public int nyugdıjkorhatar() { return super.nyugdıjkorhatar() + 5; return Alkalmazott.nyugdıjKorhatar() + 5; 28

29 statikus kivalasztas 1 (fordıtasi id ben) elfedett elerese 1 orokolt metö duson keresztűl Alkalmazott a = new Alkalmazott(); F nok f = new F nok(); a.nyugdıjkorhatar() f.nyugdıjkorhatar() a = f; a.nyugdıjkorhatar() a.fizetes() a.a_nyugdıjkorhatar() class Alkalmazott { static public int nyugdıjkorhatar() { return 65; static public int A_nyugdıjKorhatar() { return nyugdıjkorhatar(); class F nok extends Alkalmazott { static public int nyugdıjkorhatar() { return super.nyugdıjkorhatar() + 5; return Alkalmazott.nyugdıjKorhatar() + 5; peldanymetö dust nem szabad elfedni class Alkalmazott { static public int nyugdıjkorhatar() { return 65; static public int A_nyugdıjKorhatar() { return nyugdıjkorhatar(); class F nok extends Alkalmazott { static public int nyugdıjkorhatar() { return super.nyugdıjkorhatar() + 5; return Alkalmazott.nyugdıjKorhatar() + 5; static float nyugdıjkorhatar() { NEM JO! static int fizetes(){ NEM JO! Va ltozö k elfedese ö peldany- vagy osztalyszint valtozö k eseten ö statikus kivalasztas ö az elfedett valtozö khoz nem lehet kozvetlenűl hozzaferni, csak í super-es min sıtessel í tıpusos min sıtessel (osztalyvaltozö eseten) í tıpuskenyszerıtessel í orokolt metö duson keresztűl Pelda pelda nyva ltozö elfedesere class a { int x = 0; void pr() { System.out.println(x); class b extends a { int x = 1; void pri(){ System.out.println(super.x); static public void main( String[] args ){ a v = new b(); b w = new b(); System.out.println(v.x + " " + w.x); System.out.println(((a)w).x); v.pr(); w.pr(); w.pri(); A final mö dosıtö szö ö "nem valtoztathatö " í valtozö (peldany, osztalyszint, lokalis, parameter) í metö dus (peldany, osztalyszint ) í osztaly 29

30 final va ltozö k ö kvazi konstansok í nem valtoztathatö a valtozö erteke, ha mar egyszer beallıtottuk í final double ADOKULCS = 0.25; final va ltozö k ö kvazi konstansok í nem valtoztathatö a valtozö erteke, ha mar egyszer beallıtottuk í final double ADOKULCS = 0.25; ö űres konstansok (a fordıtö eszreveszi a hibat) final static int i = 100; final static int ifact; static { int j = 1; for(int k=1; k<100; k++) j *= k; ifact = j; final va ltozö k ö kvazi konstansok í nem valtoztathatö a valtozö erteke, ha mar egyszer beallıtottuk í final double ADOKULCS = 0.25; ö űres konstansok (a fordıtö eszreveszi a hibat) final static int i = System.in.read(); final static int ifact; static { int j = 1; for(int k=1; k<100; k++) j *= k; ifact = j; final String nev; U res konstans erteke konstruktorokbö l public Alkalmazott( String nev ){ this(nev,100000); public Alkalmazott( String nev, int fizetes ){ this.nev = nev; this.fizetes = fizetes; final valtozö : a referencia nem va ltozhat class A { int v = 10; public static void main( String args[] ){ final A a = new A(); a = new A(); // NEM SZABAD! a.v = 11; 30

31 final metö dus es osztaly ö "nem valtoztathatö " í nem lehet fel ldefinialni, illetve leszarmaztatni belö le public class Object { public final Class getclass(); public final class System { Pl. ha veszelybe sodorna a rendszer m kodeset Absztrakt osztalyok ö hianyosan definialt osztaly (valami nincs benne keszen) Absztrakt osztalyok ö hianyosan definialt osztaly (valami nincs benne keszen) í bizonyos m veleteknek meg nem adjuk meg az implementaciö jat ö nem lehet bel le peldanyosıtani ö nem lehet bel le peldanyosıtani ö az altıpus relaciö megadasa tervezes szempontjabö l sokszor megkıvanja ö az altıpus relaciö megadasa tervezes szempontjabö l sokszor megkıvanja Absztrakt osztalyok ö hianyosan definialt osztaly (valami nincs benne keszen) í bizonyos m veleteknek meg nem adjuk meg az implementaciö jat í az abstract mö dosıtö szö val jelezzűk ö nem lehet bel le peldanyosıtani Absztrakt osztalyok ö hianyosan definialt osztaly (valami nincs benne keszen) í bizonyos m veleteknek meg nem adjuk meg az implementaciö jat í az abstract mö dosıtö szö val jelezzűk ö nem lehet bel le peldanyosıtani ö az altıpus relaciö megadasa tervezes szempontjabö l sokszor megkıvanja ö az altıpus relaciö megadasa tervezes szempontjabö l sokszor megkıvanja í csak azert kellenek, hogy "igazi" osztalyok kozos viselkedeset csak egyszer kelljen leırni, vagy hogy "igazi" osztalyok kozos ssel rendelkezzenek 31

32 public abstract class Gyerek { protected Jatek kedvencjatek; // es egyeb attributumok public abstract double mennyireszereti(gyerek masik); public Gyerek legjobbbarat( Gyerek[] osztaly ){ int maxhely = 0; double maxertek = mennyireszereti(osztaly[0]); for( int i = 1; i<osztaly.length; i++ ){ double ertek = mennyireszereti(osztaly[i]); if( ertek > maxertek ) { maxertek = ertek; maxhely = i; return osztaly[maxhely]; Gyerek gyerek = new Gyerek(); public abstract class Gyerek { protected Jatek kedvencjatek; // es egyeb attributumok public abstract double mennyireszereti(gyerek masik); public Gyerek legjobbbarat( Gyerek[] osztaly ){ public class Fiu extends Gyerek { public double mennyireszereti(gyerek masik){ double osszeg = 0.0; if( kedvencjatek.equals(masik.kedvencjatek) ) osszeg += 10.0; return osszeg; public class Lany extends Gyerek { public double mennyireszereti(gyerek masik){ if( masik.kedvencjatek.equals(jatek.doglottmacska) ) return 0.01; if( masik.kedvencjatek.equals(jatek.hajasbaba) ) return 12.0; Feladat ö ValÖ sıtsd meg a Hasab absztrakt osztalyt. Tulajdonsa g: magassa g. Absztrakt m velet: alapterűlet szamıtasa. Masik m velet: terfogat szamıtasa. ö Keszıtsd el a Henger es Kocka osztalyokat, melyek a Hasab konkret leszarmazottjai. public abstract class Hasab { protected double magassag; public abstract double alapterőlet(); public double terfogat(){ return alapterőlet() * magassag; public class Henger extends Hasab { // konstruktorok protected double sugar; public double alapterőlet(){ return sugar*sugar*math.pi; public class Kocka extends Hasab { // konstruktorok public double alapterőlet(){ return magassag*magassag; Hasab h = new Kocka(10.0); Absztrakt osztalyok: osszegezve ö nem pelda nyosıthatö kozvetlenűl, el bb specializalni kell (megvalö sıtani az absztrakt m veleteket) ö a gyerek is lehet absztrakt í akar absztrakt a szűl, akar nem ö absztrakt statikus tıpussal rendelkez valtozö k hivatkozhatnak valamilyen leszarmazott konkret dinamikus tıpusu objektumra í dinamikus kotes hıvaskor ö egy absztrakt metö dus nem lehet private, final vagy static (sem native) 32

33 Tobbszoros orokl des ö egy osztaly tobb osztalytö l is orokolhet í az osztalyhierarchia egy iranyıtott kormentes graf (de nem feltetlenűl fa vagy erd ) í peldaul: ReszegesEgyetemista, Ketelt Jarm, SzınesNegyzet ö vita a szakirodalomban í nagyon hasznos dolog í problemakat vet fel (allıtö lag) ö Java: kompromisszum (jö? nem jö?) í osztalyokra egyszeres r klúdes, de Tobbszoros orokl des "problema i" ö ugyanolyan attribu tum/metö dus tobbszorosen í class D extends B, C í B.valami C.valami í felűldefinialaskor D.valami ö ismetelt orokl des: ugyanaz tobbszor í class B extends A class C extends A í A.valami Interfeszek ö egy masik referencia tıpus ö az absztrakt osztalyok definıciö jara hasonlıt ö tıpusspecifika ciö -szer seg ö tobbszoros orokl des (altıpus relaciö ) ö nem u j dolog, Objective-C protocol Interfesz: "absztrakt" ö teljesen absztrakt, egyaltalan nincs benne "kö d", csak specifikaciö í pl. nincs metö dustorzs vagy peldanyva ltozö benne public interface Enumeration { public boolean hasmoreelements(); public Object nextelement(); Interfesz: nem peldanyosıthatö ö ugyanu gy, mint az absztrakt osztalyok: nem pelda nyosıthatö kozvetlenűl ö el bb "meg kell valö sıtani" class ListaIterator implements Enumeration { public boolean hasmoreelements(){ public Object nextelement(){ HalmazIterator TombIteraror SorozatIterator stb 33

34 Interfesz: orokl des ö Interfeszek is kiterjeszthetik egymast: extends ö Akar tobbszoros orokl des is lehet í ha a kö dorokles szintjen gondot is okozhat a tobbszoros orokl des, azert a specifikaciö orokl dese eseten nem ö Az osztalyok megvalö sıthatnak interfeszeket í ugyanazt az interfeszt tobben is í ugyanaz az osztaly tobbet is RelaciÖ k a referencia-tıpusokon ö O rokl des osztalyok kozott í fa (egyszeres orokl des, kozos gyoker) í kö dorokles ö O rokl des interfeszek kozott í kormentes graf (tobbszoros orokl des, nincs kozos gyoker) í specifikaciö oroklese ö MegvalÖ sıtas osztalyok es interfeszek kozott í kapcsolat a ket graf kozott, tovabbra is kormentes í specifikaciö oroklese Interfesz megvalö sıta sa ö Ha az I egy interfesz, J az I egyik se, az A osztaly megvalö sıtja I-t, B leszarmazottja az A-nak, ö akkor B megvalö sıtja J-t. Interfesz: tıpus ö haszna lhatö k va ltozö deklara ciö kban ö hasznalhatö k formalis parameterek specifika ciö ja ban Interfesz: tıpus ö haszna lhatö k va ltozö deklara ciö kban ö hasznalhatö k formalis parameterek specifika ciö ja ban ö egy interfesz tıpusu valtozö : í referencia, ami olyan objektumra mutathat, amely osztalya (kozvetlenűl vagy kozvetve) megvalö sıtja az interfeszt I v = new A(); J w = new B(); 34

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

Java programozási nyelv 4. rész Osztályok II. Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék

Részletesebben

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

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA PROGRAMOZÁS 2.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,

Részletesebben

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

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is

Részletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

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

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1 Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

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

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

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?

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? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

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

Programozási nyelvek II.: JAVA, 11. gyakorlat Programozási nyelvek II.: JAVA, 11. gyakorlat 2017. november 27-december 1. Programozási nyelvek II.: JAVA, 11. gyakorlat 1 / 54 A 11. gyakorlat tematikája Örökl dés Osztályhierarchia Az Object osztály

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:

Részletesebben

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

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

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

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

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 5. gyakorlat 1 Objektumorientáltság Egységbezárás és információ elrejtése (absztrakt adattípus) Adatok és rajtuk végzett műveletek egységbezárása (osztályok írása, múlt hét) Öröklődés Polimorfizmus

Részletesebben

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás: Java V. szint lyszintű ű tagok A final minősítő Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 05. Java V.: szintű tagok JAVA5 / 1 Példányváltozó Az eddig megismert adattagokból

Részletesebben

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

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma

Részletesebben

JAVA PROGRAMOZÁS 3.ELŐADÁS

JAVA PROGRAMOZÁS 3.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 3.ELŐADÁS 2014-2015 tavasz Polimorfizmus, absztrakt osztályok, interfészek 2 Példa - Hengerprogram 3 Példa - Hengerprogram 4 Példa - Hengerprogram

Részletesebben

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

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus

Részletesebben

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

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag C# osztálydeníció Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem.net C# technológiák tananyag objektum orientált programozás tananyag Tartalom 1 Bevezetés 2 Osztály létrehozása, deníció

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked

Részletesebben

Interfészek. PPT 2007/2008 tavasz.

Interfészek. PPT 2007/2008 tavasz. Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált

Részletesebben

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

Java III. I I. Osztálydefiníció (Bevezetés) Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

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

Java III. I I. Osztálydefiníció (Bevezetés) Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban

Részletesebben

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

Programozási nyelvek II.: JAVA, 3. gyakorlat Programozási nyelvek II.: JAVA, 3. gyakorlat 2017. szeptember 25-29. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 1 / 50 A 3. gyakorlat tematikája Osztályok deníciója Láthatósági

Részletesebben

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

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 18. 2. El adás Komplex szám public class Complex { private float repart_; private float impart_; public Complex() { repart_ = 0; impart_ = 0; public Complex(float

Részletesebben

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

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 3. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért

Részletesebben

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.

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. 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. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

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

Abstract osztályok és interface-ek. 7-dik gyakorlat Abstract osztályok és interface-ek 7-dik gyakorlat Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni,

Részletesebben

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok A szemantikus elemzés helye Forrásprogram Forrás-kezelő (source handler) Lexikális elemző (scanner) A szemantikus elemzés feladatai Fordítóprogramok előadás (A, C, T szakirány) Szintaktikus elemző (parser)

Részletesebben

Öröklés és Polimorfizmus

Öröklés és Polimorfizmus Öröklés és Polimorfizmus Egy létező osztályból egy (vagy több) újat készítünk A létező osztályt ősnek, az újakat utódnak nevezzük Az utódok öröklik az ős minden tagját Az utódok az öröklött tagokat újakkal

Részletesebben

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

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java 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. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

Programozás módszertan p.1/46

Programozás módszertan p.1/46 Programozás módszertan Öröklődés Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKAI ÉS

Részletesebben

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

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

Bevezetés a Python programozási nyelvbe

Bevezetés a Python programozási nyelvbe Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban

Részletesebben

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r Programozás I. Széchenyi István Egyetem, Gy r 2014. november 16. Áttekintés kel kapcsolatos fogalmak deklaráció Több, kompatibilis változat is elképzelhet. Meg kell el znie a fv. hívását. Mindenképp rögzíti

Részletesebben

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

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

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

Magas szintű programozási nyelvek 2 Előadás jegyzet Magas szintű programozási nyelvek 2 Előadás jegyzet 1. Rendszerfejlesztés 0. lépés: Elemzés (analízis) 1. lépés: Tervezés a, technológia független rész b, technológia függő rész 2. lépés: Megvalósítás

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. november A C++ programozási nyelv Soós Sándor 1/12 Tartalomjegyzék Miért

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 25. 3. El adás User public class User { private String realname_; private String nickname_; private String password_; public User(String realname, String nickname)

Részletesebben

A Java és a C++ összehasonlítása

A Java és a C++ összehasonlítása A Java és a C++ összehasonlítása Kozsik Tamás kto@elte.hu http://kto.web.elte.hu/ Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszék 2008. Kozsik Tamás (ELTE) A Java és a C++

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:

Részletesebben

Java és web programozás

Java és web programozá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:

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

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

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Elemi Alkalmazások Fejlesztése II.

Elemi Alkalmazások Fejlesztése II. Elemi Alkalmazások Fejlesztése II. Osztályok közötti kapcsolatok öröklődés asszociáció aggregáció kompozíció 1. Feladat Készítsünk programot, amellyel testek térfogatát határozhatjuk meg, illetve megadhatjuk

Részletesebben

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

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

Web-technológia PHP-vel

Web-technológia PHP-vel Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19 Szuperglobális változók $ GET : request

Részletesebben

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. október 11. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja

Részletesebben

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

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016 Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS 2015-2016 Objektumorientált programozás OOP PHP-ben 2 A PHP az 5.0-as verziójától megvalósítja az OO eszközrendszerét OO eszközök:

Részletesebben

Objektumok inicializálása

Objektumok inicializálása Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú

Részletesebben

Bevezetés a programozásba Előadás: A const

Bevezetés a programozásba Előadás: A const Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout

Részletesebben

III. OOP (objektumok, osztályok)

III. OOP (objektumok, osztályok) III. OOP (objektumok, osztályok) 1. Természetes emberi gondolkozás Az Objektumorientált paradigma alapelvei nagyon hasonlítanak az emberi gondolkozásra. Érdemes ezért elsőként az emberi gondolkozás elveit

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)

Részletesebben

Programozás I. Első ZH segédlet

Programozás I. Első ZH segédlet Programozás I. Első ZH segédlet Ezen az oldalon: kiírás az alapértelmezett (hiba) kimenetre, sztring konkatenáció, primitív típusok, osztály létrehozás, példányosítás, adattagok, metódusok Kiíratás alapértelmezett

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 13. gyakorlat 2017. december 11-15. 13. gyakorlat Programozási nyelvek II.: JAVA 1 / 32 Az 13. gyakorlat tematikája Generikus típusokés öröklődés Clone Comparator Névtelen

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 11.gyakorlat Operációsrendszertől függő tulajdonságok PATH elválasztó Unix ":" Windows ";" final String PATH_SEPARATOR = File.pathSeparator; Ugyanaz, csak karakterkent final char

Részletesebben

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

Programozás II. 4. Dr. Iványi Péter Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include

Részletesebben

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

Programozási nyelvek II. JAVA EA+GY 1. gyakolat Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 1. rész Osztályok és objektumok Mezık és metódusok Konstruktor és destruktor Névterek és hatókörök Láthatósági szintek Osztály szintő tagok Beágyazott osztályok

Részletesebben

Virtuális függvények (late binding)

Virtuális függvények (late binding) Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy

Részletesebben

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

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout

Részletesebben

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?

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? 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? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"

Részletesebben

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

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform

Részletesebben

Programozási nyelvek (ADA)

Programozási nyelvek (ADA) Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure)

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)

Részletesebben

3. gyakorlat. Objektumorientált programozás

3. gyakorlat. Objektumorientált programozás 3. gyakorlat Objektumorientált programozás Amiről ma szó lesz Objektumok Csomagok Öröklődés Debugger használata OOP vs. egyéb programozási módszerek Az objektumorientált programozás abban különbözik leginkább

Részletesebben

Alprogramok, paraméterátadás

Alprogramok, paraméterátadás ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016 Programozási nyelvek Alprogramok Függvények, eljárások Metódusok Korutinok stb. Alprogramok Alprogram: olyan nyelvi

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások 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 A mai előadás tartalma: Miért pont Java?

Részletesebben

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,

Részletesebben

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

Részletesebben

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

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.

Részletesebben

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

Részletesebben

Java tutorial. Csomagok. A program tagolasa. Alrendszerek kialakıtasa. Csomag. Alrendszerek kialakıtasa

Java tutorial. Csomagok. A program tagolasa. Alrendszerek kialakıtasa. Csomag. Alrendszerek kialakıtasa Csomagok A program tagolasa í Tıpusdefinıcio k (oszta lyok, interfe szek) í Meto dusok í Blokk utasıta sok í Csomagok í Bea gyazott oszta lyok Csomag í A tıpusainkat csomagokba soroljuk í O sszetartoza

Részletesebben

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title; PHP5 objektumok 1 Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók private $isbn; public $title; function

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 6. gyakorlat 2017. október 16-20. 6. gyakorlat Programozási nyelvek II.: JAVA 1 / 24 Az 6. gyakorlat tematikája túlterhelés - összefoglalás statikus adattagok és metódusok

Részletesebben

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance Az objektum-orientált programozás (röviden OOP) a természetes gondolkodást, cselekvést közelítő programozási mód, amely a programozási nyelvek tervezésének természetes fejlődése következtében alakult ki.

Részletesebben

ELTE SAP Excellence Center Oktatóanyag 1

ELTE SAP Excellence Center Oktatóanyag 1 Oktatóanyag 1 Oktatóanyag 2 Az oktatás folyamán használt példák a fent látható egyszerű modell implementációi. Oktatóanyag 3 A definíciós részben definiálja a fejlesztő az egyes attribútumokat, metódusokat,

Részletesebben

Programozás III. - NGB_IN001_3

Programozás III. - NGB_IN001_3 Programozás III. - az objektumorientált programozásba Varjasi Norbert Széchenyi István Egyetem Informatika Tanszék Programozás III. - 1. el adás institution-log Tartalom 1 El adások és gyakorlatok Zárthelyi

Részletesebben

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

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 Eötvös Loránd Tudományegyetem Informatikai Kar Objektumelvű alkalmazások fejlesztése 6. gyakorlat, polimorfizmus 2011.10.27. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Kódismétlődés

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 6. gyakorlat 2017. október 16-20. 6. gyakorlat Programozási nyelvek II.: JAVA 1 / 1 Az 6. gyakorlat tematikája Túlterhelés - összefoglalás statikus adattagok és metódusok

Részletesebben

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok

Részletesebben

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

C programozás. 6 óra Függvények, függvényszerű makrók, globális és C programozás 6 óra Függvények, függvényszerű makrók, globális és lokális változók 1.Azonosítók A program bizonyos összetevőire névvel (azonosító) hivatkozunk Első karakter: _ vagy betű (csak ez lehet,

Részletesebben

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből

Részletesebben

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva Smalltalk 3. Osztályok létrehozása Készítette: Szabó Éva Metaosztály fogalma Mint korában említettük, a Smalltalkban mindent objektumnak tekintünk. Még az osztályok is objektumok. De ha az osztály objektum,

Részletesebben

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

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

Részletesebben

Programozás II. labor

Programozás II. labor Programozás II. labor 1. rész Programozási tételek Öröklődés Interfészek Eseménykezelés Kivételkezelés Visszalépéses keresés Programozás II. Programozási tételek OOP alapok ismétlése Öröklődés Öröklődés

Részletesebben

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér Funkcionális programozás 2. el adás Sapientia Egyetem, Matematika-Informatika Tanszék Marosvásárhely, Románia mgyongyi@ms.sapientia.ro 2019, tavaszi félév Mir l volt szó? Követelmények, osztályozás Programozási

Részletesebben