Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:clase-interne [2022/11/13 12:38]
daniela.becheanu [Exerciții]
poo-ca-cd:laboratoare:clase-interne [2022/11/16 22:35] (current)
daniela.becheanu [Clase anonime]
Line 140: Line 140:
    
  
-<note important>​Clasele interne anonime declarate în metode pot folosi variabilele declarate în metoda respectivă și parametrii metodei dacă aceștia sunt //final// sau **//​effectively final//**. Dacă o variabilă nu e declarată final dar nu se modifică schimbă după inițializare,​ atunci este [[https://​docs.oracle.com/​javase/​tutorial/​java/​javaOO/​localclasses.html#​accessing-members-of-an-enclosing-class|effectively final]].+<note important>​Clasele interne anonime declarate în metode pot folosi variabilele declarate în metoda respectivă și parametrii metodei dacă aceștia sunt //final// sau **//​effectively final//**. Dacă o variabilă nu e declarată final dar nu se modifică după inițializare,​ atunci este [[https://​docs.oracle.com/​javase/​tutorial/​java/​javaOO/​localclasses.html#​accessing-members-of-an-enclosing-class|effectively final]].
  
 Variabilele si parametrii metodelor se află pe segmentul de stivă din memorie creat pentru metoda respectivă,​ ceea ce face ca ele să nu existe la fel de mult cât clasa internă. Dacă variabila este declarată ''​final'',​ atunci la runtime se va stoca o copie a acesteia ca un câmp al clasei interne, în acest mod putând fi accesată și după execuția metodei. Variabilele si parametrii metodelor se află pe segmentul de stivă din memorie creat pentru metoda respectivă,​ ceea ce face ca ele să nu existe la fel de mult cât clasa internă. Dacă variabila este declarată ''​final'',​ atunci la runtime se va stoca o copie a acesteia ca un câmp al clasei interne, în acest mod putând fi accesată și după execuția metodei.
Line 366: Line 366:
 Identificați toate căsuțele de tip **note** din laborator și urmați instrucțiunile din acestea. Puteți folosi scheletul pus la dispoziție. Pentru a ușura procesul de evaluare, creați fișiere separate pentru fiecare task din **note**. Identificați toate căsuțele de tip **note** din laborator și urmați instrucțiunile din acestea. Puteți folosi scheletul pus la dispoziție. Pentru a ușura procesul de evaluare, creați fișiere separate pentru fiecare task din **note**.
 */ */
 +
 +**Schelet de laborator**:​ [[https://​github.com/​oop-pub/​oop-labs/​tree/​master/​src/​lab6|Laborator6]]
  
 Exercițiile din acest laborator au ca scop simularea obținerii prețului unei mașini de la un dealer. Construcția obiectelor necesare o veți face de la zero conform instrucțiunilor din taskuri. Exercițiile din acest laborator au ca scop simularea obținerii prețului unei mașini de la un dealer. Construcția obiectelor necesare o veți face de la zero conform instrucțiunilor din taskuri.
Line 401: Line 403:
         - Fiat: discount 100 pentru fiecare an de vechime;         - Fiat: discount 100 pentru fiecare an de vechime;
         - Skoda: discount 150 pentru fiecare an de vechime;         - Skoda: discount 150 pentru fiecare an de vechime;
-  * ''​SpecialOffer''​ - calculează un discount random, cu seed 20. Generarea se va realiza în constructor utilizându-se o instanța globală a unui obiect de tip ''​Random''​ care a fost inițializat cu seed-ul **20** [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Random.html#​Random-long-|Random]].+  * ''​SpecialOffer''​ - calculează un discount random, cu seed 20. Generarea se va realiza în constructor utilizându-se o instanța globală a unui obiect de tip ''​Random''​ care a fost inițializat cu seed-ul **20** ​și cu limita superioară (bound) 1000 [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​Random.html#​Random-long-|Random]].
  
  
 Adăugați o metodă în clasa ''​Dealership''​ care oferă prețul mașinii după aplicarea discount-urilor din oferte: ''​getFinalPrice(Car car)''​ Adăugați o metodă în clasa ''​Dealership''​ care oferă prețul mașinii după aplicarea discount-urilor din oferte: ''​getFinalPrice(Car car)''​
-  * aplicați pe obiectul ''​car''​ primit ca argument cele trei oferte+  * aplicați pe obiectul ''​car''​ primit ca argument cele trei oferte ​in ordinea: ''​BrandOffer'',​ ''​DealerOffer'',​ ''​SpecialOffer''​.
   * metoda va returna prețul final după aplicarea ofertelor   * metoda va returna prețul final după aplicarea ofertelor
  
Line 415: Line 417:
  -Pret: 35000, An: 2015;  -Pret: 35000, An: 2015;
  -Fiat:  -Fiat:
- -Pret: ​3000, An: 2008;+ -Pret: ​3500, An: 2008;
  -Pret: 7000, An: 2010;  -Pret: 7000, An: 2010;
  -Skoda:  -Skoda:
- -Pret: ​3500, An: 2010+ -Pret: ​12000, An: 2015
- -Pret: ​7000, An: 2010;  + -Pret: ​25000, An: 2021
-Creati un obiect de tip Dealership. +  
-Obțineți și afișați prețul oferit de Dealership pentru fiecare obiect.  +  * Creati un obiect de tip Dealership. 
-De fiecare data cand se aplica o oferta asupra unui obiect de tip Car +  ​* ​Obțineți și afișați prețul oferit de Dealership(folosind metoda ''​getFinalPrice''​) ​pentru fiecare obiect.  
- se va afisa un mesaj de tipul: "​Applying x discount: y euros",​ unde: +  ​* ​De fiecare data cand se aplica o oferta asupra unui obiect de tip Car se va afisa un mesaj de tipul: "​Applying x discount: y euros",​ unde: 
-->x reprezinta oferta care a fost aplicata(Brand,​ Dealer, Special, Client) +        ​* ​x reprezinta oferta care a fost aplicata(Brand,​ Dealer, Special, Client) 
-->y reprezinta discount-ul ofertei.+        ​* ​y reprezinta discount-ul ofertei.
   ​   ​
  
Line 432: Line 434:
 Aăugați în clasa ''​Dealership''​ metoda ''​void negotiate(Car car, Offer offer)''​. Aceasta permite clientului să propună un discount. ​ Aăugați în clasa ''​Dealership''​ metoda ''​void negotiate(Car car, Offer offer)''​. Aceasta permite clientului să propună un discount. ​
  
-În metoda ''​main''​ apelați ''​negotiate''​ dând ca parametru **oferta sub formă de clasă anonimă**.Implementarea ofertei clientului reprezinta returnarea unui discount de 5%.+În metoda ''​main''​ apelați ''​negotiate''​ dând ca parametru **oferta sub formă de clasă anonimă**. Implementarea ofertei clientului reprezinta returnarea unui discount de 5%.
 Pentru testare folositi urmatorul obiect Car: Pentru testare folositi urmatorul obiect Car:
 -Pret: 20000 -Pret: 20000
poo-ca-cd/laboratoare/clase-interne.1668335897.txt.gz · Last modified: 2022/11/13 12:38 by daniela.becheanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0