Sunteți pe pagina 1din 19

Modulul: Programarea Orientată spre Obiecte CEITI

Capitolul 1. Noțiuni fundamentale ale limbajului Java.


UC2. Editarea fragmentelor de program
La finele capitolului elevul va fi capabil să:
- selecteze mediul de dezvoltare a aplicațiilor și a editoarelor respective.
- identifice cuvintele cheie ale limbajului de programare
- inițializeze variabile cu valori prestabilite
- utilizeze operatori și operanzi la prelucrarea datelor
- realizeze conversii de date conform specificațiilor propuse
- identifice părțile componente ale unui program
- citească datele conform specificațiilor propuse
- afișeze datele conform specificațiilor propuse
- transleze algoritmi cu utilizarea structurilor de control în limbajul de programare Java

1.1 Limbajul de programare Java

Implică-te și studiază, informează-te!

Programarea orientată spre obiecte (POO) este o tendință nouă de


programare în care programele sunt organizate ca colecții de obiecte ce
cooperează între ele. POO modelează obiecte din lumea reală. Programele
sunt mult mai complexe și ușor de întreținut și modificat. Simplifică lucrul în
echipă la un program.
Un limbaj de programare complet orientat spre obiecte este limbajul
Java, un limbaj actual, de nivel înalt cu o popularitate imensă. Inițial a fost numit
OAK dezvoltat de compania JavaSoft, de către James Gosling, în cadrul firmei
SunMicrosystems, în 1995. În 2010, Oracle a achiziționat Sun Microsystems și a
preluat toate produsele și tehnologiile acestora, inclusiv Java.
Limbajul Java este versatil și poate fi folosit pentru dezvoltarea unei game variate de
aplicații, inclusiv:
Aplicații desktop: Java poate fi utilizat pentru crearea de aplicații desktop cu interfețe grafice.
AWT (Abstract Window Toolkit) și Swing sunt două biblioteci Java populare pentru
dezvoltarea interfețelor grafice.
Aplicații web: Java este folosit în dezvoltarea de aplicații web, fie prin intermediul
servletelelor (clase Java care extind capacitățile serverului web pentru a gestiona cereri și
răspunsuri HTTP) sau prin folosirea framework-urilor precum Spring, Java Server Faces (JSF)
sau Play Framework.
Aplicații mobile: Dezvoltarea de aplicații mobile Android se face adesea în Java, utilizând
Android SDK și Android Studio.
Servicii web: Java este folosit pentru crearea de servicii web, atât pentru dezvoltarea API-
urilor (Application Programming Interface), cât și pentru implementarea serverelor care
gestionează cererile și oferă răspunsuri.
musteata.victoria@ceiti.md 1 ©Musteață Victoria
Modulul: Programarea Orientată spre Obiecte CEITI
Baze de date: Există numeroase biblioteci și framework-uri Java care facilitează interacțiunea
cu bazele de date, cum ar fi JDBC (Java Database Connectivity), Spring Data, Hibernate,
permițând dezvoltatorilor să creeze aplicații care interacționează eficient cu diferite sisteme
de gestiune a bazelor de date.
Aplicații pentru Internetul lucrurilor (IoT): Java este utilizat în dezvoltarea aplicațiilor pentru
IoT datorită capacității sale de a gestiona diverse dispozitive și comunicații.

Sunt furnizate 4 platforme Java de către Oracle:


Java SE (Standard Edition). Platforma de bază a limbajului ce oferă un set de biblioteci și
instrumente pentru dezvoltarea de aplicații desktop și aplicații independente de platformă.
Java EE (Enterprise Edition). Extensie a platformei Java SE, adaptată pentru dezvoltarea de
aplicații enterprise. Include un set de specificații și API-uri pentru a dezvolta aplicații web și
enterprise complexe, care implică gestionarea tranzacțiilor, securitatea și alte aspecte
legate de aplicațiile de business.
Java ME (Micro Edition). Platformă destinată creării aplicațiilor pentru telefoane mobile sau
dispozitivele IoT.
JavaFX. Platformă pentru construirea de aplicații GUI (Graphical User Interface) și aplicații
RIA (Rich Internet Applications).

Limbajul Java este definit de următoarele caracteristici principale:


