You are on page 1of 14
Lectia 13 Exercitii gsi probleme propuse spre rezolvare L. Scrieti 0 clas CC care furnizeazk o metoda pentru aflarea numirului de instante ale clasei CC care s-au creat. 2. Avem clasa Exemplu. In ce conditii putem scrie AltExemplu ae = new Exemplu(); ? Dati dou’ variante de raispuns si explicati diferenta/diferentele dintre ele. 3. Codul urmator nu poate fi compilat. interface A { void m1(Q); “r public void m2(); 2 protected void m3); // 3 private void m4Q; // 4 + Specificati linia/liniile care cauzeaz’ necompilarea codului si explicati pe scurt de ce se intamplé acest fapt. 4. Un obiect poate avea mai multe tipuri? 5. Scrieti o clas GrupaPOO ce are un constructor public cu un parametru de tip int ce reprezinti numarul studentilor din grup’. Implementati clasa astfel incat aceasta si poati fi instantiati doar dacti numfrul studentilor din grup este cuprins in in- tervalul [12-15]. 118 LECTIA 13. EXERCITII $1 PROBLEME PROPUSE SPRE REZOLVARE 6. Presupunem c& in clasa C avem metoda public void oMetoda throws Exceptie2, Exceptie3 {} gi apelul ei . public static void main(String[] args) { try { Cc = new CO; c.oMetoda() ; + catch(Exceptiet e1) { System. out.println("Exceptiet") ; 3 + Care € relatia intre clasele Exceptie!, Exceptie? gi Exceptie? astfel inet. codul de mai sus s& poata fi compilat? 7. Clasele Bi i B2 sunt exceptii. Ce trebuie si fie indeplinit pentru ca urmitorul cod si fie corect (Atentie: nt se va modifica in niciun fel codul de mai jos !!). class SomeClass { public void foo(boolean bi, boolean b2) { if (bi eh b2) ‘throw new E10; else throw new E2(); 8. Specificati relatia/relatiile de mostenire care exist intre clascle Object, RuntimeEx- ception, Error, Throwable gi Exception. 9. Se dai secventa de cod de mai jos: class A { public static void main (String() args) { Error error = new Exror(); Exception exception - new Exception(); Systen.out.print (exception instanceof Throwable) + ","); Systen.out.print (error instanceof Throwable); 119 10. 11. 12. 18. 14. © Care este rezultatul rulérii acesteia? © Dati explicatiile pentru care se produce acest rezultat. Presupunem cé intr-o exceptie exist’ o metodi a cirei nume va trebui setat de voi. S& se implementeze aceasta exceptie astfel incAt si existe o alta metoda care ne poate spune de cate ori a fost apelati metoda a carei nume a fost setat de voi. Scrieti un exemplu in care si creati o exceptie verificata si una neverificati, Explicati diferentele dintre cele doua tipuri de exceptii. in clasa C avem metoda public void oMetoda throws Exceptiel, Exceptie2, Exceptie3 {} gi apelul ei public static void main(String{] args) { try { Cc = new 60; c.oMfetoda() ; 3 catch(Exceptiel ei) { System. out .print1n("Exceptie!") ; z catch(Exceptie2 e2) { Systen.out.printin("Exceptie2") ; } catch(Exceptie3 e3) { System. out .printin("Exceptie3") ; + + Care ¢ relatia dintre clasele Exceptiel, Exceptie? si ExceptieS daci afirmatia urmi- toare @ adevarata: indiferent de exceptia aruncati de metoda oMetoda pe ccran, intotdeauna se afigeaz’ “Exceptiel”? Presupunem eX avem pachetul unu in care sunt definite clasele publice U1, U2 gi pachetul unu.pp in care sunt definite clasele publice P1, P2. in fisierul F din pa- chetul poo avem instructiunea import unu.*. in aceste conditii, in figierul F se poate instantia clasa PI? De cate feluri pot fi specificatorii de acces ai unei clase in interiorul unui pachet? Dati exemplu de o clasa care poate fi folosit& doar in interiorul pachetului in care a fost declarata. 120 LECTIA 13. EXERCITI $l PROBLEME PROPUSE SPRE REZOLVARE 15. Presupunem c& avem pachetul unu in care sunt definite clasele publice Uf si U2 si pachetul unu.pp in care sunt definite clasele publice P1 si P2, acestea neavand nici un constructor definit de programator. in figierul F din pachetul doi avem instructiunea import unu.*. in figierul F avem o clasi C. Se poate scrie in interiorul unei metode a clasei C codul P1 p = new P1()? . 16. Fie clasele de mai jos. Cum pot fi folosite instante noi ale clasei PackageA Class in metoda foo() din clasa PackageBClass fara a modifica clasa PackageAClass sau pachetnl in care se afli; pot fi adaugate clase noi. //£isierul PackageAClass. java package a; public class PackageAClass { PackageAClass() { } + //fisierul PackageBClass. java package b; public class PackageBClass { PackageBClass() { } void foo() { } 17. Ce fel de clase pot fi folosite in afara pachetului in care au fost declarate? Ce fel de metode apartindnd unei clase dintz-un pachet: mu pot fi folosite in afara pachetulut in care a fost declarata clasa? 18. Avem o clast, Blemente care incapsuleaz& o colectie ArrayList. in aceast& colectie dorim si adiugiim obiecte periferice de tipul Tastatura, Beran si Difuzor. In acest scop am folosit urmitoarele metode pentru adiugare: public void add(Tastatura t) public void add(Ecran e) public void add(Difuzor a) in viitorul apropiat s-ar putea si dorim si adaiugiim gi alte tipuri de periferice cum ar fi un Scanner gi atunci ar trebui si adaugim in clasa Hlemente metoda public void add(Scanner t). Propuneti o solutie pentru adiiugarea de elemente in colectie astfel incét adaugarea unui element de tip Scanner si nu implice modificari asupra clasei Elemente. 19. Ayem o clas& Persoana care are doui atribute: nume(String) si varsta(int). Dorim s& retinem obiecte de acest fel intr-o colectie de tip SortedSet ordonaté crescator 20. 21. 22. 23. 24, 25. 26. 27. 121 dupa nume. in acest context implementati clasa Persoana, creati mai multe obiecte de acest tip, addugati-le in colectie si precizati rezultatul afigarii colectiei Precizati utilitatea iteratorilor. Creati o colectie in care adiugati elemente de tip Persoana (0 persoan are un nume, o functie, un venit si o varst’i). Folosind un iterator mariti cu 1000 venitul persoanelor care an fimetia “programator”. in care din implement&rile urmatoare ale interfetei List accesul la un element din mijlocul listei prin intermediul unui index se face mai incet si de ce: ArrayList sau LinkedList? Avem 0 clas Persoana care are dowd atribute: nume(String) si cod numeric per- sonal(String). Fiecare persoan’ are un cod numeric personal unic. S& se imple- menteze o metoda care returneaza intersectia a dou& colectii de tip Set care contin doar obiecte de tip Persoana. Explicati cAteva diferente dintre Thread si Runnable. $8 se implementeze o clas ThreadManager in care se pot inregistra thread-uri dupa nume gi se pot porni thread-uri folosind numele registrat: ThreadManager m = new ThreadManager(); //t1,t2 - referinte spre doua threaduri m.register(ti, "ThreadOne") ; n.register(t2, "ThreadTwo") ; m.startThread("ThreadTwo") ; Modelati um fir de executie care numara de la 1 la 99, afigand pe ecran fiecare numir. Instantiati si porniti firul. Dati un scurt exemplu in care si ilustrati conceptul de producitor /consumator. Avem o Memorie ce poate stoca cel mult un gir de caractere (String). Exist& mai multe procesoare (fire de executie) care pot scrie in aceasta memorie doar daca ele- mentul scris anterior de cAtre un procesor a fost preluat de catre un scriitor (fir de executie) ce citegte la infinit din memorie, eliberand-o si scriind contimutul ei pe un support fizic. Procesorul poate scrie in memorie doar daca aceasta este goalai, in caz contrar el trebuie sii astepte eliberarea ci, iar daci memoria este plind si continutul ei este egal cu cel dorit a fi scris de processor, acesta abandoneazii scrierea in mem- orie. Sa se implementeze clasa Memorie, comentandu-se fiecare linie a sa. 122 LECTIA 13. EXERCITI §I PROBLEME PROPUSE SPRE_ REZOLVARE 28. Care e rezultatul executiei codului de mai jos? Detaliati raspunsul dat. class ThreadOne extends Thread { public ThreadOne(Runnable x) { . super (r) ; public void run() { System. out.print ("ThreadOne") ; + class ThreadTwo implements Runnable { public void run() { Systen.out.print ("ThreadTwo") ; + class C { public static void main(String[] args) { new ThreadOne(new ThreadTwo()) start (); } + 29. Explicati de ce codul urmator nu afigeaz’ pe ecran intotdeauna, “LaboratorulPOO LaboratorulPOO....LaboratorulPOO". class T extends Thread { private void scrie() { System. out .print (""Laboratoru: System.out.print ("POO"); y public void ruh() { int i = 100; while(i>0) ¢ serie(); ins + 123 class C { public static void main (String{] args) { new T().start(); new T().startQ; + Modificati codul astfel incat acest lucru si se intample, dar s& rian’ cele doud metode pentru afigarea pe ecran. 30. Se cere si se defineasci un ansamblu de clase necesare unei aplicatii de evidenta a unui depozit de produse. Un produs este caracterizat prin cod, nume, pret de Dazi gi cantitate. Produsele sunt de doud feluri: compensate gi necompensate. Pretul produselor compensate este obtinut prin inmultirea pretului de baz cu un coeficient subunitar ce se transmite la crearea unui produs compensat iar al celor necompensate este chiar pretul de baz. Un client al depozitului trebuie s& poat& executa urmitoarele operatii asupra de- pozitului: e adiugarea unui produs in felul urmator: daca produsul exista in depozit, se actualizeazi doar cantitatea iar in caz contrar se maregte numarul de produse existent cu o unitate (ATENTIE: produsele se vor retine sub forma unui tablou jar in depozit se pot afla oricate produse!). © tiparirea inventarului de produse la un moment dat (pentru fiecare produs existent in depozit se va tip’ri codul, numele, pretul si cantitatea). Se cer: diagrama UML pentru clasele necesare aplicatiei. implementarea claselor necesare. o metoda main in care se va crea un depozit, se vor ad&uga produse gi se va tipiri inventarul depozitului creat. . © ce sar intampla daca in cadrul acestei aplicatii nu s-ar folosi polimorfismul? explicati mecanismul prin care la adSugarea, unui produs se testeazi daca pro- dusul exist sau nu in depozit. 31. Sa se modeleze un sistem software simplificat orientat-pe-obiecte. Acesta este alcatuit din mai multe figiere. Un figier are un numéir nelimitat de clase. O clasi are un anumit numar de linii de cod iar pe parcursul existentei sale poate fi supusé unor modificari datorita unor probleme(bug-uri). Detalii despre toate bug-urile dintr-o clasi sunt stocate de cétre aceasta sub forma unei colectii de Bug-uri, existand posibilitatea adéugarii unui numir nelimitat de bug-uri unei clase. Fiecare figier are asociat un autor. Atat clasa ct gi figierul au asociate cate o denumire. 124 LECTIA 13, EXERCITII $I PROBLEME PROPUSE SPRE_ REZOLVARE Bug-urile sunt de mai multe feluri: NullBug - acest tip de bug a apiirut datoriti folosirii unei referinte ce nu a indicat spre nici un obiect. Afigarea acestui tip de bug pe ecran va deter- mina mesajul NullBug referinta, unde referinta este numele referintei utilizate eronat. Numele referintei va fi setat la instantierea unui Bug de acest tip. © CastBug - acest tip de bug apare datorita efectuarii unei operatii de conversie eronate dintre un tip si alt tip. Acest tip de Bug se va tipiri sub forma CastBug referinta: Tipul et - Tipul spre care s-a incercat conversia. Toate valorile atributelor mentionate (trei) vor fi stocate sub forma de giruri de caractere gi setate la crearea acestui tip de bug. Po langa caracteristicile enuntate deja, entitatea Clasa mai are doua servicii, unul furnizeazi numfrul de linii de cod gi altul furnizeaza numérul total de bug-uri ce au ap&rut in cadrul clasei iar entitatea Fisier mai are 0 metodi. ce furnizeaza aumarul total de bug-uri existent in figierul respectiv precum gi o alta metoda ce furnizeaz’ numiarul de clase continute. Sistemul software are un numéar nelimitat de figiere. El, prin intermediul serviciilor, furnizeaz’ urmitoarele: ¢ numarul de fisiere continute numirul de clase continute ¢ numirul de autori distincti ce au dezvoltat sistemul (un autor poate dezvolta mai multe figiere) © unserviciu pentru tiparire. Rezultatul acestui serviciu va informa clientii clasei despre numirul de figiere existente in sistem iar numele fiectirui autor distinct: va fi furnizat impreuni cu figierele detinute de acesta. Atentie - numele unui autor apare o singura data! Dac& un autor detine mai multe figiere, denumirile acestora se vor tipiri pe cate o linie distincta. Entitatile Clasa, Fisier si Sistem stocheazi sub forma de colectii de obiecte numarul nelimitat de membri continuti (Clasa are Bug-uri, Fisierul are Clase, Sistemul are Fisiere) gi fiecare entitate mentionat are un serviciu pentru adiugarea de elemente in propria colectie. SA se implementeze clasa sau, dupi caz, clasele ce modeleazé, conform cerintelor de mai sus bug-urile existente precum si entit&tile Clasa, Fisier gi Sistem. S% se instantieze intr-o metoda main un sistem cu citeva figiere gi clase, unele clase avand si bug-uri atagate. Observatie: Clasele, in afara serviciilor mentionate pe care acestea trebuie sa le puni la dispozitia utilizatorului, pot contine oricate atribute/servicii considerati c& sunt necesare. 125 32. Sd se scrie o clas ce modeleaza. conceptul de coada, elementul ce este folosit pentru stocarea elementelor fiind tabloul. Elementele ce apartin cozii la un moment dat sunt niste carduri bancare, in cazul nostru Visa, Maestro gi MasterCard. Fiecare tip de card are imprimat numele utilizatorului (tip String, maxim 15 caractere), un numér format din 16 cifre(tip char{]) iar cardurile Visa gi MasterCard au un numdr de control format din 3 cifre(tip charl]) inscriptionat pe spate. Toate valorile acestor atribute sunt setate prin intermediul constructorilor acestor clase. Dimensiunea cozii este setata prin intermediul unui constructor ce primegte ca parametru un int. Dac& parametrul primit este negativ atunci acest constructor va genera 0 exceptie neverificata creatii de voi. Clasa care modeleaza coada pune la dispozitia unui client: © o metoda pentru introducerea unui element(card bancar) in coada. Aceast& metoda are ca unic parametru elementul ce se doregte a fi introdus. Daca nu mai existit loc in coada pentru introducerea unui nou element, clientul (obiectul care a apelat metoda de adaugare pusa la dispozitie de coada) va fi informat de faptul ci momentan nu mai pot fi introduse elemente. Atentie - aceast’ informare nu va fi realizaté prin tiparirea unui mesaj iar tipul returnat, de metoda va fi void! © o metoda pentru returnarea gi stergerea urmitorului element(dintre elementele existente primul introdus) din coadé. Daca coada este goala, acest lucru va fi semnalat clientului exact in modul in care a fost semnalat gi faptul cd nu mai pot fi adiiugate elemente. in ordinea i valorile © ometoda pentru afigarea continutului cozii. Elementele vor fi afigat PrimulIntrodus...Ultimullntrodus gi pentrn fiecare card se vor tiy tuturor atributelor continute insotite de tipul cardului. © o metod’. public boolean estelnCoada(Strategie strategie), unde Strategie ¢ 0 interfata ce are metoda public boolean conditie(CardBancar card). Aceasta metod& (esteInCoada) returneazi true daca existi cel pugin un element in coada care satisface conditia definita de strategie. Concret, parcurge toate clementele existente in coada si dac& exist& cel putin un element pentru care apelul metodei conditie a strategiei (evident, avand ca parametru elementul curent (cardul curent)) returneaza true, metoda estelnCoada returneaza true. Daca un astfel de element nu este identificat, metoda va returna false. Se cer: Sa se implementeze conform cerintelor clasa Coada impreunii cu toate clasele si subclasele folosite de aceasta. © Si se implementeze interfata Strategie de c&tre doud clase, astfel incat sa existe: — O clasa ce primeste printr-um constructor un String corespunzitor unui nume. fn acest caz metoda public boolean conditie(CardBancar card) returneazi true daci numele utilizatorului primit ca parametru prin con- structor este egal cu cel stocat in cadrul obiectului tip CardBancar referit, de c&tre parametru. 126 LECTIA 13. EXERCITII $I PROBLEME PROPUSE SPRE REZOLVARE — © clas pentru care metoda public boolean conditie(CardBancar card) returneazi true daci num&rul cardului contine de trei ori cifra 5. © Sa se creeze intr-o metoda main o coada. Sa se apeleze toate metodele puse la dispozitie de citre obiectul creat. « Si se explice care sunt avantajele folosirii mostenirii de tip in cadrul acestei” aplicatii. # Descrieti modificiirile necesare astfel inedt pe parcursul existentei programului clasa Coada si nu poaté fi instantiata decat o singur’ dat’. Apoi modificati im- plementarea clasei astfel incat aceasta si nu poati avea mai mult deo instanté. 33. Fie o sceni grafic care contine diferite tipuri de figuri. Concret, putem avea figuri de tip Cere, Patrat si Triunghi. Fiecare figura are o culoare, contine o metod’ pentru calculul perimetrului si poate fi afigat sub urmitoarea forma: Tip Figura, Culoare, Perimetru (Culoare desemneazii valoare culorii(ex: galben, rogu) iar Perimetru val- oarea perimetrului). Se consider’ ci dou’ figuri sunt egale dacé au acelasi tip si acelasi perimetru. Figurile de tip Cerc au o razi, cele de tip Patrat au o latura iar cele de tip ‘Driunghi au trei laturi. Toate figurile an metode pentru modificarea atributelor prezentate anterior, ‘Atunci cand se instantiaz’, fiecare figuri se inregistreaz la un observator. Un observator este o clas& ce are o singur’ instant gi contine urmAtoarele metode: © 0 metoda pentru adaugarea oricirui tip de figura (Cerc, Patrat sau Triunghi) intr-o colectie de obiecte, colectia fiind un atribut al clasei, © 0 metoda prin care se anunté observatorul c& starea unei figuri continute (culoarea si/sau raza/latura/laturile) s-a modificat. Apelul acestei metode ¢ realizat de c&tre toate tipurile de figuri atunci cand se modificd caracter- istica/caracteristicile acestora si determina afigarea tuturor figurilor monitor- izate pe ecran. o metoda pentru afigarea tuturor figurilor ce sunt monitorizate. Se cer: © Sse implementeze conform cerintelor ierarhia de figuri precum si clasa ce modeleaz conceptul de observator. ¢ Sk se creeze intr-o metodi main cel putin o figuri de fiecare tip, iar cel putin uneia dintre ele s& i se modifice un atribut. Se va exemplifica rezultatul rularit metodei main. © S& se explice care sunt avantajele folosirii polimorfismului in cadrul acestei aplicatii. 34. Politia comunitara acordi diferite tipuri de amenzi pentru urmatoarele categorii de fapte, dupa cum urmeaza: © parcarea ilegala a maginii — amenda fix’ 500 RON 127 aruncatul gunoaielor pe jos - amend& 200 RON * factorZonal, unde factorZonal este un coeficient cuprins intre 1..4, corespunzitor zonei in care s-a produs fapta ¢ distrugerea bunurilor din parcuri ~ amendé, 300 RON * valoarea bunului Fiecare tip de amenda are cel putin urmatoarele caracteristici: © contine codul numeric personal (CNP) al cetateanului c&ruia a fost aplicatd e are o metoda ce returneaza valoarea amenzii © poate fi afigata sub urmatoarea forma: CNP Tip Amenda, Valoare. Tip Amenda desemneazi cauza pentru care amenda a fost acordata iar Valoare reprezinta suma care trebuie incasata de la cetatean. in cadrul. sistemului folosit exist& o clas pentru gestiunea tuturor amenzilor acor- date. Aceast clasi contine: © 0 colectie de obiecte pentru stocarea tuturor amenzilor acordate © © metoda pentru introducerea unei noi amenzi (de orice tip) ‘© © metoda public int valoare(Strategie strategie), unde Strategie ¢ o interfata ce are metoda public boolean conditie(Amenda amenda). Aceastié metoda (int valoare(Strategie strategie) returneazé suma amenzilor corespunzatoare elementelor din colectie ce satisfac proprictatea definita de strategie. Concret, parcurge toate clementele colectiei si pentru fiecare element apeleazi metoda conditie a strategiei (evident, avand ca parametru elementul curent (amenda curenti’)) si daca aceasta returneazi true, adaug’ valoarea amenzii la suma ce va fi returnata. Se cer: © Si se implementeze conform cerintelor ierarhia de amenzi precum gi clasa ce gestioneazi amenzile acordate. © S& se implementeze interfata Strategie de citre diferite clase, astfel incat sii existe: — 0 clasi ce primeste printr-un constructor un String corespuztor unui cod numeric personal. In acest caz metoda public boolean conditie(Amenda amenda) returneaz& true daca codul numeric personal primit ca parametru prin constructor este egal cu cel stocat in cadrul obiectului tip Amenda referit de c&tre parametru. — 0 clas pentru care metoda public boolean conditie(Amenda amenda) re- turneazii true dack amenda a fost generat dotorita nerespectarii semnului Parcarea Interzisa. © SA se exemplifice printr-o metodi main functionarea sistemului. Se vor crea diferite tipuri de amenzi (cel putin cite una de fiecare tip) si se va returna suma amenzilor datorate de cetiiteanul ce are codul numeric personal 1031274456709. 128 LECTIA 13. EXERCITI $1 PROBLEME PROPUSE SPRE REZOLVARE S& se explice care sunt avantajele folosirii polimorfismului in cadrul acestei aplicatii. 35. intr-un sistem simplificat de executie de sarcini (nu are legiitura cu firele de executie) exist mai multe feluri de task-uri. Indiferent de tipul siu concret, pe un obiect task se poate apela din exterior: (a) o metoda denumita ezecute ce intoarce sub forma de intreg timpul de executie al task-ului in milisecunde (presupunem c& metoda si execut’& cumva fizic task-ul dar pentru simplitate pe noi ne intereseaz doar timpul de executie) (b) 0 metoda care intoarce reprezentarea sub forma de sir de caractere a obiectului task, Calculul timpului de executie si reprezentarea sub forma de gir de caractere se realizeaz functie de tipul concret: al task-ului. Tipurile concrete de task-uri sunt: © SimpleTask - un astfel de obiect primeste la creare (prin constructor) un intreg reprezentand timpul de executie al task-ului, Pentru acest fel de task reprezentarea sub forma de sir de caractere este SimpleTask(timp-executie) unde timp-executie ¢ intregul dat prin constructor. Valoarea acestui intreg poate fi modificati printr-o metoda changeTime (prin parametrul ei) definit’ in aceasta clasa. e ConditionalTask - un astfel de obiect primegte prin constructor doua obiecte task ce pot fi de orice fel concret. Timpul de executie pentru un astfel de tip de task se calculeazi ca 5 milisecunde la care se adaugi aleator fie timpul de executie al primului task fie timpul de executie a celui de-al doilea (trebuie tinut cont c& timpul de executie al unui task conditional poate diferi de la 0 executie la alta; pentru acest aleatorism puteti utiliza metoda static’ random din clasa Math), Pentru acest fel de task reprezentarea sub forma: de sir de caractere este ConditionalTask(r1,r2) unde ri ..2) este reprezentarea sub forma de gir de caractere a task-ului i dat prin constructor. BlockTask - reprezinta o insiruire de task-uri de orice fel (simple, conditionale, blocuri) intr-un numér nelimitat. Timpul de executie pentru un astfel de tip de task se calculeazi ca suma timpului de executie pentru fiecare task continut. Clasa mai pune la dispozitie o metod& insert prin intermediul c&reia se poate adauga la un task bloc (din exteriorul unui astfel de object) un task de orice fel (prin intermediul parametrului metodei). Reprezentarea sub forma de sir de caractere are forma Block(r1,r2,..) unde ri(i=1,2,..) este reprezentarea sub forma de sir de caractere a task-ului i continut de task-ul block. Se cer: ¢ Lmplementarea claselor descrise si a altora dac& sunt necesare. Si se construiasc’ intr-o metodé main (si tinand cont de implementarea claselor anterioare) un obiect task a carui reprezentare sub forma de sir de caractere este Conditional Task(SimpleTask(155), BlockTask(SimpleTask(5), SimpleTask(4))). 36. 129 ¢ Si se implementeze un mecanism prin care s& putem afia in céte taskuri com- puse (adic& conditionale sau bloc) a fost inclus un obiect task. in acest scop se va introduce corespunziitor in clasa / clasele de task-uri o metoda care sé intoarcit aceast’ valoare. Not’: Schimbarea timpului de executie a unui task simplu, a unui task block (prin inserarea la ea de alte task-uri), etc., trebuie s& fie observabil in timpul de executic a altor task-uri compuse ce includ task-urile anterioare. jntr-un program de gestiune a angajatilor unei firme exista mai multe feluri de angajati. Fiecare obiect angajat este caracterizat de numele su si are o metodi cal- culSalar care intoarce un double reprezentind salariul acelui angajat. Tipurile con- crete de angajati si modul specific de calculare a salariilor (pe langé alte informatii) sunt urmitoarele: ¢ AngajatCuSalarFix - la crearea unui astfel de obiect se dé numele angajatului si un double reprezenténd salariul sau fix. Aceste date vor fi memorate in starea obiectului. In cazl unui astfel de angajat, metoda calculSalar intoarce valoarea salariului data la crearea obiectului. Clasa mai defineste 0 metoda de- numitii schimbaSalarFix prin intermediul parametrului cireia se poate schimba valoarea salariului fix specificat la crearea obiectului. © AngajatCuOra - la crearea unui astfel de obiect se di numele angajatului si un double reprezentind salariul pe ora primit de angajat. Aceste date vor fi memorate intern in starea obiectului. Clasa mai defineste metoda adaugaOre care primeste ca parametru un double reprezentind un numér de ore lucrate. Toate orele lucrate vor fi memorate intern intr-un obiect de acest fel, intr-un tablou de maxim 31 de intraéri (se presupune c& nu se adaugi mai mult de 31 de ore). Tot aceasta clasé defineste metoda schimbaSalarPeOra prin intermediul parametrului ciireia se poate schimba salariul pe ord setat initial (se poate da alti valoare prin intermediul parametrului metodei). in cazul unui astfel de angajat metoda calculSalar intoarece ca valoare numirul total de ore (suma orelor din tablou) inmultita cu salariul pe ora. Sistemul mai defineste 0 clasi Firma. Aceasta defineste o metoda angajeaza prin care un angajat de orice fel (dat ca parametru metodei) este memorat ca angajat, al acelei firme. Angajatii unci firme sunt memorati intera intr-un tablou de maxim 1024 intriri. Dacd se incearci angajarea a mai mult de 1024 de angajati, metoda intoarce valoarea -1. Mai mult, metoda intoarce valoarea -2 in cazul in care se incearc& addugarea aceluiagi angajat la aceeasi firma (un angajat nu poate fi adiugat de doua ori la aceeagi firma). Se considera ci doud obiecte angajat sunt egale atunci cind numele angajatilor sunt egale (reprezintii aceleagi secvente de caractere). in situatia in care angajarea se realizeazi cu success metoda angajeaza intoarce valoarea 0. 130 LECTIA 13. EXERCITII §1 PROBLEME PROPUSE SPRE REZOLVARE Clasa Firma mai defineste o metodti salariuMediu care intoarce un double reprezen- tnd salarful mediu calculat pentru toti angajatii sii (media salariilor). Dac& obiec- ul de tip Firma apelat nu are nici un angajat, metoda intoarce valoarea 0. Se cer: . « Implementarea claselor descrise mai sus gi a altora necesare. © O metoda main in care se instantiazi cite dou’ obiecte angajat de fiecare fel gio firma. Se adaugi obiectele angajati la firma creat si se calculeaz’ (si afigeazi) salariul mediu pentru acea firma. Se va exemplifica apoi cazul in care se incearcd angajarea aceleiasi persoane de mai multe ori la aceeasi firmi. Se va schimba apoi salarful fix sau pe or a unui angajat din cei creafi anterior si se va reafiga salariul mediu pentru acea firma. Nota: Se pot adiuga gi noi membri la clasele amintite mai sus dac& se consider’ necesar. Schimbarea valorii salariului unui angajat trebuie si fie vizibilX dintr-un obiect Firma care contine obiectul angajat mentionat anterior.

You might also like