Imperatív és procedurális programozás a Javában

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

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei

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

Kifejezések. Kozsik Tamás. December 11, 2016

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozási nyelvek JAVA EA+GY 1. gyakolat

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

A C# programozási nyelv alapjai

Kifejezések. Kozsik Tamás. December 11, 2016

Készítette: Nagy Tibor István

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

A C programozási nyelv I. Bevezetés

Informatika terméktervezőknek

A C programozási nyelv I. Bevezetés

Szoftvertechnológia alapjai Java előadások

Szoftvertervezés és -fejlesztés I.

A C programozási nyelv II. Utasítások. A függvény.

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

Programozási nyelvek Java

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Java programozási nyelv

Algoritmizálás + kódolás C++ nyelven és Pascalban

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

A C# PROGRAMOZÁSI NYELV

C# gyorstalpaló. Készítette: Major Péter

Készítette: Nagy Tibor István

Programozási nyelvek (ADA)

Programozási nyelvek Java

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Programozás I. Első ZH segédlet

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

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

GYAKORLATIAS JAVA MINTA

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

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

Programozási technológia I 1. gyakorlat. A Java nyelvi alapjai, a NetBeans környezet

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

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Alprogramok, paraméterátadás

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

Objektumorientált Programozás II.

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

Programozás 1. Dr. Iványi Péter

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

és az instanceof operátor

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. Függvények. Függvények(2)

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

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?

Mintavételes szabályozás mikrovezérlő segítségével

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Programozási nyelv Java

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

A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

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

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

Programozási nyelvek (ADA)

A programozás alapjai

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

Programozási nyelvek Java

Bevezetés a C++ programozási nyelvbe

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

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

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

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

Programozás I. C# bevezető. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 17.

3. Gyakorlat Ismerkedés a Java nyelvvel

Programozás módszertan

Pénzügyi algoritmusok

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

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Memóriakezelés, dinamikus memóriakezelés

C programozás. 1 óra Bevezetés

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Apple Swift kurzus 3. gyakorlat

OOP #14 (referencia-elv)

3 A C programozási nyelv szintaktikai egységei

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

A TANTÁRGY ADATLAPJA

Java programozási nyelv

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

AWK programozás, minták, vezérlési szerkezetek

Imperatív programozás

Komputeralgebra Rendszerek

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

AWK programozás, minták, vezérlési szerkezetek

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

Programozási nyelvek Java

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

I. rész: A Microsoft Visual C# és a Microsoft Visual Studio 2005 bemutatása. 1. Üdvözöljük a C# világában! 3

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Forráskód formázási szabályok

Átírás:

Imperatív és procedurális programozás a Javában 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) Imperatív és procedurális programozás a Javában 2008. 1 / 30

Tartalom 1 Imperatív programozás Típusok Utasítások Kifejezések 2 Procedurális programozás Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 2 / 30

Tartalom 1 Imperatív programozás Típusok Utasítások Kifejezések 2 Procedurális programozás Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 2 / 30

Áttekintés Olcsó programfejlesztés Biztonságra való törekvés Safety Security Memóriakezelés Szintaktikai szabályok megörökölte a C betegségeit Statikus szemantikai szabályok Dinamikus szemantikai szabályok http://java.sun.com/ Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 3 / 30

Típusok Imperatív programozás Típusok Primitív típusok Referencia típusok Osztályok (konkrét és absztrakt) Tömb típusok Felsorolási típusok Interfészek Annotációk Változók típusa: csak primitív vagy referencia Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 4 / 30

Primitív típusok Imperatív programozás Típusok 8 db beépített típus boolean char byte, short, int, long float, double Rögzített ábrázolás Nincs előjel nélküli egész típus A char típus 2 bájtos Unicode A logikai típus önálló (vezérlési szerk., relációk) Altípusosság; konverzió: automatikusan csak bővítő (!) Osztályosítás: csomagoló osztályokkal Auto-(un)boxing Gyatra aritmetika BigDecimal, BigInteger strictfp, IEEE 754 Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 5 / 30