Portabilitate. Datorită mașinii virtuale Java (JVM), Java este un limbaj independent de
platforma de lucru, ceea ce înseamnă că aceeași aplicație rulează fără nici o modificare pe
sisteme diferite cum ar fi Windows, Linux, ș.a, fapt ce aduce economii substanțiale
companiilor. Sloganul de bază fiind ,,Write once, run anywhere”.
Orientat pe obiecte. Java este un limbaj de programare orientat pe obiecte, în care totul
este tratat ca un obiect, facilitând astfel structurarea și organizarea codului.
Sintaxă simplă și familiară. Sintaxa Java este similară cu cea a altor limbaje precum C++ sau
C#, ceea ce face mai ușoară învățarea pentru cei care au experiență cu alte limbaje.
Caracteristicile ca moștenirea multiplă, șabloanele, întâlnite în alte limbaje de programare
au fost eliminate.
Securitate: Java are un sistem puternic de securitate integrat care protejează împotriva
executării de cod rău intenționat.
Gestionarea automată a memoriei. Java are un sistem de gestionare automată a memoriei
prin colectarea de gunoi (Garbage Collector), eliminând necesitatea dezvoltatorului de a
gestiona manual memoria.
Bibliotecă extinsă. Include o bibliotecă standard (Java Standard Library) bogată, care oferă
funcționalități pentru diverse sarcini, cum ar fi lucrul cu fișiere, rețele, criptografie, interfețe
grafice etc.
Multi-threading. Suportă programarea multi-threading, permițând executarea simultană a
mai multor fire de execuție în cadrul unei aplicații.
Aceste caracteristici sunt doar câteva dintre motivele pentru care Java este adesea alegerea
preferată în dezvoltarea de software, în special pentru aplicații mari și complexe. Flexibilitatea,
portabilitatea și securitatea sa sunt aspecte cheie care îl fac să fie utilizat într-o gamă largă de
domenii și aplicații.
musteata.victoria@ceiti.md 2 ©Musteață Victoria
Modulul: Programarea Orientată spre Obiecte CEITI
Pentru a dezvolta programe Java este nevoie de următoarele resurse:
JDK (Java Development Kit)1 ce include setul de aplicații necesare dezvoltării programelor
Java.
Editor de cod performant ca de exemplu NetBeans2, Eclipse3, Intellij IDEA4, ș.a.

Analizează și discută!

Căutați în Internet informație recentă despre clasamentul internațional al celor mai


căutate limbaje de programare. Limbajul Java ce loc ocupă în clasament? Cum considerați de ce?
Căutați în Internet informație în acest sens. Pregătiți o prezentare electronică, împreună cu 3
colegi din clasă, în care ilustrați avantajele limbajului Java. Păstrați prezentarea în portofoliul dvs
digital.

Evaluează-te!

1. Scrieți în caiet următoarea informație referitoare la limbajul de programare Java:


- cinci tipuri de aplicații ce pot fi create cu ajutorul limbajului
- patru platforme ce permit crearea aplicațiilor
- cinci caracteristici principale ale limbajului
- resursele necesare creării și rulării programelor.
2. Creați în spațiul online Google Drive portofoliu digital pentru unitatea de curs POO.
3. Creați în portofoliul digital dicționarul ,,Dicționar Limbajul Java”. Completați dicționarul cu
următoarele noțiuni însoțite de descrierea lor: POO, API, portabilitate, GUI, Garbage
Colector, JDK.

Știați că...
1. în prezent, Netflix este una dintre cele mai cunoscute și mai mari platforme de divertisment din întreaga
lume, oferind filme și seriale TV prin streaming media. Și majoritatea aplicațiilor Netflix folosesc Java (cu
puțin C++)?
2. în Java, NASA a creat aplicația Word Wind care are un glob virtual 3D și afișează date geografice.
Programul folosește imagini aeriene de la sateliți pentru a construi modele 3D ale planetelor. Cel mai
important, este un software open-source și, deoarece este scris în Java, acceptă orice SO.
3. jocul extrem de popular, Minecraft, a fost inițial scris în Java? Chiar dacă o parte din el a fost
transformată în cod nativ pentru performanță, multe părți ale Minecraft rămân scrise în Java.
4. anumite componente ale infrastructurii Twitter au fost construite în Java, inclusiv unele servicii și
sisteme de gestionare a datelor?
5. o parte din infrastructura și funcționalitățile din spatele aplicației Google Docs sunt construite folosind
Java?
6. unele aplicații Java sunt utilizate pentru vizualizarea și procesarea imaginilor medicale, precum
tomografii computerizate (CT), imagistica prin rezonanță magnetică (MRI) sau imagini radiologice?

1
https://www.oracle.com/java/technologies/downloads/
2
https://netbeans.apache.org/front/main/
3
https://www.eclipse.org/downloads/
4
https://www.jetbrains.com/edu-products/download/#section=idea
musteata.victoria@ceiti.md 3 ©Musteață Victoria
Modulul: Programarea Orientată spre Obiecte CEITI
1.2 Structura lexicală a limbajului Java
Implică-te și studiază, informează-te!
1.2.1 Setul de caractere
Limbajului Java folosește setul de caractere Unicode. Acesta fiind un standard
internațional care înlocuiește vechiul set de caractere ASCII, deoarece a apărut
necesitatea de a reprezenta mai mult de 256 de caractere. Setul de caractere Unicode, fiind
reprezentat pe 16 biți oferă posibilități mult mai mari. Ceea ce înseamnă că pot fi folosite caractere
în limbile chineză, japoneză și alte limbi. La citirea fişierului sursa, compilatorul Java folosește
secvențele escape Unicode. Acestea sunt secvențe de caractere ASCII care încep cu caracterul
backslash (\), după care urmează al doilea caracter din secvență care trebuie să fie u sau U,
urmate de o combinație de patru cifre hexazecimale care formează împreună doi octeți de
memorie reprezentând un caracter Unicode. De exemplu, cifrele de la 0 la 9 sunt reprezentate prin
secvențe escape Unicode de la \u0030 la \u0039 și sunt interpretate ca cifre ISO-LATIN-1.
Anumite caractere sunt reprezentate prin secvențe escape speciale:
\n - linie noua \\ - backslash
\b - backspace \” - ghilimele
\t - tab \’ - apostrof

