Section: Section 0 | AI.PIP21.1 Programare independentă de platformă | ELSE

  • Teorie 1 2 Lucrari practice 1 2 3 4 5 Lucru individual ... Evaluări ...
    • T1. Introducere & ecosistemul Java

      Obiective
      • înțelegerea principiului „write once, run anywhere” și rolul JVM;
      • identificarea componentelor JDK/JRE și a fluxului de build & run;
      • configurarea mediului (JDK, IDE, CLI) și rularea primului program;
      • cunoașterea versiunilor LTS și a managementului de versiuni.
      Cuvinte-cheie: JDK JRE JVM Bytecode JIT LTS CLI IDE
      JDK: kitul pentru dezvoltatori (include javac, instrumente și biblioteci).
      JRE: mediul de rulare (JVM + biblioteci) necesar execuției.
      JVM: mașina virtuală care execută bytecode pe orice platformă.
      Bytecode: cod intermediar generat de javac, portabil.
      JIT: compilare „Just-In-Time” pentru secvențe frecvente, crește performanța.
      LTS: versiuni cu suport extins (ex.: 8, 11, 17, 21).
      CLI: linie de comandă pentru build/rulare scriptată.
      IDE: medii integrate (IntelliJ, Eclipse, VS Code) cu editor și debug.

      T2. Structura lexicală a limbajului Java

      Obiective
      • recunoașterea tokenilor: identificatori, cuvinte-cheie, literali, operatori;
      • aplicarea regulilor de denumire (camelCase, PascalCase);
      • utilizarea corectă a separatoarelor și a comentariilor;
      • înțelegerea rolului spațiilor albe în parsing.
      Cuvinte-cheie: Identificator Literal Operator Separator Comentariu CamelCase Cuvânt-cheie
      Identificator: nume pentru clase/metode/variabile; nu începe cu cifră.
      Literal: valoare scrisă direct (numerică, booleană, caracter, șir, null).
      Operator: simbol al unei operații (aritmetică, logică, relațională).
      Separator: semne de punctuație: ;, ,, (), {} etc.
      Comentariu: // linie, /* */ bloc, /** */ Javadoc.
      CamelCase: prima literă mică, cuvintele interne capitalizate.
      Cuvânt-cheie: termen rezervat (ex.: class, if, return).

      T3. Tipuri de date. Controlul execuției. Vectori

      Obiective
      • clasificarea tipurilor primare și de referință;
      • utilizarea structurilor de control (if, switch, bucle);
      • inițializarea și parcurgerea vectorilor 1D/2D;
      • gestionarea conversiilor (widening/narrowing) și autoboxing;
      • aplicarea scurtcircuitării logice.
      Cuvinte-cheie: Primitive Referință Autoboxing Switch For-each Array 2D Short-circuit
      Primitive: byte, short, int, long, float, double, char, boolean.
      Referință: obiecte și tablouri; variabila stochează o adresă din heap.
      Autoboxing: conversie automată între primitive și tipurile wrapper.
      Switch: selecție multiplă (inclusiv pe String).
      For-each: parcurgere simplificată pentru colecții/tablouri.
      Array 2D: tablouri de tablouri (matrici), inclusiv neregulate (jagged).
      Short-circuit: evaluare parțială la && și ||.

      T4. Obiecte și clase în Java. Organizarea claselor

      Obiective
      • definirea claselor cu câmpuri, constructori și metode;
      • aplicarea încapsulării și a modificatorilor de acces;
      • utilizarea moștenirii și a polimorfismului;
      • organizarea pe pachete și convenții de proiect;
      • implementarea toString(), equals(), hashCode().
      Cuvinte-cheie: Clasă Obiect Încapsulare Moștenire Polimorfism Pachet Constructor
      Clasă: șablon pentru structură (câmpuri) și comportament (metode).
      Obiect: instanță creată cu new sau fabrici.
      Încapsulare: ascunderea detaliilor interne și expunere controlată (gettere/settere).
      Moștenire: relație is-a pentru reutilizare/extindere.
      Polimorfism: comportamente diferite prin aceeași interfață.
      Pachet: grupare logică de clase; ajută la organizare și controlul accesului.
      Constructor: inițializează obiectul; poate fi supraîncărcat.

      T5. Interfața grafică cu utilizatorul

      Obiective
      • înțelegerea AWT/Swing/JavaFX;
      • gestionarea evenimentelor și a firului UI;
      • utilizarea layout-urilor și a componentelor de bază;
      • separarea prezentării (MVC simplificat);
      • crearea unei ferestre simple cu interacțiuni.
      Cuvinte-cheie: Swing JavaFX Event handling Layout Thread UI MVC
      Swing: toolkit GUI bazat pe AWT; componente ușoare, portabile.
      JavaFX: framework modern (scene graph, FXML, stilizare de tip CSS).
      Event handling: model ascultător/observator pentru click/tastatură.
      Layout: BorderLayout, Grid, VBox/HBox etc., pentru aranjarea componentelor.
      Thread UI: fir dedicat actualizărilor vizuale; evită blocările.
      MVC: separare Model-View-Controller pentru claritate și testabilitate.

      T6. Fire de execuție

      Obiective
      • crearea și pornirea firelor (Thread, Runnable);
      • sincronizare și probleme de concurență;
      • utilizarea executors și thread pools;
      • gestionarea întreruperilor și a ciclului de viață;
      • evitarea condițiilor de cursă și a deadlock-urilor.
      Cuvinte-cheie: Thread Runnable Synchronized Volatile Executor Deadlock Race condition
      Thread: unitate de execuție concurentă.
      Runnable: interfață ce furnizează logica executabilă unui fir.
      Synchronized: control pentru acces exclusiv la resurse partajate.
      Volatile: garantează vizibilitatea scrierilor între fire.
      Executor: abstractizează crearea/gestionarea firelor (pool-uri).
      Deadlock: blocaj reciproc între fire.
      Race condition: rezultate nedeterminate din intercalări necontrolate.

      T7. Programare în rețea

      Obiective
      • modelul client–server și protocoalele TCP/UDP;
      • comunicare cu socket-uri;
      • I/O blocant vs. non-blocant (NIO);
      • serializarea datelor pentru transport;
      • gestionarea erorilor și timeout-urilor.
      Cuvinte-cheie: Socket ServerSocket TCP UDP NIO Serialization Timeout
      Socket: capăt de conexiune pe client.
      ServerSocket: ascultă conexiuni de la clienți (TCP).
      TCP: protocol orientat pe conexiune, fiabil și ordonat.
      UDP: protocol fără conexiune, rapid, fără garanții.
      NIO: API pentru I/O non-blocant (canale + buffere).
      Serialization: transformarea obiectelor în flux de octeți.
      Timeout: limită de timp pentru operații de rețea.

      T8. Lucrul cu baza de date

      Obiective
      • conectarea la DB prin JDBC și executarea interogărilor;
      • mapare obiect-relațională (JPA/Hibernate);
      • gestionarea tranzacțiilor și a conexiunilor;
      • prevenirea SQL Injection (prepared statements);
      • modelarea simplă a schemelor și relațiilor.
      Cuvinte-cheie: JDBC Driver PreparedStatement ResultSet Transaction JPA Hibernate
      JDBC: API standard pentru conectare/lucru cu DB.
      Driver: adaptor specific (ex.: PostgreSQL, MySQL) pentru JDBC.
      PreparedStatement: interogare parametrizată, sigură și eficientă.
      ResultSet: cursor peste rezultatele unei interogări.
      Transaction: grup de operații cu garanții ACID.
      JPA: specificație ORM pentru mapare obiect-relațională.
      Hibernate: implementare JPA cu HQL și caching.

      T9. Lucrul dinamic cu clase

      Obiective
      • inspectarea tipurilor la rulare cu Reflection API;
      • încărcare dinamică de clase cu ClassLoader;
      • invocare de metode și acces la câmpuri dinamic;
      • utilizarea adnotărilor (annotations) și meta-informației;
      • înțelegerea riscurilor și costurilor de performanță.
      Cuvinte-cheie: Reflection ClassLoader Annotation Method Field Proxy Security manager
      Reflection: interogarea/manipularea tipurilor/obiectelor la runtime.
      ClassLoader: mecanismul JVM care încarcă bytecode în memorie.
      Annotation: meta-date atașate tipurilor/membrilor; procesabile la runtime/compile-time.
      Method: reprezentare reflectivă a unei metode pentru invocare dinamică.
      Field: reprezentare reflectivă a unui câmp; permite citire/scriere.
      Proxy: obiect dinamic care interceptează apeluri către o interfață.
      Security manager: control al permisiunilor (depreciat în versiunile recente).