Típusok Referenciák A vermen csak primitív típusú adatok és referenciák Az összetett adatok mindig dinamikusak Felszabadító utasítás nincs Automatikus szemétgyűjtés Destruktor finalize Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 6 / 30

Típusok Tömbök Referenciák Nem lehet deklarációval létrehozni Minden tömb a heap-en van Speciális osztályok, öröklődés Biztonságos használat length attribútum Futási idejű indexellenőrzés Használat int[] t = new int[100]; for( int i = 0; i<t.length; ++i ){ t[i] = i; } Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 7 / 30

Típusok Szövegek Nincs char* Elsődlegesen a String osztály Pl. idézőjelek Konkatenáció: túlterhelt + Emellett StringBuffer és StringBuilder Ritkán char[] Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 8 / 30

Típusok Felsorolási típusok A legegyszerűbb eset enum Color { RED, GREEN, BLUE, YELLOW } Nem int Speciális osztályok Definiálhatók hozzájuk mezők és műveletek Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 9 / 30

Típusok Hiányosságok Alprogram típus Primitív típusok és referenciák összeférhetetlensége Primitívből és tömbből származtatás hiánya Fixpontos, moduló Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 10 / 30

Utasítások Vezérlési szerkezetek Elágazás: if és switch case Ciklus: for, while és do while Iterálás adatszerkezeten: enhanced for-loop Blokk utasítás Nem strukturált lehetőségek Iterálás tömbön int[] t = new int[100];... int sum = 0; for( int elem: t ){ sum += elem; } Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 11 / 30

Utasítások Strukturált vezérlési szerkezetek if és while esetén: logikai típusú feltétel Többágú elágazás tördelése if( <feltétel-1> ){ <utasítások> } else if( <feltétel-2> ){ <utasítások> } else { <utasítások> } switch esetén diszkrét vagy felsorolási típusú diszkrimináns A minták fordítási idejű konstansok break!!! Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 12 / 30

A switch és a break Imperatív programozás Utasítások switch (billentyű) { case w : y++; break; case z : y--; break; case a : x--; break; case s : x++; break; default : System.out.println("Hiba!"); } Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 13 / 30

Utasítások Nem strukturált vezérlés Címkézhető break és continue return Nincs goto Hatékonyság növelése int i=0, j=0; külső: for (; i<10; ++i) for (j=0; j<10; ++j) if (tömb[i][j] == 0) break külső; Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 14 / 30

Utasítások Deklaráció utasítások Típus-, alprogram- és változódeklarációk Konvenció: azonosítók neve Azonosítók lexikális szabályai Unicode _ és $ Egy deklarációban több változó Inicializáció Módosítószavak A léptetős ciklusnak lehet lokális változója, de a többi utasításnak nem! Konvenció: használjuk a kapcsos zárójeleket, tördelés Típuskifejezésekhez nem deklarálható név Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 15 / 30

Utasítások Kifejezés, mint utasítás Kifejezések értéke figyelmen kívül hagyható Mellékhatás Értékadás(ok) Függvényhívás void metódus Kivételek Sorozás Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 16 / 30

Utasítások Blokkok Egyszerűsített hatóköri/láthatósági szabályok Egymásba ágyazott blokkok lokális változói Elfedés: csak tagok esetében Lokális változók inicializálása Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 17 / 30

Megjegyzések Imperatív programozás Utasítások Egysoros és többsoros Dokumentációs megjegyzés /** és */ között Kódegység elé írható javadoc Tipikusan HTML, de programozható (doclet) Kiegészítő információk (@return, @param, @see stb.) Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 18 / 30

