You are on page 1of 8

Java és az Internet Kliens programozás

zA Java csak egy újabb nyelv? z Kezdetben minden Client programming


z Több annál, mert a World Wide Web interaktivitás a szerver oldalán volt:
programozására (is) ad megoldást – statikus HTML, CGI – Common Gateway Interface
(bonyolult, lassú)
z A Web elemei programozási szempontból:
z Kliens programozása a megoldás:
– Kliens/szerver elv
– Amit csak lehet, ő hajtson végre
– Szerver (server): ahol az adat (és program) van
z Hasonló a hagyományos programozáshoz, csak egy
– Kliens (client): aki eléri, feldolgozza (vagy csak
másik platformra:
megjeleníti)
– A Web böngészőt egy korlátozott operációs rendszernek
– Java: globálisan oldja meg a probléma minden lehet tekinteni
részét egységesen!
z Plug-in használata (böngésző bővítése)
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 36 2002. 03. 04. 37
© Ferenc Rudolf © Ferenc Rudolf

Kliens programozás (folyt.) Kliens programozás (folyt.)


z Szkript nyelvek Scripting languages z Szkriptnyelvek a problémák 80%-t megoldják
– HTML-ben van benne a forráskód z A maradék 20%? Napjainkban a legnépszerűbb
(nem lehet titkos!) a Java
– Speciális problémákra speciális nyelvek z Kliens programozáshoz: applet
– JavaScript (semmi köze a Java-hoz), VBScript, – Csak böngészőn belül fut
Tcl/Tk, … – Minden böngészőn működik ahol van Java
– A böngészők támogatják a JavaScript-et alapban, interpreter (értelmező)
de némelyikhez plug-in kell – Nem a forráskód van értelmezve, hanem a
lefordított kód kerül futtatásra
– JAR: tömörített formátum
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 38 2002. 03. 04. 39
© Ferenc Rudolf © Ferenc Rudolf
Kliens programozás (folyt.) Kliens programozás (folyt.)
z Egyéb megoldás: ActiveX z Intranet programozás:
– Speciális komponensként tölthető le és futtatható – Lokális hálózaton (cégen) belül
– Nyelv-független (tetszőleges forráskódból fordítható) – Nagyobb biztonság érhető el (hibák könnyebben
– Régi kód is újrafelhasználható felderíthetők)
z Biztonsági kérdések: – Lehet speciálisabb a program (pl. csak Windows)
– Program-letöltés vírusveszéllyel jár! z Szerver programozás:
– Korlátozzák az eléréseket (pl. Szkript, applet nem írhat – Lehet egyszerű: fájl kérés
lemezre) – Lehet bonyolult: adatbázis lekérés + HTML formázás
– ActiveX veszélyesebb! – Hagyományosan Perl-lel, CGI-vel valósítják meg
– Megoldás: digitális aláírás használata, publikus kulcsú – Java-ban: servlet, JSP
kódolással aláírt applet (signed applet)
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 40 2002. 03. 04. 41
© Ferenc Rudolf © Ferenc Rudolf

Java alkalmazások Miért ennyire sikeres?


z Eddig applet-ként láttuk Applications z Fő célkitűzés: Produktivitás
z Nem csak erre alkalmas: Önálló nyelvként is kiváló z Alapoktól indulva lett megtervezve, az eddigi
(tetszőleges problémára) programozási nyelvek tapasztalatait felhasználva
z Előnyei z OOP
– Portabilitás z Jó osztálykönyvtárak (library)
– Önálló alkalmazás írható (nem kell hozzá böngésző) z Hibakezelés (kivételek)
– Gyorsan írhatók megbízható, robusztus programok
z Nagy rendszerek írására is alkalmas
z Hátrányai:
z Könnyű elsajátítani egy olyan szinten amivel már
– Generikus típusok nincsenek
megbízható program írható
– Hatékonyság hiányzik (több oka is van)
– C++ nehezebb és ezért kevesebb a jó C++ programozó
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 42 2002. 03. 04. 43
© Ferenc Rudolf © Ferenc Rudolf
Java vagy C++?
z Régebben állították, hogy a Java leváltja majd a C++-t
z Már nem így van
z A két nyelv más-más területeken előnyös
z Ha Web programozás: Java Minden objektum…
z Ha új nyelvet kell megtanulni, Java könnyebb
z Hajlamos a programozókat „lustaságra” késztetni
z Első interpretált Java 20-50-szer lassabb volt mint a
C/C++! Mára már jobb a helyzet, de drámai áttörés
nem történt
– JIT – Just in time
– Sun hotspot
– Natív fordítók
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 44 2002. 03. 04. 45
© Ferenc Rudolf © Ferenc Rudolf

Bevezetés Objektum referenciák


