curs_1 introducere.pdf

27

Click here to load reader

Upload: tutankhamon-ra

Post on 13-Sep-2015

129 views

Category:

Documents


20 download

TRANSCRIPT

  • PROGRAMAREA ORIENTATA PE OBIECTE[ Programarea Calculatoarelor si Limbaje de Programare III ]2012-Suceava

    s.l.dr.ing. Remus Catalin [email protected]@yahoo.comapollo.eed.usv.ro/~remus

  • PROGRAMAREA ORIENTATA PE OBIECTEPROGRAMARE SI LIMBAJE DE PROGRAMARE III

    BIBLIOGRAFIE

    A. CARTI B.Stroustrup, The C++ Programming Language, Addison-Wesley, 1991 B.Stroustrup, The C++ Programming Language, Third Edition by Bjarne Stroustrup, by AT&T. Addison Wesley

    Longman, Inc. ISBN 0201889544, 1997 B.Stroustrup, The Design and Evolution of C++, ddison-Wesley, ISBN 0-201-54330-3, August 2008.

    B.Stroustrup, C++, Editura Teora, 2000

    Ioan Salomie, Tehnici orientate pe obiecte, Ed. Microinformatica Cluj, 1995.

    t.Gh. Pentiuc - Structuri de date i algoritmi fundamentali. Curs, Universitatea "tefan cel Mare" Suceava, 1993.

    t.Gh. Pentiuc - Structuri de date i algoritmi fundamentali. ndrumar de laborator, Universitatea "tefan cel Mare" Suceava, 1993

    B. Referinte WEB

    http://www.cplusplus.com/http://www.oopweb.com/CPP/Documents/ThinkingInCpp1/VolumeFrames.htmlhttp://www.oopweb.com/CPP/Documents/ThinkingInCpp2/VolumeFrames.htmlhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdfhttp://www.open-std.org/jtc1/sc22/wg21/

    2012/2013 - Suceava

  • PROGRAMAREA ORIENTATA PE OBIECTEPROGRAMARE SI LIMBAJE DE PROGRAMARE III

    Programa analitica CURS

    Programarea Orientata pe Obiecte ( 3h ) Fundamentele POO Conceptele ce definesc tehnologiile orientate obiect

    Clase. Membrii unei clase ( 12h ) Autoreferina. Tipul de data referina Obiecte standard de interfa (stream-uri) Constructori si destructori Constructorul de copiere Membri statici ai unei clase Tablouri de obiecte Clase cu membri obiecte Pointeri spre membri unei clase Funcii si clase prietene ale unei clase.

    Supradefinirea operatorilor ( 6h ) Operatorii unari si binari Operatori speciali ( new, delete, ->, apel de funcie, etc. ) Operatori si constructori de conversie de tip. TDA-uri

    2012/2013 - Suceava

  • PROGRAMAREA ORIENTATA PE OBIECTEPROGRAMARE SI LIMBAJE DE PROGRAMARE III

    Programa analitica CURS

    Conceptele de Motenire si Generalizare ( 6h ) Motenirea simpla Motenirea multipla Clase si funcii virtuale

    Polimorfismul ( 4h ) Funcii virtuale Funcii pur virtuale

    Mecanismul Template ( 3h ) Funcii parametrizate ( template ) Clase parametrizate ( template ) Mecanismul Template si motenirea

    Mecanismul de tratare a excepiilor in C++ ( 2h ) Erori si excepii Tratarea erorilor Excepii in C++. Mecanismul trow, trycatch

    2012/2013 - Suceava

  • PROGRAMAREA ORIENTATA PE OBIECTEPROGRAMARE SI LIMBAJE DE PROGRAMARE III

    Programa analitica CURS

    Elemente specifice limbajului C++ (2h) Spatii de nume (namespace) Conversii de tip (type-casting)

    Standard Template Library (STL) (3h) Containere STL Algoritmi STL

    Evolutia limbajului: C++0x (1h)

    2012/2013 - Suceava

  • PROGRAMAREA ORIENTATA PE OBIECTEPROGRAMARE SI LIMBAJE DE PROGRAMARE III

    Programa analitica LABORATOR

    Introducere in limbajul C++ (2h) Adaugiri aduse de C++ standardului ANSI C. Utilitarul MAKE (2h) Utilizarea obiectelor cin, cout cat si a operatorului new. (2h) Membri statici ai unei clase (2h) Functii si clase prietene ale unor alte clase (2h) Redefinirea operatorilor ( unari si binari ) (2h) Redefinirea operatorilor speciali (2h) Stream-uri. Iteratori. (2h) Mostenirea simpla. Mostenirea multipla (2h) Polimorfismul (2h) Mecanismul template. (2h) Tratarea exceptiilor (2h)

    2012/2013 - Suceava

  • PROGRAMAREA ORIENTATA PE OBIECTEPROGRAMARE SI LIMBAJE DE PROGRAMARE III

    Programa analitica PROIECT

    n cadrul proiectului se urmrete ca produsele-program realizat de studeni s utilizeze tehnologiile orientate pe obiect studiate. Tema proiectului este la alegerea studentului, doar implementarea fiind condiionata in utilizarea tehnologiei de programare orientata pe obiecte.

    Exemple de teme de proiect: Realizarea unei arhitecturi de clase pentru implementarea noiunii de Lista, Stiva sau alte TDA-uri. Aplicaie ce va simula gestiunea intrrilor unei firme folosind fiiere in C++; Aplicaie ce va simula gestiunea unei biblioteci folosind fiiere in C++; Realizarea unei arhitecturi de clase pentru implementarea noiunii de Mulime (reprezentare prin vectori pe

    bii). Realizarea arhitecturii de clase pentru TDA-ul Arbore. Arbore binar. Simulator de operaii cu numere complexe; Realizarea arhitecturii de clase pentru TDA-ul Graf. Implementarea unui meniu cu interfaa grafica in C++. Sistemul de clase pentru implementarea unor figuri geometrice cunoscute (avnd reprezentare grafic ).

    2012/2013 - Suceava

  • PROGRAMAREA ORIENTATA PE OBIECTEPROGRAMARE SI LIMBAJE DE PROGRAMARE III

    OBIECTIVEpentru curs:

    Constientizarea de catre studentii a importantei studierii programarii obiect orientate in contextual aplicatiilor moderne; Prezentarea conceptelor i principiilor orientrii pe obiecte din perspectiva limabjului de programare C++; Cursul isi propune familiarizarea studentilor cu notiunile teoretice si practice ale programarii obiectuale utilizate in cadrul

    unor sisteme si compilatoare moderne de dezvoltare a aplicatiilor in C++ (Borland C++ 3.1, CodeBlocks, GCC, Visual C++, Borland C++ Builder etc.).

    Abordarea se face astfel incat aplicatiile dezvoltate sa poata fi rulate atat pe calculatoare personale (PC) cat si pe echipamente mobile moderne.

    In mod special sunt urmarite aspectele legate de optimizarea aplicatiilor din punctul de vedere al memoriei utilizate si a vitezei de calcul.

    pentru aplicatii: Aplicatiile vin sa completeze notiunile dobandite la curs si sa creeze deprinderi corecte in dezvoltarea aplicatiilor

    obiectuale. Sunt folosite mai multe compilatoare, de la mai vechi, Borland C++ 3.1, la modernele VisualC++, Borland C++Builder, etc. Se va programa pe platforme Windows cat si pe platforme Linux; Temele laboratoarelor impun rezolvarea unor probleme concrete ce necesita fundamentarea cunostintelor acumulate in

    timpul cursurilor.

    2012/2013 - Suceava

  • CERINTE la DISCIPLINA POO / PCLP III

    1. Prezenta la LABORATOR este OBLIGATORIE

    2. Prezenta la CURS va fi recompensata cu 1p, la nota obtinuta la EXAMEN

    3. Recuperarea laboratoarelor: Oricand in cadrul aceleiasi saptamani 2 absente motivate la final (in ultima

    saptamana) cu taxa, in limita a maxim 7 sedinte

    4. Notarea la laborator se face pe baza: notelor la cele 2, teste planificate cat si pe baza notarii proiectului (aplicatie in C++ si

    documentatie)

    5. Examenul consta in 2 probe, date in aceeasizi:

    proba practica ( pe calculator in C++) proba teoretica (test cu 9 intrebari)

    A. Activitatea la acesta disciplina se va finaliza prin obtinerea celor 6 crediteaferente, atunci cand: examenul a fost promovat cu o nota

    >= 5 activitatea la laborator a fost

    executata integral proiectul a fost predat si promovat nota la activitatea practica (laborator

    + proiect) este >= 5

    B. Neindeplinirea a cel putin uneiconditii va conduce la nepromovare sitrecerea disciplinei ca si CREDIT AMANAT.

    C. Activitatea la o disciplina ramasaca si credit amanat se recuprereazaintegral in anul urmator.

  • CERINTE la DISCIPLINA POO / PCLP III

    Promovarea activitatii pe parcurseste conditionata de: prezenta 100% la sedintele de

    laborator media celor doua teste >= 5

    Promovarea activitatii pe parcurseste conditionata de: prezenta 100% media celor doua note >= 5 nota proiect >=5

    Media( N.A.P, N.Ex )

    N.A.P este >= 5 N.Ex este >= 5

    A. Activitatea pe parcursla specializarea AUTOMATICA

    B. Activitatea pe parcurs la specializarea CALCULATOARE

    C. Nota la disciplina POO / PCLP III

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Agent-oriented Component-based

    Flow-based Pipeline

    Concatenative Concurrent computing Declarative (contrast: Imperative)

    Functional Dataflow

    Cell-oriented (spreadsheets)

    Reactive Constraint Logic

    Constraint logic Abductive logic aInductive logic

    Event-driven Service-oriented Time-driven

    Expression-oriented Feature-oriented Function-level ( contrast: Value-level) Imperative ( contrast: Declarative)

    Procedural Non-structured ( contrast: Structured)

    Array (contrast: Scalar) Iterative

    2012/2013 - Suceava

    Paradigme de programare

    Structured ( contrast: Non-structured)

    Modular Recursive

    Object - oriented Class-based Prototype-based Automata-based By separation of concerns:

    Aspect-oriented Subject-oriented Role-oriented

    Language-oriented Domain-specific Grammar-oriented

    Dialecting Intentional

    Metaprogramming Automatic Generic

    Template Policy-based

    Reflective Attribute-oriented

    Nondeterministic

    Parallel computing Process-oriented

    Programming in the large and programming in the small

    Value-level (contrast: Function-level)

    http://en.wikipedia.org/wiki/Object-oriented_programming

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    2012/2013 - Suceava

    O privire asupra tehnicilor de programare

    Programare nestructurata

    programul principal lucreaza direct cu

    datele globale

    Observatii ....

    Tehnica folosita, de obicei, in cazul primilor pasi pasi facuti in programare, atunci cand cream primele programe simple.

    Metoda consta in insiruirea unei liste de declaratii si instructiuni, ce modifica datele globale pe tot parcursul programului

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    2012/2013 - Suceava

    O privire asupra tehnicilor de programare

    apelul procedurilor si revenirea in locul

    apelului

    Programare procedurala

    programul principal apeleaza procedurile

    si gestioneaza parametri transmisi

    cat si valorile returnate

    Paradigm n programare, prin care :

    un program apeleaz subprograme (functii si proceduri, pentru a rezolva subprobleme)

    prin transmiterea corespunzatoare a parametrilor (actuali, aflati n corespondent cu parametriiformali descrisi in subprograme).

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    2012/2013 - Suceava

    O privire asupra tehnicilor de programare

    Programare structurata

    Disciplin n programare prin folosirea unor structuri bine precizate (fr goto).

    Orice problem se poate descrie doar prin utilizarea urmtoarelor trei structuri:

    secvential, alternativ, repetitiv.

    Limbaje specifice acestui stil de programare: limbajul C, limbajul Pascal, etc.

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    2012/2013 - Suceava

    O privire asupra tehnicilor de programare

    Programare modulara

    Probleme in programarea modulara

    programul principal apeleaza procedurile in module separate

    si gestioneaza datele corespunzatore ca si

    parametri

    - Crearea si distrugerea explicita a tipurilor de date

    - Decuplarea datelor de operatii

    Prin proiectare (programare) modular nelegem metoda de proiectare (programare) a unui algoritm pentru rezolvarea unei probleme prin folosirea modulelor.

    Modulul este considerat o unitate structural de sine stttoare, fie program, fie subprogram, fie o unitate de program.

    Un modul poate conine sau poate fi coninut ntr-alt modul si poate fi format din mai multe submodule.

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    2012/2013 - Suceava

    O privire asupra tehnicilor de programare

    Programare Orientata pe Obiecte

    obiectele programului

    interactioneaza intre ele prin

    transmiterea de mesaje.

    PRINCIPII .....

    In cadrul programului sunt definite noi tipuri de date CLASE, clase formate din date si functii.

    Programul instantiaza unul sau mai multe OBIECTE din Clasele create.

    Obiectele interactoneaza intre ele prin intermediul interfetelor publice puse la dispozitie.

    Limbaje de programare specifice acestei tehnici: Simula SmallTalk C++, C++0x Java C#, etc

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Limbajul C++ 1970 - pentru prima dat definit limbajul C (Brian

    Kernighan & Dennis Ritchie) 1965 existenta limbajelor orientate pe obiect:

    SIMULA (1965) SIMULA 2 (1967) SMALLTALK (1970)

    [ Dezavantajul acestor limbaje (n sensul c nu au rmas pe pia ocupnd un procent foarte mare) este faptul c nu au aprut de sine stttoare, adic nu s-au bazat pe limbajele anterioare ]

    1980 - BJARNE STROUSTRUP definete sub denumirea de C with classes, limbajul ce a devenit ulterior C++ .;

    1983 - acest limbaj intr n lumea academic 1990 se incepe standardizarea prin comitetul

    ANSI - X3J16 http://www.open-std.org/jtc1/sc22/wg21/docs/wp/html/oct97/

    1996 - este standardizat ANSI C++ 2009 - se initiaza dezvoltarea unui nou standard

    C++09 ( initial fiind denumirea C++0x ) -http://www.artima.com/cppsource/cpp0x.html

    2012/2013 - Suceava

    Istorialimbajului C++

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Avantajul care l-a avut C++ comparativ cu celelalte limbaje existente (urmrind aceeai tehnologie O.O ) a fost faptul c el a fost definit ca un superset al limbajului C.

    Ceea ce s-a introdus nou i foarte important fa de vechiul limbaj C a fost noiunea de clas i restul notiunilor ce deriv din aceasta.

    Programatorii de C au fost pui n situaia de a sta n faa unui compilator care le permitea s lucreze n vechea lor manier i care accepta noile idei de P.O.O.

    Utilizatorii au nceput s foloseasc C++ nainte ca specialitii s aib timpul necesar s-i instruiasc pentru a-l folosi cu randament maxim. (Stroustrup).

    Acestui limbaj i se reproeaz multe: este foarte complex i este un limbaj de nivel mediu, ca i limbajul C

    de unde rezult c nu corespunde n totalitate principiilor de P.O.O ( care n mod normal trebuiau s fie de nivel nalt).

    [ De aceea, recent, a aprut un nou limbaj care ncearc s corecteze aceste neajunsuri reproate C++ - ului, limbajul JAVA ]

    2012/2013 - Suceava

    Limbajului C++

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Programarea Structurat este definit :

    Programarea Orientat pe Obiect definit :

    2012/2013 - Suceava

    FundamenteleProgramariiOrientate pe Obiecte

    STRUCTURI DE DATE

    ALGORITMI

    PROGRAM

    DATE

    METODE

    OBIECT

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Avantajul gruprii structurilor de date i a metodelor ce opereaz cu aceste date, sub forma unor obiecte, este faptul c obiectele, ce ncearc s simuleze conceptele ntlnite n lumea nconjurtoare, reuesc s grupeze structura conceptului respectiv, ct i funcionalitatea sa.

    Luand exemplul conceptului de numr complex, definirea lui n manier orientat obiect const n: Crearea unei clase; Clasa va conine n zona de date

    partea real i parte imaginar a numrului,

    In zona de interfa definim toate funciile sau operatorii cu care lucreaz acest concept.

    Dup definirea acestei clase, n utilizare nu vor fi diferene fa de utilizarea numrului ntreg, de exemplu.

    Apare totui o diferen: acest concept de numr ntreg este definit n interiorul limbajului C i este recunoscut, pe cand conceptul de numr complex este definit de noi.

    Programarea structural este o etap ce trebuia depit din mai multe motive : reutilizarea programelor era greoaie ; scalabilitatea i extinderea unor module era dificil; tratarea separat a datelor i a algoritmilor ce utilizeaz

    aceste date.

    2012/2013 - Suceava

    FundamenteleProgramariiOrientate pe Obiecte

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    P.O.O. Programare Orientat pe Obiecte O.O.P. Object Oriented Programming

    Conceptele introduse de POO: ncapsularea Abstractizarea Motenirea ( Generalizarea si Specializarea ) Polimorfismul

    Notiuni utilizate in POO: Clasa - class Obiect - object Instanta - instance Metoda - method Mostenire - inheritance Abstarctizare - abstraction Polimorfism - polymorphism

    2012/2013 - Suceava

    Conceptele utilizate inTehnologiile Orientate peObiecte

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    2012/2013 - Suceava

    Conceptele utilizate inTehnologiile Orientate peObiecte

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Primul concept introdus de P.O.O. l reprezint ncapsularea.

    Acesta este realizat prin introducerea noiuniide clas, ce poate grupa mpreun: date (proprietati) i funcii (metode)

    2012/2013 - Suceava

    Conceptele utilizate inTehnologiile Orientate peObiecte

    INCAPSULAREA

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Al doilea concept este abstractizarea.

    Obiectul ce nglobeaz o anumit structur (date membre) va fi definit n cadrulprogramului va interaciona doar prin intermediul comportamentului sau, funciilor metodelor de interfa.

    2012/2013 - Suceava

    Conceptele utilizate inTehnologiile Orientate peObiecte

    ABSTRACTIZAREA

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Un alt concept este motenirea. Acest concept ne permite specializarea

    anumitor clase, n sensul mbuntirii functionalitatilor , sau n sensul adugirii unor noi metode. 2012/2013 - Suceava

    Conceptele utilizate inTehnologiile Orientate peObiecte

    MOSTENIREAOdat cu motenirea se definete generalizarea sispecializarea. In fond, reprezint acelai lucru :

    In cazul specializrii privim motenirea n evoluia sa dinspre clasa de baz catre cea derivat (specializat), iar generalizarea este fenomenul privit n sens invers.

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    Un al patrulea concept este polimorfismul.

    Vorbim despre acest concept atunci cnd o entitate ( un obiect) produce un comportament diferit aflat in situatii diferite.2012/2013 - Suceava

    Conceptele utilizate inTehnologiile Orientate peObiecte

    POLIMORFISMUL

  • PROGRAMAREA ORIENTATA PE OBIECTE / PCLP III

    2012/2013 - Suceava

    O privire asupra tehnicilor de programare

    Medii de programare (IDE) in C++

    Borland CodeGear Embarcadero Borland C++ 3.1 C++ Builder 6 C++ BuilderX Turbo C++ ( freeware ) Embarcadero RAD Studio 2010, RAD Studio

    XE1/2/3, etc ....

    Microsoft Microsoft Visual Studio 6 Microsoft Visual Studio 2010, 2012 ....

    Freeware CodeBlocks C-Free 5 Turbo C++ Eclipse C++ Carbide C++ Qt Creator ....