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 Both sides next revision
laboratoare:poo-java [2013/09/30 01:56]
Adriana Draghici
laboratoare:poo-java [2013/10/06 23:15]
Adriana Draghici diacritice
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: ​
  
-Totusi, in anii '60, deja pe masura ce programale deveneau din ce in ce mai mari, randamentul 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 
-Fiecare paradigma de programare propune un nivel de impartire a taskului de realizat (adica a programului) in taskuri mai mici pentru a micsora complexitatea. +</​code>​  
-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. +   
- + 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).  
-**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: +   
-* conceptul de masa implica existenta anumitor caracteristici (un numar de picioare si un blat, totul de o anumita culoare) + ​Diagrama ​arată așa:  
-* 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) + | flow de bytecode | ------> | JRE | ----> | flow instrucțiuni ​native |  
- + ​----------------------------------------------------------------------  
-Ce remarcam este ca exista niste tipare in lumea reala, care grupeaza in mintea noastra niste **atribute** ale obiectelor cu **actiunile** lor, pentru a forma un tot ce defineste obiectul respectiv. Pe acest concept, numit **incapsulare**,​ se sprijina programarea orientata obiect. +   
- + Pasul corespunde cu invocarea ​mașinii ​virtuale astfel:  
-Folosirea POO permite realizarea de sisteme informatice de dimensiuni marite, cu timpi de dezvoltare, testare si mentenanta redusi fata de paradigmele anterioare. Totusi, pentru a crea un sistem functional este necesara intelegerea corecta a conceptelor care stau in spatele POO. Cu aceste concepte se ocupa cursul si laboratoarele de POO. +   
- +<​code>​ 
-== Platforma Java == +java Clasamea 
- +</​code>​  
-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. +   
- + ​Rezultatul ​instrucțiunilor ​native ​afectează ​flowul de instrucțiuni ​bytecode, astfel ​încât ​rolul ''​JRE''​ nu este doar o etapă ​de preprocesare. Nu se aplică ​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ă.  
-Java a pornit ca o platforma de programare pentru sisteme embedded. Telurile principale ale proiectului erau: +   
-* **independenta** de sistem +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 dezvoltarea,​ iar utilizatorii,​ pe orice patforma ar fi (sistem ​de operarearhitectură ​hardware), pot utiliza programul ​cât timp au o mașină virtuală ​Java instalată ​pentru acea platformă.  
-* utilizarea **POO**. +   
-Astazi, Java este folosita mai mult ca o platforma pentru Internet si a atins o utilizare impresionanta. + 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 ​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ă).  
- +   
-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 + ​{{:​laboratoare:​lab1:​jvm.gif?​450| Flow-ul Java}} ​
-* 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: +
-* **Java Runtime Environment** (''​JRE''​),​ ce contine ''​JVM''​ +
-* **compilator**. +
-Compilatorul este aplicat codului scris si se obtin fisiere continand bytecode. Aceste 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). +
- +
-Diagrama ​arata asa+
- +
----------------------------------------------------------------------- +
-| flow de bytecode | ------> | JRE | ----> | flow instructiuni ​native | +
----------------------------------------------------------------------- +
- +
-Pasul corespunde cu invocarea ​masinii ​virtuale astfel: +
- +
- <​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 ​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 sistem. Dezvoltatorul are nevoie de un compilator ​functional ​pentru ​platforma ​pe care face dezvoltarea,​ iar utilizatorii,​ pe orice patforma ar fi (Sistem ​de OperareArhitectura ​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 refolosire. Aici masina virtuala ​nu este folosita decat 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}}+
  
  
 == 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 in Linux adaugati urmatoarea ​linie in ''/​etc/​bash.bashrc''​ (pentru a fi disponibil tuturor utilizatorilor):​ + ​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> +<code bash>  
- ​export JAVA_HOME=/​usr/​lib/​jvm/​java-<​versiunea ​ta+  export JAVA_HOME=/​usr/​lib/​jvm/​java-<​versiunea ​undefined>  
-</​code>​ +</​code>​  
- unde valoarea variabilei ''​JAVA_HOME''​ este calea catre directorul unde aveti Java instalat. +  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 inceput, cum este functia ​''​main'' ​in C), trebuie ​sa scriem o clasa: + ​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ă
-<code java> +
-class HelloWorld ​ { +
-    public static void main(String[] args) { +
-        System.out.println(“Hello world!”);​ +
-    } +
-+
-</​code>​ +
- +
-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>  
- <​code>​ + class HelloWorld ​ {  
- java HelloWorld +     ​public static void main(String[] args) {  
-</​code>​ +         ​System.out.println(a€œHello world!”);  
-== Instalare Eclipse IDE ==+     }  
 + ​} ​ 
 +</​code>​  
 +   
 + ​Observăm că:  
 + * o clasă se definește prin listarea metodelor, cuprinse între acolade, după declararea ei prin cuvântul cheie ''​class''​ urmat de numele clasei.  
 + * 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  
 +   
 + ​Salvăm textul ca ''​HelloWorld.java''​. Compilăm programul cu: 
  
-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.txt · Last modified: 2018/10/01 01:14 by Laurentiu Stamate