Diferență între revizuiri ale paginii „POO Lab Lucrarea 2”

De la WikiLabs
Jump to navigationJump to search
(Anularea modificării 5544 făcute de Radu Hobincu (Discuție))
 
(Nu s-au afișat 16 versiuni intermediare efectuate de același utilizator)
Linia 7: Linia 7:
 
* [[Convenții de programare]]
 
* [[Convenții de programare]]
 
* [[Noțiuni avansate de programare obiect-orientată]]
 
* [[Noțiuni avansate de programare obiect-orientată]]
* [[Java Application Programming Interface (API)]]
 
  
 
== Cerințe ==
 
== Cerințe ==
  
* Adăugați clasei '''Message''' doi constructori accesibili tuturor claselor, unul care să aibă argumente pentru toate cele trei câmpuri ('''receiver''', '''sender''' și '''content'''), iar unul care să aibă argumente doar pentru expeditor și conținut, destinatarul păstrând valoarea implicită '''null'''.
+
* Să se scrie o clasă '''PrivateMessage''', extinsă din clasa '''Message''', ce va fi folosită ca purtătoare de date între un client de chat și un anumit destinatar, care să aibă următoarele proprietăți:
* Adăugați modificatori de access membrilor clasei astfel încât:
+
** Să stocheze numele expeditorului, un conținut și numele destinatarului;
** cele 3 câmpuri să fie accesibile doar clasei; încapsulați câmpurile adăugând metode ''getters'' accesibile tuturor claselor;
+
** Să fie imutabilă (odată creat un obiect, conținutul acestuia să nu mai poată fi modificat);
** metoda '''print()''' să fie accesibilă tuturor claselor.
+
** Să permită extragerea din obiectele de tip '''PrivateMessage''' ale unui mesaj formatat în modul specific mesajelor private în aplicațiile de chat -- "(priv) expeditor: continut" --, folosind mecanismul de suprascriere a metodelor.
* Suprascrieți metoda '''toString()''' definită în clasa '''Object''' astfel încât să întoarcă un șir de caractere formatat în genul mesajelor din programele de chat: ''<expeditor>: <conținut>''
+
** Să existe o metodă prin care să se poată obține destinatarul pentru orice obiect de tip '''PrivateMessage''', numită ''getRecipient()''.
* Scrieți o clasă '''SystemMessage''' care să extindă clasa '''Message'''. '''SystemMessage''' trebuie conțină în plus un câmp de tip ''int'' numit '''type''', accesibil doar clasei, și o metodă ''getter'' accesibilă tuturor claselor pentru acest câmp.
+
** Constructorul aibă ca argumente, în ordine, destinatarul, expeditorul și apoi conținutul mesajului.
* Adăugați clasei '''SystemMessage''' 2 constructori accesibili tuturor claselor, unul care ia ca argument doar o valoare pentru inițializarea câmpului "type", și al doilea două valori pentru inițializarea câmpurilor '''type''' și '''sender'''.
+
 
* Adăugați clasei '''SystemMessage''' 3 constante de clasă, de tip int, cu valorile 0, 1 și 2, care au numele TYPE_ERROR, TYPE_OK, si TYPE_CHANGE_NAME.
+
* În clasa '''Main''' deja existentă, să se instanțieze cel puțin trei obiecte de tip '''PrivateMessage''' și să afișeze stringul formatat și destinatarul pentru fiecare.
* Suprascrieți metoda '''toString()''' definită în clasa '''Message''' astfel încât nu afișeze decât câmpul '''type'''.
+
 
* Modificați instanțierile din metoda '''main''' din clasa '''TestClass''' astfel încât să folosească apelul constructorilor și adăugați încă 3 instanțieri de obiecte de tip '''SystemMessage''' pe care să le afișați în consolă folosindu-vă de metoda '''toString()'''.
+
Observații:
 +
* Numele claselor și metodelor trebuie sa fie conform cu cele specificate mai sus.
 +
* Clasele trebuie facă parte din pachetul '''ro.upb.etti.poo.chat_application.structs'''.
 +
* Fiecare clasă și membru trebuie să aibă unul din modificatorii de access ''public'' sau ''private''.
 +
* Numele claselor trebuie sa fie conform cu cele specificate mai sus.
 +
* Utilizați mecanismele de moștenire și suprascriere.
 +
 
 +
 
 +
Predare:
 +
* Codul se va preda și corecta automat pe platforma [http://moodle.dcae.pub.ro Moodle].
 +
* <font color="red">'''Atenție:'''</font> Orice nerespectare ale indicațiilor de predare poate duce la pierderea în totalitate a punctajului.
 +
 
 +
'''<font color="red">Atenție: Temele vor fi verificate anti-plagiat cu soft-uri specializate. Orice temă copiată va fi penalizată (atât sursa cât și copia) cu 100% din punctaj, fără posibilitate de refacere.</font>'''

Versiunea curentă din 28 octombrie 2017 23:50

Noțiuni și cunoștințe necesare

Cerințe

  • Să se scrie o clasă PrivateMessage, extinsă din clasa Message, ce va fi folosită ca purtătoare de date între un client de chat și un anumit destinatar, care să aibă următoarele proprietăți:
    • Să stocheze numele expeditorului, un conținut și numele destinatarului;
    • Să fie imutabilă (odată creat un obiect, conținutul acestuia să nu mai poată fi modificat);
    • Să permită extragerea din obiectele de tip PrivateMessage ale unui mesaj formatat în modul specific mesajelor private în aplicațiile de chat -- "(priv) expeditor: continut" --, folosind mecanismul de suprascriere a metodelor.
    • Să existe o metodă prin care să se poată obține destinatarul pentru orice obiect de tip PrivateMessage, numită getRecipient().
    • Constructorul să aibă ca argumente, în ordine, destinatarul, expeditorul și apoi conținutul mesajului.
  • În clasa Main deja existentă, să se instanțieze cel puțin trei obiecte de tip PrivateMessage și să afișeze stringul formatat și destinatarul pentru fiecare.

Observații:

  • Numele claselor și metodelor trebuie sa fie conform cu cele specificate mai sus.
  • Clasele trebuie să facă parte din pachetul ro.upb.etti.poo.chat_application.structs.
  • Fiecare clasă și membru trebuie să aibă unul din modificatorii de access public sau private.
  • Numele claselor trebuie sa fie conform cu cele specificate mai sus.
  • Utilizați mecanismele de moștenire și suprascriere.


Predare:

  • Codul se va preda și corecta automat pe platforma Moodle.
  • Atenție: Orice nerespectare ale indicațiilor de predare poate duce la pierderea în totalitate a punctajului.
Atenție: Temele vor fi verificate anti-plagiat cu soft-uri specializate. Orice temă copiată va fi penalizată (atât sursa cât și copia) cu 100% din punctaj, fără posibilitate de refacere.