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

luni, 18 august 2025

Lecție practică. Instrucțiunea switch

  1. Planificator de activități zilnice. Scrieți un program care cu ajutorul instrucțiunii switch va afișa o activitate în funcție de ziua săptămânii.  De la tastatură se va citi o zi a săptămânii (ex: „Luni”, „Simbata”) și se va afișa activitatea corespunzătoare, de exemplu:

-        „Luni – Încep școala cu energie”,

-        „Sâmbătă – Merg în parc”,

-        „Duminică – Odihnă și planificare”, etc.


2.  Meniu pentru cafenea digitală.  Scrieți un program care citește de la tastatură o alegere numerică între 1 și 4:

-        1 – Cafea

-        2 – Ceai

-        3 – Ciocolată caldă

-        4 – Apă

Programul va afișa prețul băuturii selectate. Dacă utilizatorul introduce o opțiune invalidă, afișează „Opțiune inexistentă”. Utilizați switch cu default.


3.   Meteo. Scrieți un program care va citi de la tastatură starea vremii („soare”, „ploaie”, „ninsoare”, „vânt”) după care va afișa mesajul potrivit:

-        Dacă e „ploaie” sau „ninsoare” – „Ia umbrelă sau haină impermeabilă.”

-        Dacă e „soare” – „Poartă ochelari de soare.”

-        Dacă e „vânt” – „Verifică prognoza, poate fi furtună.”

Utilizați switch cu selector de tip String și mai multor etichete case pentru același rezultat.


4.  Beneficii abonamente. Scrieți un program care citește de la tastatură un tip de abonament introdus de utilizator ("Free", "Standard", "Premium") și afișează ce beneficii are abonamentul citit:

-        Free – acces limitat;

-        Standard – acces la toate cursurile;

-        Premium – acces complet + certificate.

Programați și cazul în care utilizatorul introduce un abonament necunoscut.


5.   Reducere la cumpărături. Scrieți un program care citește de la tastatură categoria clientului ("elev", "student", "profesor", "pensionar", sau altă categorie) și suma totală a cumpărăturilor. Programul va afișa procentul de reducere corespunzător și suma finală care trebuie achitată după aplicarea reducerii.

Reduceri:

-      Elev: 25%

-      Student: 15%

-      Profesor: 10%

-      Pensionar: 20%

-      alte categorii: 0%


6.     Planificator inteligent. Scrieți un program care citește de la tastatură ora curentă (număr între 0 și 23). În funcție de intervalul orei, programul afișează o activitate recomandată:

Interval orar

Activitate recomandată

6–8

„Trezire și mic dejun”

9–13

„Cursuri / lucru activ”

14–17

„Proiecte și exerciții practice”

18–21

„Relaxare sau activități fizice”

22–23, 0–5

„Timp de odihnă”

Creează un switch care grupează cazurile folosind mai multe valori case per bloc. Dacă ora introdusă este invalidă (negativă sau > 23), afișează un mesaj de eroare.


7.  Curier Express. Scrieți un program care citește de la tastatură tipul localității: "urban", "suburban", "rural" și greutatea coletului în kilograme. Programul va calcula și afișa: tipul livrării, costul total, un mesaj personalizat: „Mulțumim pentru alegerea serviciului nostru!”. Se cunoaște că taxele de livrare sunt următoarele:

-      Urban: 20 lei + 2 lei/kg

-      Suburban: 30 lei + 2.5 lei/kg

-      Rural: 40 lei + 3 lei/kg


8.   Convertor zile în activități zilnice. Scrieți un program care citește de la tastatură un număr întreg zi (1–7) și o perioadă a zilei: M (dimineața), P (după-amiaza), S (seara). Folosind switch pentru ziua săptămânii și, dacă e necesar, pe perioadă, se afișează activitatea recomandată:

Dimineața

După-amiaza

Seara

„Școală / muncă”

„Proiecte / teme”

„Relaxare”

„Sport / hobby”

„Vizită prieteni”

„Film / relaxare”

„Odihnă”

„Planificare săptămână”

„Odihnă”

De exemplu pentru Zi: 6 și Perioada: P se va afișa Activitate recomandată: Vizită prieteni.

Dacă ziua sau perioada introdusă este invalidă, se va afișa mesaj de eroare.


9.  Restaurant digital. Un restaurant digital recomandă meniuri în funcție de tipul clientului și nivelul de activitate fizică:

-      Tip client: "adult", "copil", "senior"

-      Activitate fizică: "scăzută", "moderată", "ridicată"

-      Valori calorice recomandate:

Tip client

Scăzută

Moderată

Ridicată

adult

1800

2200

2500

copil

1200

1500

1800

senior

1500

1800

2000

Elaborați un program care, folosind instrucțiunea switch, va citi de la tastatură tipul clientului și activitatea fizică și va recomanda câte calorii trebuie să conțină meniul acestuia. De exemplu pentru datele de intrare Tip: adult și Activitate: moderată se va afișa  Calorii recomandate: 2200 kcal.


10. Calculator de prețuri cu TVA diferențiat. Un magazin vinde produse din mai multe categorii, fiecare cu un TVA diferit:

