Informatica
Programare orientata pe obiecteProgramare orientata pe obiecte Concepte si paradigme in POO _ Temele de astazi _ Paradigme de programare (programarea imperativa si programarea structurata) _ Abstractizarea datelor _ Tipuri de date abstracte _ Paradigma POO _ Concepte POO _ Obiecte si clase _ Incapsulare si mostenire Paradigme de programare _ Paradigma (dict.): Un set de supoziTii, concepte, valori si practici care constituie o viziune a realitaTii pentru comunitatea care le adopta, in special intro disciplina intelectuala. _ Paradigma de programare _ Un model care descrie esenTa si structura computaTiei _ Ofera (si determina) viziunea pe care o are programatorul asupra execuTiei programului Exemple: _ in POO, programatorii pot concepe programele ca fiind o colecTie de obiecte care interacTioneaza _ in programarea funcTionala un program poate fi conceput ca fiind o secvenTa de evaluari de funcTii, fara stari Programarea imperativa _ In modelul tradiTional von Neumann, un calculator consta dintr-o unitate centrala de prelucrare si memorie si el efectueaza secvenTe de instrucTiuni atomice care acceseaza, opereaza asupra valorilor stocate locaTii de memorie adresabile individual si le modifica. Aici, o computaTie este o serie de operaTii aritmetice si de efecte laterale, cum sunt atribuirile sau transferurile de date care modifica starea unitaTii de stocare, intrarea sau iesirea _ Ne referim la acest ca paradigma imperativa sau procedurala. _ Este de subliniat importanTa atribuirilor si a variabilelor pe post de containere pentru paradigma imperativa _ Exemple de
limbaje: Fortran, Pascal, C, Programarea structurata _ InterfaTa _ Date de intrare/iesire _ Descrierea funcTionalitaTii _ Implementarea _ Date locale _ SecvenTe de instrucTiuni _ Abstractizarea operaTiilor _ Structura unui modul _ Sintaxa limbajului _ Organizarea codului in blocuri de instrucTiuni _DefiniTii de funcTii si proceduri _ Extinderea limbajului cu noi operaTii _Apeluri la proceduri si funcTii noi Beneficiile programarii structurate _ Usureaza dezvoltarea software _ Evita repetarea realizarii aceluiasi lucru _ Munca de programare este descompusa in module independente _ Proiectare Top-down: descompunerea in subprobleme _ Faciliteaza intreTinerea software _ Codul este mai usor de citit _ IndependenTa modulelor _ Favorizeaza reutilizarea software Abstractizarea datelor _ Abstractizarea datelor: impunerea unei separari clare intre proprietaTile abstracte ale unui tip de data si detaliile concrete ale implementarii lui _ ProprietaTi abstracte: acelea care sunt vizibile codului client care foloseste tipul de data – interfaTa cu tipul de data _ Implementarea concreta este pastrata in totalitate privata si ea se poate intr-adevar schimba, spre exemplu pentru a incorpora imbunataTiri ale performanTelor in timp. Tipuri abstracte de date _ Abstractizarea datelor + abstractizarea operaTiilor _ Un tip de data abstract: _ Structura de date care stocheaza informaTii pentru a reprezenta un anumit concept _ FuncTionalitate: set de operaTii care pot fi aplicate tipului de data _ Sintaxa limbajului _ Modulele sunt asociate tipurilor de date _ Sintaxa nu este neaparat noua faTa de programarea Modulara Beneficiile tipurilor de date abstracte _ Conceptele din domeniu sunt reflectate in cod _ Incapsulare: complexitatea interna, datele si detaliile operaTiilor sunt ascunse _ Utilizarea tipului de data este independenta de implementarea sa interna _ Ofera o mai mare modularitate _ Sporeste usurinTa intreTinerii si reutilizarii codului Paradigma orientata pe obiecte
_ Paradigma programarii structurate a avut iniTial success (1975-85) _ Dar a inceput sa esueze la produse mai mari (> 50,000 LOC) _ PS avea probleme de intreTinere post-livrare (astazi aceasta intreTinere necesita, de la 70 la 80% din efortul total) _ Motivul: Metodele structurate sunt fie _ orientate pe operaTii (analiza fluxului de date) fie _ orientate pe atribute (d.e. dezvoltarea
cu metoda _ Dar nu amandoua _ Paradigma folosita in limbaje: o simulare a domeniului unei probleme prin abstractizarea informaTiilor de comportament si stare din obiecte din lumea reala _ Conceptele de obiecte, clase, transmitere de mesaje si mostenire sunt cunoscute ca facand parte din paradigma orientarii pe obiecte. _ POO considera ca atat atributele cat si operaTiile au importanTa egala _ O viziune simplista a unui obiect poate fi: _ Obiect = componenta software care incorporeaza atat atributele cat si operaTiile care se pot efectua asupra atributelor si care suporta mostenirea. _ Exemplu: _ Cont bancar _ Date: soldul contului _ AcTiuni: depune, retrage, determina soldul ComparaTie intre paradigma structurata si cea obiectuala
_ Ascunderea informaTiei _ Proiectarea dirijata de responsabilitaTi _ Impact asupra intreTinerii si dezvoltarii Ascunderea informaTiei _ In versiunea orientata pe obiecte _ Linia continua din jurul lui soldulContului arata ca in afara obiectului nu se stie cum este implementat soldulContului _ In versiunea clasica _ Toate modulele au detalii privind implementarea lui soldulContului Punctele tari ale paradigmei OO _ Cu ascunderea informaTiei, intreTinerea postlivrare este mai sigura _ Sansele apariTiei erorilor regresive sunt reduse (in software nu se repeta erori cunoscute) _ Dezvoltarea este mai usoara _ Obiectele au in general corespondente fizice _ Acest lucru simplifica modelarea (un aspect cheie al paradigmei OO) _ Obiectele bine proiectate sunt unitaTi independente _ Tot ce se refera la obiectul real modelat este in obiect — incapsulare _ Comunicarea se face prin schimb de mesaje _ Aceasta independenTa este augmentata prin proiectarea dirijata de responsabilitate _ Un produs clasic consta d.p.d.v conceptual dintr-o singura unitate (desi poate fi implementata ca un set de module) _ Paradigma OO reduce complexitatea deoarece produsul consta, in general, din unitaTi independente _ Paradigma OO promoveaza reutilizarea _ Obiectele sunt entitaTi independente Programarea orientata pe obiecte _ Ofera suport sintactic pentru tipurile de date abstracte _ Ofera facilitaTi asociate cu ierarhiile de clase _ Schimba punctul de vedere: programele sunt apendice ale datelor _ introduc un concept nou: obiect = tip de data abstract cu stare (atribute) si comportament (operaTii) Concepte OOP _ Ne ocupam doar de datele care prezinta interes pentru problema noastra. _ Acest proces de filtrare a detaliilor neimportante ale obiectului astfel incat sa ramana doar caracteristicile importante poarta numele de abstractizare. Ce sunt obiectele software? _ Blocurile de construcTie a sistemelor software _ un program este o colecTie de obiecte care interacTioneaza _ obiectele coopereaza pentru a finaliza o sarcina _ pentru aceasta, ele comunica trimiTandu-si “mesaje” unul altuia _ Obiectele modeleaza lucruri tangibile (persoana, bicicleta) _ Obiectele modeleaza lucruri conceptuale (intalnire, data calendaristica) _ Obiectele modeleaza procese (aflarea drumului printr-un labirint, sortarea unui pachet de carTi de joc) _ Obiectele au: _ capabilitaTi: ce pot face, cum se comporta _ proprietaTi: trasaturi (caracteristici) care descriu obiectele CapabilitaTile obiectelor: acTiuni _Obiectele au capabilitaTi (comportamente) care le permit sa efectueze acTiuni specifice _ obiectele sunt destepte — ele “stiu” cum sa faca anumite lucruri _ un obiect face ceva doar daca un alt obiect ii spune sa-si foloseasca una dintre capabilitaTi _CapabilitaTile pot fi: _ constructori: stabilesc starea iniTiala a proprietaTilor obiectului _ comenzi: modifica proprietaTile obiectului _ interogari: furnizeaza raspunsuri bazate pe proprietaTile Obiectului _ Exemple: borcanele cu gem sunt capabile sa efectueze acTiuni specifice •constructor: sa fie creat •comenzi: adauga gem, goleste-te •interogari: raspunde daca este inchis/deschis capacul, daca e plin/gol ProprietaTile obiectului: starea _ ProprietaTile determina cum acTioneaza un obiect _ unele proprietaTi pot fi constante, iar altele variabile _ proprietaTile insele sunt obiecte — pot si primi mesaje _ capacul borcanului cu gem si gemul in sine sunt obiecte _ ProprietaTile pot fi: _ atribute: lucruri care ajuta la descrierea unui obiect _ componente: lucruri care sunt “parte a” unui obiect _ asocieri: lucruri despre care stie un obiect, dar care nu sunt parte a acelui obiect _ Stare: colecTie a tuturor proprietaTilor obiectului; se schimba daca o proprietate se schimba _ unele nu se schimba, d.e. volanul unei masini _ altele se schimba, d.e. culoarea masinii _ Exemplu: proprietaTile borcanelor cu gem _ atribute: culoare, material, miros _ componente: capac, container, eticheta _ asocieri: un borcan cu gem poate fi asociat cu incaperea in care se afla Clase si instanTe _ ConcepTia noastra curenta: fiecare obiect corespunde direct unui anumit obiect din realitate, d.e., un atom sau un automobil anume _ Dezavantaj: este mult prea nepractic sa lucram cu obiecte in acest fel deoarece _ ele pot fi infinit de multe _ nu dorim sa descriem fiecare individ separat, deoarece ei au multe lucruri in comun _ Clasificarea obiectelor scoate in evidenTa ce este comun intre mulTimi de obiecte similare _ mai intai sa descriem ce este comun _ apoi sa “stampilam” oricate copii Clase ale obiectelor _Clasa unui obiect _ categoria obiectului _ defineste capabilitaTile si proprietaTile commune unei mulTimi de obiecte individuale _ toate borcanele cu gem se pot deschide, inchide si goli _ defineste un sablon pentru crearea de instanTe de obiect _ unele borcane cu gem pot fi din plastic, pot fi colorate, de o anumita marime etc. _ Clasele implementeaza capabilitaTile ca metode _ secvenTe de instrucTiuni in Java _ obiectele coopereaza trimiTand mesaje altor obiecte _ fiecare mesaj “invoca o metoda” _ Clasele implementeaza proprietaTile ca variabile instanTa _ locaTie de memorie alocata obiectului, care poate potenTial pastra o valoare care se poate schimba InstanTe de obiect _InstanTele obiectelor sunt obiecte individuale _ realizate din sablonul clasei _ o clasa poate reprezenta un numar nedefinit de instanTe de obiect _ realizarea unei instanTe de obiect se numeste instanTierea obiectului respectiv _Prescurtare: _ clasa: clasa obiectului _ instanTa: instanTa obiectului (a nu se confunda cu variabilele instanTa) _ InstanTe diferite ale, d.e., clasei BorcanCuGem pot avea: culoare, poziTie diferita _ Astfel ca, variabilele instanTa ale lor au valori diferite _ Nota: instanTele de obiect conTin variabile instanTa — doua moduri de folosire diferite, dar inrudite, a cuvantului instanTa _ InstanTele individuale au identitaTi individuale _ aceasta permite altor obiecte sa trimita mesaje a unui obiect dat _ fiecare instanTa este unica, chiar daca are aceleasi capabilitaTi _ gandiTi-va la clasa studenTilor de la acest curs Mesaje pentru comunicarea intre obiecte _ Nici o instanTa nu este o insula — ea trebuie sa comunice cu altele pentru a-si realiza sarcina _ proprietaTile le permit sa stie despre alte obiecte _ InstanTele trimit mesaje una alteia pentru a invoca o capabilitate (adica, pentru a executa o sarcina) _ metoda reprezinta codul care implementeaza mesajul _ spunem “apeleaza metoda” in loc de “invoca capabilitatea” _ Fiecare mesaj necesita: _ un emiTator (expeditor): obiectul care iniTiaza acTiunea _ un receptor: instanTa a carei metode este invocata _ numele mesajului: numele metodei apelate _ opTional parametri: informaTii suplimentare necesitata de metoda pentru a opera _ Receptorul poate (dar nu este nevoit) sa trimita un raspuns Incapsulare _Un automobil incapsuleaza multa informaTie _ chiar literal, prin complexitatea construcTiei sale _Dar nu este nevoie sa stii cum funcTioneaza o masina pentru a o conduce _ Volanul si schimbarea vitezelor constituie interfaTa _ motorul, transmisia, axul cardanic, sunt implementarea (ascunsa) _ Asemanator, nu e nevoie sa stim cum funcTioneaza un obiect pentru a-i trimite mesaje _ Dar, este nevoie sa stim ce mesaje inTelege (adica, care ii sunt capabilitaTile) _ clasa instanTei determina ce mesaje ii pot fi trimise _ Inchiderea datelor intr-un obiect _ Datele nu pot fi accesate direct din afara _ Ofera securitatea datelor Vederile unei clase _Obiectele separa interfaTa de implementare _obiectul este “cutie neagra”; ascunde funcTionarea si parTile interne _interfaTa protejeaza implementarea impotriva utilizarii _ InterfaTa: vedere publica _ permite instanTelor sa coopereze unele cu altele fara a sti prea multe detalii _ ca un contract: consta dintr-o lista de capabilitaTi si documentaTie pentru cum sa fie folosite _ Implementarea: vedere privata _ proprietaTile care ajuta capabilitaTile sa-si indeplineasca sarcinile Mostenirea _ O clasa (subclasa) poate mosteni atribute si metode dintr-o alta clasa (superclasa) _ Subclasele furnizeaza comportament specializat _ Ofera reutilizarea codului _ Evita duplicarea Datelor Polimorfism _ Abilitatea de a lua multe forme _ Aceeasi metoda folosita intr-o superclasa poate fi suprascrise in subclase pentru a da o funcTionalitate diferita
|