This shows you the differences between two versions of the page.
poo:laboratoare:06 [2017/11/01 00:35] mihai.nan [Problema 4] |
poo:laboratoare:06 [2021/11/14 20:53] (current) carmen.odubasteanu [Problema 3] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laboratorul 06. ===== | ===== Laboratorul 06. ===== | ||
- | * Responsabil: [[mihai.nan.cti@gmail.com|Mihai Nan]] | + | Arhiva laborator 6: {{:poo:laboratoare:arhiva6.zip|}} |
- | * Data publicării: 30.10.2017 | + | |
- | * Data ultimei modificări: 31.10.2017 | + | ==== Problema 0 - vezi curs!! ==== |
+ | Să se definească o clasă SortedVector derivată din Vector, care să permită ordonarea după orice criteriu, specificat de utilizator la construirea unui obiect SortedVector. Clasa va conţine o variabilă de tip Comparator, iniţializată de un constructor cu argument de tip Comparator şi folosită de metoda Collections.sort. | ||
+ | |||
+ | Observatie!! Vom supradefini doar **add**-ul din Vector pt aceasta problema, pt a fi mai simplu. In mod normal ar trebui supradefinite toate metodele de adaugare, setare etc care ne-ar putea modifica ordinea! | ||
+ | |||
+ | Să se definească o clasă Pair care conţine două date de tip Object, cu metodele equals şi toString redefinite. | ||
+ | |||
+ | Să se scrie două clase Comparator pentru compararea obiectelor Pair dupa primul obiect, respectiv, comparare după al doilea obiect din pereche | ||
+ | |||
+ | Să se scrie un program pentru crearea a doi vectori SortedVector de obiecte Pair, unul ordonat după primul obiect din pereche şi celălalt ordonat după al doilea obiect: vom adăuga obiecte Pair ce conţin un String şi un Integer. | ||
==== Problema 1 ==== | ==== Problema 1 ==== | ||
- | Să se implementeze ierarhia de clase descrisă prin diagrama de mai jos: | + | Să se implementeze ierarhia de clase descrisă prin diagrama de mai jos, astfel incat constructorii subclaselor sa foloseasca cat mai mult constructorii superclaselor cat si cei proprii (//super(..)//, //this(..)//): |
{{https://i.imgur.com/kE9ZrmT.png|}} | {{https://i.imgur.com/kE9ZrmT.png|}} | ||
Clasa abstractă **//Shape//** conține trei metode abstracte: **//getArea//**, **//getPerimeter//** și metoda **//toString//** care este implementată în fiecare clasă și este particularizată, pentru a face distincția între obiecte. | Clasa abstractă **//Shape//** conține trei metode abstracte: **//getArea//**, **//getPerimeter//** și metoda **//toString//** care este implementată în fiecare clasă și este particularizată, pentru a face distincția între obiecte. | ||
+ | Aveti aceasta clasa in arhiva laboratorului!! | ||
<note>Pentru validarea acestei cerințe, puteți folosi clasa **//Test01//** pusă la dispoziție în arhiva laboratorului.</note> | <note>Pentru validarea acestei cerințe, puteți folosi clasa **//Test01//** pusă la dispoziție în arhiva laboratorului.</note> | ||
==== Problema 2 ==== | ==== Problema 2 ==== | ||
- | Pornind de la ierarhia definită anterior, definiți o referință la un obiect de tip **//Rectangle//**. Verificați dacă puteți instanția un astfel de obiect folosind unul din constructorii clasei **//Shape//** și unul din cei existenți în clasa **//Square//**. Declarați și instanțiați un obiect de tip **//Square//**, apoi incercați să îi faceți cast la un obiect de tip: **//Rectangle//**, **//Shape//** și **//Circle//**. Eliminați erorile apărute, folosind **//instanceof//** pentru a determina dacă este validă operația pe care incercați să o realizați. | + | Pornind de la ierarhia definită anterior, declarati un obiect de tip **//Rectangle//**. Verificați dacă puteți instanția un astfel de obiect folosind unul din constructorii clasei **//Shape//** și unul din cei existenți în clasa **//Square//**. Declarați și instanțiați un obiect de tip **//Square//**, apoi incercați să îi faceți cast la un obiect de tip: **//Rectangle//**, **//Shape//** și **//Circle//**. Eliminați erorile apărute, folosind **//instanceof//** pentru a determina dacă este validă operația pe care incercați să o realizați. |
Determinați tipurile conversiilor, din blocul de cod de mai jos, indicând dacă sunt sau nu posibile. | Determinați tipurile conversiilor, din blocul de cod de mai jos, indicând dacă sunt sau nu posibile. | ||
Line 33: | Line 43: | ||
<note important>**Upcasting** & **Downcasting**</note> | <note important>**Upcasting** & **Downcasting**</note> | ||
==== Problema 3 ==== | ==== Problema 3 ==== | ||
- | Pornind de la interfața propusă, creați o clasă **//Student//** care implementează interfața și conține ca membri privați numele studentului și un vector cu elemente de tip Double, reprezentând mediile acestuia. Dacă există doi studenți care au același nume, primul este cel cu media mai mare. | + | Pornind de la interfața propusă, creați o clasă **//Student//** care implementează interfața **//Persoana//** și conține ca membri privați numele studentului și un vector cu elemente de tip Double, reprezentând mediile acestuia. Compararea se va realiza crescator dupa nume, iar dacă există doi studenți care au același nume, primul este cel cu media mai mare. |
Scrieți o metodă **//main//** care construiește un vector (obiect din clasa **//Vector//**) cu elemente de tip **//Student//**, îl ordonează, conform criteriului anterior, folosind Collectios.sort, și apoi îl afișează! | Scrieți o metodă **//main//** care construiește un vector (obiect din clasa **//Vector//**) cu elemente de tip **//Student//**, îl ordonează, conform criteriului anterior, folosind Collectios.sort, și apoi îl afișează! | ||
Line 52: | Line 62: | ||
Pentru testare, se poate folosi ierarhia de directoare pusă la dispoziție în arhiva laboratorului. Extensiile acceptate se citesc din fișierul **extension.in**, iar cuvintele din fișierul **words.in**, folosind obiecte de tipul **//RandomAccessFile//**. | Pentru testare, se poate folosi ierarhia de directoare pusă la dispoziție în arhiva laboratorului. Extensiile acceptate se citesc din fișierul **extension.in**, iar cuvintele din fișierul **words.in**, folosind obiecte de tipul **//RandomAccessFile//**. | ||
+ | Fisierele si ierarhia pe care puteti lucra se regasesc in arhiva laboratorului. | ||
==== Problema 5 ==== | ==== Problema 5 ==== | ||
Line 67: | Line 78: | ||
- nu furnizează servicii pentru deschiderea, respectiv închiderea automată a ușilor, aceste operații executându-se manual. | - nu furnizează servicii pentru deschiderea, respectiv închiderea automată a ușilor, aceste operații executându-se manual. | ||
- | Implementați clasa **abstractă** care modelează conceptul de vagon împreună cu eventualele sale clase derivate. Se menționează că apelurile serviciilor pentru deschiderea, respectiv închiderea ușilor și blocarea geamurilor vor afișa pe ecran un mesaj corespunzător. | + | Implementați clasa **abstractă** care modelează conceptul de vagon împreună cu clasele sale derivate. Se menționează că apelurile serviciilor pentru deschiderea, respectiv închiderea ușilor și blocarea geamurilor vor afișa pe ecran un mesaj corespunzător. |
Implementați clasa **//Tren//** conform specificațiilor. Obiectele de tip **//Tren//** trebuie să fie comparabile, două trenuri fiind considerate egale dacă pot transporta același număr de colete. Această clasă conține o metodă pentru afișarea tipurilor de vagoane existente în componența trenului. | Implementați clasa **//Tren//** conform specificațiilor. Obiectele de tip **//Tren//** trebuie să fie comparabile, două trenuri fiind considerate egale dacă pot transporta același număr de colete. Această clasă conține o metodă pentru afișarea tipurilor de vagoane existente în componența trenului. | ||
- | Pentru testare, se poate utiliza clasa **//Test05//** pusă la dispoziție în arhiva laboratorului. | + | Pentru testare, se poate __**completa**__ clasa **//Test05//** pusă la dispoziție în arhiva laboratorului. |