Adăugător despre secvențele Escape: https://www.javatpoint.com/java-escape-characters

1.2.2 Identificatori
Reprezintă șiruri de caractere care sunt de fapt denumirile date unei variabile, clase sau unei
funcții. Condiții:
▪ şirul începe cu o literă, caracterul underscore (_) sau semnul dolarului ($);
▪ şirul este diferit de orice cuvânt cheie sau rezervat;
▪ şirul este diferit de null, false, true.
▪ șirul este case-sensitive, astfel identificatorii suma și Suma sunt considerați identificatori
diferiți.
Deși nu există o regulă obligatorie pentru scrierea identificatorilor, există anumite convenții
utilizate:
identificatorii numelor de clase încep cu majusculă, fiecare cuvânt distinct din identificator
începe cu majuscula (ex. MijloaceDeTransport);
identificatorii de variabila și metode încep cu litera mică, fiecare cuvânt care urmează
începe cu majusculă (ex. setezCuloare());
identificatorii de constante se scriu cu majuscule (ex. PI_VALOARE);
Menținerea unei convenții clare și respectarea regulilor de denumire a identificatorilor nu doar
facilitează înțelegerea codului, dar și îmbunătățește claritatea și întreținerea acestuia.

1.2.3 Cuvinte cheie


Limbajul de programare Java conține 50 cuvinte rezervate ce au o semnificație specială pentru
compilator și nu pot fi utilizate în calitate de identificatori pentru variabile. Acestea sunt
prezentate în tabelul de mai jos în ordine alfabetică:

musteata.victoria@ceiti.md 4 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI
abstract assert boolean break byte case
catch char class const continue default
do double else enum extends final
finally float for goto if implements
import instanceof int interface long native
new package private protected public return
short static strictfp super switch synchronized
this throw throws transient try void
volatile while
În tabelul următor vom prezenta o listă a cuvintelor rezervate grupate după categorie:
Categorie Cuvânt rezervat
Modificatori de acces private, public, protected
Modificatori de clasă, abstract, class, extends, final, implements, new,
metodă și variabilă interface, native, static, strictfp, synchronized,
transient, volatile
Controlul execuției break, case, continue, default, do, else, for, if,
instanceof, return, switch, while
Lucru cu pachetele import, package
Tipuri de date primitive boolean, byte, char, double, float, int, long,short
Tratarea erorilor assert, catch, finally, throw, throws, try
Enumerare enum
Alte super, this, void
Nefolosite const, goto
După cum am menționat cuvintele rezervate au semnificație specială pentru compilatorul Java,
de aceea la folosirea lor se va ține cont de următoarele reguli:
▪ const și goto sunt cuvinte rezervate ce nu se mai folosesc;
▪ true, false și null sunt literali nu cuvinte rezervate;
▪ toate cuvintele rezervate sunt compuse din litere mici;
1.2.4 Literali
Reprezintă valori constante de diferite tipuri de date primitive (întreg, caracter etc).
1.2.5 Separatori
Sunt utilizați pentru a separa unitățile lexicale unele de altele. Aceștia sunt: ( ) { } [ ] ; , .
1.2.6 Comentarii
Comentariile nu reprezintă rânduri de cod sursă. Acestea nu sunt executate de către
compilator. Acestea oferă informații programatorului astfel încât programul să fie ușor de înțeles
și menținut. Orice program Java începe cu un scurt comentariu ce oferă o informație relevantă
despre clasa creată. De obicei acesta arată în felul următor:
/* Acesta este un comentariu de mai multe linii
Filename: Denumirea programului
Version:
Created by: Numele programatorului
Created on: Data creării
Updated on: Data modificării
Comment: Descrierea generală a destinației programului
*/

musteata.victoria@ceiti.md 5 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI
În Java putem folosi modalitățile de mai jos pentru a adăuga comentarii în codul sursă:
/* comentariu de o linie */
//alt comentariu de o linie
/* comentariu de mai
* multe linii */
1.2.7 Operatori
Operatorii sunt utilizați pentru a exprima diferite formule elementare de calcul sau
prelucrare a informației și sunt folosiți alături de literali, variabile, apeluri de metode şi alte
expresii. Operatorii se pot clasifica în următoarele categorii:
▪ Operatori aritmetici (+, -, *, /, %, ++, --)
▪ Operatori relaționali sau de comparație (<=, ==, >=, >, !=)
▪ Operatori booleeni (&&, ||, !, &, !, ^, |, &)
▪ Operatori la nivel de bit (&, |, ^, ~, <>, >>>)
▪ Operatorul de concatenare a String-urilor (+)
▪ Operatori de atribuire (=, +=, -=, *=, ...)
▪ Operatorul de conversie explicită ( (tip_date) )
▪ Operatori speciali (instanceof , ternar)
Operatorul ternar are următoarea formă generală: boolean_exp ? value0 : value1.
Dacă boolean_exp are valoarea true atunci value0 este valoarea returnată de operație.
Invers, dacă boolean_exp este false, value1 este cea returnată.
De exemplu:
int a;
boolean cond=true; a=cond ? 5 : 6; //a va primi valoarea 5
cond=false; a=cond ? 5 : 6; //a va primi valoarea 6
Operatorul instanceof este folosit pentru a testa dacă un obiect este de o anumită clasă
sau nu. Forma generală este: object instanceof className
Returnează true dacă obiectul object este de clasă className sau de o clasă derivată din
aceasta şi false dacă nu. De exemplu:
Random rand = new Random ( );
boolean cond;
cond = rand instanceof Random; //cond va primi valoarea true

