User Tools

Site Tools


Problem constructing authldap
laboratoare:poo-java
Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:poo-java [2013/09/30 01:56]
Adriana Draghici
laboratoare:poo-java [2018/10/01 01:14] (current)
Laurentiu Stamate [Tipuri primitive]
Line 3: Line 3:
 == Programarea Orientată pe Obiecte== == Programarea Orientată pe Obiecte==
  
-Programarea ​Orientata Obiect ​este o paradigma ​de programare care utilizeaza ​**obiecte** ​si **interactiuni** intre acestea pentru a modela arhitectura unui program.+Programarea ​Orientată pe Obiecte ​este o paradigmă ​de programare care utilizează ​**obiecte** ​și **interacțiuni** între ​acestea pentru a modela arhitectura unui program.  
 +   
 + ​Până în anii '60, paradigma cea mai utilizată era cea a **programării structurate**. Programarea structurată este tipul de programare pe care l-ați folosit până acum, la cursul de Programare și la cel de SD. Această paradigmă constă în utilizarea **funcțiilor și procedurilor** pentru a realiza un program (cu eliminarea apelurilor GOTO).  
 +   
 + ​Totuși,​ în anii '60, deja pe măsură ce programale deveneau din ce în ce mai mari, randamentul programatorilor scădea și în consecință TTM-ul (''​time-to-market''​) creștea. Stilul de programare structurată nu mai făcea față unor programe de dimensiuni mereu în creștere.  
 +   
 + ​Fiecare paradigmă de programare propune un nivel de împărțire a taskului de realizat (adică a programului) în taskuri mai mici pentru a micșora complexitatea.  
 + ​Astfel,​ într-un program **monoprocedural**,​ unitatea de abstractizare este instrucțiunea. În programarea **structurată** este funcția/​procedura. **Programarea Orientată Obiect** (POO) propune pentru acest lucru obiectul. Obiectele în POO modelează (sau ar trebui să modeleze dacă arhitectură aplicației este corectă) obiecte din lumea reală.  
 +   
 + ​**Obiectele** din POO sunt **instanțe** ale unui tip de date numit **clasă**. Relația dintre clasă și obiect-instanță a acelei clase este exemplificată de relația între conceptul de masă și masă din sufragerie. Adică:  
 + * conceptul de masă implică existența anumitor caracteristici (un număr de picioare și un blat, totul de o anumită culoare)  
 + * conceptul de masă implică realizarea potențială a unor acțiuni (se poate mânca pe masă)  
 + * obiectul masă are caracteristicile respective (4 picioare, culoare neagră)  
 + * obiectul masă permite realizarea practică a acțiunilor respective (se poate mânca doar pe masă fizică, nu pe ideea de masă)  
 +   
 + Ce remarcăm este că există niște tipare în lumea reală, care grupează în mintea noastră niște **atribute** ale obiectelor cu **acțiunile** lor, pentru a forma un tot ce definește obiectul respectiv. Pe acest concept, numit **încapsulare**,​ se sprijină programarea orientată obiect.  
 +   
 + ​Folosirea POO permite realizarea de sisteme informatice de dimensiuni mărite, cu timpi de dezvoltare, testare și mentenanță reduși față de paradigmele anterioare. Totuși, pentru a creă un sistem funcțional este necesară înțelegerea corectă a conceptelor care stau în spatele POO. Cu aceste concepte se ocupă cursul și laboratoarele de POO
  