-      "alimentar" → 5% TVA

-      "electronice" → 19% TVA

-      "haine" → 9% TVA

-      "carte" → 5% TVA

Elaborați un program care va citi categoria produsului și prețul fără TVA. Folosind instrucțiunea  switch programul va determina  TVA-ul și va calcula și afișa prețul final cu TVA. Dacă categoria introdusă nu există, afișează „Categorie invalidă”. De exemplu, pentru datele de intrare Categorie: electronice și Preț: 1000 se va afișa TVA: 19%  Preț final: 1190.0 lei.


11. Calcularea tarifelor dinamice pentru transport urban. Un sistem de transport urban calculează tariful biletelor în funcție de:

-      Categoria pasagerului: "adult", "elev", "student", "pensionar"

-      Tipul transportului: "autobuz", "troleibuz", "tramvai", "metrou"

-      Zona de deplasare: 1, 2 sau 3

Tarife de bază per categorie și tip transport: 

Categorie

Autobuz

Troleibuz

Tramvai

Metrou

adult

4

4

5

6

elev

2

2

2.5

3

student

3

3

3.5

4

pensionar

1.5

1.5

2

2.5

Dacă zona de deplasare este mai mare decât valoarea 1, se aplică un adaos de 1.5 lei per zonă suplimentară.

Dacă tipul de transport sau categoria este invalid, se afișează mesaj de eroare.

De exemplu pentru datele de intrare Categorie: adult Transport: tramvai  Zona: 2 se va afișa Tarif final: 6.5 lei

 

 

Să aveți o zi deosebită! 

❤️

vineri, 22 martie 2024

Interfețe în limbajul Java

 

O interfață  este o colecție de metode și date membre publice. Metodele într-o interfață sunt abstracte, adică este prezentă doar semnătura metodelor, implementarea acestora fiind realizată de clasa care va folosi interfață dată.

Sintaxa:

[public] interface NumeInterfata

                    [extends ListaInterfete]

{

     // declarații de membri de interfață

}

De exemplu:

interface Animal {
    void maninca();
    void doarme();
}

Reguli de lucru cu interfețele în Java

  1. Numele interfeței nu coincide cu numele altei clase sau interfeţe din acelaşi pachet.
  2. Dacă declarația unei interfeţe conţine clauza extends atunci interfața va moșteni toate metodele şi constantele interfețelor enumerate în <ListaInterfete>, care se numesc superinterfeţe.
  3. Nu există o superinterfaţă generală cum este clasa Object pentru superclase.
  4. Corpul unei metode într-o interfață este ;, dar începând cu Java 8, în interfață pot fi metode static și default.
  5. Toți membri interfeței sunt considerați implicit public, dar dacă modificatorul public este specificat atunci sunt accesibili şi înafara pachetului.
  6. Deoarece variabilele unei interfeţe sunt considerate constante acestea trebuie să fie inițializate altfel se va produce eroare de compilare.
  7. Metode cu aceeași semnătură, dar tip de return diferit nu pot fi folosite în interfeţe.
  8. Variabilele unei interfeţe sunt considerate implicit public, static şi final. Chiar dacă veți omite aceste cuvinte rezervate vor fi adăugate în mod automat de compilatorul Java la faza de compilare, în fișierul *.class.
  9. E posibil ca o clasă să folosească variabilele cu același nume dintr-o altă interfață, în acest caz la accesarea acestora trebuie de respectat sintaxa:  numeInterfata.numeVariabila
  10. La declararea unei metode nu este permisă apariția tuturor modificatorilor de acces, doar public sau abstract.
  11. Dacă o clasă implementează 2 interfețe ce au metodă cu același nume este de ajuns să implementăm o singură metodă.
  12. Nu este binevenit de a folosi metode cu același nume într-o interfață sau mai multe interfeţe să conțină metode cu acelaşi nume.
  13. Interfețele nu au câmpuri și nici constructori. Nu pot fi insanțiate, și nu pot păstra starea obiectelor.

Pentru ca o clasă să implementeze o interfață trebuie să respecte sintaxa :

class numeClasa implements Interfata1,...,InterfataN { ...

}

De exemplu:

class Cal implements Animal{
    void manica(){...}
    void doarme(){...}
}

O clasă poate implementa orice număr de interfețe. Clasa ce implementează interfața trebuie obligatoriu să conțină cod pentru toate metodele interfeței, din acest motiv o interfață implementată într-o clasă nu trebuie modificată, dacă modificăm interfața obligatoriu modificăm şi codul sursă al clasei ce o implementează.
interface A {
// membrii interfeței A
}

interface B {
// membrii interfeței B
}

class C implements A, B {
// implementarea metodelor abstracte din A
// implementarea metodelor abstracte din B
}

O interfață poate extinde altă interfață:

interface A {
// membrii interfeței A
}
interface B extends A {
// membrii interfeței B
}
class C implements B {
// implementarea metodelor abstracte din A
// implementarea metodelor abstracte din B
}

Chiar poate extinde mai multe interfețe: 