1.2.8 Structura generală a unui program Java


Limbajul de programare Java este un limbaj complet orientat spre obiecte. Codul sursă este
editat doar în interiorul unei clase, NU există cod în exteriorul claselor. Structura completă a unei
clase Java vom examina în una din temele viitoare.
Vorbind despre structura programelor Java, este necesar de menționat metoda main(...)
esențială în testarea claselor create. O aplicație Java poate fi alcătuită din o singură clasă sau mai
multe clase, însă pentru toate există o singură metodă main(...) în care se vor instanția clasele
create și se vor testa metodele programate. De obicei această metodă este încadrată într-o clasă
specială de testare, însă se poate afla în clasa de bază.
Deci la general structura unui program Java este următoarea:

musteata.victoria@ceiti.md 6 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI

Elementele ce alcătuiesc semnătura metodei au următoarea semnificație:


✓ public – este un modificator de acces. În cazul dat specifică că JMV poate accesa metoda de
oriunde.
✓ static – este un modificator de tip, specifică că metoda aparține clasei și pentru ca această să fie
apelată nu este nevoie de crearea unei instanțe. Vom studia acest modificator în următoarele teme.
✓ void – este tipul de return al metodei. Metoda nu returnează nimic.
✓ main – denumirea metodei configurată în JVM.
✓ String [] args – lista de parametri a metodei. Argumentul args de tip vector de şiruri de
caractere este folosit pentru a prelua parametrii din linia de comandă atunci când aceştia există. Dar,
chiar și în cazul în care nu se dorește preluarea argumentelor în acest mod, acest argument nu trebuie
să lipsească, este obligatoriu.
Reguli importante!
1. Într-un fișier *.java se pot afla orice număr de clase, însă doar un poate fi publică.
2. Daca într-un fișier *.java se află o clasă publică atunci numele fișierului trebuie să coincidă
cu numele clasei publice.
3. În cazul în care o clasă nu conține metoda main() se va crea o clasă test ce conține metoda
main() pentru această.
4. Compilatorul recunoaște următoarele semnături ale metodei main(): public static
void main(String a[]), public static void main(String[] a) public
static void main(String... a), static public void main(String a[]),
static public void main(String[] a), static public void
main(String... a), public static void main(final String[] args),
public final static void main(String[] args), public synchronized
static void main(String[] args), public strictfp static void
main(String[] args).
5. Semnătura metodei main() nu poate fi modificată după bunul plac al oricărui
programator, orice modificare va crea eroare de execuție.
6. Programatorul poate crea metodă denumită main() cu o altă semnătură. Eroare de
compilare nu va fi afișată. Însă în cazul în care aceasta va fi executată se va obține eroare
de execuție, asemănătoare cu cea prezentată mai jos, în care vom fi atenționați că
programul nu poate fi executat pentru că lipsește metoda main():
Error: Main method not found in class PrimulProgram, please define
the main method as: public static void main(String[] args)

musteata.victoria@ceiti.md 7 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI
Toate clasele Java sunt organizate în pachete reeșind din funcționalitatea acestora. Pachetul
este o bibliotecă de fișiere, însă conceptorii limbajului preferă să fie numit pachet și nu bibliotecă.
În calculator pachetul este un dosar obișnuit.
Un pachet conține un set de clase, enumerări și interfețe înrudite. De exemplu, pachetul
java.io conține clasele cu ajutorul cărora pot fi gestionate operațiile de intrare/ieșire, iar clase
de lucru cu interfețele grafice cu utilizatorul sunt grupate în pachetul java.awt.
În Java sunt 2 tipuri de pachete:
1. Pachete standarte (built-in packages) – sunt pachetele ce deja există ca parte componentă a
JRE (Java Runtime Environment – mediul de programare Java). Câteva pachete standarde în
Java:
java.lang Conține clasele de bază a limbajului Java. Este importat automat la crearea
oricărei clase astfel aceasta are acces a clasele din acest pachet fără a fi
nevoie de specificat acest lucru explicit.
java.net Conține clase de lucru pentru resursele de rețea.
java.sql Conține clase de lucru cu bazele de date.
java.time Conține clase ce permit gestionarea datelor calendaristice, timpului,
perioadelor.
java.util Conține un set de clase utilitare ce permit lucru cu structurile de date
(Vector, Stack, List, LinkedList, etc), crearea numerelor aliatoare
( Random), citirea datelor de la tastatură (Scanner), etc
Pentru a folosi clasele unui pachet, acesta trebuie importat folosind sintaxa:
import nume_pachet;
De exemplu:
import java.util.Vector; // se va importa clasa Vector din pachetul util
import java.util.*; // se vor importa toate clasele din pachetl util
2. Pachete definite de programator. Un pachet poate fi creat fie cu ajutorul unui IDE, fie prin
crearea unui dosar în calculator (denumirea dosarului este denumirea pachetului).