-Pana in anii '60, paradigma cea mai utilizata era cea a **programarii structurate**. Programarea structurata ​este tipul de programare ​pe care l-ati folosit pana acum, la cursul ​de Programare si la cel de SDAceasta paradigma consta ​in utilizarea ​**functiilor si procedurilor** pentru a realiza un program ​(cu eliminarea apelurilor GOTO).+== Platforma Java ==  
 +   
 + ​Programarea Orientată pe Obiecte se poate aplică în orice limbaj care permite acest lucru. Cele mai cunoscute asemenea limbaje astăzi sunt C++, Java, C#, chiar și PHP. În acest semestru vom ilustra conceptele de POO folosind limbajul Java.  
 +   
 + ​Java ​pornit că o platformă de programare pentru sisteme embedded. Țelurile principale ale proiectului erau:  
 + * **independența** de sistem  
 + * utilizarea **POO**.  
 + ​Astăzi,​ Java este folosită mai mult că o platformă pentru Internet și a atins o utilizare impresionantă.  
 +   
 + Java este un mediu (platformă) ​de programare care constă în:  
 + * un **limbaj** ​de programare (Java) care descrie programatorului ce instrucțiuni sunt valide și ce face fiecare  
 + * un **compilator** (''​javac.exe''​ (Windows) / ''​javac''​ (Linux)) care transformă fișierul sursă într-un limbaj intermediar numit **bytecode**  
 + * o **mașină virtuală**, **Java Virtual Machine** (''​JVM''​), care permite transformarea codului intermediar în instrucțiuni executabile pe procesorul curent 
 + * o **bibliotecă** puternică ce răspunde foarte bine nevoilor apărute în practică (''​class library''​)  
 +   
 + ​**Workflowul** este următorul. Dezvoltatorul instalează **Java Development Kit** (''​JDK''​) care constă în principal din:  
 + * **Java Runtime Environment** (''​JRE''​),​ ce conține ''​JVM''​  
 + * **compilator**.  
 + ​Compilatorul este aplicat codului scris și se obțin fișiere conținând bytecode. Aceste fișiere au în Java extensia ''​.class''​.  
 +   
 + ​Diagrama,​ până acum, arată astfel:  
 +   
 + ''​Clasamea.java''​ ----compilare--->​ ''​Clasamea.class''​ [ pe mașina de dezvoltare ]  
 +   
 + Acest pas corespunde cu invocarea compilatorului astfel: ​
  
-Totusiin anii '60deja pe masura ce programale deveneau din ce in ce mai marirandamentul programatorilor scadea si in consecinta TTM-ul (''​time-to-market''​) ​crestea. Stilul ​de programare structurata ​nu mai facea fata unor programe ​de dimensiuni mereu in crestere.+<​code>​ 
 +javac Clasamea.java 
 +</​code>​  
 +   
 + Apoi codul bytecode este distribuit (nu analizăm acum cum se face acest lucru) utilizatorului. El are instalat ''​JRE''​care este mașina care interpretează bytecode-ul și îl transformă într-un flow de instrucțiuni pentru procesorul utilizatorului (există un ''​JRE''​ pentru fiecare procesor și sistem de operare folosit).  
 +   
 + ​Diagrama arată așa:  
 +   
 + ​----------------------------------------------------------------------  
 + | flow de bytecode | ------> | JRE | ----> | flow instrucțiuni native |  
 + ​----------------------------------------------------------------------  
 +   
 + Pasul corespunde cu invocarea mașinii virtuale astfel:  
 +   
 +<​code>​ 
 +java Clasamea 
 +</​code>​  
 +   
 + ​Rezultatul instrucțiunilor native afectează flowul de instrucțiuni bytecodeastfel încât rolul ''​JRE''​ nu este doar o etapă de preprocesare. Nu se aplică o simplă transformare de instrucțiuni ca să se obțină o imagine, după care să se trimite imaginea de executabil nativ la procesor. Mașina virtuală "​interpretează"​ tot timpul. Codul bytecode este numit interpretat din această cauză.  
 +   
 +Cel mai important avantaj în acest workflow este că permite obținerea **independenței** de sistem. Dezvoltatorul are nevoie de un compilator funcțional pentru platformă pe care face dezvoltareaiar utilizatorii,​ pe orice patforma ar fi (sistem de operare, arhitectură hardware), pot utiliza programul cât timp au o mașină virtuală Java instalată pentru acea platformă.  
 +   
 + Un dezavantaj este viteza scăzută a codului Java. Există overhead-ul implicat de acțiunile adiționale realizate de ''​JRE''​ tot timpul rulării programului. Pentru a combate acest dezavantaj au apărut compilatoare ''​just-în-time''​ (''​JIT''​) ​care permit transformarea bytecodeului în cod executabil la prima rulare a unei secvențe ​de instrucțiuni bytecode, apoi stocarea acestuia pentru refolosire. Aici mașina virtuală ​nu este folosită decât o dată. Modelul clasic este C#, care folosește acest artificiu încă ​de la apariția sa. (Întârzierea cauzată de prima pornire a aplicației .NET respective este vizibilă în multe cazuri). Rețineți că modelul clasic Java este unul cu compilator și interpretor (mașină virtuală) 
 +   
 +   
 + ​{{alte-resurse:​poo-java:​jvm.gif?​450| Flow-ul Java}} ​
  
