Programare Orientata spre Obiecte -...

18
Programare Orientata spre Obiecte (Object-Oriented Programming) a.k.a. Programare Obiect-Orientata 2011 - 2012 UPB - Facultatea ETTI - Curs POO - an II - seria E Titular curs: Eduard-Cristian Popovici Suport curs: http://discipline.elcom.pub.ro/POO-Java/ UPB - ETTI - Curs POO - an II - seria E 09.12.2011 1

Transcript of Programare Orientata spre Obiecte -...

Page 1: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Programare Orientata spre Obiecte

(Object-Oriented Programming)

a.k.a. Programare Obiect-Orientata

2011 - 2012

UPB - Facultatea ETTI - Curs POO - an II - seria E

Titular curs: Eduard-Cristian Popovici

Suport curs: http://discipline.elcom.pub.ro/POO-Java/

UPB - ETTI - Curs POO - an II - seria E 09.12.2011 1

Page 2: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

3. Programarea la nivel socket cu Java

3.1. Clase pentru fluxuri de intrare-iesire (IO)

Structura cursului

UPB - ETTI - Curs POO - an II - seria E 2

Page 3: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri IO

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 3

Programele pot avea nevoie de a:

- prelua informatii de la surse externe

- trimite informatii catre destinatii externe

Sursa / destinatia poate fi:

fisier pe disc

retea (socket)

memorie (program)

dispozitiv IO (ecran, tastatura)

Page 4: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 4

Program

consumator Sursa

informatie

Flux (FIFO) citire

Pentru preluarea informatiilor programul

- deschide un flux de intrare de la o sursa de informatii si

- citeste informatiile secvential

Clase pentru fluxuri IO

Page 5: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 5

Program

producator Destinatie

informatie

Flux (FIFO) scriere

Pentru trimiterea informatiilor programul

- deschide un flux de iesire catre o destinatie a informatiilor si

- scrie informatiile secvential

Clase pentru fluxuri IO

Page 6: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 6

In functie de tipul de date transferate, clasele din pachetul java.io se impart in

doua categorii:

- fluxuri de caractere (date reprezentate in UNICODE pe 16b), avand ca

radacini ale arborilor de clase derivate superclasele abstracte:

- Reader (de intrare) si

- Writer (de iesire)

- fluxuri de octeti (date reprezentate pe 8b), avand ca radacini ale arborilor de clase derivate superclasele abstracte:

- InputStream (de intrare) si

- OutputStream (de iesire)

Clase pentru fluxuri IO

Page 7: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 7

Clase pentru fluxuri IO

Fluxuri de octeti

Page 8: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 8

Clase pentru fluxuri IO

Fluxuri de caractere

Page 9: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 9

In functie de specializarea pe care o implementeaza, subclasele claselor

abstracte se impart in alte doua categorii:

- terminale (data sink), care nu au ca sursa / destinatie alte fluxuri, ci:

- fisierele

- memoria (tablourile)

- reteaua (socketurile)

- sirurile de caractere (String)

- alte programe (prin conducte - pipes)

- de prelucrare (processing), care au ca sursa / destinatie alte fluxuri, si au

ca rol prelucrarea informatiilor:

- buffer-are (stocare temporara)

- filtrare de diferite tipuri (conversie, contorizare, etc.)

- tiparire

Clase pentru fluxuri IO

Page 10: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 10

Clase pentru

fluxuri IO

Page 11: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 11

Tipuri de fluxuri terminale - NU au ca sursa / destinatie alte fluxuri

Clase pentru fluxuri IO

Tip de

Terminal Utilizare

Fluxuri

de caractere

Fluxuri

de octeti

Memorie

Accesul secvential la

tablouri

CharArrayReader ByteArrayInputStream

CharArrayWriter ByteArrayOutputStream

Accesul secvential la

siruri de caractere

StringReader StringBufferInputStream

StringWriter StringBufferOutputStream

Canal /

conducta

(pipe)

Conducte

intre programe

PipedReader PipedInputStream

PipedWriter PipedOutputStream

Fisier Accesul

la fisiere

FileReader

FileWriter

FileInputStream

FileOutputStream

Page 12: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 12

Fluxuri terminale - NU au ca sursa / destinatie alte fluxuri

Clase pentru fluxuri IO

Page 13: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Program de copiere a fisierelor folosind fluxuri de octeti

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 13

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class CopyBytes {

public static void main(String[] args) throws IOException {

FileInputStream in = null;

FileOutputStream out = null;

try {

in = new FileInputStream(“in.txt");

out = new FileOutputStream("out.txt");

int c;

while ((c = in.read()) != -1) {

out.write(c);

}

} finally {

if (in != null) { in.close(); }

if (out != null) { out.close(); }

}

}

}

Page 14: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 14

Tipuri de fluxuri de prelucrare - AU ca sursa / destinatie alte fluxuri

Clase pentru fluxuri IO

Tip de

Prelucrare Utilizare

Fluxuri de

Caractere

Fluxuri de

octeti

Buffer-are Stocare

temporară

BufferedReader BufferedInputStream

BufferedWriter BufferedOutputStream

Filtrare Prelucrare FilterReader FilterInputStream

FilterWriter FilterOutpuStream

Conversie

octet/caracter

Bridge

byte-char

InputStreamReader

OutputStreamWriter

Concatenare

Prelucrare

SequenceInputStream

Serializarea

obiectelor

ObjectInputStream

ObjectOutputStream

Conversia

datelor

Acces la tip date primitiv

Java

DataInputStream

DataOutputStream

Numararea Numarare linii LineNumberReader LineNumberInputStream

Imprimare Tiparire PrintWriter PrintStream

Page 15: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Fluxuri de date formatate

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 15

Page 16: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Fluxuri de date formatate

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 16

Citirea unui nume de la tastatura folosind inlantuirea (cascada),

DataInputStream, BufferedInputStream:

DataInputStream in = new

DataInputStream(new BufferedInputStream(System.in));

System.out.println(“Introduceti numele: ”);

String nume = in.readLine();

Afisarea argumentelor programului curent folosind un DataOutputStream in

cascada cu System.out

DataOutputStream dos = new DataOutputStream (System.out);

dos.writeBytes(“Argumentele programului: \n”);

for (int i=0; i<args.length; i++) {

dos.writeBytes(args[i] + “ ”);

}

dos.writeChar(„\n‟);

dos.flush();

Page 17: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Serializarea obiectelor – fluxuri de obiecte

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 17

Page 18: Programare Orientata spre Obiecte - discipline.elcom.pub.rodiscipline.elcom.pub.ro/POO-Java/Curs_POO_2011_31_v01.pdf · Programarea la nivel socket cu Java ... - sirurile de caractere

Cascada de fluxuri – inlantuirea fluxurilor

Clase pentru fluxuri de intrare-iesire (IO)

UPB - ETTI - Curs POO - an II - seria E 18

Citirea de la tastatura: pentru eficienta maxima, este recomandata inlantuirea

(plasarea in cascada), astfel:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

Citirea unui nume de la tastatura:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.println(“Introduceti numele: ”);

String nume = in.readLine();