Reguli importante!
1. Prima linie dintr-un fișier Java este declarația pachetului clasei. În caz că declarație este
omisă clasa face parte din pachetul implicit.
2. Declararea pachetului pe oricare altă linie din fișierul Java va genera eroare de compilare.
3. Dacă o clasă aparține pachetului implicit aceasta nu va putea fi importată sau folosită în
oricare alt pachet.

Analizează și discută!
Folosind cunoștințele acumulate anterior în cadrul altor module creați în caiete o
diagramă Venn cu titlul Structura lexicală a limbajului, în care comparați structura lexicală a
limbajelor Java și C++.

musteata.victoria@ceiti.md 8 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI

Evaluează-te!

1. Care este caracterul utilizat pentru separarea instrucțiunilor în Java?


a) , (virgulă) c) . (punct)
b) ; (punct și virgulă) d) : (colon)
2. Ce simbol este folosit pentru începutul unui comentariu pe o singură linie în Java?
a) // b) /* c) <!-- d) –
3. Care dintre următoarele este un operator de atribuire în Java?
a) + b) == c) = d) !=
4. Adevărat sau Fals: În Java, sfârșitul unei instrucțiuni este marcat de semnul punct și
virgulă ;.
5. Adevărat sau Fals: Variabilele în Java pot începe cu un număr.
6. Ce caracteristică specifică are operatorul ternar în Java?
a) Are trei operatori
b) Lucrează doar cu numere întregi
c) Este o formă de instrucțiune condițională
d) Este folosit doar pentru operații pe șiruri de caractere

1.3 Tipuri de date şi variabile. Clase Wrapper


Implică-te și studiază, informează-te!
În Java există 2 tipuri generale de date:
▪ primitive (byte, short, int, long, float, double, char, boolean)
▪ referință (obiectele , vectorii, String)
Tipurile primitive sunt tipuri de date fundamentale ce nu mai pot fi descompuse în alte
subtipuri. În Java există 8 tipuri de date primitive:
Tip Dimensiune Valori cu semn Tip
byte 1 byte -128 ... 127 întreg
short 2 bytes -32768 ... 32767 întreg
int 4 bytes -2147483648 ... 2147483647 întreg
long 8 bytes -9,223,372,036,854,775,808 ... întreg
9,223,372,036,854,775,807
float 4 bytes 7 cifre semnificative real simplă precizie
double 8 bytes 15 cifre semnificative real dublă precizie
char 2 bytes ‘\u0000’ … ‘\uffff’, 0 … 65535 Caracter Unicod pe 16 biți
boolean 1 bit true sau false logic

Variabilele în Java sunt de 3 tipuri:


- locale, declarate în interiorul unei metode
- de instanță, declarată în interiorul clasei dar înafara metodei. Nu este declarată folosind
cuvântul rezervat static.
- de clasă (statice), declarată ca static, nu poate fi locală.
musteata.victoria@ceiti.md 9 ©Musteață Victoria
Modulul: Programarea Orientată spre Obiecte CEITI
Pentru a defini o variabila se folosește sintaxa:
tip_variabila nume_variabila;
unde:
tip_variabila – unul din cele 8 tipuri primitive sau un tip definit de programator prin clase;
nume_variabila – numele variabilei definit de programator;

Reguli importante!
numele variabilei trebuie sa înceapă cu o literă, linie de subliniere (_) sau cu simbolul dolar
($);
numele de variabilă NU poate începe cu o cifră, după primul caracter se pot folosi cifre;
numele de variabila NU poate fi un cuvânt Java rezervat;
variabila trebuie definită oriunde în program înainte de a fi folosită;
pot fi definite mai multe variabile în același timp;
De exemplu:
int a; double c, d, e; boolean $c; short _x;
La inițializarea unei variabile trebuie să se țină cont de tipul acesteia, deoarece în Java NU este
posibil atribuirea de valori de tip diferit decât cel al variabilei. De exemplu, instrucțiunile
următoare generează eroare de compilare de tipul possible loss of precision:
int x = 34.5; float c = 23.6;
În cazul variabilei de tip float, c, eroare este generată deoarece valorile reale constante sunt
considerate de tip double. Corect este sa pui f la sfârșitul valorii, adică 23.5f.
Reguli!
tipul valorii trebuie sa fie identic cu tipul variabilei;
pot fi inițializate mai multe variabile în același timp;
în Java singurele valori posibile pentru variabile booleene sunt true sau false (în C sau
C++, orice valoare numerică diferită de 0 este considerată true);
valorile constante de tip float se definesc cu simbolul f la final deoarece, implicit,
constantele reale sunt considerate de tip double;
simbolurile de tip caracter se definesc între ’’ (apostrof) și nu între “ “ (ghilimele);
Pentru a defini o constantă se va folosi cuvântul cheie final:
De exemplu: final int D=3;
Pentru fiecare tip primitiv de date, în Java există câte o clasă ce îi este asociată numită clasă
wrapper sau clasă înfășurătoare. Acestea sunt:
Tip primitiv Clasa wrapper
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
Clasele Wrapper sunt utile atunci când trebuie să folosești tipuri de date primitive în
contexte care necesită obiecte. De exemplu, atunci când lucrezi cu colecții (cum ar fi ArrayList

musteata.victoria@ceiti.md 10 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI
sau HashMap) care pot stoca doar obiecte, iar nu tipuri de date primitive, clasele wrapper sunt
folosite pentru a împacheta acele valori primitive într-un obiect.
Aceste clase Wrapper oferă, de asemenea, metode și funcționalități adiționale pentru a
lucra cu acele tipuri de date, cum ar fi conversia între tipuri, compararea, extragerea valorilor și
multe altele. De exemplu, poți converti o valoare int într-un obiect Integer folosind
Integer.valueOf() sau poți obține valoarea int dintr-un obiect Integer folosind metoda
intValue().
La necesitate pot fi utilizate conversii între tipuri de date Java, numite cast-uri. Acestea sunt
de 2 tipuri:
1. implicite (conversiile realizate automat de limbajul Java). Implicit se convertesc:
byte la short, int, long, float, double;
short la int, long, float, double;
int la long, float, double;
char la int, long, float, double;
long la float, double;
float la double;
Exemplu: int i=3456; float f=i;

