Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Recapitulare p.o.o.

java


RECAPITULARE P.O.O.

Tipuri de date primitive

• aritmetice



– intregi: byte (1 octet), short (2), int (4), long (8)

– reale: float (4 octeti), double (8)

• caracter: char (2 octeti)

• logic: boolean (true si false)

Controlul executiei

• Instructiuni de decizie: if-else, switch-case

• Instructiuni de salt: for, while, do-while

• Instructiuni pentru tratarea exceptiilor: try-catch-finally, throw

• Alte instructiuni: break, continue, return, label

Folosirea argumentelor de la linia de comanda

Formatul general pentru lansarea unei aplicatii care primeste argumente de la linia de comanda:

java NumeAplicatie [arg0 arg1 . . . argn]

Argumentele implicit sunt de tip String, deci uneori pot necesita conversii in alte tipuri.

Formatul general al unei clase

[modificatori clasa]class NumeClasa

[extends NumeSuperclasa]

[implements Interfata1 [, Interfata2 ]]

a) Modificatori de clasa:

• public: O clasa declarata cu public poate fi folosita din orice alta clasa, indiferent de pachetul in care se gaseste.

• abstract : Declara o clasa abstracta (sablon). O clasa abstracta nu poate fi instantiata, fiind folosita doar pentru a crea un model comun pentru o serie de subclase.

• final : Declara ca respectiva clasa nu poate avea subclase.

Implicit, o clasa poate fi folosita doar de clasele aflate in acelasi pachet (librarie) cu clasa respectiva (daca nu se specifica un anume pachet, toate clasele din directorul curent sunt considerate a fi in acelasi pachet).

b) Extinderea claselor (extends): Java permite doar mostenirea simpla, ceea ce inseamna ca o clasa poate avea un singur parinte (superclasa). O clasa poate avea oricati mostenitori (subclase).

c) Implementarea interfetelor (implements)

d) Corpul clasei

d.1) Constructori:

[modificatori construc 727i84h tor] NumeClasa([argumente])

Constructorii sunt apelati la instantierea unui obiect.

Orice clasa are un constructor implicit vid.

Modificatori construc 727i84h tor:

• public: In orice alta clasa se pot crea instante ale clasei respective.

• protected: Doar in subclase pot fi create obiecte de tipul clasei respective.

• private: In nici o alta clasa nu se pot instantia obiecte ale acestei clase. O astfel de clasa poate contine metode publice care sa fie responsabile cu crearea obiectelor.

• Implicit: Doar in clasele din acelasi pachet se pot crea instante ale clasei respective.

d.2) Atribute:

[modificatori atribut] Tip numeAtribut [ = valInitiala ];

Modificatori de acces: la fel ca si la constructor

Alti modificatori:

• static: Indica faptul ca o variabila este variabila de clasa si nu de instanta.

Pentru atributele statice, sistemul aloca o singura zona de memorie la care au acces toate instantele clasei respective, ceea ce inseamna ca daca un obiect modifica valoarea unei variabile statice ea se va modifica si pentru toate celelalte obiecte. Deoarece nu depind de o anumita instanta a unei clase, atributele statice pot fi referite si sub forma:

NumeClasa.numeVariabilaStatica

• final: Indica faptul ca valoarea variabilei nu mai poate fi schimbata, cu alte cuvinte este folosit pentru declararea constantelor.

• transient: Este folosit la serializarea obiectelor, pentru a specifica ce variabile membre ale unui obiect nu participa la serializare.

• volatile: Este folosit pentru a semnala compilatorului sa nu execute anumite optimizari asupra membrilor unei clase.

d.3) Metode

[modificatori metoda] TipReturnat numeMetoda ( [argumente] )

[throws TipExceptie1, TipExceptie2, ]

- Modificatori de acces: la fel ca si la constructor

Alti modificatori:

• static: Indica faptul ca o metoda este de clasa si nu de instanta. Metodele de clasa opereaza doar pe atribute statice ale clasei. Deoarece nu depind de o anumita instanta a unei clase, metodele statice pot fi referite si sub forma:

NumeClasa.numeMetodaStatica

• abstract: Permite declararea metodelor abstracte. O metoda abstracta este o metoda care nu are implementare si trebuie obligatoriu sa faca parte dintr-o clasa abstracta.

• final: Specifica faptul ca acea metoda nu mai poate fi supradefinita in subclasele clasei in care ea este definita ca fiind finala.