Reference
zA Java nyelv feltételezi, hogy objektum z Adatok (objektumok) manipulálása:
orientáltan fognak programozni benne – Direkt (pl. C-ben egy változó)
z A programozónak objektum orientáltan kell – Indirekt (pl. C/C++-ban pointer; C++ és Java-ban
gondolkodnia referencia)
z Ebben a fejezetben egy Java program alapvető z Java-ban leegyszerűsítették: Minden objektum,
komponenseit tekintjük át, és látni fogjuk, hogy és mindig referenciával hivatkozunk rájuk
minden objektum, még maga a Java program is! (kivéve a primitív típusokat)
z Pl. televízió (objektum) és távirányító
(referencia)
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 46 2002. 03. 04. 47
© Ferenc Rudolf © Ferenc Rudolf
Primitív típusok Primitive types Primitív típusok (folyt.)
z A primitív típusok (hasonlóan a C/C++-hoz) a stack-en z boolean értéke: true vagy false
keletkeznek és direkt elérésűek (nem referencia által) z Wrapper: objektumba csomagolja a primitív típust és a
z Primitív típusok (fix bitszélesség): heap-en tárolja
Prim. Típ. Méret Min Max Wrapper char c = 'x';
boolean – – – Boolean Character C = new Character('x');
char 16 bit Unicode 0 Unicode 216-1 Character
byte 8 bit -128 +127 Byte z BigInteger: Akármekkora egész szám
short 16 bit -215 +215-1 Short z BigDecimal: Akármekkora fix pontos szám
int 32 bit -231 +231-1 Integer
long 64 bit -263 +263-1 Long z Tömbök
float 32 bit IEEE754 IEEE754 Float – Referenciákat tárol ill. primitív típusnál értékeket
double 64 bit IEEE754 IEEE754 Double – Automatikusan inicializálódnak (null vagy 0)
void – – – Void
– Indexhatár ellenőrzés van futáskor (biztonságos, de lassabb)
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 48 2002. 03. 04. 49
© Ferenc Rudolf © Ferenc Rudolf

Új típusok létrehozása Mezők Fields


z Új, egy osztályba tartozó objektumokhoz típus z Osztály mezője (adattagja) lehet:
hozzárendelése: class kulcsszóval, pl. – Másik osztály típusú (referenciát tárol), létre kell
hozni new-val (inicializálás)
class ANewType { /* az osztály törzse */ }
// ... – Primitív típusú (értéket tárol, inicializálódik)
ANewType a = new ANewType();
class DataOnly { DataOnly d = new DataOnly();
z Önmagában nem sok mindenre jó, csak létre int i; // ...

lehet hozni, de nem tud fogadni semmilyen


float f; d.i = 47;
boolean b; d.f = 1.1f;

üzenetet, nem tárol semmi hasznosat…


} d.b = false;

z Személyre kell „szabni”… z Azadatok elérése: ” . ” operátor


z Önmagában csak adattárolásra használható…
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 50 2002. 03. 04. 51
© Ferenc Rudolf © Ferenc Rudolf
Metódusok Methods Osztályok használata
z Funkcionalitást biztosít az objektumoknak, z Egy fájlon belül
meghatározza, hogy milyen üzeneteket fogadhat – Egyszerűen használni kell, az sem baj, ha csak
z Részei: név, paraméterek, visszatérési típus, törzs később lesz definiálva!
returnType methodName( /* paraméter lista */ ) {
/* metódus törzs */
z Külső osztályok (pl. Java osztálykönyvtárak)
}
– import kulcsszóval behoz egy package-t
z Csak osztályoknak lehetnek metódusai – Pl. használni szeretnék tömböt:
z Metódus hívás = class MethodDemo {
int f(boolean b) {/*…*/} import java.util.ArrayList;
üzenet küldése az }
– Pl. használni szeretnék mindent az util-ból
objektumnak MethodDemo m = new MethodDemo()
Pl. // ...
int i = m.f(true);
import java.util.*;

Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák


2002. 03. 04. 52 2002. 03. 04. 53
© Ferenc Rudolf © Ferenc Rudolf

Az első Java program Fordítás és futtatás


import java.util.*;
z java.util kell z Kell egy „Java programming environment”
public class HelloDate {
a Date-hez public static void main(String[] args) {
z Feltételezzük az ingyenes Sun JDK-t
System.out.println("Hello, it’s: ");
z java.lang System.out.println(new Date());
(java.sun.com)
implicit }

z Fordítás: forrás (.java)  bytecode (.class)


}

z java.lang.System.out
egy statikus PrintStream objektum javac HelloDate.java

z Ha önálló programot írunk Java-ban, akkor z Futtatás:


– az adott fájlban kell lennie egy osztálynak, aminek java HelloDate

ugyanaz a neve, mint a fájlnak és z Szokás makefile-okat használni


– ez az osztály kell, hogy tartalmazzon egy statikus
main metódust a fenti alakban
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 54 2002. 03. 04. 55
© Ferenc Rudolf © Ferenc Rudolf
Megjegyzések Comments
Dokumentáció
z C-szerű: z Egy Java forráshoz hozzátartozik annak
/* Ez egy dokumentációja speciális megjegyzések formájában:
Több soros /** …*/
megjegyzés */
 javadoc: program, ami összegyűjti ezeket a
