PROGRAMARE OBIECT ORIENTATA 2 - Aplicatثکii pe mobil (se realizeaz a cu ajutorul unei...

download PROGRAMARE OBIECT ORIENTATA 2 - Aplicatثکii pe mobil (se realizeaz a cu ajutorul unei distributثکii

of 102

  • date post

    14-Sep-2019
  • Category

    Documents

  • view

    4
  • download

    0

Embed Size (px)

Transcript of PROGRAMARE OBIECT ORIENTATA 2 - Aplicatثکii pe mobil (se realizeaz a cu ajutorul unei...

  • PROGRAMARE OBIECT ORIENTATĂ 2

    Iolu Mihai - Ştefan

    19 noiembrie 2008

  • ii

  • Cuprins

    1 Introducere 1 1.1 Mediul de programare Java . . . . . . . . . . . . . . . . . . . 3

    2 Structuri fundamentale de programare ı̂n Java 5 2.1 Primul program Java . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Transmiterea parametrilor din linie de comandă . . . . . . . . 8 2.3 Comentarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.4 Tipuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2.4.1 Tipuri de date primitive . . . . . . . . . . . . . . . . . 12 2.4.2 Tipuri de date referinţă . . . . . . . . . . . . . . . . . 13

    2.5 Operatori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.6 Instrucţiuni decizionale . . . . . . . . . . . . . . . . . . . . . . 14 2.7 Instrucţiuni repetitive . . . . . . . . . . . . . . . . . . . . . . 15 2.8 Vectori şi matrici . . . . . . . . . . . . . . . . . . . . . . . . . 16

    2.8.1 Vectori . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.8.2 Matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    2.9 Şiruri de caractere . . . . . . . . . . . . . . . . . . . . . . . . 23 2.9.1 Clasa String . . . . . . . . . . . . . . . . . . . . . . . . 23 2.9.2 Clasa StringBuffer . . . . . . . . . . . . . . . . . . . . 27 2.9.3 Clasa StringTokenizer . . . . . . . . . . . . . . . . . . 28 2.9.4 Expresii regulate ı̂n Java . . . . . . . . . . . . . . . . . 29

    3 Concepte şi principii ı̂n POO 31 3.1 Concepte ı̂n programarea obiect orientată . . . . . . . . . . . . 31 3.2 Principii ale programării obiect orientate . . . . . . . . . . . . 32

    iii

  • iv CUPRINS

    3.3 Soluţii pentru utilizarea eficienta a principiilor POO . . . . . . 34

    4 Obiecte şi clase 37 4.1 Definirea unei clase . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2 Declararea atributelor unei clase . . . . . . . . . . . . . . . . . 38

    4.2.1 Modificatorii de vizibilitate . . . . . . . . . . . . . . . . 39 4.2.2 Modificatorul final . . . . . . . . . . . . . . . . . . . . 40 4.2.3 Modificatorul static . . . . . . . . . . . . . . . . . . . . 41 4.2.4 Modificatorii transient şi volatile . . . . . . . . . . . . 42

    4.3 Declararea metodelor unei clase . . . . . . . . . . . . . . . . . 42 4.3.1 Modificatorul static . . . . . . . . . . . . . . . . . . . . 43 4.3.2 Transmiterea parametrilor la metode . . . . . . . . . . 43

    4.4 Declararea constructorilor unei clase . . . . . . . . . . . . . . 44 4.5 Iniţializatorul static al unei clase . . . . . . . . . . . . . . . . 46 4.6 Probleme rezolvate . . . . . . . . . . . . . . . . . . . . . . . . 47 4.7 Probleme propuse . . . . . . . . . . . . . . . . . . . . . . . . . 65

    5 Moştenirea ı̂n Java 67 5.1 Noţiuni generale . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.2 Exemplu de aplicaţie folosind moştenirea . . . . . . . . . . . . 68 5.3 Polimorfismul . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.4 Metode şi clase finale . . . . . . . . . . . . . . . . . . . . . . . 75 5.5 Operaţia de casting . . . . . . . . . . . . . . . . . . . . . . . . 75 5.6 Clase abstracte . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.7 Clasa Object . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

    5.7.1 Metoda toString() . . . . . . . . . . . . . . . . . . . . 83 5.7.2 Metoda equals() . . . . . . . . . . . . . . . . . . . . . . 83 5.7.3 Metoda hashCode() . . . . . . . . . . . . . . . . . . . . 84 5.7.4 Metoda clone() . . . . . . . . . . . . . . . . . . . . . . 84

    5.8 Implementarea colecţiilor generice folosind Object . . . . . . . 85 5.9 Utilizarea colecţiilor generice cu template-uri . . . . . . . . . . 89

    5.9.1 Boxing şi unboxing ı̂n Java . . . . . . . . . . . . . . . . 90

    6 Tratarea excepţiilor ı̂n Java 93 6.1 Clasificarea excepţiilor . . . . . . . . . . . . . . . . . . . . . . 94 6.2 Crearea claselor excepţie . . . . . . . . . . . . . . . . . . . . . 95 6.3 Aruncarea excepţiilor . . . . . . . . . . . . . . . . . . . . . . . 96 6.4 Prinderea excepţiilor . . . . . . . . . . . . . . . . . . . . . . . 96 6.5 Indicaţii referitoare la utilizarea excepţiilor . . . . . . . . . . . 98 6.6 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

  • CAPITOLUL 1

    Introducere

    Acest curs se referă la programarea obiect orientată şi principalele car- acteristici ale acesteia. Acestea vor fi prezentate ı̂n contextul unui limbaj care oferă un foarte bun suport din acest punct de vedere, respectiv limbajul Java.

    Java este, ı̂n mod indiscutabil, unul din cele mai populare limbaje de programare obiect orientate (alături de limbaje precum C++, C# sau Visual Basic). Acest lucru a făcut ca el să fie folosit de milioane de dezvoltatori din lumea ı̂ntreagă mai ales ı̂n contextul aplicaţiilor web.

    El a apărut la sfârşitul anului 1995 şi a avut parte de o mare publicitate ı̂ncă de la ı̂nceput. Este un limbaj care oferă suport pentru toate tehnicile moderne de programare precum: programarea ı̂n reţea, lucrul cu fire de execuţie, internaţionalizare, lucrul cu baze de date şi multe altele.

    De-a lungul timpului cei de la Sun Microsystems, care se ocupă de evoluţia limbajului, au scos 7 revizii majore ale acestuia. Cea mai importantă a fost cea care a dus la apariţia versiunii JDK 5.0. Momentan s-a ajuns la versiunea JDK 6.0.

    Evoluţia este impresionantă dacă ţinem cont că s-a pornit de la un număr de aproximativ 200 de clase şi s-a ajuns acum la peste 3000 de clase.

    Java este mult mai mult decât un simplu limbaj. Java este o platformă care are o librărie imensă ce conţine foarte mult cod reutilizabil precum şi un mediu de execuţie care oferă servicii precum: securitate, portabilitate pe diverse medii de execuţie precum şi garbage collection. Unele din principalele avantaje ale acestui mediu Java sunt următoarele:

    1

  • 2 CAPITOLUL 1. INTRODUCERE

    • Limbajul Java este un limbaj relativ simplu. După cum vom vedea ı̂n cele ce urmează ı̂n Java nu avem numeroase construcţii care existau ı̂n C/C++ precum: pointeri, structuri, fişiere header, directive de prepro- cesor, suprâıncărcare de operatori, moştenire virtuală etc.

    • Limbajul Java este obiect orientat. În ziua de azi, majoritatea limba- jelor care există pe piaţă şi au o foarte largă răspândire au la bază principiile programării obiect orientate (vezi C++, C#, Visual Basic).

    • Java are un bogat suport pentru aplicaţiile distribuite. Există numeroase clase care permit crearea unor aplicaţii care să ruleze ı̂n reţea, folosind diverse modalităţi de lucru: sockets, RMI, CORBA etc.

    • Java este un limbaj robust. Cei care au dezvoltat acest limbaj au avut ca scop foarte important ı̂ncercarea de a evita pe cât posibil apariţia erorilor, prin depistarea acestora cât mai rapidă sau prin uşurarea mod- ului de a programa. Un astfel de exemplu este lipsa pointerilor care face ca programarea să fie mai uşoară şi practic face imposibilă coruperea memoriei care se putea produce destul de uşor ı̂n C/C++.

    • Java este portabil. Aceasta ı̂nseamnă că dacă scriem un cod pe plat- formă Windows, exact acelaşi cod fără modificări va putea rula şi pe o platformă Linux de exemplu. Nu acelaşi lucru se ı̂ntâmpla, de exemplu, ı̂n cazul C++. Tipul int putea avea dimensiuni diferite ı̂n funcţie de platforma ţintă.

    • Java este neutru din punct de vedere arhitectural. În momentul ı̂n care se compilează codul Java, rezultatul produs este un bytecode. Acesta este rulat cu ajutorul unei maşini virtuale Java (JVM - Java Virtual Machine). Din cauza acestui mod de gândire este posibil ca acelaşi cod să ruleze pe orice sistem de operare, doar implementarea maşinii virtuale diferind. Un mecanism asemănător a fost dezvoltat şi de către cei de la Microsoft pentru platforma .NET, care are la bază tot o maşină virtuală.

    Voi ı̂ncerca ı̂n cele ce urmează să prezint un curs ı̂n care accentul se va pune mai ales pe partea practică a limbajului şi pe facilităţile oferite de acesta pentru programarea obiect orientată. Din cauza timpului limitat, nu vom prezenta facilităţile pentru lucrul cu interfeţe grafice, pentru programare web sau pentru realizarea aplicaţiilor pe mobil. Acestea sunt subiecte de mare interes care pot fi studiate ı̂ntr-un curs viitor.

    Totuşi trebuie precizat ı̂ncă de la ı̂nceput că se foloseşte mediul Java pentru a realiza mai multe tipuri de aplicaţii:

  • 1.1. MEDIUL DE PROGRAMARE JAVA 3

    • Aplicaţii consolă (̂ın linie de comandă): se pot rula din linie de co- mandă, neavând o interfaţă grafică

    • Aplicaţii grafice (folosesc librarii AWT sau Swing)

    • Applet-uri - sunt un anumit tip de aplicaţii grafice care pot fi introduse ı̂n pagini web, facând ca o pagină web să aibă un aspect mult mai dinamic asemănător aplicaţiilor desktop

    • Pagini web dinamice - sunt create cu ajutorul unor tehnologii care s-au dezvoltat peste Java şi care adaugă funcţionalităţi noi limbajului (vezi JSP, Servlets, Spring etc.)

    • Aplicaţii pe mobil (se realizează cu ajutorul unei distribuţii Java numită J2ME - Java 2 Microedition).

    Accentul ı̂n continuare se va pune mai ales pe primul tip de aplicaţie, doar tangenţial se vor atinge celelalte tipu