• native: In cazul in care avem o librarie de functii scrise in alt limbaj de programare, cum ar fi C, C++ si limbajul de asamblare, acestea pot fi refolosite din programele Java. Tehnologia care permite acest lucru se numeste JNI (Java Native Interface) si permite asocierea dintre metode Java declarate cu native si metode native scrise in limbajele de programare mentionate.

• synchronized: Este folosit in cazul in care se lucreaza cu mai multe fire de executie, iar metoda respectiva gestioneaza resurse comune.

- Tipul returnat de o metoda poate fi atat un tip primitiv de date sau o referinta la un obiect al unei clase. In cazul in care o metoda nu returneaza nimic atunci trebuie specificat cuvantul cheie void.

- Argumentele sunt trimise la o metoda doar prin valoare (pass-by-value). Acest lucru inseamna ca metoda receptioneaza doar valorile variabilelor primite ca parametri. Cand argumentul are tip primitiv de date, metoda nu-i poate schimba valoarea decat local (in cadrul metodei). Cand argumentul este de tip referinta, metoda nu poate schimba valoarea referintei obiectului, insa poate apela metodele acelui obiect si poate modifica orice variabila membra accesibila.

- Aruncarea de exceptii (throws)

Supraincarcarea si supradefinirea metodelor

• supraincarcarea (overloading) : in cadrul unei clase pot exista metode cu acelasi nume cu conditia ca signaturile lor sa fie diferite (lista de argumente primite sa difere fie prin numarul argumentelor, fie prin tipul lor)

• supradefinirea (overriding): o subclasa poate rescrie o metoda a clasei parinte prin implementarea unei metode cu acelasi nume si aceeasi signatura ca ale superclasei.

2.12.2 Clasa Object

Clasa Object este cea mai generala dintre clase, orice obiect fiind, direct sau indirect, descendent al acestei clase. Fiind parintele tuturor, Object defineste si implementeaza comportamentul comun al tuturor celorlalte clase Java, cum ar fi:

• posibilitatea testarii egalitatii valorilor obiectelor,

• specificarea unei reprezentari ca sir de caractere a unui obiect ,

• returnarea clasei din care face parte un obiect,

• notificarea altor obiecte ca o variabila de conditie s-a schimbat, etc.

Metodele cel mai uzual supradefinite sunt: clone, equals/hashCode, finalize, toString.

• clone: Aceasta metoda este folosita pentru duplicarea obiectelor (crearea unor clone). Clonarea unui obiect presupune crearea unui nou obiect de acelasi tip si care sa aiba aceeasi stare (aceleasi valori pentru variabilele sale).

• equals, hashCode: Acestea sunt deobicei supradefinite impreuna.

In metoda equals este scris codul pentru compararea egalitatii continutului a doua obiecte.

Metoda hashCode returneaza un cod intreg pentru fiecare obiect, pentru a testa consistenta obiectelor: acelasi obiect trebuie sa returneze acelasi cod pe durata executiei programului.

• finalize: In aceasta metoda se scrie codul care ”curata dupa un obiect ”inainte de a fi eliminat din memorie de colectorul de gunoaie.

• toString: Este folosita pentru a returna o reprezentare ca sir de caractere a unui obiect.

Crearea obiectelor

• Declararea: Presupune specificarea tipului acelui obiect, cu alte cuvinte specificarea clasei acestuia (tipul unui obiect poate fi si o interfata).

NumeClasa numeObiect;

• Instantierea: Se realizeaza prin intermediul operatorului new si are ca efect crearea efectiva a obiectului cu alocarea spatiului de memorie corespunzator.

numeObiect = new NumeClasa();

• Initializarea: Se realizeaza prin intermediul constructorilor clasei respective. Initializarea este de fapt parte integranta a procesului de instantiere

• Instantierea+ initializarea :

numeObiect = new NumeClasa([argumente constructor]);

Vectori

• Declararea vectorului : Tip[] numeVector; sau Tip numeVector[];

• Instantierea : numeVector = new Tip[nrElemente];

• Declararea si instantierea: Tip[] numeVector = new Tip[nrElemente];

• Initializarea (optional): Ex: String culori[] = ;

Tablouri multidimensionale

Ex: Tip matrice[][] = new Tip[nrLinii][nrColoane];

Operatii asupra vectorilor:

a) Dimensiunea unui vector: Se poate afla cu ajutorul atributului length

b) Copierea vectorilor :void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

unde src – vector sursa ; dest – vector destinatie ; length – nr. de elemente de copiat

Clasa java.util.Arrays ofera diverse metode statice foarte utile in lucrul cu vectori cum ar fi:

