+ All Categories
Home > Documents > Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment...

Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment...

Date post: 29-Jul-2018
Category:
Upload: lyduong
View: 259 times
Download: 1 times
Share this document with a friend
81
Tehnici avansate de programare Curs - Cristian Fr ˘ asinaru [email protected] Facultatea de Informatic ˘ a Universitatea ”Al. I. Cuza” Ias ¸i
Transcript
Page 1: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Tehnici avansate de programareCurs -

Cristian Frasinaru

[email protected]

Facultatea de Informatica

Universitatea ”Al. I. Cuza” Iasi

Page 2: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Platforma Java Micro Edition

Tehnici avansate de programare – p.1/81

Page 3: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Tehnici avansate de programare – p.2/81

Page 4: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Cuprins

Introducere

Arhitectura generala Java ME

Crearea unui MIDlet simplu

Dezvoltarea suitelor de midlet-uri

Interfata grafica cu utilizatorul

Tratarea evenimentelor

Crearea jocurilor (Game API)

Asigurarea persistentei datelor (RMS)

Distributia unei suite de midlet-uri

Tehnici avansate de programare – p.3/81

Page 5: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Introducere

Tehnici avansate de programare – p.4/81

Page 6: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Comunicatii Wireless

Domeniu extrem de vast

Comunicatiile pot fi de naturi diferite:Radio-TeleviziuneTelefonie mobile...

Comunicatiile pot fi:localela distanta

Exista o serie protocoale standard

Complexitate, fragmentare

Tehnici avansate de programare – p.5/81

Page 7: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Ce este Java ME ?

Java ME reprezinta un set de tehnologii si specificatiiconcepute pentru dispozitive mobile cu capabilitatilimitate, cum ar fi pagere, telefoane mobile, sisteme denavigare, PDA-uri, etc.

Java ME aduce conceptul de portabilitate la niveluldispozitivelor mobile, oferind un mediu optimizat, bazatpe Java, de dezvoltare a aplicatiilor pentru acestsegment software.

Tehnici avansate de programare – p.6/81

Page 8: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

JSR + JCP

Specificatiile pentru Java ME (dar si pentru EE, SE) suntcreate sub egida Java Comunity Process (JCP) , primulpas în în dezvoltarea acestora fiind o cerere de tip JavaSpecification Request (JSR) , venita din parteacomunitatii Java. Ulterior, acestea sunt analizate de ungrup de experti si rafinate pâna la forma lor finala.

Specificatiile Java ME sunt referite adeseori sub formanumarului corespunzator JSR, expertii care contribuie lastandardizarea lor fiind firme ca Sun, Nokia, Motorolla,Ericsson, Fujitsu, Siemens, Samsung, Vodafone, FranceTelecom, Orange, etc.

Tehnici avansate de programare – p.7/81

Page 9: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Arhitectura generala Java ME

Tehnici avansate de programare – p.8/81

Page 10: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Platforme java

Tehnici avansate de programare – p.9/81

Page 11: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Configuratii si profile

Java ME are o arhitectura modular a si ierarhic a:

ConfiguratiiSpecificatii ce detalizaa o masina virtuala Java si unAPI restrâns ce sta la baza dezvoltarii de aplicatiipentru o anumita categorie de dispozitive.

ProfileProfilele sunt atasate configuratiilor, adaugând API-ulspecific necesar crearii efective a unei aplicatii.

Pachete optionale

Tehnici avansate de programare – p.10/81

Page 12: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Privire generala

Tehnici avansate de programare – p.11/81

Page 13: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Dezvoltarea de aplicatii wireless

Tehnici avansate de programare – p.12/81

Page 14: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Categorii de aplicatii

Aplicatii locale (independente) - nu necesita surseexterne de date sau comunicatii prin retea (jocuri,programe utilitare: agenda, calculator, etc)

Aplicatii de retea - contin atât componente localecât si la distanta, aflate pe servere Web (client deemail).

Tehnici avansate de programare – p.13/81

Page 15: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Consideratii generale