z Egy soros: megjegyzéseket és készít egy HTML dokumentumot
// Ez egy megjegyzés a sor végéig
z Pl. /**
* Megjegyzés a soron következő osztály/metódus/mező-höz
*/
class A...

z HTML-t is be lehet ágyazni, ezeket a javadoc


beágyazza

Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák


2002. 03. 04. 56 2002. 03. 04. 57
© Ferenc Rudolf © Ferenc Rudolf

Dokumentáció (folyt.) Kódolási stílus


z Tag-ek: z Nem hivatalos Java standard
– @see: más osztályokra hivatkozás – linket szúr be z Osztály nevek:
– @version: verzió – Nagy kezdőbetűvel kezdődnek
– @author: szerző – Ha összetett szó, akkor nincs elválasztó karakter, hanem
minden szó nagy betűvel kezdődjön
– @param: metódus paraméter szerepe
– Pl. AGoodClassName
– @return: metódus visszatérési értékének leírása
– @throws: metódus milyen kivételeket dobhat
z Metódus-, mező nevek:
– Ua., mint az osztály nevek, csak kisbetűvel kezdődnek
– Pl. aGoodMemberName

z {} zárójelezés mint a fóliákon 

Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák


2002. 03. 04. 58 2002. 03. 04. 59
© Ferenc Rudolf © Ferenc Rudolf
Operátorok
z Értékadás: =
– Primitív típusoknál értékmásolás
– Objektum referenciáknál csak referenciamásolás!
(„igazi” objektum másolás: clone() metódussal)
Program futás vezérlés z Matematikai: + - * / %
z Összevont: += -= *= /= %=
z Egyoperandusú: + - ++ --
z Relációk: == != < > <= >=
– Primitív típusoknál érték összehasonlítás
– Objektum referenciáknál csak referencia összehasonlítás!
(„igazi” objektum összehasonlítás: equals() metódussal)

Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák


2002. 03. 04. 60 2002. 03. 04. 61
© Ferenc Rudolf © Ferenc Rudolf

Operátorok (folyt.) Operátorok (folyt.)


z Logikai: && || ! z Háromoperandusú if-else:
boolean-exp ? val0 : val1
– C/C++-szal ellentétben csak boolean értékekre
használható z Vessző: ,
– Összetett kifejezés csak addig értékelődik ki, amíg – Csak for ciklusban használható
ki nem derül egyértelműen az értéke z Típuskonverzió: (type)value
z Bitműveletek: & | ^ (XOR) ~ (NOT) – Primitív típusok között használható korlátok nélkül
z Értékadással összevont: &= |= ^= (kivéve a boolean-t)
z Biteltolás: << >> >>> (unsigned) – Osztályok között csak egy öröklődési fán belül
engdélyezett
– Az eredmény int vagy long típusú
z Nincs sizeof()!
z Értékadással összevont: <<= >>= >>>=
Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák
2002. 03. 04. 62 2002. 03. 04. 63
© Ferenc Rudolf © Ferenc Rudolf
Precedencia Vezérlési szerkezetek
z Precedencia szabály: zA Java támogat minden C vezérlési szerkezetet,
Operátor típusa Operátorok kivéve a goto-t ☺
Unáris (egyoperandusú) + - ++ -- z Szelekciós vezérlés: if (boolean-expression)
Aritmetikai (és eltolás) * / % + - << >> >>> statement
else
Relációs < > <= >= == != statement

Logikai (és bitműveletek) && || & | ^ ~


Feltételes (háromoperandusú) A > B ? X : Y z Visszatérés: return value;

Értékadás = (és összetettek pl. +=) z Kezdőfeltételes while (boolean-expression)

ismétléses vezérlés:
statement

Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák


2002. 03. 04. 64 2002. 03. 04. 65
© Ferenc Rudolf © Ferenc Rudolf

Vezérlési szerkezetek (folyt.) Vezérlési szerkezetek (folyt.)


z Végfeltételes do
z Esetkiválasztásos szelekciós vezérlés:
ismétléses vezérlés:
statement
while (boolean-expression); switch (integral-selector) {
z Számlálásos ismétléses vezérlés: case integral-value1: statement; break;
case integral-value2: statement; break;
for (initialization; boolean-expression; step) case integral-value3: statement; break;
statement // ...
default: statement;
 break [label]: megszakítja az aktuális (vagy a }

label-el cimkézett) ismétlést és a szerkezetet követő


utasítással folytatja
 continue [label]: megszakítja az aktuális (vagy a
label-el cimkézett) ismétlést és a következővel
folytatja

Rendszerfejlesztés előadás fóliák Rendszerfejlesztés előadás fóliák


2002. 03. 04. 66 2002. 03. 04. 67
© Ferenc Rudolf © Ferenc Rudolf

You might also like