2. explicite (conversii setate de programator folosind sintaxa de conversie):


int i=897;
byte b=(byte) i; // sintaxa ce va realiza conversie explicita, numita cast
b=i; //eroare de compilare
Explicit se convertesc:
byte la char;
char la byte, short;
short la byte, char;
int la byte, short, char;
long la byte, short, char, int, long;
float la byte, short, char, int, long;
double la byte, short, char, int, long, float.

Analizează și discută!

Lucru în echipe! Dezbatere: Utilizarea Tipurilor de Date Primitive versus Clasele Wrapper în
programare. Una din echipe va prezenta argumente pentru folosirea tipurilor primitive de date,
cealaltă echipă va prezenta argumente pentru utilizarea claselor Wrapper.
Indicii:
− Fiecare echipă va prezenta argumentele sale în două runde, începând cu o introducere și
continuând cu argumentele principale.
− Se va acorda timp pentru contra-argumente și pentru întrebări de la cealaltă echipă.
− Dezbaterea se va finaliza cu concluzii și o rundă finală de întrebări deschise.

musteata.victoria@ceiti.md 11 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI

Evaluează-te!

1. Cum se declară o variabilă de tip întreg în Java?


a) integer num; c) number num;
b) int num; d) Int num;
2. Care este sintaxa corectă pentru a atribui o valoare unei variabile în Java?
a) x = 10; c) x := 10;
b) 10 = x; d) x == 10;
3. Adevărat sau Fals: Variabilele în Java trebuie să fie declarate înainte de utilizare.
4. Adevărat sau Fals: Sintaxa x = 10; verifică dacă x este egal cu 10 în Java.
5. Care dintre următoarele sunt tipuri de date primitive în Java?
a) String c) int e) Char
b) Boolean d) Float f) double

1.4 Operații de intrare/ieșire la nivel de consolă


Implică-te și studiază, informează-te!
Java folosește System.out pentru a se referi la un dispozitiv standard de ieșire a
datelor, care este monitorul, și System.in pentru dispozitiv standard de intrare a datelor, care
este tastatura.
Pentru a afișa valori de tip String sau primitive în consolă se va utiliza metoda
println().
Intrarea datelor direct de la tastatură nu este suportată de limbajul Java, dar se poate utiliza clasa
Scanner pentru a crea un obiect care va permite citirea de date de la System.in în felul
următor:
Scanner input = new Scanner(System.in);
Sintaxa new Scanner(System.in) crează un obiect de tip Scanner, iar sintaxa Scanner
input declară că input este o variabilă de tip Scanner. Întreaga linie Scanner input = new
Scanner(System.in); crează un obiect de tip Scanner căruia îi atribuie o referință la variabila
input. Obiectul input va putea invoca toate metodele clasei Scanner pentru a citi valori de
diverse tipuri:
Metodă Descriere
nextByte() Citește un întreg de tip byte
nextShort() Citește un întreg de tip short
nextInt() Citește un întreg de tip int
nextLong() Citește un întreg de tip long
nextFloat() Citește un număr de tip float
nextDouble() Citește un număr de tip double
next() Citește un șir de caractere care finisează până la spațiu
nextLine() Citește o linie de text, adică un șir de caractere care finisează cu tasta Enter.

musteata.victoria@ceiti.md 12 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI

Adăugător despre operații de intrare/ieșire la nivel de consolă:


1. https://www.youtube.com/watch?v=oAgifAbdWio
2. Y. Daniel Liang, Introduction to Java Programming 10th Edition, Pg.37

Analizează și discută!

Realizați un program C++ care va citi de la tastatură două numere după care va calcula
și va afișa suma acestora. Transformați acest program în limbaj Java.

Evaluează-te!

1. Care este utilitatea clasei Scanner?


2. Numiți metoda clasei Scanner ce poate fi utilizată pentru a citi un șir de caractere (până
la prima întâlnire a spațiului).
3. Care este sintaxa care va crea un obiect de tip Scanner destinat citiri datelor din consolă?
4. Care este instrucțiunea de afișare a unui text la ecranul calculatorului?
5. De ce este necesar de a apela metoda close() a clasei Scanner?
6. Adevărat sau Fals: Clasa Scanner poate citi doar date din consolă.
7. Adevărat sau Fals: Clasa Scanner face parte din pachetul java.util.