Crearea unei aplicatii performante Java ME este o "arta"ce trebuie sa tina cont de:

Memoria (volatila sau persistenta) este limitatadrastic

Procesoare lente

Lipsa unui sistem de fisiere clasic

Limitari, eventual severe, ale conectivitatii

Modalitatea de instalare a aplicatiei

...

Tehnici avansate de programare – p.14/81

Page 16: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Diferente fata de Java SE

Nu sunt permise operatii în virgula mobila

Nu mai exista finalizarea obiectelor

Diferente în modul de tratare a exceptiilor

Nu exista suport pentru JNI, introspectie, serializare

Nu exista grupuri de fire de executie, demoni.

Nu pot fi definite class loader-e proprii

Verificarea claselor este realizata diferit (dupacompilare are loc etapa de preverificare)

Tehnici avansate de programare – p.15/81

Page 17: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

MIDlet-uri

Aplicatii create pentru:

Configuratia CLDC (Connected Limited DeviceConfiguration)

Profilul MIDP (Mobile Information Device Profile)

Midlet-urile sint distribuite sub forma unor suite .

fie ofera o serie de functii similare (cum ar fi ocolectie de jocuri), sau

fie lucreaza împreuna, fiind module ale unui sistemmai complex

au acces la aceleasi resurse (imagini, date, etc.)

pot comunica prin setarea/obtinerea unor informatiidintr-o zona comuna de memorie

Tehnici avansate de programare – p.16/81

Page 18: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

MIDlet API

Pachete CLDCjava.lang ⊂ J2SE

java.io ⊂ J2SE

java.util ⊂ J2SE

javax.microedition.io

Pachete MIDPjavax.microedition.midlet

javax.microedition.lcdui

javax.microedition.rms

...

Tehnici avansate de programare – p.17/81

Page 19: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Crearea unui midlet simplu

import javax.microedition.lcdui. * ;import javax.microedition.midlet.MIDlet;

public class Hello extends MIDlet implements CommandListe ner {public void startApp() {

Display display = Display.getDisplay(this);Form mainForm = new Form("Hello");mainForm.append("Hello world!");Command exitCommand = new Command("Exit", Command.EXIT, 0 );mainForm.addCommand(exitCommand);mainForm.setCommandListener(this);display.setCurrent(mainForm);

}public void pauseApp () {}public void destroyApp(boolean unconditional) {}public void commandAction(Command c, Displayable s) {

if (c.getCommandType() == Command.EXIT)notifyDestroyed();

}}

Tehnici avansate de programare – p.18/81

Page 20: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Compilarea si executia

Compilarea presupune:Apelul compilatorului javac din kitul standardJava.Preverificarea claselor rezultate cu utilitarulpreverify

ExecutiaVa fi realizata folosind un emulator . Acesta va afisalista midleturilor disponibile in suita selectata.

Tehnici avansate de programare – p.19/81

Page 21: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Dezvoltarea suitelor de midlet-uri

Tehnici avansate de programare – p.20/81

Page 22: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Modul de lucru

Un midlet este format din unul sau mai multe ecrane(screens) . Acestea pot fi

structurate - au o anumita functionalitate, suntportabile, nu permit accesul direct la acran sau lamecanisme low-level.nestructurate (canvas-uri) - permit controlulecranului la nivel de pixel, tratarea evenimentelorgenerate de apasarea tastelor, etc.

Fiecare ecran are asociata o serie de comenzi(abstract commands) . Acestea permit utilizatoruluinavigarea între ecrane si executia unor actiunispecifice.

Tehnici avansate de programare – p.21/81

Page 23: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Ciclul de viata

Tehnici avansate de programare – p.22/81

Page 24: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Structura unui midlet

public class MyMIDlet extends MIDlet {public MyMIDlet() {

// Crearea de ecrane// Crearea si asocierea de actiuni ecranelor// Stabilirea claselor de tip listener pentru actiuni

}public void startApp() {

// Setarea eranului initial/curent// Pornirea unor fire de executie

}public void pauseApp () {

// Eliberarea temporara a unor resurse// Oprirea unr fire de executie

}public void destroyApp(boolean unconditional) {

// Eliberarea tuturor resurselor// Salvarea starii persistente a aplicatiei

}}