-Fiecare paradigma de programare propune un nivel de impartire a taskului de realizat (adica a programului) in taskuri mai mici pentru a micsora complexitatea. 
-Astfel, intr-un program **monoprocedural**,​ unitatea de abstractizare este instructiunea. In programarea **structurata** este functia/​procedura. **Programarea Orientata Obiect** (POO) propune pentru acest lucru obiectul. Obiectele in POO modeleaza (sau ar trebui sa modeleze daca arhitectura aplicatiei este corecta) obiecte din lumea reala. 
  
-**Obiectele** din POO sunt **instante** ale unui tip de date numit **clasa**. Relatia dintre clasa si obiect-instanta a acelei clase este exemplificata de relatia intre conceptul de masa si masa din sufragerie. Adica: +==Tipuri primitive==
-* conceptul de masa implica existenta anumitor caracteristici (un numar de picioare si un blat, totul de o anumita culoare) +
-* conceptul de masa implica realizarea potentiala a unor actiuni (se poate manca pe masa) +
-* obiectul masa are caracteristicile respective (4 picioare, culoare neagra) +
-* obiectul masa permite realizarea practica a actiunilor respective (se poate manca doar pe masa fizica, nu pe ideea de masa)+
  
-Ce remarcam este ca exista niste tipare in lumea realacare grupeaza in mintea noastra niste **atribute** ale obiectelor cu **actiunile** lorpentru a forma un tot ce defineste obiectul respectivPe acest conceptnumit **incapsulare**, se sprijina programarea orientata obiect.+Conform POO, **orice este un obiect**, însă din motive de performanță,​ Java suportă și tipurile de bază, care nu sunt claseAceste tipurinumite ​**tipuri primitive**, corespund tipurilor de date cel mai des folosite și sunt prezentate mai jos, alături de spațiul ocupat și intervalul corespunzător de valori:  
 +   
 +<​tabcaption | Tipuri primitive de date> 
 +^  Tip primitiv ​ ^  Dimensiune ​ ^  Minim  ^  Maxim ^ 
 +|  ''​boolean'' ​ |  <​dimensiune variabilă> ​ |  —  |  —  | 
 +|  ''​char'' ​ |  16  |  Unicode 0  |  Unicode 2<​sup>​16</​sup>​ - 1  |  
 +|  ''​byte'' ​ |  8  |  -128  |  127  | 
 +|  ''​short'' ​ |  16  |  -2<​sup>​15</​sup> ​ |  2<​sup>​15</​sup>​ - 1  | 
 +|  ''​int'' ​ |  32  |  -2<​sup>​31</​sup> ​ |  2<​sup>​31</​sup>​ - 1  | 
 +|  ''​long'' ​ |  64  |  -2<​sup>​63</​sup> ​ |  2<​sup>​63</​sup>​ - 1  | 
 +|  ''​float'' ​ |  32  |  IEEE754 ​ |  IEEE754 ​ |  
 +|  ''​double'' ​ |  64  |  IEEE754 ​ |  IEEE754 ​ | 
 +</​tabcaption>​
  
-Folosirea POO permite realizarea ​de sisteme informatice de dimensiuni marite, cu timpi de dezvoltaretestare si mentenanta redusi fata de paradigmele anterioare. Totusipentru a crea un sistem functional este necesara intelegerea corecta a conceptelor ​care stau in spatele POOCu aceste concepte se ocupa cursul si laboratoarele de POO.+<note tip>​Tipurile ​de date primitive sunt asemănătoare celor din C. Variabilele (locale metodelora nu se confunda ​cu membri claselor) având tipuri primitive sunt alocate pe stivă (exact ca în C)în contrast cu instanțele claselor, care sunt alocate pe heap (remember stack vsheap).</​note>​
  
