This shows you the differences between two versions of the page.
poo-ca-cd:laboratoare:poo-java [2020/08/17 18:50] florin.mihalache |
poo-ca-cd:laboratoare:poo-java [2021/09/04 23:05] (current) florin.mihalache [Download] |
||
---|---|---|---|
Line 13: | Line 13: | ||
| | ||
**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ă: | **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ă 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ă) | + | * 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ă 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ă) | + | * 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. | 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. | ||
Line 27: | Line 27: | ||
| | ||
Java a pornit că o platformă de programare pentru sisteme embedded. Țelurile principale ale proiectului erau: | Java a pornit că o platformă de programare pentru sisteme embedded. Țelurile principale ale proiectului erau: | ||
- | * **independența** de sistem | + | * **independența** de sistem |
- | * utilizarea **POO**. | + | * utilizarea **POO**. |
Astăzi, Java este folosită mai mult că o platformă pentru Internet și a atins o utilizare impresionantă. | 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: | 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 **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** | + | * 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 **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'') | + | * 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: | **Workflowul** este următorul. Dezvoltatorul instalează **Java Development Kit** (''JDK'') care constă în principal din: | ||
- | * **Java Runtime Environment** (''JRE''), ce conține ''JVM'' | + | * **Java Runtime Environment** (''JRE''), ce conține ''JVM'' |
- | * **compilator**. | + | * **compilator**. |
Compilatorul este aplicat codului scris și se obțin fișiere conținând bytecode. Aceste fișiere au în Java extensia ''.class''. | 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: | Diagrama, până acum, arată astfel: | ||
| | ||
- | ''Clasamea.java'' ----compilare---> ''Clasamea.class'' [ pe mașina de dezvoltare ] | + | ''Clasamea.java'' -> compilare -> ''Clasamea.class'' [ pe mașina de dezvoltare ] |
| | ||
Acest pas corespunde cu invocarea compilatorului astfel: | Acest pas corespunde cu invocarea compilatorului astfel: | ||
Line 55: | Line 55: | ||
| | ||
Diagrama arată așa: | Diagrama arată așa: | ||
- | | + | |
- | ---------------------------------------------------------------------- | + | * flow de bytecode -> JRE -> flow instrucțiuni native |
- | | flow de bytecode | ------> | JRE | ----> | flow instrucțiuni native | | + | |
- | ---------------------------------------------------------------------- | + | |
- | | + | |
Pasul corespunde cu invocarea mașinii virtuale astfel: | Pasul corespunde cu invocarea mașinii virtuale astfel: | ||
| | ||
Line 73: | Line 71: | ||
| | ||
| | ||
- | {{alte-resurse:poo-java:jvm.gif?450| Flow-ul Java}} | + | {{ poo-ca-cd:alte-resurse:poo-java:jvm.gif?450 | Flow-ul Java}} |
Line 119: | Line 117: | ||
Segmentele de memorie inițiale, precum și parametri de rulare sunt ilustrați mai jos. | Segmentele de memorie inițiale, precum și parametri de rulare sunt ilustrați mai jos. | ||
- | {{ :laboratoare:java-basics:jvm.jpg?nolink |Java VM memory }} | + | {{ poo-ca-cd:laboratoare:java-basics:jvm.jpg?nolink |Java VM memory }} |
Line 147: | Line 145: | ||
==== Hello World ==== | ==== Hello World ==== | ||
- | Pentru a începe dezvoltarea avem nevoie de ''JDK'' pe care îl găsim pe site-ul [[:poo-ca-cd: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 î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): | Pentru a seta variabilele de mediu în Linux adăugați următoarea linie în ''/etc/bash.bashrc'' (pentru a fi disponibil tuturor utilizatorilor): | ||
Line 182: | Line 180: | ||
<code> java HelloWorld | <code> java HelloWorld | ||
</code> | </code> | ||
- | == Instalare Eclipse IDE == | + | ==== Instalare IntelliJ 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. | + | Pentru Java există mai multe medii de dezvoltare dintre care noi recomandăm IntelliJ datorită plugin-urilor disponibile. IntelliJ oferă plugin-uri și pentru Python, JavaScript, etc. |
| | ||
- | Eclipse poate fi download-at de [[:poo-ca-cd:http://eclipse.org/downloads/ |aici]]. Pentru instalare vă recomandăm acest [[:poo-ca-cd:http://www.vogella.de/articles/Eclipse/article.html | tutorial]]. | + | IntelliJ poate fi download-at de [[https://www.jetbrains.com/idea/download/ |aici]]. Pentru instalare vă recomandăm acest [[https://ocw.cs.pub.ro/courses/poo-ca-cd/resurse-utile/instalare-intellij-idea | tutorial]]. |
====Download==== | ====Download==== | ||
- | * [[http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html |JDK]] | + | * [[https://jdk.java.net/17/ |JDK]] |
- | * [[http://eclipse.org/downloads/packages/eclipse-ide-java-developers/indigosr2 |Eclipse]] | + | * [[https://www.jetbrains.com/idea/download/ |IntelliJ]] |