Tehnici avansate de programare – p.23/81

Page 25: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Interfata grafic a

Interfata grafica cu utilizatorul a fost implementata tinândcont de particularitatile fizice ale dispozitivelor mobile.Specificatiile CLDC nu au nici o referire la GUI, ele fiinddefinite în MIDP.Pachetele care ofera suport pentru crearea GUI:

javax.microedition.lcdui

javax.microedition.lcdui.game

Gestiunea ecranului propriu-zis si a celorlaltemecanisme fizice accesibile ale dispozitivului se faceprin intermediul clasei Display , aceasta fiindresponsabila si de gestiunea screen-urilor aplicatiei.

Tehnici avansate de programare – p.24/81

Page 26: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

ClasaDisplayable

Este supeclasa abstracta a ecranelor, definindfunctionalitatea comuna a acestora:

pot avea un titlu

pot avea un ticker (un text ce se deplaseaza în modcontinuu pe ecran)

pot avea zero sau mai multe comenzi

pot avea un CommandListener

Implementarile de baza ale acestei clase sunt:

Screen - ecrane structurate

Canvas - ecrane nestructurate

Tehnici avansate de programare – p.25/81

Page 27: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

ClasaScreen

Este superclasa abstracta a ecranelor structurate,implementarile directe fiind:

Alert - Mesaje de avertizare, erori, etc.

Form - Permite crearea de ecrane compuse din altecomponente, cum ar fi imagini (Image ) sau articolederivate din Item :ChoiceGroup, CustomItem, DateField, Gauge,ImageItem, Spacer, StringItem, TextField

List - Ecran pentru selectarea unei optiuni dintr-omultime prestabilita.

TextBox - Ecran pentru introducerea unui text.

Tehnici avansate de programare – p.26/81

Page 28: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Crearea form-urilor

Articolele unui ecran Form sunt referite prin indexul lor(un numar între 0 si size() - 1 ), gestiunea lor fiindrealizata prin intermediul metodelor: append, insert,set, delete .Pozitionarea articolelor se face pe linii, dupa un algoritmprestabilit. In cazul in care articolele nu incap in ecran,va fi creata automat o bara verticala de derulare.

mainForm.append("Introduceti datele:");mainForm.append(new TextField("Nume", "", 50, TextField .ANY));mainForm.append(new DateField("Data", DateField.DATE) );

Tratarea evenimentelor generate de modificarecontinutului unui articol se face prin implementareainterfetei ItemStateListener .

Tehnici avansate de programare – p.27/81

Page 29: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Interfata ItemStateListener

Metoda interfetei este: itemStateChanged(Item item) .

Form mainForm = new Form("Hello");StringItem s = new StringItem(null, "Hello world");TextField tf = new TextField("Nume", "", 50, TextField.ANY );

...

mainForm.append(s);mainForm.append(tf);

mainForm.setItemStateListener(new ItemStateListener( ) {public void itemStateChanged(Item item) {

s.setText("Hello " + tf.getString());}

});

Tehnici avansate de programare – p.28/81

Page 30: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

ClasaCanvas

Este clasa de baza pentru aplicatii care necesitadesenare la nivel de pixel si tratarea unor evenimentelow-level (→ jocuri !!)

Desenarea se face în metoda paint

Tratarea evenimentelor se face în metode specificecum ar fi: keyPressed, keyRepeated,keyReleased, etc.

Derivata din Canvas , este GameCanvas care oferafacilitati suplimentare pentru dezvoltarea de jocuri.

Tehnici avansate de programare – p.29/81

Page 31: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Definirea comenzilor

Comenzi abstracte - high-level: Command

Etichet a: nume scurt / lung

Tip : BACK, CANCEL, EXIT, HELP, ITEM, OK, SCREEN, STOP

