Acasa
 

Laboratorul 1

Scop

  • Identificarea cerintelor
  • Proiectare si implementare orientata-obiect
  • Implementare: stil de programare, cod lizibil, auto-documentat

Probleme

Problema 1 [punctaj 150E]

Realizati un container eterogen de figuri. Containerul va gestiona in acelasi timp cercuri, triunghuri, patrate. Fara a modifica in nici un fel codul sau, acesta va putea gestiona si alte tipuri de figuri ce pot fi adaugate ulterior. Programul va permite serializare/deserializare intr-un/dintr-un fisier a figurilor gestionate. Sistemul de deserializare va trebui conceput in asa fel incat codul sa nu necesite nici o modificare atunci cand se adauga un nou tip de figura. Implementati sistemul in limbajele: C++, Java, C#, Python.

Discutati despre avantajele si dezavantajele fiecarui limbaj in contextul acestei probleme. Aveti in vedere: licentele necesare implementarii programului (pentru dezvoltatori, pentru potentialii utilizatori), portabilitatea intre platforme (Linux/Windows), portabilitatea intre uneltele de dezvoltare majore existente (diferente la nivelul codului sursa, diferente la nivelul modului de definire a proiectului si a compilarii).

Problema 2 [punctaj 200E]

Realizati o biblioteca pentru lucrul cu intregi mari, reprezentati pe 32, 64, 128, posibil mai multi, biti. Pentru aceasta, implementati o clasa Int care sa poate fi folosita in diversi algoritmi intersanjabil cu tipul nativ int. Operatiile care trebuie suportate sunt: and, or, not, xor, left shift, right shift, addition. Aveti in vedere eficienta operatiilor.

Proiectati sistemul astfel incat utilizatorul sa poata selecta pe cate cuvinte de memorie sunt reprezentati intregii. Este posibila o proiectare eleganta care sa permita lucrul in acelasi program (posibil multithreading) cu intregi de dimensiuni diferite?

Alegeti limbajul de programare cel mai potrivit pentru indeplinirea cerintelor. Justificati alegerea facuta (mentionati inclusiv dezavantajele limbajelor respinse).

Problema 3 [punctaj 50E]

Realizati un program mod consola care rezolva ecuatia de gradul 2. Parametrii ecuatiei sunt cititi din linia de comanda. Rezultatul poate fi scris fie in fluxul standard de iesire, fie intr-un fisier, in functie de optiunea utilizatorului, exprimata la linia de comanda. Programul va avea o optiune "verbose" care va explica pas cu pas algoritmul de calculare a solutiilor. Tot in functie de o optiune specificata la linia de comanda programul va calcula sau nu solutiile complexe.

Exemplu de utilizare: solver2 -a 10 -b 5 -c 0 --verbose --complex

Parametrii pot fi dati in orice ordine. Exista vreo biblioteca in limbajul pe care l-ati ales care ofera servicii convenabile de parsare a parametrilor? Daca nu, motivati de ce si propuneti o astfel de biblioteca.

Keywords [eng.]

Requirements engineering, object-oriented design, programming style, self-documented code. Problems: composite design pattern, long integers, command line parameters.