-== Platforma ​Java ==+Se observă că:  
 +  * Java **nu** posedă tipuri ''​unsigned''​ 
 +  * tipul ''​char''​ este pe 16 biți și întrebuințează **Unicode** 
 +  * tipul ''​boolean''​ nu are o dimensiune fixă 
 +  * deși valorile posibile sunt doar 0 și 1, ocupând 1 bit, acestui bit i se adaugă un header dependent de mașină, după care acesta se completează cu biți până se ajunge la un număr multiplu de 8 
 +  * pentru mai multe detalii: http://​docs.oracle.com/​javase/​tutorial/​java/​nutsandbolts/​datatypes.html 
 +  * ''​void''​ **nu este tip in Java**, este doar un cuvânt cheie pentru cazurile în care dorim să indicăm că ceea ce se returnează este **nimic** <code java> 
 +// cod C 
 +int f(void) // specificăm explicit ca funcția nu are parametrii 
 +void f(int) // definim o metodă care primeste un int și nu întoarce nimic 
 +void *p // definim un pointer care poate conține orice tip 
 +(void) p // cast către orice tip
  
-Programarea Orientata pe Obiecte se poate aplica in orice limbaj care permite acest lucru. Cele mai cunoscute asemenea limbaje astazi sunt C++, Java, C#, chiar si PHP. In acest semestru vom ilustra conceptele ​de POO folosind limbajul ​Java.+// cod Java 
 +int f(void) // eroare de compilarenu există parametrii de tip void 
 +void f(int) // similar cu C 
 +void *p // nu există conceptul ​de pointer in Java 
 +(void) p // nu se poate face cast către void in Java
  
-Java a pornit ca o platforma de programare pentru sisteme embedded. Telurile principale ale proiectului erau: +</​code>​ 
-**independenta** de sistem +  din documentația 'Java Language specification 7': " Note that the Java programming language does not allow a "cast to void" - void is not type "
-* utilizarea **POO**. +
-Astazi, ​Java este folosita mai mult ca o platforma pentru Internet si atins o utilizare impresionanta.+
  
-Java este un mediu (platforma) de programare care consta in: +  ​
-* un **limbaj** de programare (Java) care descrie programatorului ce instructiuni sunt valide si ce face fiecare +
-* un **compilator** (''​javac.exe''​ (Windows) / ''​javac''​ (Linux)) care transforma fisierul sursa intr-un limbaj intermediar numit **bytecode** +
-* o **masina virtuala**, **Java Virtual Machine** (''​JVM''​),​ care permite transformarea codului intermediar in instructiuni executabile pe procesorul curent. +
-* o **biblioteca** puternica ce raspunde foarte bine nevoilor aparute in practica (''​class library''​)+
  
-**Workflowul** este urmatorul. Dezvoltatorul instaleaza **Java Development Kit** (''​JDK''​) care consta in principal din: +Segmentele de memorie inițialeprecum și parametri de rulare sunt ilustrați mai jos
-* **Java Runtime Environment** (''​JRE''​)ce contine ''​JVM''​ +{{ :​laboratoare:​java-basics:​jvm.jpg?nolink |Java VM memory }}
-* **compilator**+
-Compilatorul este aplicat codului scris si se obtin fisiere continand bytecodeAceste fisiere au in Java extensia ''​.class''​.+
  
-Diagrama, pana acum, arata astfel: 
  
-''​Clasamea.java''​ ----compilare--->​ ''​Clasamea.class''​ [ pe masina de dezvoltare ] 
  
-Acest pas corespunde cu invocarea compilatorului astfel: 
- <​code>​javac Clasamea.java</​code>​ 
  
-Apoi codul bytecode este distribuit (nu analizam acum cum se face acest lucru) utilizatorului. El are instalat ''​JRE'',​ care este masina care interpreteaza bytecode-ul si il transforma intr-un flow de instructiuni pentru procesorul utilizatorului (exista un ''​JRE''​ pentru fiecare procesor si sistem de operare folosit).+Exemplu ​de declarație:​
  