Prioritate : numar întreg; cel mai mic numar - ceamai importanta comanda.

Dispunerea comenzilor pe ecran va tine cont de tipurilesi prioritatile acestora.Adaugare de comenzi pentru un ecran: addCommand .Tratarea evenimentelor generate de actionareacomenzilor: CommandListener .

Tehnici avansate de programare – p.30/81

Page 32: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Interfata CommandListener

Metoda interfetei este:commandAction(Command c, Displayable s) .

public class MyListener implements CommandListener {

public void commandAction(Command c, Displayable s) {if (c.getCommandType() == Command.EXIT)

notifyDestroyed();

if (c.getLabel().equals("Play"))letsPlayTheGame();

...}

Tehnici avansate de programare – p.31/81

Page 33: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Imagini

Imaginile sunt utilizate prin intermediul clasei Image .Formatul admis este PNG (Portable Network Graphics)

Crearea se realizeaza prin metoda: Image.createImage ,continutul imaginii putând fi:

preluat din resursele midletului (imutable)

creat explicit din program (mutable)

Tehnici avansate de programare – p.32/81

Page 34: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Folosirea imaginilor

componente în cadrul form-urilorForm mainForm = new Form("Hello");Image img = Image.createImage("/Taz.png");mainForm.append(img) ; // sauImageItem item = new ImageItem("Poza", img, Item.LAYOUT_C ENTER, "Taz"))mainForm.append(item) ;

desenare în canvas-uripublic void paint(Graphics g) {

Image img = Image.createImage("/Taz.png");g.drawImage(0, 0, HCENTER | VCENTER); }

double-bufferingImage img = Image.createImage(width, height);Graphics gmem = img.getGraphics();gmem.drawLine(0, 0, 10, 10);

Tehnici avansate de programare – p.33/81

Page 35: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Crearea jocurilor de "actiune"

Tehnici avansate de programare – p.34/81

Page 36: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Varianta veche

public void MyGameCanvas extends Canvasimplements Runnable {

public void run() {while (true) {

// Actualizeaza starea joculuirepaint();// Pauza

}}public void paint(Graphics g) {

// Desenare}protected void keyPressed(int keyCode) {

// Tratare apasare taste}

}

Tehnici avansate de programare – p.35/81

Page 37: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Varianta noua

public void MyGameCanvas extends GameCanvasimplements Runnable {

public void run() {Graphics g = getGraphics();while (true) {

// Actualizeaza starea jocului

int keyState = getKeyStates();// Tratare apasare taste

// Desenare

flushGraphics();

// Pauza}

}}

Tehnici avansate de programare – p.36/81

Page 38: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

"Planurile" unui joc

Reprezentarea unui joc de "actiune" la un moment datconsta în suprapunerea unor desene, fiecare aflat într-unanumit plan (layer), unele dintre ele fiind statice iar altelemobile. Stratificarea aplicatiei în acest fel permitemanevrarea mai usoara si independenta a planurilor.Suportul pentru crearea planurilor este oferit de clasele:

LayerTiledLayerSprite

LayerManager

Tehnici avansate de programare – p.37/81

Page 39: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Definirea componentelortile

Tehnici avansate de programare – p.38/81

Page 40: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Crearea fundalului

Tehnici avansate de programare – p.39/81

Page 41: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Definirea "spiridusilor"

Tehnici avansate de programare – p.40/81

Page 42: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Definirea animatiei

Tehnici avansate de programare – p.41/81

Page 43: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Crearea jocului propriu-zis

Tehnici avansate de programare – p.42/81

Page 44: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Asigurarea persistentei datelor

Tehnici avansate de programare – p.43/81

Page 45: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Record Management System

Prin clasele sale, RMS ofera suportul pentru asigurareapersistentei unor informatii între doua executii succesiveale unui midlet.

Memorarea datelor este realizata într-o tabel a depersistent a, formata din articole . Fiecare articol estecompus din:

ID - valoare asignata automat ce identifica în modunic articolele din tabela de persistenta.

continut - un tablou de octeti, lungimea acestuiaputând varia de la un articol la altul.

Tehnici avansate de programare – p.44/81

Page 46: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Tabele de persistenta

javax.microedition.rms.RecordStoreUn midlet poate crea oricate tabele de persistenta,fiecare fiind identificata prin numele sau care trebuie safie unic în cadrul suitei.Fiecare midlet dintr-o suita poate avea acces la tabelelecelorlalte. Aceeassi tabela poate fi utilizata concurent demai multe midleturi, implementarea clasei RecordSetasigurând sincronizarea accesului.Detectarea modificarilor:

Obtinerea numarului de versiune

Setarea unui RecordListener .

Tehnici avansate de programare – p.45/81

Page 47: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Gestiunea tabelelor

Operatiile ce pot fi efectuate: creare / stergere,deschidere / închidere, etc.import javax.microedition.rms. * ;

RecordStore rs = null;try {

boolean createIfNecessary = true;rs = RecordStore.openRecordStore("mydata", createIfNec essary);...rs.closeRecordStore();

}catch( RecordStoreNotFoundException e ){

// tabela nu existacatch( RecordStoreNotOpenException e ){

// tabela nu este deschisa} catch( RecordStoreException e ){

// alta eroare (spatiu insuficient, etc.)}

Tehnici avansate de programare – p.46/81

Page 48: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Gestiunea articolelor

ID (autoincrement) Continut (buffer de octetti)

byte[] data = {0, 1};try {

int id = rs.addRecord( data, 0, data.length );...int numBytes = rs.getRecord(id, data, 0 );rs.deleteRecord(id);

}catch( RecordStoreFullException e ){

// spatiu insuficient} catch( InvalidRecordIDException e ){

// id-ul specificat nu exista} catch( RecordStoreException e ){

// general error}

Tehnici avansate de programare – p.47/81

Page 49: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Scrierea/Citirea tipurilor primitive

ScriereaByteArrayOutputStream baos = new ByteArrayOutputStream( );DataOutputStream out = new DataOutputStream(baos);out.writeUTF("Hello");out.writeInt(123);byte data[] = baos.toByteArray();rs.addRecord( data, 0, data.length );

Citireabyte data[];rs.getRecord(id, data, 0);ByteArrayInputStream bais = new ByteArrayInputStream(da ta);DataInputStream in = new DataInStream(bais);String s = in.readUTF();int n = in.readInt(123);

Tehnici avansate de programare – p.48/81

Page 50: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Enumerarea articolelor

Enumerarea articolelor unei tabele de persistenta:public RecordEnumeration enumerateRecords(

RecordFilter filter,RecordComparator comparator,boolean keepUpdated)

RecordEnumeration - interfata ce descrie unenumerator bidirectional pentru parcurgereaenumerarii.

RecordFilter - interfata pentru filtrarea enumerariiconform unor criterii proprii.

RecordComparator - interfata pentru compararea /sortarea articolelor din enumerare.

Tehnici avansate de programare – p.49/81

Page 51: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Programare de retea folosindMIDP

Tehnici avansate de programare – p.50/81

Page 52: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Generic Connection Framework

GCF defineste fundamentele pentru dezvoltareaaplicatiilor de retea pentru dispozitive mobile, oferindsuport pentru toate tipurile de comunicare fie pe baza depachete, fie pe baza de fluxuri.

Initial, modelul GFC a fost definit în configuratia CLDC(Connected Limited Device Configuration), în pachetuljavax.microedition.io .

Tehnici avansate de programare – p.51/81

Page 53: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Ierarhia claselor si interfetelor

Tehnici avansate de programare – p.52/81

Page 54: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Formatul geneal al unui URL

protocol:adresa;parameteri

protocol - metoda de acces: ftp, http, etc

adresa - numele complet sau IP-ul resursei, portul,utilizator, parola, calea locala, etc.

parameteri - perechi de forma ;nume=valoare.

Exemplehttp://java.sun.com/developerdatagram://address:port#comm:0;baudrate=9600file:/myFile.txt...

Tehnici avansate de programare – p.53/81

Page 55: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Tipuri de conexiuni

btl2cap Bluetooth L2CAPConnection

datagram Datagram DatagramConnection

file File Access FileConnection, InputConnection

http HyperText Transport Protocol HttpConnection

https Secure HTTP HttpsConnection

comm Serial I/O CommConnection

sms Short Messaging Service MessageConnectionmms Multimedia Messaging Servicecbs Cell Broadcast SMS

apdu Security Element APDUConnection,jcrmi JavaCardRMIConnection

socket Socket SocketConnection,serversocket ServerSocketConnection

datagram UDP Datagram UDPDatagramConnection

Tehnici avansate de programare – p.54/81

Page 56: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Crearea unei conexiuni

Se realizeaza cu clasa Connector .Aceasta este o clasa de tip Factory, în sensul ca vainstantia un obiect functie de schema (protocolul)specificat în URL.

Metoda Connector.openString url = "socket://www.j2medeveloper.com:80";c = (SocketConnection)Connector.open(url);s = c.openInputStream();

Metode de crearea directa a unor fluxuri specificeString url = "socket://www.j2medeveloper.com:80";s = (InputStream)Connector.openInputStream(url);

Tehnici avansate de programare – p.55/81

Page 57: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Conexiuni suportate de MIDP

Tehnici avansate de programare – p.56/81

Page 58: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

HttpConnection

HTTP este un protocol bazat pe paradigmacerere-raspuns, în care parametrii cererii trebuie trimisiînaintea cererii propriu-zise. Conexiunea poate exista înuna din starile:

Setup - In aceasta stare pot fi apelate doar metodelesetRequestMethod si setRequestProperty

Connected - Mtode cum ar fi openInputStream,openDataInputStream determina tranzitia dinstarea Setup în starea Connected

Closed

Tehnici avansate de programare – p.57/81

Page 59: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Citirea unui fisier

String url = "http://www.infoiasi.ro/˜acf/hello.txt"StreamConnection c = null;InputStream s = null;StringBuffer b = new StringBuffer();try {

c = (StreamConnection)Connector.open(url);s = c.openInputStream();int ch;while((ch = s.read()) != -1) {

b.append((char) ch);}System.out.println(b.toString());

} finally {if(s != null)

s.close();if(c != null)

c.close();}

Tehnici avansate de programare – p.58/81

Page 60: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Programare low-level

Incepând cu MIDP 2.0 a fost introdus suport pentruprogramare de retea low-level, folosind socket-uri sidatagrame. Interfetele adaugate înjavax.microedition.io sunt:

pentru protoculul socket : SocketConnection ,ServerSocketConnectionConnector.open("socket://host:port") -> SocketConnect ionConnector.open("socket://:port") -> ServerSocketConne ction

pentru protoculul datagram :UDPDatagramConnection

Connector.open("datagram://host:port") -> UDPDatagram Connection

Tehnici avansate de programare – p.59/81

Page 61: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Interfata ServerSocketConnection

...ServerSocketConnection server =

(ServerSocketConnection) Connector.open("socket://:2 500");SocketConnection client =

(SocketConnection) server.acceptAndOpen();

client.setSocketOption(DELAY, 0);client.setSocketOption(KEEPALIVE, 0);

DataInputStream dis = client.openDataInputStream();DataOutputStream dos = client.openDataOutputStream();

String result = is.readUTF();os.writeUTF(...);

is.close();os.close();client.close();server.close();...

Tehnici avansate de programare – p.60/81

Page 62: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Interfata SocketConnection

...SocketConnection client =

(SocketConnection) Connector.open("socket://" + hostna me + ":" + port);

client.setSocketOption(DELAY, 0);client.setSocketOption(KEEPALIVE, 0);

InputStream is = client.openInputStream();OutputStream os = client.openOutputStream();

os.write("some string".getBytes());int c = 0;while((c = is.read()) != -1) {

// do something with the response}

is.close();os.close();client.close();...

Tehnici avansate de programare – p.61/81

Page 63: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Wireless Messaging API (WMA)

Tehnici avansate de programare – p.62/81

Page 64: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Ce este WMA ?

WMA ofera suport pentru trimiterea / receptionarea demesaje text sau binare , cum ar fi SMS-uri (ShortMessage Service).

WMA este un pachet optional(javax.wireless.messaging ), bazat pe GenericConnection Framework (GCF) ce extinde profile createpe configuratia CLDC.

Tehnici avansate de programare – p.63/81

Page 65: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Componentele WMA

Tehnici avansate de programare – p.64/81

Page 66: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

WMA API

Message getAddress(), getTimestamp(), setAddress()

BinaryMessage getPayloadData(), setPayloadData()

TextMessage getPayloadText(), setPayloadText()

MessageConnection newMessage(), receive(), send(),

setMessageListener(), numberOfSegments()

MessageListener notifyIncomingMessage()

Tehnici avansate de programare – p.65/81

Page 67: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Crearea unei conexiuni

Modul client - doar pentru a trimite mesaje(MessageConnection)Connector.open("sms://+512123456 7:5000");

Modul server - pentru a trimite / receptiona mesaje(MessageConnection)Connector.open("sms://:5000");

Tipuri de protocoale

sms

sms

cbs

Tehnici avansate de programare – p.66/81

Page 68: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Trimiterea unui mesaj text

public void sendTextMessage(MessageConnection mc,String msg,String url) {

try {TextMessage tmsg =

(TextMessage)mc.newMessage(MessageConnection.TEXT_M ESSAGE);tmsg.setAddress(url);tmsg.setPayloadText(msg);mc.send(tmsg);

}catch(Exception e) {

System.out.println("sendTextMessage " + e);}

}

Tehnici avansate de programare – p.67/81

Page 69: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Trimiterea unui mesaj binar

public void sendBinaryMessage(MessageConnection mc,byte[] msg,String url) {

try {BinaryMessage bmsg =

(BinaryMessage)mc.newMessage(MessageConnection.BINA RY_MESSAGE);bmsg.setAddress(url);bmsg.setPayloadData(msg);mc.send(bmsg);

}catch(Exception e) {

System.out.println("sendBinaryMessage " + e);}

}

Tehnici avansate de programare – p.68/81

Page 70: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Receptionarea mesajelor

Implementarea interfetei MessageListenerpublic class WMAMIDlet extends MIDlet implements MessageL istener {

...public void notifyIncomingMessage(MessageConnection co nn) {

// Procesare mesaj}

}

Inregistrarea ascultatoruluipublic void startApp() {

...MessageConnection mc = (MessageConnection)Connector.op en("sms://:mc.setMessageListener(this);...

}

Tehnici avansate de programare – p.69/81

Page 71: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Procesarea mesajelor

Este realizata uzual într-un fir de executie.public void run() {

...Message msg = mc.receive();

if (msg instanceof TextMessage) {TextMessage tmsg = (TextMessage)msg;String data = tmsg.getPayloadText();

}if (msg instanceof BinaryMessage) {

BinaryMessage bmsg = (BinaryMessage)msg;byte[] data = bmsg.getPayloadData();

}}

Tehnici avansate de programare – p.70/81

Page 72: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Segmentarea si reasamblarea

Segmentarea si reasamblarea (SAR) este ocaracteristica a unor protocoale de transport carepermite divizarea unui mesaj mare într-o secventaordonata de mesaje de dimensiuni mai mici (unitati detransmisie). Exemplu: 1 segment SMS - 160 caractere.Pot exista limitari asupra dimensiunii unui mesaj sau anumarului de segmente. Standard: 3 segemente.

MessageConnection mc = ... ;TextMessage tmsg = ... ;int segcount = mc.numberOfSegments(tmsg);if (segcount == 0) {

// alert the user}

Tehnici avansate de programare – p.71/81

Page 73: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Bluetooth

Bluetooth reprezinta o tehnologie wireless pentrudistante scurte, cu costuri reduse, pentru crearea deretele personale (PAN - Personal Area Network). O astfelde retea (piconet) este creata dinamic într-un spatiurestrâns în care devine automat posibila comunicareaîntre diferite dispozitive mobile (telefoane, PDA-uri) - unuldin ele va fi master, celelalte (cel mult 7), fiind de tipslave. De asemenea, Bluetooth permite conectarea maimultor piconet-uri.Java APIs for Bluetooth Wireless Technology (JABWT)permite dezvoltarea de aplicatii Java bazate petehnologia Bluetooth.

Tehnici avansate de programare – p.72/81

Page 74: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

JXTA

JXTA reprezinta un set de protocoale de reteaopen-source peer-to-peer (P2P) care permitcomunicarea între orice tipuri de dispozitive conectate înretea: statii PC, servere, telefoane, PDA-uri, etc.JXTA poate fi utilizat din orice limbaj, sistem de operare,dispozitiv fizic sau protocol de transport.Comunicarea este realizata prin mesaje XML.JXME (JXTA - J2ME) reprezinta setul de protocoaleJXTA destinat J2ME pentru configuratia CLDC si profilulMIDP.

Tehnici avansate de programare – p.73/81

Page 75: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Push Registry

Tehnici avansate de programare – p.74/81

Page 76: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Conceptul de "Push"

Conceptul de "Push" se refera la mecanismul sauabilitatea unei aplicatii de a primi si procesa asincroninformatii, având avantajul de a reduce substantialutilizarea resurselor dispozitivului pe care ruleazaprogramul respectiv. Folosind registri de tip "Push" esteposibila activarea midlet-urilor :

pe baza unui timer

prin retea

Utilitatea: aplicatii pentru e-mail, agenda, etc.

Tehnici avansate de programare – p.75/81

Page 77: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Elementele Push Registry

Tehnici avansate de programare – p.76/81

Page 78: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Activarea midlet-urilor

Tehnici avansate de programare – p.77/81

Page 79: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Inregistrarea

Static a - în fisierul descriptor (.jad) al suitei demidleturi pot fi înregistrate doar activari prin retea.MIDlet-Push-<n>: <ConnectionURL>, <MIDletClassName>,

<AllowedSender>MIDlet-Push-1: socket://:79, com.sun.example.SampleCh at, *MIDlet-Push-2: datagram://:50000, com.sun.example.Sam pleChat, *

Dinamic a - folosind Push Registry API pot fiînregistrate la momentul executiei (runtime) atâtactivari prin retea cât si pe baza de timer.

PushRegistry.registerAlarm

PushRegistry.registerConnection

Tehnici avansate de programare – p.78/81

Page 80: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Activarea pe baza de timer

private void scheduleMIDlet(long deltatime)throws ClassNotFoundException,

ConnectionNotFoundException,SecurityException {

String midlet = this.getClass().getName();Date alarm = new Date();long t = PushRegistry.registerAlarm(midlet, alarm.getTi me() + deltatime);

}...public void destroyApp(boolean uc) throws

MIDletStateChangeException {// Eliberare resurse...// Inregistrarea activariischeduleMIDlet(defaultDeltaTime);display = null;

}

Tehnici avansate de programare – p.79/81

Page 81: Tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment software. Tehnici avansate de ... Pachete optionale Tehnici avansate de programare

Activarea prin retea

...String midletClassName = this.getClass().getName();String url = "socket://:5000";String filter = " * ";try {

ServerSocketConnection ssc =(ServerSocketConnection)Connector.open(url);

PushRegistry.registerConnection(url, midletClassName , filter);SocketConnection sc =

(SocketConnection)ssc.acceptAndOpen();InputStream is = sc.openInputStream();...

}catch(SecurityException e) { ... }catch(ClassNotFoundException e) { ... }catch(IOException e) { ... }...

Tehnici avansate de programare – p.80/81


Recommended