Curs 6 Curs 8

[Curs nr.7]


Implementarea claselor si a obiectelor

Scop: reprezentarea fiecarei abstractiuni si colaborari in modul cel mai eficient si elegant.
In aceasta faza predomina activitatile de implementare, fara insa ca ele sa fie lipsite de o anume creativitate .
A selecta o cale de reprezentare eficienta si eleganta este un act de creatie care nu poate fi usor automatizat.

Implementarea este mai estompata pe durata analizei, cand serveste mai mult studierii riscurilor si descoperirii de noi clase si obiecte. Pe durata proiectarii implementarea presupune crearea unor produse executabile ce materializeaza arhitectura. Implementarea atinge varful pe durata fazei de evolutie, cand are loc detalierea succesiva a arhitecturii.

Locul pe care aceasta faza il ocupa in cadrul secventei de faze ce alcatuiesc microprocesul este justificat de faptul ca microprocesul se axeaza mai intai asupra comportamentului, amanand cat se poate deciziile legate de reprezentare. Aceasta strategie permite:

Produse: in aceasta faza se obtine sofware-ul care codifica reprezentarea claselor si a colaborarilor.

Activitati: selectarea structurilor si a algoritmilor care indeplinesc rolurile si responsabilitatile identificate in fazele anterioare ale microprocesului. Daca primele 3 faze ale microprocesului vizeaza perspectiva exteriorului abstractiunilor, la implementare accentul este pus pe interiorul acestora.
Activitatea se desfasoara dupa urmatorii pasi:

  pt. fiecare clasa si colaborare se analizeaza protocolul; se cauta similitudini de utilizare de catre clienti, pentru a determina care sunt operatiile mai importante, cu scopul de a le optimiza;
  inainte de a trece la codificarea de la zero a unei reprezentari, se studiaza posibiliattile de adaptare a unor clase existente, prin derivare sau instantiere; daca o anumita problema e mai generala, se vor alege clase abstracte sau template-uri;
  se cauta obiectele carora li se pot delega responsabilitatile;
  daca semantica unei abstractiuni nu poate fi obtinuta prin mostenire, instantiere sau delegare, se stabileste un set de operatii primitive, tinand cont de necesitatile clientilor abstractiunii respective;
  se alege algoritmul potrivit pt. fiecare operatie; se pot crea operatii ajutatoare pentru a divide algoritmul in parti mai simple si eventual reutilizabile; se studiaza compromisurile care trebuie adoptate in ceea ce priveste stocarea informatiilor de stare vs. calcularea lor;
In general, daca s-a realizat o distributie echilibrata a responsabilitatilor in cadrul sistemului, atunci implementarea majoritatii claselor este relativ simpla.
Ca principiu: cele mai multe dintre operatiile individuale ale unei clase pot fi implementate pe cca o duzina de linii de cod. Nu e neobisnuit ca unele operatii sa necesite doar 1-2 linii de cod. Daca insa apar operatii care necesita ~100 de linii, e semn ca ceva nu e in regula.

Agenti: in aceasta faza sunt necesare alte abilitati decat in primele 3 faze ale microprocesului, si anume: implementarea poate fi realizata de ingineri de aplicatii care nu trebuie neaparat sa stie cum sa creeze clase noi, dar care trebuie macar sa stie cum sa reutilizeze si sa adapteze clasele existente.
 

Jaloane si masuratori: in faza de analiza implementarea se considera incheiata dupa ce au fost identificate toate abstractiunile importante necesare indeplinirii responsabilitatilor abstractiunilor de nivel inalt (din domeniul problemei).
In faza de proiectare implementarea se considera incheiata cand exista modele executabile sau aproape executabile ale abstractiunilor mentionate mai sus.
Cea mai importanta masura a calitatii in cazul implementarii este simplitatea.

 

5. Echipa de dezvoltare


Introducere

Oamenii sunt mai importanti decat orice proces. Acest lucru este valabil mai ales in cazul echipelor mici, unde aptitudinile individuale contribuie la succesul unui proiect mai mult decat oricare alt factor.
In cazul echipelor mari insa, ca efect al legii numerelor mari, numarul specialistilor de nivel mediu este mai mare decat cel al specialistilor exceptionali. De aceea, aici se impune existenta unui proces rational de dezvoltare, care va permite o mai buna punere in valoare a talentelor celor de nivel mediu.
Intotdeauna, pentru ca un proiect sa se termine cu succes, sunt necesare: un proces bine definit si o echipa coeziva.
In acest capitol se va studia modul in care managerul trebuie sa-si organizeze echipa astfel incat ea sa devina unita si sa dobandeasca aptitutini superioare sumei talentelor individuale ale membrilor ei.
Pentru ca un proiect sa fie finalizat cu succes, nu este suficient sa fie angajati cativa oameni supradotati. O asemenea practica corespunde culturii programatorului de tip "cowboy" care este foarte mandru de contributia sa personala si care vede orice problema ca o simpla chestiune de programare.
De fapt exista 3 probleme legate de maniera de organizare a unei echipe in jurul catorva oameni foarte talentati:

In general s-a constatat ca probabilitatea de esec pentru un proiect e mai mare daca echipa e mare. Vestea buna insa e aceea ca proiectele orientate pe obiecte tind sa necesite echipe mai mici decat cele non-obiectuale.

Ca o concluzie: indivizii sunt importanti, dar la nivel de productie industriala de software echipele sunt si mai importante. Pe de alta parte, procesul e important in asamblarea unei echipe, deoarece este repetabil, permite abordarea problemelor de scalabilitate si constituie suport pentru practici economice sanatoase.


Manageri si programatori

Primul lucru pe care participantii la dezvoltarea unui proiect trebuie sa-l aiba in vedere este acela ca:

Un proiect orientat pe obiecte necesita: usor diferite in comparatie cu un proiect non-obiectual. Aceste aspecte reprezinta subiectul unor decizii tactice menite sa asigure coeziunea echipei.

Premizele constituirii unei echipe coezive sunt:


Roluri si responsabilitati

Desi numarul specialistilor de geniu din lume este mic, este posibil (si adesea de dorit) sa se alcatuiasca o echipa foarte productiva utilizand specialisti de nivel mediu.
Pentru aceasta trebuie sa se tina cont ca fiecare om are abiliatti diferite si ca un proiect necesita un ansamblu echilibrat al acestor abilitati.
In cazul proiectelor mici, acelasi om poate juca mai multe roluri diferite; in proiectele mari fiecare rol este indeplinit de una sau mai multe persoane.

In general, intr-o echipa trebuie sa fie acoperite urmatoarele roluri:

Nucleul

In cazul abordarilor traditionale ale procesului de dezvoltare software, activitatea nucleului echipei este divizata astfel:

Un asemenea stil monolitic forteaza oarecum aplicarea modelului in cascada, el fiind opusul tipului de proces iterativ si incremental ce caracterizeaza proiectele orientate pe obiecte.

In cazul proiectelor OO nucleul echipei este format din membri care indeplinesc 3 roluri distincte:

Ca recomandare: cam 10% din echipa dee dezvoltare trtebuie sa constituie grupul de arhitecti, 30% sunt abstractionisti, 50% - ingineri de aplicatii, iar restul de 10% acopera roluri auxiliare.

Echipa suplimentara

Este cea care asigura suportul pentru echipa ce formeaza nucleul, acoperind urmatoarele roluri:

Nu toate proiectele necesita intreaga lista de mai sus.

Echipa periferica

Nu este implicata in dezvoltarea software, dar are un impact specific asupra acesteia. Rolurile periferice includ:

 

Curs 6 Curs 8