c) void sort(vector[,indexInceput,indexSfarsit]) - sorteaza ascendent un vector, folosind un algoritm de tip Quick-Sort performant, de complexitate O(n log(n)).

d) int binarySearch(tablou, valCautata) - cautarea binara a unei anumite valori intr-un vector sortat; exista mai multe implementari ale metodei pentru vectori care contin diverse tipuri de date; returneza indicele din tablou unde a fost gasit elementul sau -1.

e) boolean equals(vector1, vector2) - testarea egalitatii valorilor a doi vectori (au aceleasi numar de elemente si pentru fiecare indice valorile corespunzatoare din cei doi vectori sunt egale); returneaza true sau false.

f) void fill(vector[,indexInceput, indexSfarsit],valFill) - atribuie fiecarui element dintr-un vector o valoare specificata;

Siruri de caractere

a) Clasa String: Defineste siruri de caractere constante

b) Clasa StringBuffer: Defineste siruri de caractere care pot fi modificate

Exceptii

Radacina claselor ce descriu exceptii este clasa Throwable iar cele mai importante subclase ale sale sunt Error, Exception si RuntimeException, care sunt la randul lor superclase pentru o serie intreaga de tipuri de exceptii.

Metodele care sunt apelate uzual pentru un obiect exceptie sunt definite in clasa Throwable si sunt publice, astfel incat pot fi apelate pentru orice tip de exceptie.

• getMessage - afiseaza cateva informatii despre exceptie;

• printStackTrace - afiseaza informatii complete despre exceptie si localizarea ei;

”Prinderea” si tratarea exceptiilor

Tratarea exceptiilor se realizeaza prin intermediul blocurilor de instructiuni try-catch- finally

”Aruncarea” exceptiilor

In cazul in care o metoda nu isi asuma responsabilitatea tratarii uneia sau mai multor exceptii pe care le pot provoca anumite instructiuni din codul sau, atunci ea poate sa ”arunce” aceste exceptii catre metodele care o apeleaza, urmand ca acestea sa implementeze tratarea lor sau, la randul lor, sa ”arunce” mai departe exceptiile respective. Acest lucru se realizeaza prin specificarea in declaratia metodei a clauzei throws.

O metoda care nu trateaza o anumita exceptie trebuie obligatoriu sa o ”arunce”.

Metoda apelanta poate arunca la randul sau exceptiile mai. Aceasta inlantuire se termina cu metoda main care, daca va arunca exceptiile ce pot aparea in corpul ei, va determina trimiterea exceptiilor catre masina virtuala Java.

Aruncarea unei exceptii se poate face si implicit prin instructiunea throw ce are formatul:

throw obiectExceptie

Fluxuri (Steam-uri)

Clasificarea fluxurilor

Exista 3 tipuri de clasificare a fluxurilor:

• Dupa directia canalului de comunicatie deschis fluxurile se impart in:

– fluxuri de intrare (pentru citirea datelor)

– fluxuri de iesire (pentru scrierea datelor)

• Dupa tipul de date pe care opereaza:

– fluxuri de octeti (comunicarea seriala se realizeaza pe 8 biti)

– fluxuri de caractere (comunicarea seriala se realizeaza pe 16 biti-caractere)

• Dupa actiunea lor:

– fluxuri primitive de citire/scriere a datelor (se ocupa efectiv cu citirea/scrierea datelor)

– fluxuri pentru procesarea datelor (se bazeaza pe fluxurile primitive)

Ierarhia claselor pentru lucrul cu fluxuri

Clasele radacina pentru ierarhiile ce reprezinta fluxuri de caractere sunt:

• Reader- pentru fluxuri de intrare

• Writer- pentru fluxuri de iesire.

Clasele radacina pentru ierarhia fluxurilor de octeti sunt:

• InputStream- pentru fluxuri de intrare

• OutputStream- pentru fluxuri de iesire.

Citirea datelor de la tastatura

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

String linie = stdin.readLine();

Fluxuri standard de intrare si iesire

• System.in - fluxul standard de intrare, de tip InputStream

• System.out - fluxul standard de iesire, de tip PrintStream

• System.err - fluxul standard pentru erori, de tip PrintStream

Redirectarea fluxurilor standard

Redirectarea fluxurilor standard presupune stabilirea unei alte surse decat tastatura pentru citirea datelor, respectiv alte destinatii decat ecranul pentru cele doua fluxuri de iesire.

setIn(InputStream) - redirectare intrare

setOut(PrintStream) - redirectare iesire

setErr(PrintStream) - redirectare erori

Clasa RandomAccesFile (fisiere cu acces direct)

Caracteristici:

