POO Lab Lucrarea 3: Diferență între versiuni

De la WikiLabs
Jump to navigationJump to search
Linia 13: Linia 13:
== Cerințe ==
== Cerințe ==


* În metoda '''main''' din clasa '''TestClass''' instanțiați un obiect de tip [http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html java.io.FileOutputStream] în care scrieți, pe fiecare rând, conținutul câmpurilor obiectelor de tip '''Message''' și '''SystemMessage''' instanțiate în prealabil, câmpurile fiind separate de șirul de caractere "<->". Numele fișierului în care se scriu datele este primit ca argument la execuția programului. '''Observație:''' Pentru realizarea acestui exercițiu, se permite adăugarea câte unei metode suplimentare în clasele '''Message''' si '''SystemMessage''';
# Realizați o clasă numită '''ServerConfig''' care are ca rol citirea dintr-un fișier de configurare a unor parametri, pe care îi vom folosi ulterior în aplicația server. Această clasă trebuie să respecte următoarele constrângeri:
* Scrieți o clasă '''StreamTester''' care să conțină exclusiv metoda '''main'''. Metoda '''main''' ia ca argument, la execuția programului, un șir de caractere reprezentând un nume de fișier (cel generat de programul anterior). Folosind clasele [http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html java.io.BufferedReader], [http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html java.io.InputStreamReader] și [http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html java.io.FileInputStream], citiți linie cu linie conținutul fișierului și instanțiați obiecte potrivite ('''Message''' sau '''SystemMessage''') pe care să le afișați în consolă folosindu-vă de metoda '''toString()'''. '''Observație:''' Folosiți-vă de metoda '''split''' din clasa [http://docs.oracle.com/javase/7/docs/api/java/lang/String.html java.lang.String];
#* Clasa trebuie dispună de doi constructori:
* Tratând excepțiile aruncate de diversele metodele folosite, dacă fișierul primit ca argument la punctul anterior nu există, se va afișa în consolă mesajul "File not found". Dacă acesta nu se poate scrie sau citi, se va afișa "IO operation failed". Analog, daca una din liniile citite nu corespunde formatului așteptat, se va afișa mesajul "Line <conținutul liniei> does not match the expected template" și se va trece la linia următoare din fișier.
#*# Unul cu un argument de tip String care va reprezenta fișierul de configurare citit
#*# Unul fără argumente, care va considera implicit fișierul de configurare ca fiind ''server.conf''.
#* Obiectele de tip '''ServerConfig''' trebuie să citească fișierul de configurare și apoi să expună parametrii citiți din fișier prin metode.
#* Metodele din clasa '''ServerConfig''' trebuie să arunce excepții dacă apar probleme la citirea sau interpretarea fișierului de configurare:
#*# '''IOException''' dacă fișierul specificat nu există sau nu se poate citi (această excepție este aruncată de către metodele care aparțin claselor de tip stream, deci nu este necesară decât aruncarea ei mai departe).
#*# '''InvalidFormatException''' dacă cel puțin o linie din fișier nu corespunde formatului așteptat (acest tip de excepție nu există și va trebui creat).
#*# '''UnknownKeyException''' dacă în fișier există configurată o proprietate necunoscută (acest tip de excepție nu există și va trebui creat).
#*# '''MissingKeyException''' dacă din fișier lipsește una din proprietățile așteptate (acest tip de excepție nu există și va trebui creat).
#* Clasa trebuie să fie imutabilă.
# Următoarele proprietăți sunt singurele valide, care trebuie existe în fișierul de configurare:
#* TCP_PORT - reprezintă portul TCP pe care server-ul e configurat să accepte conexiuni.
#* MAX_CLIENTS - reprezintă numărul maxim de clienți pe care serverul îl poate deservi.

Versiunea de la data 23 noiembrie 2014 19:29

Noțiuni și cunoștințe necesare

Cerințe

  1. Realizați o clasă numită ServerConfig care are ca rol citirea dintr-un fișier de configurare a unor parametri, pe care îi vom folosi ulterior în aplicația server. Această clasă trebuie să respecte următoarele constrângeri:
    • Clasa trebuie să dispună de doi constructori:
      1. Unul cu un argument de tip String care va reprezenta fișierul de configurare citit
      2. Unul fără argumente, care va considera implicit fișierul de configurare ca fiind server.conf.
    • Obiectele de tip ServerConfig trebuie să citească fișierul de configurare și apoi să expună parametrii citiți din fișier prin metode.
    • Metodele din clasa ServerConfig trebuie să arunce excepții dacă apar probleme la citirea sau interpretarea fișierului de configurare:
      1. IOException dacă fișierul specificat nu există sau nu se poate citi (această excepție este aruncată de către metodele care aparțin claselor de tip stream, deci nu este necesară decât aruncarea ei mai departe).
      2. InvalidFormatException dacă cel puțin o linie din fișier nu corespunde formatului așteptat (acest tip de excepție nu există și va trebui creat).
      3. UnknownKeyException dacă în fișier există configurată o proprietate necunoscută (acest tip de excepție nu există și va trebui creat).
      4. MissingKeyException dacă din fișier lipsește una din proprietățile așteptate (acest tip de excepție nu există și va trebui creat).
    • Clasa trebuie să fie imutabilă.
  2. Următoarele proprietăți sunt singurele valide, care trebuie să existe în fișierul de configurare:
    • TCP_PORT - reprezintă portul TCP pe care server-ul e configurat să accepte conexiuni.
    • MAX_CLIENTS - reprezintă numărul maxim de clienți pe care serverul îl poate deservi.