-Diagrama arata asa: +<code java
- +int i, j; 
----------------------------------------------------------------------- +boolean k; 
-| flow de bytecode | ------| JRE | ----> | flow instructiuni native | +</​code>​ 
----------------------------------------------------------------------- +   
- +  /* Mutat la resurse utile - in labul acesta mentionat ​ca exista tipul Referinta.*/ 
-Pasul corespunde cu invocarea masinii virtuale astfel: +   
- + Celelalte tipuri existente sunt **clase**. Instanțele claselor sunt tipuri **referință**. Acest lucru înseamnă că în spatemașina virtuală ​Java lucrează cu pointeri ​la obiecte și noi folosim pointeri impliciți către zone de memorie alocate ​pentru ​obiectele utilizateAcest lucru va avea consecințe mai târziucând vom studia transferul parametrilor în Java. 
- <​code>​java Clasamea</​code>​ +
- +
-Rezultatul instructiunilor native afecteaza flowul de instructiuni bytecode, astfel incat rolul ''​JRE''​ nu este doar o etapa de preprocesare. Nu se aplica o simpla transformare de instructiuni ​ca sa se obtina o imagine, dupa care sa se trimite imaginea de executabil nativ la procesor. Masina virtuala "​interpreteaza"​ tot timpul. Codul bytecode este numit interpretat din aceasta cauza+
- +
-Cel mai important avantaj in acest workflow este ca permite obtinerea ​**independentei** de sistemDezvoltatorul are nevoie de un compilator functional pentru platforma pe care face dezvoltareaiar utilizatorii,​ pe orice patforma ar fi (Sistem de Operare, Arhitectura hardware), pot utiliza programul cat timp au o masina virtuala ​Java instalata pentru acea platforma. +
- +
-Un dezavantaj este viteza scazuta a codului Java. Exista overhead-ul implicat de actiunile aditionale realizate de ''​JRE''​ tot timpul rularii programului. Pentru a combate acest dezavantaj au aparut compilatoare ''​just-in-time''​ (''​JIT''​) care permit transformarea bytecodeului in cod executabil ​la prima rulare a unei secvente ​de instructiuni bytecode, apoi stocarea acestuia ​pentru ​refolosireAici masina virtuala nu este folosita decat o data. Modelul clasic este C#care foloseste acest artificiu inca de la aparitia sa. (Intarzierea cauzata de prima pornire a aplicatiei .NET respective este vizibila in multe cazuri). Retineti ca modelul clasic ​Java este unul cu compilator si interpretor (masina virtuala). +
- +
- +
-{{:​laboratoare:​lab1:​jvm.gif?​450| Flow-ul Java}}+
  
 + Care este diferența dintre referințe (Java) și pointeri (C) ?
 +  * referințele pot ascunde un anumit număr de niveluri de indirectare deasupra pointerilor ​
 +  * din cauza faptului că nu putem accesa direct memoria, **nu putem face operații aritmetice cu referințele**,​ spre deosebire de pointeri
 +  * datorită libertății oferite de pointerii din C, putem face cast oricărui pointer pentru a da un alt sens zonei respective de memorie; acest lucru nu este posibil in cazul referințelor,​ se poate face cast doar la un alt tip al unui obiect care este deja încapsulat în obiectul curent (mai multe detalii când vom discuta despre moștenire)
 +  ​
 + Acum e de reținut faptul că în Java **nu** există pointeri expliciți. Această facilitate a fost considerată generatoare de erori și nu a fost implementată. Acest lucru nu limitează capacitățile platformei.  ​
 +  ​
 +  ​
 +  ​
  
 == Hello World == == Hello World ==
  