• permite accesul nesecvential (direct) la continutul unui fisier;

• se gaseste in pachetul java.io;

• implementeaza interfetele DataInput si DataOutput, ceea ce inseamna ca sunt disponibile metode de tipul readXXX, writeXXX;

• permite atat citirea cat si scriere din/in fisiere cu acces direct;

• permite specificarea modului de acces al unui fisier (read-only, readwrite).

Clasa File

Clasa File nu se refera doar la un fisier ci poate reprezenta fie un fisier anume, fie multimea fisierelor dintr-un director.

Utilitate clasei File consta in furnizarea unei modalitati de a abstractiza dependentele cailor si numelor fisierelor fatade masina gazda, precum si punerea la dispozitie a unor metode pentru lucrul cu fisere si directoare la nivelul sistemului de operare.

In aceasta clasa vom gasi metode pentru testarea existentei, stergerea, redenumirea unui fisier sau director, crearea unui director, listarea fisierelor dintr-un director, etc.

Serializarea

Serializarea este o metoda ce permite transformarea unui obiect intr-o secventa de octeti sau caractere din care sa poata fi refacut ulterior obiectul original.

Serializarea tipurilor primitive

Serializarea tipurilor primitive poate fi realizata fie prin intermediul fluxurilor DataOutputStream si DataInputStream. Acestea implementeaza interfetele DataInput, respectiv DataOutput ce declara metode de tipul readTipPrimitiv, respectiv writeTipPrimitiv pentru scrierea/citirea datelor primitive si a sirurilor de caractere.

Exemplu:

FileOutputStream fos = new FileOutputStream('test.dat');

DataOutputStream out = new DataOutputStream(fos);

out.writeInt(123);

FileInputStream fis = new FileInputStream('test.dat');

DataInputStream in = new DataInputStream(fis);

int i = in.readInt();

Serializarea obiectelor

Serializarea obiectelor se realizeaza prin intermediul fluxurilor definite de clasele ObjectOutputStream (pentru salvare) si ObjectInputStream (pentru restaurare). Mecanismul implicit de serializare a unui obiect va salva numele clasei obiectului, signatura clasei si valorile tuturor campurile serializabile ale obiectului.

Metodele pentru serializarea obiectelor sunt:

• writeObject, pentru scriere si

• readObject, pentru restaurare.

Metoda readObject are tipul returnat Object, ceea ce inseamna ca trebuie realizata explicit conversia la tipul corespunzator obiectului citit.

Exemplu:

FileOutputStream fos = new FileOutputStream('test.ser');

ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject(new Date());

FileInputStream fis = new FileInputStream('test.ser');

ObjectInputStream in = new ObjectInputStream(fis);

Date data = (Date)in.readObject();

Colectii

Interfete ce descriu colectii

Interfetele reprezinta nucleul mecanismului de lucru cu colectii, scopul lor fiind de a permite utilizarea structurilor de date independent de modul lor de implementare.

Collection modeleaza o colectie la nivelul cel mai general, descriind un grup de obiecte numite si elementele sale. Unele implementari ale acestei interfete permit existenta elementelor duplicate, alte implementari nu. Unele au elementele ordonate, altele nu.

Set modeleaza notiunea de multime in sens matematic. O multime nu poate avea elemente duplicate, mai bine zis nu poate contine doua obiecte o1 si o2 cu proprietatea o1.equals(o2). Mosteneste metodele din Collection, fara a avea alte metode specifice.

Doua dintre clasele standard care ofera implementari concrete ale acestei interfete sunt HashSet si TreeSet.

SortedSet este asemanatoare cu interfata Set, diferenta principala constand in faptul ca elementele dintr-o astfel de colectie sunt ordonate ascendent. Pune la dispozitie operatii care beneficiaza de avantajul ordonarii elementelor. Ordonarea elementelor se face conform ordinii lor naturale, sau conform cu ordinea data de un comparator specificat la crearea

Clasa care implementeaza aceasta interfata este TreeSet.

List descrie liste (secvente) de elemente indexate. Listele pot contine duplicate si permit un control precis asupra pozitiei unui element prin intermediul indexului acelui element. In plus, fata de metodele definite de interfata Collection, avem metode pentru acces pozitional, cautare si iterare avansata.

Clase standard care implementeaza aceasta interfata sunt: ArrayList, LinkedList, Vector.

Map descrie structuri de date ce asociaza fiecarui element o cheie unica, dupa care poate fi regasit. Obiectele de acest tip nu pot contine chei duplicate si fiecare cheie este asociata la un singur element.

