Se afișează postările cu eticheta poo. Afișați toate postările
Se afișează postările cu eticheta poo. Afișați toate postările

luni, 9 februarie 2026

Tipuri de relații între obiecte. Set de probleme

1. Un magazin comercializează diferite produse electronice. Pentru a gestiona aceste produse, se dorește realizarea unei aplicații în Java. Proiectați în UML clasele. Despre produse se cunosc următoarele. Fiecare produs are denumire și preț. Există două tipuri de produse:
- Laptop, care are ca caracteristică specifică memorie RAM
- Telefon, care are ca caracteristică specifică capacitate baterie.
Creați un sistem în care:
- Definiți clasele Produs, Laptop, Telefon și stabiliți în ce relație se află acestea.
- Definiți atributele și constructori pentru toate clasele.
- Adăugați claselor metoda afisare() pentru a afișa informațiile despre clase
- În metoda main(), instanțiați clasele Laptop și Telefon și afișați informația despre fiecare.

2. O platformă online gestionează cursuri și instructori. Pentru organizarea activității, se dorește realizarea unei aplicații în Java. Proiectați în UML clasele. Despre entități se cunosc următoarele:
- fiecare instructor are nume și specializare
- fiecare curs are titlu și durată.
Platforma are denumire instructor și cursuri.
Creați un sistem în care:
- Definiți clasele Instructor, Curs și Platforma și stabiliți relația dintre acestea.
- Definiți constructori pentru toate clasele.
- Adăugați claselor metoda afisare() pentru a afișa informațiile despre obiecte.
- În metoda main(), creați mai mulți instructori și cursuri, apoi o platformă și asociați aceste obiecte.
- Afișați informația despre platformă, instructorii și cursurile disponibile.

3. Un calculator este format din componente interne. Pentru a simula structura unui calculator, se dorește realizarea unei aplicații în Java. Proiectați în UML clasele. Se cunoaște că fiecare componentă are denumire și specificații. Un calculator are model și conține componente (procesor, memorie RAM, hard disk).
Creați un sistem în care:
- Definiți clasele Componenta și Calculator și stabiliți relația dintre acestea.
- Definiți constructori pentru toate clasele.
- Adăugați claselor metoda afisare() pentru a afișa informațiile despre obiecte.
- În clasa Calculator, creați componentele (în constructor).
- În metoda main(), creați un obiect de tip Calculator.
- Afișați informația despre calculator și componentele sale.

4. Un Smartwatch este format din componente electronice integrate. Pentru a simula structura unui ceas inteligent, se dorește realizarea unei aplicații în Java. Proiectați în UML clasele. Se cunoaște că fiecare componentă are denumire și consum energetic. Un ceas are model și conține componente (ecran, baterie, senzor).
Creați un sistem în care:
- Definiți clasele Componenta și Smartwatch și stabiliți relația dintre acestea.
- Definiți constructori pentru toate clasele.
- Adăugați claselor metoda afisare() pentru a afișa informațiile despre obiecte.
- În clasa Smartwatch, creați componentele (în constructor).
- În metoda main(), creați un obiect de tip Smartwatch.
- Afișați informația despre ceas și componentele sale.

5. Un spital colaborează cu medici specialiști care pot activa și în alte clinici. Pentru a simula structura unui cabinet medical, se dorește realizarea unei aplicații în Java. Proiectați în UML clasele. Se cunoaște că fiecare Medic are nume și specializare. Un Cabinet are denumire și colaborează cu medici (un tablou de obiecte).
Creați un sistem în care:
- Definiți clasele Medic și Cabinet și stabiliți relația dintre acestea.
- Definiți constructori pentru toate clasele (constructorul clasei Cabinet primește tabloul de medici).
- Adăugați claselor metoda afisare() pentru a afișa informațiile despre obiecte.
- În clasa Cabinet, parcurgeți tabloul de medici pentru a le afișa datele.
- În metoda main(), creați obiectele de tip Medic independent de cabinet.
- Transmiteți tabloul de medici la crearea obiectului de tip Cabinet și afișați informația completă.

6. O Facultate este formată dintr-un grup de angajați care pot activa și în alte instituții. Pentru a simula structura academică, se dorește realizarea unei aplicații în Java. Proiectați în UML clasele. Se cunoaște că există o superclasă Persoana cu nume și prenume. Din aceasta derivă clasa Profesor care are în plus titlu academic. O Facultate are denumire și conține profesori (un tablou de obiecte).
Creați un sistem în care:
- Definiți superclasa Persoana și subclasa Profesor, stabilind relația de moștenire.
- Definiți clasa Facultate și stabiliți relația de agregare cu clasa Profesor.
- Definiți constructori pentru toate clasele.
- Adăugați claselor metoda afisare() pentru a afișa informațiile despre obiecte.
- În clasa Facultate, parcurgeți tabloul de profesori pentru a le afișa datele complete (nume, prenume și titlu).
- În metoda main(), creați 3 obiecte de tip Profesor în mod independent (ca entități separate).
- Creați un tablou cu acești profesori și transmiteți-l ca parametru la crearea obiectului de tip Facultate.
- Afișați informația despre facultate și lista membrilor corpului didactic.