interface A {
// membrii interfeței A
}
interface B {
// membrii interfeței B
}
interface C extends A, B {
// membrii interfeței C
}
class D implements C {
// implementarea metodelor abstracte din A
// implementarea metodelor abstracte din B
// implementarea metodelor abstracte din C
}


Clasa ce implementează o interfață poate avea şi metode specifice ei, nu doar metodele interfeței.
O interfață poate extinde o altă interfață, dar nu o poate implementa.

Rețineți! 

Exemplul_1: 

interface Poligon {

    void getAria(int ... laturi);

}

class Dreptunghi implements Poligon {

 public void getAria(int ... laturi) {

 if (laturi.length==2)

  System.out.println("Aria dreptunghiului este " + (laturi[0] * laturi[1]));

}}

class Patrat implements Poligon {

 public void getAria(int ... laturi) {

  if (laturi.length==1) System.out.println("Aria patratului este "+(Math.pow(laturi[0], 2)));

}

}

class Main {

    public static void main(String[] args) {

    Dreptunghi r1 = new Dreptunghi ();

      r1.getAria(5, 6);

      Patrat p1 = new Patrat();

      p1.getAria(5);

    }

}

În Java nu poate fi implementată moștenirea multiplă la nivel de stare, dar interfețele permit realizarea moștenirii multiple la nivel de comportament. 

Exemplul_2: 

interface Masina{

  int  viteza=90;

  public void distanta();

}

interface Autobus{

  int distanta=100;

  public void viteza();

}

class Vehicul  implements Masina,Autobus {

  public void distanta(){

   int  distanta=viteza*100;

   System.out.println("Distanta parcursa este "+distanta);

  }

  public void viteza(){

   int viteza=distanta/100;

   System.out.println("Viteza = "+viteza);

   }

}

class DemoVehicule{

 public static void main(String args[]){

  System.out.println("Vehicul");

  Vehicul v1=new Vehicul();

  v1.distanta();

  v1.viteza();

}}


Exemplu: 

interface Interfata_1{ public void metoda_1();

}

interface Interfata_2 extends Interfata_1 { public void metoda_2();

}

class DemoInterfete implements Interfata_2{

    public void metoda_1(){

     System.out.println("Aici metoda 1");

    }

    public void metoda_2(){

     System.out.println("Aici metoda 2");

    }

    public static void main(String args[]){

    DemoInterfete obj = new DemoInterfete();

     obj.metoda_2();

    }}

Notă! Interfețele nu pot fi instanțiate însă putem crea variabile referință de tip interfață. De exemplu, dacă în metoda main() în exemplul de mai sus vom folosi construcția:

public static void main(String args[]){

    Interfata_2 obj = new DemoInterfete();

     obj.metoda_2();

}

Aceasta este validă, iar programul va afișa același rezultat. Vor putea fi apelate pentru obiectul obj acele metode din Interfata_2 care au implementare în clasa dată. Variabilele referință de tip interfață se folosesc doar urmate de instanţierea clasei ce implementează interfața la care face referință variabila. 

Pentru a distinge corect între utilizarea claselor abstracte sau interfețe luați în considerare următoarele aspecte:

  1. Dacă aveți nevoie să descrieți doar comportamentul obiectelor, nu și starea acestora utilizați interfețe. În caz contrar clase abstracte, deoarece clasele abstracte includ atât starea cât și comportamentul obiectelor. O interfață descrie doar comportamentul.
  2. Dacă aveți nevoie să specificați un comportament comun pentru mai multe clase care fac parte din ierarhii diferite utilizați interfețe. De exemplu clasele Om și Masina, nu au nimic comun, fac parte din ierarhii diferite, dar au comun faptul că se deplasează: omul cu picioarele, iar mașina cu ajutorul componentelor tehnice.  Deci, o clasă abstractă conectează clase care sunt foarte strâns legate. În timp ce interfața poate fi implementată de clase care nu au absolut nimic în comun.
  3. Java suportă moștenirea de stare, la nivel de clasă, și moștenire de comportament, la nivel de interfață. Clasele pot implementa orice număr de interfețe, dar pot moșteni o singură clasă. Deci dacă doriți să implementați moștenirea de stare, unde o clasă derivată (subclasă) primește atât comportamentul (metodele) cât și starea (atributele) din clasa de bază (superclasă), utilizați clase sau clase abstracte. Dar dacă doriți să specificați un contract sau specificații de comportament, fără a furniza o implementare implicită atunci utilizați interfețele.  

👌 Analizează și discută!  
  1. Explicați conceptul de interfață în Java și modul în care este utilizată pentru a defini comportamente standard și contracte pentru clasele care o implementează.
  2. Comparați clasele abstracte și interfețele în ceea ce privește caracteristicile, utilizările și restricțiile lor în Java.
  3. Argumentați beneficiile și avantajele utilizării interfețelor în comparație cu clasele abstracte în diverse scenarii de proiectare și dezvoltare a software-ului.
  4. Care este diferența între o interfață și o clasă abstractă în ceea ce privește implementarea metodelor? 



Vă doresc o zi deosebit de frumoasă! ❤️