-Pentru a incepe ​dezvoltarea avem nevoie de ''​JDK''​ pe care il gasim pe site-ul [http://​www.oracle.com/​technetwork/​java/​javase/​downloads/​java-se-jdk-7-download-432154.html ​Sun]. ''​JDK'' ​contine si ''​JRE''​ pentru procesorul curent, ​asa ca putem testa aplicatiile ​pe masina locala.+Pentru a începe ​dezvoltarea avem nevoie de ''​JDK''​ pe care îl găsim ​pe site-ul ​[[http://​www.oracle.com/​technetwork/​java/​javase/​downloads/​java-se-jdk-7-download-432154.html ​|oracle]]. ''​JDK'' ​conține și ''​JRE''​ pentru procesorul curent, ​așa că putem testa aplicațiile ​pe mașină locală 
 +   
 + ​Pentru a seta variabilele de mediu în Linux adăugați următoarea linie în ''/​etc/​bash.bashrc''​ (pentru a fi disponibil tuturor utilizatorilor):​  
 +<code bash>  
 +  export JAVA_HOME=/​usr/​lib/​jvm/​java-<​versiunea undefined>​  
 +</​code>​  
 +  unde valoarea variabilei ''​JAVA_HOME''​ este calea către directorul unde aveți Java instalat.  
 +   
 + ​Conform paradigmei POO, programul este compus din clase. Pentru a avea un entry point al programului (punct de început, cum este funcția ''​main''​ în C), trebuie să scriem o clasă: ​
  
-Pentru a seta variabilele de mediu in Linux adaugati urmatoarea linie in ''/​etc/​bash.bashrc''​ (pentru a fi disponibil tuturor utilizatorilor):​ +<code java>  
- <​code bash> + class HelloWorld ​ {  
- ​export JAVA_HOME=/​usr/​lib/​jvm/​java-<​versiunea ta> +     ​public static void main(String[] args) {  
-</​code>​ +         ​System.out.println(a€œHello ​world!”);  
- unde valoarea variabilei ''​JAVA_HOME''​ este calea catre directorul unde aveti Java instalat. +     ​}  
- + }  
-Conform paradigmei POO, programul este compus din clase. Pentru a avea un entry point al programului (punct de inceput, cum este functia ''​main''​ in C), trebuie sa scriem o clasa: +</​code>​  
-<code java> +   
-class HelloWorld ​ { + Observăm că:  
-    public static void main(String[] args) { + * o clasă ​se definește ​prin listarea metodelor, cuprinse ​între ​acolade, ​după declararea ei prin cuvântul ​cheie ''​class'' ​urmat de numele clasei.  
-        System.out.println(“Hello ​world!”);​ + ​* ​semnătura ​functei de entry în program este: ''​public static void main(String[] args)''​  
-    + * intuim ​că linia ''​System.out.println(a€œHello ​world”)''​ va afișa ​mesajul de întâmpinare ​ 
-+   
-</​code>​ + Salvăm ​textul ca ''​HelloWorld.java''​. ​Compilăm ​programul cu: 
- +
-Observam ca+
-* o clasa se defineste ​prin listarea metodelor, cuprinse ​intre acolade, ​dupa declararea ei prin cuvantul ​cheie class urmat de numele clasei. +
-semnatura ​functei de entry in program este: ''​public static void main(String[] args)''​ +
-* intuim ​ca linia ''​System.out.println(“Hello ​world”)''​ va afisa mesajul de intampinare +
- +
-Salvam ​textul ca ''​HelloWorld.java''​. ​Compilam ​programul cu: +
- <​code>​javac HelloWorld.java +
-</​code>​ +
-Observam aparitia in directorul curent a unui fisier ''​HelloWorld.class''​ cu: +
- dir (ls pentru Linux) +
- +
-Pentru rulare: +
- <​code>​ +
- java HelloWorld +
-</​code>​ +
-== Instalare Eclipse IDE ==+
  
-Pentru Java exista mai multe medii de dezvoltare dintre care noi recomandam Eclipse datorita plugin-urilor disponibileEclipse ofera plugin-uri si pentru PHP, C/C++, Python etc.+<​code>​ 
 +  javac HelloWorld.java  
 +</code>  
 + ​Observăm apariția în directorul curent a unui fișier ''​HelloWorld.class''​ cu:  
 +  dir (ls pentru Linux)  
 +   
 + ​Pentru rulare: ​
  
-Eclipse poate fi download-at de [[http://​eclipse.org/​downloads/​ |aici]]. Pentru instalare ​va recomandam ​acest [[http://​www.vogella.de/​articles/​Eclipse/​article.html | tutorial]].+<​code> ​  java HelloWorld  
 +</​code>​  
 + == Instalare Eclipse IDE ==  
 +   
 + ​Pentru Java există mai multe medii de dezvoltare dintre care noi recomandăm Eclipse datorită plugin-urilor disponibile. Eclipse oferă plugin-uri și pentru PHP, C/C++, Python etc.  
 +   
 + Eclipse poate fi download-at de [[http://​eclipse.org/​downloads/​ |aici]]. Pentru instalare ​vă recomandăm ​acest [[http://​www.vogella.de/​articles/​Eclipse/​article.html | tutorial]]. ​
  
 ==Download== ==Download==
 * [[http://​www.oracle.com/​technetwork/​java/​javase/​downloads/​java-se-jdk-7-download-432154.html |JDK]] * [[http://​www.oracle.com/​technetwork/​java/​javase/​downloads/​java-se-jdk-7-download-432154.html |JDK]]
 * [[http://​eclipse.org/​downloads/​packages/​eclipse-ide-java-developers/​indigosr2 |Eclipse]] * [[http://​eclipse.org/​downloads/​packages/​eclipse-ide-java-developers/​indigosr2 |Eclipse]]
laboratoare/poo-java.1380495375.txt.gz · Last modified: 2013/09/30 01:56 by Adriana Draghici