Succes! 
❤️

joi, 5 februarie 2026

Tip de date șir de caracter. Clasa String

String-urile, numite șiruri de caractere, sunt pe larg utilizate în  orice limbaj de programare, și reprezintă o succesiune finită de caractere (litere, cifre, simboluri), tratată ca un singur obiect.

În Java string-urile sunt considerate obiecte, adică sunt de tip referință.
 
Una din clasele Java ce permit prelucrarea șirurilor de caractere este clasa String.

Definiție:
public final class String extends Object
implements Serializable, Comparable<String>, CharSequence


Descriere:
Clasa String se află în pachetul java.lang și este utilizată pentru crearea și prelucrarea șirurilor de caractere. Este o clasă închisă spre modificare (immutable), adică o clasă obiectele căreia nu se modifică. Orice valoare atribuită  obiectului rămâne în sistem creând astfel a mulțime de obiecte neutilizate. 

Pentru a crea un șir de caractere puteți utiliza sintaxa:
String identificator = ”Valoare”;
De exempluString zi = ”Luni”;

Ori de cîte ori compilatorul găsește un literal String în codul sursă acesta crează un obiect de tipul clasei String ce va conține ca valoare literalul.

La fel ca și în cazul celorlalte obiecte, puteți folosi constructorul clasei String pentru a crea o instanță a acestei clase.
De exempluString zi = new String(”Luni”);
 
Metode:
a) char charAt(int index) - returnează caracterul ce se află pe poziția index. Indicele caracterului din șir variază de la 0 la length()-1.

De exemplu:
String s = "Java";
System.out.println(s.charAt(1)); //a

b) public boolean equals(Object unObiect) returnează true dacă obiectul curent este echivalent ca valoare cu string-ul unObiect, în caz contrar returnează false. Se ține cont de litere mari și mici.

De exemplu:
String s = "Java";
String s1 = "Java";
String s2 = "java";
System.out.println(s.equals(s1)); //true
System.out.println(s.equals(s2)); //false

c) public boolean equalsIgnoreCase(String altString) - returnează true dacă obiectul curent este echivalent ca valoare cu string-ul altString, în caz contrar returnează false. Nu se ține cont de litere mari si mici.  

De exemplu:
String s = "Java";
String s1 = "java";
String s2 = "Java";
System.out.println(s.equalsIgnoreCase(s1));
//true
System.out.println(s.equalsIgnoreCase(s2)); //true

Notă!  
Operatorul == aplicat asupra a două șiruri de caractere nu va verifica egalitatea acestora ci identitatea șirurilor, adică se vor compara referințele și se va returna true dacă acestea vor fi egale. Se va  verifica dacă cele două șiruri indică unul și același obiect.

De exemplu:
String s = "Java";
String s1 = "POO";
String s2 = s;
System.out.println(s==s1);
//false
System.out.println(s2==s); //true

d. public int length()- returnează lungimea șirului de caractere.  

De exemplu:
String s = "Java";
System.out.println(s.length()); //4

e. public boolean isEmpty()  - returnează true dacă  și numai dacă length() este 0

De exemplu:
String s = "Java" ;
String s2 = "";
System.out.println(s.isEmpty());
// false
System.out.println(s2.isEmpty()); // true

f. public boolean startsWith(String prefix, int toffset) - verifică dacă substrigul din șirul dat începînd cu poziția toffset începe cu prefixul prefix.

De exemplu:
String s = "Programare" ;
System.out.println(s.startsWith("ram", 3));  //false
System.out.println(s.startsWith("ram", 4));  
//true
System.out.println(s.startsWith("ram", 10)); //false
System.out.println(s.startsWith("ram", -3)); //false

g. public boolean startsWith(String prefix)- verifică dacă șirul dat începe cu prefixul prefix.

De exemplu:
String s = "Programare" ;
System.out.println(s.startsWith("Prog"));
//true
System.out.println(s.startsWith("ram")); //false

h. public boolean endsWith(String suffix)- verifică dacă șirul dat finisează cu sufixul suffix.

De exemplu:
String s = "Programare" ;
System.out.println(s.endsWith("re"));
//true

i. public int indexOf(String ch)- Returnează indicele caracterului ch  în cadrul unui șir de caractere.

De exemplu:
String s = "Programare" ;
System.out.println(s.indexOf("r"));
//1
System.out.println(s.indexOf("b")); //-1
System.out.println(s.indexOf("P")); //0
System.out.println(s.indexOf("p")); //-1

j. public int lastIndexOf(String ch) - Returnează indicele ultimei apariții a caracterului ch în cadrul unui șir de caractere.

De exemplu:
String s = "Programare";
System.out.println(s.lastIndexOf("r"));
//8
System.out.println(s.lastIndexOf("b")); //-1
System.out.println(s.lastIndexOf("o")); //2

k. public String concat(String str)– concatinează două șiruri de caractere.

De exemplu:
String s = "programez in " ;
String s1 = " Java" ;
s.concat(s1);
System.out.println(s);
// programez
String s3 = s.concat(s1);
System.out.println(s3); // programez in Java
System.out.println("Eu ".concat(s3)+" azi"); //Eu programez in Java azi

l. public String replace(char oldChar, char newChar) - returnează un string rezultat din înlocuirea tuturor aparițiilor caracterelor specificate în oldChar prin newChar.   

De exemplu:
String s = "tata";
System.out.println(s.replace("t", "m"));
//mama
System.out.println("Ei pleaca".replace("Ei", "Ele")); //Ele pleaca

m. public boolean contains(CharSequence s)– returnează true daca și numai dacă șirul de caractere conține secvența căutată specificată prin s.

De exemplu:
String s = "Programez in Java";
System.out.println(s.contains("Java"));
//true
System.out.println("Ei pleaca".contains("Ele")); //false

n. public String toLowerCase()- Convertește toate literele șirului de caractere în litere mici.

De exemplu:
String s = "Programez";
System.out.println(s.toLowerCase());
//programez
System.out.println("Ei pleaca".toLowerCase()); //ei pleaca

o. public String toUpperCase()- Convertește toate literele șirului de caractere în litere mari.

De exemplu:
String s = "Programez";
System.out.println(s.toUpperCase());
//PROGRAMEZ
System.out.println("in java".toUpperCase()); //IN JAVA

p. public String substring(int beginIndex)- returnează un subșir din șirul asupra căruia s-a apelat metoda începând cu indexul elementului din șir specificat prin beginIndex.

De exemplu:
String s = "Programez";
System.out.println(s.substring(3)); // gramez
System.out.println(s.substring(-1)); 
// StringIndexOutOfBoundsException
System.out.println(s.substring(9)); // nu se afiseaza nimic

q. substring(int IndexInitial, int IndexFinal)- returnează un subșir din șirul asupra căruia s-a apelat metoda data începând cu  caracterul aflat pe poziția IndexInitial până la caracterul cu indicele IndexFinal.

De exemplu:
String s = "Programez";
System.out.println(s.substring(0,7)); // Program
System.out.println(s.substring(0,10)); //StringIndexOutOfBoundsException
System.out.println(s.substring(1,1)); // nu se afiseaza nimic
System.out.println(s.substring(3,1)); 
// StringIndexOutOfBoundsException

r. public String trim() - întoarce o copie a șirului fără spațiile de la începutul și sfârșitul șirului.  

De exemplu:
String s = " Programez ";
String s1 = "Programez";
System.out.println(s.equals(s1));
//false
System.out.println(s.trim().equals(s1)); //true

s. boolean Character.isDigit(char c)– verifică dacă caracterul c este o cifră (0–9). Returnează true dacă este cifră și false în caz contrar.

De exemplu:
char c = '5';
System.out.println(Character.isDigit(c)); // true
char c = 'A';
System.out.println(Character.isDigit(c)); // false

t. boolean Character.isUpperCase(char c) – verifică dacă caracterul c este o literă mare. Returnează true dacă este literă mare și false în caz contrar.

De exemplu:
char c = 'J';
System.out.println(Character.isUpperCase(c)); // true
char c = 'j';
System.out.println(Character.isUpperCase(c)); // false

u. boolean Character.isLowerCase(char c) – verifică dacă caracterul c este o literă mică. Returnează true dacă este literă mică și false în caz contrar.

De exemplu:
char c = 'a';
System.out.println(Character.isLowerCase(c)); // true
char c = 'A';
System.out.println(Character.isLowerCase(c)); // false

Aceste metode nu aparțin clasei String, ci clasei Character, dar sunt utilizate frecvent împreună cu String.charAt(), atunci când analizăm caracterele unui șir. De exemplu: 
String text = "Java2026";

// parcurgem fiecare caracter din șir
for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);

    System.out.print(c + " -> ");

    if (Character.isUpperCase(c)) {
        System.out.println("literă mare");
    } else if (Character.isLowerCase(c)) {
        System.out.println("literă mică");
    } else if (Character.isDigit(c)) {
        System.out.println("cifră");
    } else {
        System.out.println("alt caracter");
    }
}

Deci:
  • charAt() extrage un caracter dintr-un String;
  • Character.isDigit(), isUpperCase(), isLowerCase() analizează caracterul extras.

Rețineți ! 
A se acorda o deosebită atenție atunci când lucrați cu operatorul de concatenare +. Se va ține cont de următoarele reguli:
1. Dacă ambii operanzi sunt numerici operatorul + va efectua operația de adunare.
2. Dacă unul din operanzi este String operatorul + va efectua concatenarea.
3. Expresia este evaluată de la stânga la dreapta.

De exemplu:
String s1 = "Hello";
int a = 3;
String s2 ="4";
String s3 ="4";
System.out.println(a+s1); // 3Hello
System.out.println(s1+a); // Hello3
System.out.println(s2+s3); // 44
System.out.println(1+2); // 3
System.out.println("a"+"b"); // ab
System.out.println("a"+3); // a3
System.out.println("a"+3+4); // a34
System.out.println(3+"a"); // 3a
System.out.println(3+4+"a"+6+1); // 7a61
System.out.println("a"+6+1); // a61
System.out.println(6+1+"a"); // 7a


Restricții impuse de limbaj

Obiectele de tip String sunt imutabile adică conținutul nu poate fi modificat după creare

String s = "abc";
s = s + "d";
// se creează un obiect nou

Accesarea caracterelor se face doar prin metode, nu prin index direct:
char c = s.charAt(0);
 
Metode pentru conversii

String t = String.valueOf(456); - convertește valoarea de tip întreg în șir de caractere

int x = Integer.parseInt("123"); - convertește un șir de caractere în valoare întreagă.

marți, 27 ianuarie 2026

Membri de instanță

MEMBRI DE INSTANȚĂ sunt membrii clasei declarați FĂRĂ cuvântul cheie static. Sunt asociate obiectelor. Aceștia definesc starea și comportamentul specific al fiecărei instanțe a unei clase. Sunt utilizați pentru a reprezenta date și operații care depind de particularitățile fiecărui obiect individual. Pentru a putea fi accesate este nevoie de a avea create obiectele în prealabil, adică de a avea clasa instanțiată.
a) Variabile de instanță. 
Pentru așa tip de variabile sistemul alocă spațiu de memorie pentru fiecare în parte. Fiecare instanță are valoarea sa pentru un membru al clasei din care fac parte. Sunt stocate în Stivă.

b) Metode de instanță. 
Lucrează direct atât cu variabile statice cât și cu cele nestatice în corpul lor. Metodele de instanță pot fi apelate cu ajutorul unei instanțe a clasei respective:

MyClass.metodaDeInstanta(); // ilegal 

MyClass obj = new MyClass();
obj.metodaDeInstanta(); // legal

c) Blocuri de inițializare de instanță. 
Blocurile de inițializare de instanță sunt utilizate pentru a inițializa variabilele de instanță înainte ca oricare metoda să fie apelată pe instanța respectivă. Aceste blocuri nu conțin cuvântul cheie static.






Membri de clasă

MEMBRI DE CLASA sunt membrii declarați cu ajutorul cuvântului cheie static. Fiind aplicat la diverse elemente, le face asociate cu clasa în loc de o instanță specifică a acelei clase. Datorită acestui fapt, puteți utiliza numele clasei pentru a face referire la un câmp static (variabilă statică) sau pentru a apela o metodă statică, fără a fi necesitate de a instanția clasa în acest sens.

Iată câteva elemente care pot fi marcate ca fiind statice:

a) Variabile statice.
Sunt folosite atunci când avem nevoie ca variabilele clasei să fie partajate de toate instanţele clasei. Sunt stocate în Heap. De obicei sunt constante simbolice. Pentru aşa tip de variabile sistemul aloca o singura zonă de memorie, la care au acces toate instanţele clasei respective. Nu vom putea avea pentru fiecare instanţă a clasei valoarea ei proprie pentru o astfel de variabila. Dacă o instanţă va modifica valoarea unei variabile statice aceasta valoare se va modifica pentru toate instanţele.

b) Metode statice. 
Sunt accesate fară o instanţiere a clasei respective:

DenumireClasa.metodaStatica();  //legal

<=>

MyClass obj = new MyClass();
obj.metodaStatica(); //legal, dar NU este recomandat


Este legal să apelați o metodă statică folosind un obiect în Java, dar este considerat o practică nepotrivită și este recomandat să evitați acest lucru. De obicei, metodele statice sunt apelate pe clasa în sine, nu pe o instanță specifică a clasei. Acest lucru se datorează faptului că metodele statice NU au acces la variabilele de instanță și nu sunt legate de o anumită instanță a clasei.
Din corpul unei metode statice nu pot fi apelați membri de instanță:


Pot utiliza variabile statice declarate în clasa respectivă:

Deoarece metodele statice nu aparțin unui obiect anumit asupra lor nu putem folosi cuvântul cheie
this:
Orice metodă statică este implicit şi finală.

c) Blocuri de inițializare statice.

Un bloc de inițializare este un bloc de cod definit între { și }, asemănător cu blocuri/corpuri de metode, principala diferență fiind, blocurile de inițializare nu au un nume. Ele sunt ca metodele, însă fără antet/header (tip returnat, nume metoda, lista de parametri). Deoarece în Java nu există cod înafara clasei, blocurile de inițializare vor fi la rândul lor definite în interiorul unei clase.

Blocurile de inițializare statice sunt blocuri de cod care sunt executate DOAR O DATA atunci când clasa este încărcată de Java Virtual Machine. Aceste tipuri de blocuri de inițializare sunt utile pentru inițializarea atributelor statice din clase sau pentru a efectua o singura data un set de prelucrări. Blocurile statice de inițializare pot accesa DOAR atributele statice ale clasei în care sunt definite. NU se pot folosi variabile de instanță în blocuri de inițializare statice. Dacă încercați să faceți acest lucru veți primi o eroare de compilare: non-static variable value cannot be referenced from a static context).
Dacă nu declarați un astfel de bloc, Java colectează toate câmpurile statice într-o singură listă și le inițializează atunci când clasa este încărcată.

Se poate defini atât de multe blocuri de inițializare (statice sau nu) de câte este nevoie, dar trebuie sa se acorde atenție ordinii lor de definire, deoarece aceasta este și ordinea lor de execuție!

d) Clase interne statice (static inner classes). 
O clasă statică internă este o clasă definită în interiorul altei clase, iar aceasta este declarată ca fiind statică. Ea nu are acces la membrii non-statice ai clasei exterioare. 

public class Exemplu {
static class ClasaStaticaIncorporata {
// Codul clasei încorporate statice
}
}

e) Variabile statice finale. 
Sunt de fapt constante. Pentru a fi accesate nu va fi necesar de instanțiat clasa.

f) Importuri statice. 
În Java, puteți importa membrii statici ai unei clase atunci când nu doriți să utilizați numele clasei în mod repetat.



luni, 12 ianuarie 2026

Tipuri de moștenire Set de probleme

1. În cadrul unei școli, se dorește gestionarea informațiilor despre persoane și studenți. Proiectați în UML (https://app.diagrams.net/) diagrama proiectului care trebuie să conțină clasele, atributele, metodele și relațiile de moștenire. Creați un program Java care va afișa datele complete ale unui student.

Creați clasa Persoana, care conține două variabile: nume și telefon, precum și un constructor parametrizat care va inițializa aceste atribute. Clasa va avea metoda afiseazaDate() care va afișa numele și numărul de telefon al persoanei.

Creați clasa Student, derivată din clasa Persoana, care adaugă atributul grupa. Clasa va avea un constructor parametrizat și metoda afiseazaDate() care va afișa toate informațiile persoanei, inclusiv grupa studentului.

În clasa principală Main, creați un obiect de tip Student, introduceți de la tastatură valorile pentru nume, telefon și grupă și afișați la ecran informațiile complete despre student.

2. Un magazin vinde diferite tipuri de produse, inclusiv produse electronice. Proiectați în UML (https://app.diagrams.net/) diagrama proiectului care trebuie să conțină clasele, atributele, metodele și relațiile de moștenire. Creați un program Java care va afișa informațiile complete despre un telefon mobil.

Creați clasa Produs care conține două variabile: numeProdus și pret, precum și un constructor parametrizat care va inițializa aceste atribute. Clasa va avea metoda afiseazaProdus() care va afișa numele și prețul produsului.

Creați clasa ProdusElectronic, derivată din clasa Produs, care adaugă atributul garantie (în luni). Clasa va avea un constructor parametrizat și metoda afiseazaProdus() care va afișa atât informațiile din clasa de bază, cât și garanția produsului.

Creați clasa TelefonMobil, derivată din clasa ProdusElectronic, care adaugă atributul sistemDeOperare. Clasa va avea un constructor parametrizat și metoda afiseazaProdus() care va afișa toate informațiile despre telefon, inclusiv sistemul de operare.

În clasa principală Main, creați un obiect de tip TelefonMobil, introduceți de la tastatură toate valorile necesare și afișați informațiile complete despre telefon.

3. O companie de transport organizează excursii turistice. Proiectați în UML (https://app.diagrams.net/) diagrama proiectului care trebuie să conțină clasele, atributele, metodele și relațiile de moștenire. Creați un program Java care va calcula costul excursiei.

Creați clasa Vehicul care conține ca atribut distanta și constructorul parametrizat care va inițializa atributul clasei.

Creați clasa VehiculTransport derivată din Vehicul și are în plus atributul pretKm care semnifică prețul călătoriei pentru 1 km și metoda calculeazaCostTransport() care va folosi pentru calcule formula: cost = distanta * pretKm

Creați clasa AutobuzTuristic derivată din VehiculTransport și care adaugă ca atribut taxaGhid și are ca metodă calculeazaCostTotal() care va afișa costul total al călătoriei calculat după formula: costTotal = distanta * pretKm + taxaGhid

În clasa principală Main, creați un obiect de tip creați un obiect AutobuzTuristic, introduceți valori de la tastatură și afișați costul total al călătoriei.

4. Un magazin IT comercializează diferite tipuri de laptopuri. Proiectați în UML (https://app.diagrams.net/) diagrama proiectului care trebuie să conțină clasele, atributele, metodele și relațiile de moștenire. Creați un program Java care va calcula prețul final al unui laptop în funcție de componentele sale.

Creați clasa Laptop care conține atributul pretBaza și un constructor parametrizat care va inițializa acest atribut. De asemenea, clasa va conține metoda calculPretLaptop() care va returna prețul de bază al laptopului.

Creați clasa LaptopGaming derivată din clasa Laptop, care adaugă atributul pretPlacaVideo, reprezentând costul plăcii video dedicate. Clasa va avea un constructor parametrizat pentru inițializarea atributelor și metoda calculPretGaming() care va calcula prețul laptopului gaming folosind formula: pret = pretBaza + pretPlacaVideo.

Creați clasa LaptopGamingPro derivată din clasa LaptopGaming, care adaugă atributul pretSistemRacire, reprezentând costul sistemului avansat de răcire. Clasa va conține un constructor parametrizat și metoda calculPretTotal() care va calcula prețul final al laptopului folosind formula: pretTotal = pretBaza + pretPlacaVideo + pretSistemRacire.

În clasa principală Main, creați un obiect de tip LaptopGamingPro, introduceți valorile necesare de la tastatură și afișați pe ecran prețul laptopului simplu, prețul laptopului gaming și prețul total al laptopului gaming pro.

5. Într-o companie IT există mai multe tipuri de angajați care primesc salariul în mod diferit Proiectați în UML (https://app.diagrams.net/) diagrama proiectului care trebuie să conțină clasele, atributele, metodele și relațiile de moștenire. Creați un program Java care va calcula salariul pentru diferite tipuri de angajați.

Creați clasa Angajat care conține atributul salariuBaza și un constructor parametrizat care va inițializa acest atribut. Clasa va conține metoda calculSalariu() care va returna salariul de bază al angajatului.

Creați clasa Programator derivată din clasa Angajat, care adaugă atributul bonusProiect. Clasa va avea un constructor parametrizat pentru inițializarea atributelor și metoda calculSalariuProgramator() care va calcula salariul programatorului folosind formula:
salariu = salariuBaza + bonusProiect.

Creați clasa Designer derivată din clasa Angajat, care adaugă atributul bonusCreativitate. Clasa va conține un constructor parametrizat și metoda calculSalariuDesigner() care va calcula salariul designerului folosind formula: salariu = salariuBaza + bonusCreativitate.

Creați clasa Manager derivată din clasa Angajat, care adaugă atributul bonusManagement. Clasa va conține un constructor parametrizat și metoda calculSalariuManager() care va calcula salariul managerului folosind formula: salariu = salariuBaza + bonusManagement.

În clasa principală Main, creați obiecte de tip Programator, Designer și Manager, introduceți valorile necesare de la tastatură și afișați salariul pentru fiecare tip de angajat.

6. O bancă oferă mai multe tipuri de conturi pentru clienți, fiecare având reguli diferite de calcul al sumei disponibile. Proiectați în UML (https://app.diagrams.net/) diagrama proiectului care trebuie să conțină clasele, atributele, metodele și relațiile de moștenire. Creați un program Java care va calcula suma totală din diferite tipuri de conturi bancare.

Creați clasa ContBancar care conține atributul sold și un constructor parametrizat care va inițializa acest atribut. Clasa va conține metoda calculSold() care va returna soldul curent al contului.

Creați clasa ContEconomii derivată din clasa ContBancar, care adaugă atributul rataDobanda. Clasa va avea un constructor parametrizat pentru inițializarea atributelor și metoda calculSoldEconomii() care va calcula soldul contului folosind formula: soldFinal = sold + sold * rataDobanda / 100.

Creați clasa ContCurent derivată din clasa ContBancar, care adaugă atributul taxaAdministrare. Clasa va conține un constructor parametrizat și metoda calculSoldCurent() care va calcula soldul contului folosind formula: soldFinal = sold - taxaAdministrare.

Creați clasa ContPremium derivată din clasa ContBancar, care adaugă atributul bonus. Clasa va conține un constructor parametrizat și metoda calculSoldPremium() care va calcula soldul contului folosind formula: soldFinal = sold + bonus.

În clasa principală Main, creați obiecte de tip ContEconomii, ContCurent și ContPremium, introduceți valorile necesare de la tastatură și afișați soldul final pentru fiecare tip de cont.

Succes! 
❤️

duminică, 7 septembrie 2025

Principiile Programării Orientate spre Obiecte

Principiul Abstractizării

  • Este procesul de a prelua obiecte din lumea reală și a le transforma în concepte virtuale. 
  • Reprezintă posibilitatea ca un program să ignore unele aspecte ale informației pe care o manipulează, adică oferă posibilitatea concentrării asupra esențialului, dintr-un anumit punct de vedere.

Principiul Moștenirii
  • Oferă posibilitatea de a proiecta noi clase folosind clase deja existente;
  • Clasa derivată moștenește variabilele și metodele clasei de bază;
  • Permite reutilizarea codului;
  • În Java o clasă nu poate extinde (moșteni) direct mai multe clase.
Principiul polimorfismului
  • Etimologic , cuvântul polimorfism provine din limba greacă, de la polys (multe) și morphos (forme);
  • În POO, prin polimorfism se înțelege posibilitatea ca, prin apelarea unei funcții, să obținem efecte diferite, în fucție de contextul apelului. De exemplu, pentru toate figurile geometrice putem calcula aria, însă pentru fiecare din ele se calculează diferit;
  • Deviza polimorfismului este ,, Același nume – implementare diferită”
Principiul Încapsulării
  • Acest termen definește accesul la membrii unei clase. Din anumite motive accesul la membrii unei clase se dorește a fi restricționați ca urmare aceștia sunt încapsulați în clasă prin intermediul unor cuvinte rezervate (modificatori de acces);
  • Reprezintă proprietatea obiectelor de a-și ascunde o parte din date și metode. Din exteriorul obiectului sunt accesibile (”vizibile”) numai datele și metodele publice.

Programarea Orientată spre Obiecte


Ca urmare a dezvoltării aplicațiilor software se impune o organizare cât mai eficientă a codului sursă astfel încât acesta să fie mai ușor de întreținut și înțeles.


Dea lungul timpului au fost dezvoltate mai multe tehnici de organizare a codului sursă:
a) Programarea nestructurată
  • Date și instrucțiunile se găsesc în programul principal, într-o unitate de compilare;
  • Implică utilizarea excesivă a instrucțiunilor "goto" pentru a transfera controlul de la o secțiune a codului la alta. Aceasta poate duce la crearea unor structuri de control dificil de urmărit și de înțeles.
  • Lipsesc structuri de control clare, precum bucle și condiții, care sunt fundamentale în tehnicile noi de organizare a codului;
  • Cu cât codul devine mai lung cu atât mai greu este de întreținut;
  • Mult cod duplicat;
  • Exemple: Assembler, Fortran, Basic, Cobol, ș.a

❗ Este important să subliniem că aceste limbaje nu erau neapărat proiectate pentru a încuraja programarea nestructurată, ci mai degrabă reflectau practicile de dezvoltare din perioadele timpurii ale informaticii, când conceptele de programare structurată nu erau încă pe deplin înțelese și adoptate. Cu timpul, oamenii au recunoscut avantajele programării structurate și au dezvoltat limbaje și practici care să promoveze o abordare mai clară și ușor de înțeles a dezvoltării software.


b) Programarea structurată

  • Utilizarea instrucțiunilor de control de flux precum bucle (for, while), condiționale (if, else), și structuri de selecție (switch) pentru a organiza logica programului.
  • Minimizarea utilizării instrucțiunilor de salt necontrolate ("goto") pentru a preveni crearea de fluxuri de control haotice și greu de urmărit.
  • Își propune să creeze programe mai ușor de înțeles, de întreținut și de extins, contribuind astfel la eficiența și calitatea dezvoltării software.
  • Exemple: C, C++, Pascal, Modula-2, Phyton, ș.a

c) Programarea procedurală
  • Se bazează pe noțiunea de subprogram ( proceduri, funcții) ;
  • Codul este mai bine organizat cu o funcționalitate mai bine precizată;
  • Codul devine mai complicat însă poate fi reutilizat;
  • Modificarea subprogramelor nu afectează restul programului;
  • Exemple: C, C++, Pascal, Fortran, Algol, ș.a
d) Programarea modulară
  • A apărut în urma creșterii dimensiunilor programelor, iar simpla organizare a codului sub formă de proceduri nu mai era eficientă;
  • Implică împărțirea unui sistem software mare și complex în module mai mici și independente ce permit rezolvarea problemelor dintr-un anumit domeniu;
  • Fiecare modul are o interfață bine definită care specifică cum poate fi utilizat de către alte module. Aceasta include declarații de funcții, tipuri de date și alte detalii necesare pentru a interacționa cu modulul.
  • Îmbunătățește lucrul cu reutilizarea codului;
  • Echipele de dezvoltare pot lucra independent la diferite module, reducând dependențele și facilitând dezvoltarea paralelă.
  • Testarea modulelor în mod separat este mai ușor de realizat, ceea ce contribuie la identificarea și remedierea erorilor mai rapid.
  • Exemple: C, C++, Pascal, Python, Modula2, Ada, ș.a

e) Programarea orientată spre obiecte
  • Tendință nouă de programare;
  • Modelează obiecte din lumea reală;
  • Programele sunt organizate ca colecții de obiecte ce cooperează între ele;
  • Detaliile și comportamentul obiectelor sunt păstrate în clase;
  • Programele sunt mult mai complexe și ușor de întreținut și modificat;
  • Simplifică lucrul în echipă la un program;
  • Se bazează pe 4 principii: încapsulare, moștenire, polimorfism, abstractizare;
  • Exemple: C++, Simula, Smalltalk, Java, ș.a


Deci, POO este un stil de programare în care programele sunt organizate ca şi colecții de obiecte cooperante, fiecare dintre ele reprezentând o instanță a unei clase, iar clasele sunt membre ale unei ierarhii de clase între care există relații de moștenire și respectă principiile POO.
Fiecare obiect are proprietăți (ce sau cum sunt) și acțiuni (ce pot face) și poate interacționa cu alte obiecte.


Dacă ar fi să facem o analogie cu lumea reală, atunci:

  • Obiect = un obiect din viața reală: elev, mașină, telefon
  • Proprietăți = caracteristici ale obiectului: culoare, vârstă, model
  • Acțiuni = ce poate face obiectul: merge, învață, sună


Proprietățile și acțiunile obiectelor sunt definite în clase.


Despre clase vom discuta în următoarele postări!


Succes!

❤️

sâmbătă, 8 februarie 2025

Set de probleme. Șiruri de caractere în Java. Clasa String

 1. Scrieți un program care:
- declară un șir de caractere ce conține numele dvs;
- afișează șirul la ecran;
- afișează lungimea șirului.

2. Creați un program care citește de la tastatură un șir de caractere și afișează primul și ultimul caracter al șirului.

3. Scrieți un program care citește două șiruri de caractere de la tastatură, verifică dacă șirurile sunt egale folosind equals() și afișează un mesaj corespunzător.

4. Realizați un program care:
- citește prenumele și numele unei persoane;
- concatenează datele într-un singur șir;
- afișează rezultatul sub forma: Nume complet: …
- verificați și afișează dacă numele complet conține mai mult de 15 caractere.

5. Scrieți un program care:
- citește un șir de caractere;
- întreabă utilizatorul cum dorește să afișeze textul introdus cu toate literele majuscule sau minuscule;
- afișează rezultatul corespunzător.

6. O platformă educațională generează automat username‑uri pentru elevi. Se citesc de la tastatură: numele, prenumele și anul nașterii. Username‑ul va fi format după următoarea regulă: prima literă din prenume + numele complet + ultimele două cifre ale anului. Username‑ul va fi afișat cu litere mici. Programul va afișa username-ul creat și lungimea acestuia.

7. Scrieți un program care verifică pentru o platformă de comerț online dacă e-mailul introdus de utilizator respectă criteriile de validare. Programul va cere utilizatorului să citească o adresă de e‑mail. Va verifica cerințele:
- Adresa specificată conține semnul @;
- Adresa specificată finisează cu .com sau .md;
Programul va afișa mesajul „Adresă validă” sau „Adresă greșită”.

8. Scrieți un program care va genera inițialele elevilor pentru rapoarte sau tichete. Se va citi de la tastatură numele complet (prenume și nume). Programul afișează inițialele majuscule. De exemplu, dacă se citi de la tastatură Ion Popescu, programul va afișa I.P. Metode de utilizat: charAt(), toUpperCase(), indexOf(), substring().

9. Scrieți o aplicație care să detecteze dacă textul introdus de la tastatură conține date numerice. Programul verifică dacă există cel puțin o cifră, după care afișează mesajul „Conține cifre” sau „Nu conține cifre”. Metode utilizate: charAt(), Character.isDigit(), length().

10. Scrieți un program care va analiza un mesaj SMS. Programul va cere utilizatorului să citească de la tastatură un mesaj text și va:
- Determina numărul total de caractere;
- Afișa mesajul fără spații la început și la sfârșit;
- Verifica dacă mesajul depășește 160 de caractere.
- Va informa dacă mesajul poate fi expediat sau nu. Mesajul poate fi expediat doar dacă conține până la 160 de caractere. Metode de utilizat: trim(), toUpperCase(), length().

11. Scrieți un program care permite unui magazin online să verifice validitatea codurilor produselor. Programul permite citirea unui cod (șir de caractere). Codul se consideră valid dacă are exact 8 caractere și începe cu literă mare. Programul va afișa: „Cod valid” sau „Cod greșit”. Metode de utilizat: length(), charAt(), Character.isUpperCase().

12. Scrieți un program care va verifica dacă o parolă este sigură sau nu. De la tastatură se citește o parolă. Parola este considerată validă dacă:
- are cel puțin 8 caractere;
- conține cel puțin o cifră;
- conține cel puțin o literă mare.
Metode de utilizat: length(), charAt(), Character.isUpperCase(), substring(). Afișați dacă parola este „Sigură” sau „Nesigură”.


Succes!