musteata.victoria@ceiti.md 13 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI
1.5 Structuri de control
Implică-te și studiază, informează-te!
Instrucțiunile de bază pentru controlul logicii unui program în Java sunt:
a) De decizie (alternative, condiționale): if-else, switch-case;
b) Iterative (repetitive, buclă): while, do-while, for;
c) Ramificare: break, continue, label : , return;
d) Tratare a erorilor: try-catch-finally, throw;

1.5.1 Instrucțiunea if-else


Sintaxă:
if (expresie) {
... lista instrucțiuni }
else {
... lista instrucțiuni }
Semantică:
Se evaluează expresia dintre paranteze care trebuie sa returneze o valoare booleană. Dacă ea
returnează true atunci se execută lista de instrucțiuni din corpul if. Dacă ea returnează false
se execută lista de instrucțiuni else.
Exemplu:
int x = 4;
if( x % 2 == 0 )
x = 100;
else
x = 1000;
Instrucțiunea if poate avea mai multe forme:

1.5.2 Instrucțiunea switch-case


Sintaxă:
switch (expresie) {
case valoare_particulara1 : < expresie 1 >
break;
case valoare_particulara2 : < expresie 2 >
break;

default : < expresie >
}
musteata.victoria@ceiti.md 14 ©Musteață Victoria
Modulul: Programarea Orientată spre Obiecte CEITI
Semantică:
Execuţia instrucțiunii switch începe întotdeauna prin evaluarea expresiei dintre parantezele
rotunde. Această expresie trebuie să fie de tipul caracter, octet, întreg scurt sau întreg. După
evaluarea expresiei se trece la compararea valorii rezultate cu valorile particulare specificate în
etichetele case din interiorul blocului de instrucțiuni. Dacă una dintre valorile particulare este
egală cu valoarea expresiei, se execută instrucțiunile începând de la
eticheta case corespunzătoare acelei valori în jos, până la capătul blocului. Dacă nici una dintre
valorile particulare specificate nu este egală cu valoarea expresiei, se execută instrucțiunile care
încep cu eticheta default, dacă aceasta există.
Este important ca fiecare expresie de tip case să fie terminată cu instrucțiunea break deoarece
aceasta asigura ieșirea din structură.
Exemplu:
int valoareTest = 2; int valoareTest = 2;
switch(valoareTest){ switch(valoareTest){
case 1: case 2:
System.out.println("Valoarea este case 4:
egala cu 1"); case 6:
break; case 8:
case 2: System.out.println("Numar
System.out.println("Valoarea este par");
egala cu 2"); break;
break; default:
case 3: System.out.println("Numar
System.out.println("Valoarea este impar");
egala cu 3"); }
break;
case 4:
System.out.println("Valoarea este
egala cu 4");
break;
default:
System.out.println("Valoarea nu
aparține intervalului");
}

1.5.3 Instrucțiunea while


Sintaxă:
while (expresie) {
.... instrucțiuni;
}
Semantică:
Această instrucțiune mai este numită instrucțiunea while...do, este o structură ce
implementează un ciclu pre-condiționat, ceea ce înseamnă că condiția care asigură ieșirea sau
rămânerea în ciclu este verificată la început înainte de a se executa iterația.
Se execută astfel:
- se evaluează expresia;

musteata.victoria@ceiti.md 15 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI
- dacă rezultatul este diferit de 0, adică corespunde valorii logice adevărat, atunci se execută
instrucțiunile şi se revine la primul pas, altfel se trece la execuţia instrucțiunii care urmează
după instrucțiunea while.
Exemplu:
int f=1, i=1, n=4;
while (i<=n) {
f=f*i; i++;
}
System.out.println(f);

1.5.4 Instrucțiunea do ... while


Sintaxă:
do {
.... instrucțiuni;
} while (expresie)
Semantică:
Este o structură ce implementează un ciclu post-condiționat, ceea ce înseamnă că condiția care
asigură ieșirea sau rămânerea în ciclu este verificată la sfârșit, după ce s-a executat iterația. Se
execută astfel:
- se execută instrucțiunile;
- se evaluează expresia, dacă rezultatul este diferit de 0, adică corespunde valorii logice
adevărat, atunci se revine la primul pas, altfel se trece la execuţia instrucţiunii care
urmează după instrucțiunea do ... while.
Spre deosebire de instrucțiunea while instrucțiunea do ... while se execută cel puţin o
dată.
Exemplu:
int x=1;
do {
System.out.println(x);
x++;
} while (x<5);

1.5.5 Instrucțiunea for


Sintaxă:

for (exp_initializare; exp_conditie; exp_iteratie)


{
.... instrucțiuni;
}

Semantică:
Structura repetitivă for implementează o structură repetitivă pre-condiționată, asemenea
lui while...do. Structura for este mult mai eficientă deoarece iterația și inițializarea sunt
incluse în structură din start.
Se execută astfel:
musteata.victoria@ceiti.md 16 ©Musteață Victoria
Modulul: Programarea Orientată spre Obiecte CEITI
- se evaluează expresia de inițializare;
- se evaluează condiția, dacă rezultatul este diferit de 0, adică corespunde valorii logice
adevărat, atunci se execută instrucțiunile din corpul instrucțiunii for, în caz contrar se trece
la execuția instrucțiunilor ce urmează după corpul instrucțiunii for;
- se evaluează expresia de iterație și se revine la pasul anterior - evaluarea condiției.
Exemplu:
int i,n=4, s=0;
for (i=0;i<=n;i++) s+=i;
System.out.println(s);

Variabilele declarate în zona de inițializare reprezintă variabile locale blocului for și nu sunt
vizibile în afara lui:
int n=4, s=0;
for (int i=0;i<=n;i++) s+=i;
System.out.println(i);
//eroare compilare: cannot resolve symbol:i

În interiorul structurii for, pot fi trecute mai multe instrucțiuni de inițializare sau de iterație
separate prin, (virgulă):
for (initializare1, initializare2; conditie; iteratie1, iteratie2){...}

Elementele instrucțiunii for sunt opționale. Următoarele exemple sunt corecte, însă în unele
dintre ele trebuie sa decizi când se termină bucla infinită prin break:
for( initializare; ; )
for( ; conditie; iteratie)
for( ; ; iteratie)
for( ; ; ) // bucla infinita
1.5.5 Instrucțiunea enhanced – for (for îmbunătățit)
Sintaxă:
for ( variabila : colectie_iterabila)
{ .... instrucțiuni; }
Semantică:
Structura repetitivă enhanced – for implementează o structură repetitivă pre-condiționată.
Această structură a fost introdusă începând cu Java 5.0 pentru a permite o sintaxă mai ușoară
(este echivalent cu foreach din .NET). Aceasta structură poate fi utilizată pentru a itera prin
colecții care implementează interfața java.lang.Iterable. De asemenea se folosește în
lucru cu vectori. Lucrează cu însăși elementele și nu cu indicii acestora. Returnează elementele
unul câte unul în variabila declarată.
Exemplu:
int suma = 0; int [] vector = {1,2,3,5};
for(int valoare : vector)
{ suma += valoare;
} System.out.println("Suma este "+suma);}
musteata.victoria@ceiti.md 17 ©Musteață Victoria
Modulul: Programarea Orientată spre Obiecte CEITI
1.5.6 Instrucțiuni pentru modificarea iterării: break și continue
Instrucțiunea break permite întreruperea unei bucle for, do...while, while sau ieșirea
dintr-o serie de case-uri.
Instrucțiunea continue permite trecerea la următoare iterație a unui ciclu for, do-while,
while ignorând restul instrucțiunilor din iterația curentă.
Exemple:
int i; int i;
for (i=1;i<=10;i++){ for (i=1;i<=10;i++){
if (i==5) break; if (i==5) continue;
System.out.print(i+" "); System.out.print(i+" ");
} }
System.out.println(" Sfârșit la System.out.println(" Sfârșit la
iterația "+i); iterația "+i);

Analizează și discută!

Să presupunem că sunteți un programator care dezvoltă un program pentru a calcula suma


succesivă a numerelor într-o secvență dată. Împreună cu un coleg de grupă elaborați un program
Java care va realiza acest lucru, dacă se știe că utilizatorul va introduce aceste numere de la
tastatură.

Evaluează-te!

1. Ce face o instrucțiune if-else if-else în Java?


a) Execută codul într-o buclă
b) Execută codul în mai multe blocuri, în funcție de condiții
c) Transformă o valoare într-o altă valoare
d) Definește o clasă nouă
2. Ce va afișa următoarea secvență de cod în Java? Notați în caiet rezultatul pentru fiecare
pas de execuție.
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
3. Ce se va afișa în urma execuției următoarei secvențe de cod Java? Notați în caiet rezultatul
pentru fiecare pas de execuție.
int a = 15;
int b = 10;

musteata.victoria@ceiti.md 18 ©Musteață Victoria


Modulul: Programarea Orientată spre Obiecte CEITI
int c = 20;
if (a > b && a > c) {
System.out.println("a");
} else if (b > a && b > c) {
System.out.println("b");
} else if (c > a && c > b) {
System.out.println("c");
} else {
System.out.println("nu există");
}
4. Ce va afișa următoarea secvență de cod în Java? Notați în caiet rezultatul pentru fiecare
pas de execuție.
int x = 5;
do {
System.out.print(x + " ");
x += 3;
} while (x <= 15);
5. Ce va afișa următoarea secvență de cod în Java? Notați în caiet rezultatul pentru fiecare
pas de execuție.
int i = 1;
while (i <= 10) {
System.out.print(i + " ");
i++;
}

Știați că...
Aveți posibilitatea cu o conexiune la Internet să rulați compilatoare Java online? Desigur ca au unele limitări, dar
pot fi o soluție bine venită la un moment dat. Iată câteva exemple de compilatoare Java online:

− https://www.jdoodle.com/online-java-compiler
− https://www.compilejava.net/

Succes!

musteata.victoria@ceiti.md 19 ©Musteață Victoria

S-ar putea să vă placă și