Utasítások Problémák Utasítások és kifejezések keveredése A szintaxis bénasága, túlzott tömörség int sum = 0, i = 1; while( i<10 ); sum += i++; switch utasítás nem intuitív Csellengő else if (a==1) if (b==2) c = 1; else c = 2; Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 19 / 30

Problémák Imperatív programozás Utasítások Utasítások és kifejezések keveredése A szintaxis bénasága, túlzott tömörség int sum = 0, i = 1; while( i<10 ); sum += i++; switch utasítás nem intuitív Csellengő else if (a==1) if (a==1) if (b==2) if (b==2) c = 1; c = 1; else else c = 2; c = 2; Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 19 / 30

Utasítások Problémák Utasítások és kifejezések keveredése A szintaxis bénasága, túlzott tömörség int sum = 0, i = 1; while( i<10 ); sum += i++; switch utasítás nem intuitív Csellengő else if (a==1) if (a==1) if (a==1){ if (b==2) if (b==2) if (b==2) c = 1; c = 1; c = 1; else else } else c = 2; c = 2; c = 2; Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 19 / 30

Kifejezések Kifejezések Felépítés: literál változó operátor metódushívás (függvény) zárójelek tömbindexelés, szelekció Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 20 / 30

Kifejezések Kiértékelési sorrend Teljesen definiált Operátorok precedenciája Operátorok asszociativitása Zárójelezés Argumentumok kiértékelési sorrendje Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 21 / 30

Kifejezések Operátorok Arítás Fixitás Precedencia, asszociativitás Túlterhelt operátorok Operátorokat nem terhelhet túl a programozó Új operátorokat sem definiálhat Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 22 / 30

Kifejezések Java operátorok C-ből megszokottak Aritmetikai, relációs, értékadó, bitmanipuláló Elágazó Értékadások, sorozás, hatékonyság Van instanceof, valamint >>> és >>>= A + operátor jelentései Lusta és mohó logikai operátorok Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 23 / 30

Kifejezések Literálok Egész literálok Lebegőpontos literálok Karakterliterálok Stringliterálok Logikai típusértékek: true, false null class-literál Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 24 / 30

Kifejezések Egész literálok Alapból int típusú Decimális Hexadecimális Oktális Nincs bináris vagy egyéb! long típusú short vagy byte típusú Automatikus szűkítő konverzió Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 25 / 30

Kifejezések Lebegőpontos literálok Alapból double típusú float típusú Van 0.0 és -0.0 Konstansok, pl: Float.POSITIVE_INFINITY, Double.NaN Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 26 / 30

Kifejezések Szöktetés Karakter- és stringliterálokban A \ karakterrel Speciális karakterek Tabulátor, kocsivissza, újsor, lapdobás... Rep-jel Idézőjelek Karakterek Unicode megadása \u000a és \u000d kizárva! ASCII karakterek oktális megadása Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 27 / 30

Kifejezések Konstansok final változók primitív típus referencia Üres konstans Fordítási idejű konstans Feltételes fordítás Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 28 / 30

Procedurális programozás Programegységek Típusdefiníciók Mezők (példány- és osztály-) Metódusok (példány- és osztály-) Típusdefiníciók (példány- és osztály-) Konstruktorok Inicializátor blokkok (példány- és osztály-) Nincsenek globális alprogramok Példány- vagy osztálymetódusok Procedurális programozás imitálása Nincsenek globális változók sem! Csomagok Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 29 / 30

Procedurális programozás Alprogramok Függvény és eljárás összemosása: metódus Visszatérési érték Verem, aktivációs rekord, automatikus változók Paraméterátadás (call-by-value, call-by-sharing) Nem adható formális paraméternek alapértelmezett érték Túlterhelés Inline-osítás Felüldefiniálás, dinamikus kötés Hívási lehetőség: invokevirtual, invokestatic, invokespecial Változó hosszúságú paraméterlista printf Kozsik Tamás (ELTE) Imperatív és procedurális programozás a Javában 2008. 30 / 30