Clase care implementeaza interfata Map sunt HashMap, TreeMap si Hashtable.

SortedMap este asemanatoare cu interfata Map, la care se adauga faptul ca multimea cheilor dintr-o astfel de colectie este mentinuta ordonata ascendent conform ordinii naturale, sau conform cu ordinea data de un comparator specificat la crearea colectiei. Este subclasa a interfetei Map, oferind metode suplimentare pentru: extragere de subtabele, aflarea primei/ultimei chei, aflarea comparatorului folosit pentru ordonare.

Algoritmi polimorfici

Algoritmii polimorfici descrisi in aceasta sectiune sunt metode definite in clasa Collections care permit efectuarea unor operatii utile cum ar fi cautarea, sortarea, etc. Caracterisiticile principale ale acestor algoritmi sunt:

Apelul lor general va fi de forma: Collections.algoritm(colectie, [argumente]);

• sort - sorteaza ascendent o lista referitor la ordinea sa naturala sau la ordinea data de un comparator;

• shuffle - amesteca elementele unei liste - opusul lui sort;

• binarySearch - efectueaza cautarea eficienta (binara) a unui element intr-o lista ordonata;

• reverse - inverseaza ordinea elementelor dintr-o lista;

• fill - populeaza o lista cu un anumit element repetat de un numar de ori;

• copy - copie elementele unei liste in alta;

• min - returneaza minimul dintr-o colectie;

• max - returneaza maximul dintr-o colectie;

• swap - interschimba elementele de la doua pozitii specificate ale unei liste;

Tipuri generice

Tipurile generice, introduse in versiunea 1.5 a limbajului Java, simplifica lucrul cu colectii, permitand tipizarea elementelor acestora. Definirea unui tip generic se realizeaza prin specificarea intre paranteze unghiulare a unui tip de date Java, efectul fiind impunerea tipului respectiv pentru toate elementele colectiei: <TipDate>.

Exemplu:

ArrayList<Integer> list = new ArrayList<Integer>();

In cazul folosirii tipurilor generice, incercarea de a utiliza in cadrul unei colectii a unui element necorespunzator ca tip va produce o eroare la compilare.

Iteratori si enumerari

Enumerarile si iteratorii descriu modalitati pentru parcurgerea secventiala a unei colectii. Ei sunt descrisi de obiecte ce implementeaza interfetele Enumeration, respectiv Iterator sau ListIterator. Toate clasele care implementeaza colectii au metode ce returneaza o enumerare sau un iterator pentru parcurgerea elementelor lor.

• Enumeration: hasMoreElements, nextElement

// Parcurgerea elementelor unui vector v

Enumeration e = v.elements;

while (e.hasMoreElements())

• Iterator: hasNext, next, remove

// Parcurgerea elementelor unui vector

for (Iterator it = v.iterator(); it.hasNext();)

Fire de executie

Firele de executie fac trecerea de la programarea secventiala la programarea concurenta.

Crearea unui fir de executie

• prin extinderea clasei Thread.

• prin implementarea interfetei Runnable

Un fir de executie creat nu este automat pornit, lansarea sa fiind realizeaza de metoda start.

Extinderea clasei Thread

public class FirExcecutie extends Thread

public void run()

}

Implementarea interfetei Runnable

public class FirExcecutie implements Runnable

}

Spre deosebire de modalitatea anterioara, se pierde insa tot suportul oferit de clasa Thread. Simpla instantiere a unei clase care implemeneaza interfata Runnable nu creeaza nici un fir de executie, crearea acestora trebuind facuta explicit. Pentru a realiza acest lucru trebuie sa instantiem un obiect de tip Thread ce va reprezenta firul de executie propriu zis al carui cod se gaseste in clasa noastra. Trebuie apelat constructorul care sa primeasca drept argument o instanta a clasei noastre. Dupa creare, firul de executie poate fi lansat printr-un apel al metodei start.

FirExcecutie obiectActiv = new FirExcecutie ();

Thread fir = new Thread(obiectActiv);

fir.start();

Aceste operatiuni pot fi facute chiar in cadrul clasei noastre:

public class FirExecutie implements Runnable

public void run()

}

Specificarea argumentului this in constructorul clasei Thread determina crearea unui fir de executie care, la lansarea sa, va apela metoda run din clasa curenta. Asadar, acest constructor accepta ca argument orice instanta a unei clase ”Runnable”. Pentru clasa FirExecutie data mai sus, lansarea firului va fi facuta automat la instantierea unui obiect al clasei:

FirExecutie fir = new FirExecutie();


Document Info


Accesari: 595
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )