Curs11_2014 Lbj Poop

download Curs11_2014 Lbj Poop

of 86

description

POO

Transcript of Curs11_2014 Lbj Poop

  • METODE SI TEHNICIAVANSATE IN

    PROGRAMAREAOBIECTUALA

    Note de curs, 2014-2015Diana Stefanescu, [email protected]

  • CURS 1 - CUPRINS

    1. NOTIUNI INTRODUCTIVE1. Limbaje de programare2. Programare procedurala/obiectuala

    2. Limbajele C++/Java Studiucomparativ

    1. NOTIUNI INTRODUCTIVE1. Limbaje de programare2. Programare procedurala/obiectuala

    2. Limbajele C++/Java Studiucomparativ

  • CAPITOLUL 1

    1. NOTIUNIINTRODUCTIVE

  • 1.1. LIMBAJE DEPROGRAMARE

  • Limbaje. Limbaje de programare(LP)

    Naturale Artificiale

    De descriere a unui algoritm Ex: Shema logica, pseudocoul

    Limbajele de programare

    Primitive (sintaxa (reprezentarea simbolica)+ semantica (semnificatia))

    Naturale Artificiale

    De descriere a unui algoritm Ex: Shema logica, pseudocoul

    Limbajele de programare

    Primitive (sintaxa (reprezentarea simbolica)+ semantica (semnificatia))

  • LP. Istoric si evolutie

    Limbaje din generatia nti: Limbajele masin (cod masin): date si instruciuni exprimate

    sub o form binara, specific doar mainii pe care se executprogramul.

    Limbaje din generatia a doua: Limbajele de asamblare: mnemonice pentru instructiuni (LD,

    ADD) si nume descriptive (identificatori) ptr operanzi -> asamblor(compilatorul unui limbaj de asamblare)

    Limbaje din generaia trei, patru, cinci: limbajele de nivel nalt: apropialte de limbajul natural, riguros

    formalizate (C, Java, Pascal, COBOL, etc.)

    Limbaje din generatia nti: Limbajele masin (cod masin): date si instruciuni exprimate

    sub o form binara, specific doar mainii pe care se executprogramul.

    Limbaje din generatia a doua: Limbajele de asamblare: mnemonice pentru instructiuni (LD,

    ADD) si nume descriptive (identificatori) ptr operanzi -> asamblor(compilatorul unui limbaj de asamblare)

    Limbaje din generaia trei, patru, cinci: limbajele de nivel nalt: apropialte de limbajul natural, riguros

    formalizate (C, Java, Pascal, COBOL, etc.)

  • Traducerea (translatarea)limbajelor

    Compilatoare Interpretoare Traducere in doua faze

    Compilatoare Interpretoare Traducere in doua faze

  • Clasificari ale limbajelor deprogramare

    I dupa apropierea de limbajul masina Limbaje de nivel coborat (limbaj masina,

    limbaj asamblare) Limbaje de nivel inalt

    I dupa apropierea de limbajul masina Limbaje de nivel coborat (limbaj masina,

    limbaj asamblare) Limbaje de nivel inalt

  • Clasificari ale limbajelor deprogramare

    II dupa modul de evocare aprelucrarilor in program Limbaje imperative (C, C++, C#, Fortran,

    Java) Limbaje functionale (LISP, ML, SCHEME,

    Haskell)

    II dupa modul de evocare aprelucrarilor in program Limbaje imperative (C, C++, C#, Fortran,

    Java) Limbaje functionale (LISP, ML, SCHEME,

    Haskell)

  • Clasificari ale limbajelor

    III dupa modul de rezolvare a uneiprobleme Rezolvarea orientata pe algoritm (pe

    aciune): limbaje structurate (FORTRAN, C,ALGOL, PASCAL)

    Rezolvarea orientata pe date: limbajedeclarative (Haskell, ML, Prolog)

    Rezolvarea orientat obiect: limbaje POO(C++, Java, Smalltalk)

    III dupa modul de rezolvare a uneiprobleme Rezolvarea orientata pe algoritm (pe

    aciune): limbaje structurate (FORTRAN, C,ALGOL, PASCAL)

    Rezolvarea orientata pe date: limbajedeclarative (Haskell, ML, Prolog)

    Rezolvarea orientat obiect: limbaje POO(C++, Java, Smalltalk)

  • Clasificari ale limbajelor (LP-PP1)

    IV prin prisma paradigmelor Paradigm:

    Modelul sau arhetipul unui proces sausistem

    Colecii de caracteristici de evaluare sicriterii de abstractizare

    IV prin prisma paradigmelor Paradigm:

    Modelul sau arhetipul unui proces sausistem

    Colecii de caracteristici de evaluare sicriterii de abstractizare

  • Clasificari ale limbajelor (LP-PP2)

    IV prin prisma paradigmelor Paradigma programrii procedurale si

    structurate Paradigma programrii modulare Paradigma programrii obiectuale Paradigma programrii funcionale si logice Programarea concurent si distribuit Alte paradigme

    IV prin prisma paradigmelor Paradigma programrii procedurale si

    structurate Paradigma programrii modulare Paradigma programrii obiectuale Paradigma programrii funcionale si logice Programarea concurent si distribuit Alte paradigme

  • Clasificari ale limbajelor (LP-PP3)

    IV prin prisma paradigmelor Programarea procedurala si

    structurata: Utilizatorul descrie pas cu pas algoritmul de

    rezolvare Unitatea de baz: procedura sau funcia Algol60, Pascal, C, PL/1, Ada

    IV prin prisma paradigmelor Programarea procedurala si

    structurata: Utilizatorul descrie pas cu pas algoritmul de

    rezolvare Unitatea de baz: procedura sau funcia Algol60, Pascal, C, PL/1, Ada

  • Clasificari ale limbajelor (LP-PP4)

    IV prin prisma paradigmelor Programarea modulara:

    Programul se descompune n module Modulele sunt independente, atomice Principul de baz: ncapsularea Modulul are 2 componente:

    Interfaa Implementarea

    Modula si Ada

    IV prin prisma paradigmelor Programarea modulara:

    Programul se descompune n module Modulele sunt independente, atomice Principul de baz: ncapsularea Modulul are 2 componente:

    Interfaa Implementarea

    Modula si Ada

  • Clasificari ale limbajelor (LP-PP5)

    IV prin prisma paradigmelor Programarea obiectuala:

    Obiect: entitate care conine informaie sicomportament

    Orice entitate din lumea real poate fi consideratobiect

    Programul: ansamblu de obiecte n interaciune Principii de baz:

    ncapsulare (obiectele au structur si stare) Comunicare prin mesaje Reutilizarea codului (compoziie si eneralizare/specializare) Polimorfism (nume - nelesuri diferite)

    Smalltalk, C++, Java

    IV prin prisma paradigmelor Programarea obiectuala:

    Obiect: entitate care conine informaie sicomportament

    Orice entitate din lumea real poate fi consideratobiect

    Programul: ansamblu de obiecte n interaciune Principii de baz:

    ncapsulare (obiectele au structur si stare) Comunicare prin mesaje Reutilizarea codului (compoziie si eneralizare/specializare) Polimorfism (nume - nelesuri diferite)

    Smalltalk, C++, Java

  • Clasificari ale limbajelor (LP-PP6)

    IV prin prisma paradigmelor Programarea functionala:

    Programul este un ansamblu de funcii Apeluri recursive Funciile sunt folosite la descrierea datelor si

    codului Nu au instruciuni de atribuire Fundament matematic: expresiile lambda Lisp, ML

    IV prin prisma paradigmelor Programarea functionala:

    Programul este un ansamblu de funcii Apeluri recursive Funciile sunt folosite la descrierea datelor si

    codului Nu au instruciuni de atribuire Fundament matematic: expresiile lambda Lisp, ML

  • Clasificari ale limbajelor (LP-PP7)

    IV prin prisma paradigmelor Programarea logica:

    Program: fapte si reguli Limbaje declarative Se indic modul cum trebuie s arate soluia

    problemei Fundament matematic: sistemele logice formale:

    Logica predicatelor de ordinul 1 Logici modale, temporale sau monotonice

    Constituie baza motoarelor de inferen n sistemeexpert

    Prolog

    IV prin prisma paradigmelor Programarea logica:

    Program: fapte si reguli Limbaje declarative Se indic modul cum trebuie s arate soluia

    problemei Fundament matematic: sistemele logice formale:

    Logica predicatelor de ordinul 1 Logici modale, temporale sau monotonice

    Constituie baza motoarelor de inferen n sistemeexpert

    Prolog

  • Clasificari ale limbajelor (LP-PP8)

    IV prin prisma paradigmelor Programare la nivelul bazelor de date: SQL, dBase,

    FoxPro Programarea vizual (RAD - Rapid Application

    Development): Magic Limbaje bazate pe marcatori pentru structurarea

    informaiei: HTML, XML Programarea bazat pe ageni

    Limbaje specifice: Telescript, Agents, AgentTcl Platforme multi-agent (bazate pe tehnologie obiectual): FIPA-

    OS, Jade, IBM Aglets

    IV prin prisma paradigmelor Programare la nivelul bazelor de date: SQL, dBase,

    FoxPro Programarea vizual (RAD - Rapid Application

    Development): Magic Limbaje bazate pe marcatori pentru structurarea

    informaiei: HTML, XML Programarea bazat pe ageni

    Limbaje specifice: Telescript, Agents, AgentTcl Platforme multi-agent (bazate pe tehnologie obiectual): FIPA-

    OS, Jade, IBM Aglets

  • Clasificari ale limbajelor

    V dupa modul de translatare si executie Limbaje compilate (C, C++, C#, PASCAL) Limbaje interpretate (AWK, Perl, Python, Ruby,

    BASIC, TCL, LISP, PROLOG, SCHEME) OBS: Limbaje interpretate

    + : simplitate, portabilitate- : viteza de execuie redus

    Limbaje compilate+ : execuia extrem de rapid- : lipsa portabilitii

    V dupa modul de translatare si executie Limbaje compilate (C, C++, C#, PASCAL) Limbaje interpretate (AWK, Perl, Python, Ruby,

    BASIC, TCL, LISP, PROLOG, SCHEME) OBS: Limbaje interpretate

    + : simplitate, portabilitate- : viteza de execuie redus

    Limbaje compilate+ : execuia extrem de rapid- : lipsa portabilitii

  • 1.2. PROGRAMAREPROCEDURALA/OBIECTUALA

  • Programarea procedurala/obiectuala

    Paradigme de rezolvare a problemelor: Rezolvarea orientat pe algoritm ->

    (programare structurata, procedurala): (FORTRAN, C, ALGOL, PASCAL)

    Rezolvarea orientat pe date (programarelogica/functionala): Haskell, ML, Prolog

    Rezolvarea orientat pe obiecte (POO): C++, Java, Smalltalk

    NOTIUNI INTRODUCTIVE 21

    Paradigme de rezolvare a problemelor: Rezolvarea orientat pe algoritm ->

    (programare structurata, procedurala): (FORTRAN, C, ALGOL, PASCAL)

    Rezolvarea orientat pe date (programarelogica/functionala): Haskell, ML, Prolog

    Rezolvarea orientat pe obiecte (POO): C++, Java, Smalltalk

  • Programarea procedurala(structurata)

    Principii; th de structura (C. Bohm i G. Jacobini) Metode de proiectare orientate pe algoritm:

    metoda de proiectare top-down (descompunereafunctionala a problemei P)

    metoda programrii structurate metoda rafinrii succesive

    NOTIUNI INTRODUCTIVE 22

    Principii; th de structura (C. Bohm i G. Jacobini) Metode de proiectare orientate pe algoritm:

    metoda de proiectare top-down (descompunereafunctionala a problemei P)

    metoda programrii structurate metoda rafinrii succesive

  • Dezvoltarea software-ului inabordarea structurata

    Dezavantaje: Reutilizarea aproape nula. Complexitatea ridicata a aplicatiilor. Software-ul nu poate evolua atat timp cat

    modificarile partiale pot avea efecte neasteptate. Remediul: MODULARIZARE Caracteristici:

    Proiectare top-down urmata de programarebottom-up.Descompunere top-down condusa de criteriifunctionaleArhitectura reflecta functiile sistemului software

    NOTIUNI INTRODUCTIVE 23

    Dezavantaje: Reutilizarea aproape nula. Complexitatea ridicata a aplicatiilor. Software-ul nu poate evolua atat timp cat

    modificarile partiale pot avea efecte neasteptate. Remediul: MODULARIZARE Caracteristici:

    Proiectare top-down urmata de programarebottom-up.Descompunere top-down condusa de criteriifunctionaleArhitectura reflecta functiile sistemului software

  • Abordarea structurata - DezavantajeRezultate satisfacatoare doar daca functiile:

    Corect identificateNu se schimba in timp

    Structura software-ului este indusa prinfunctii. Evolutia functiilor poate determinaimportante modificari structurale.Modificari si completari ulterioare dificile modularizare limitata.

    NOTIUNI INTRODUCTIVE 24

    Rezultate satisfacatoare doar daca functiile:Corect identificateNu se schimba in timp

    Structura software-ului este indusa prinfunctii. Evolutia functiilor poate determinaimportante modificari structurale.Modificari si completari ulterioare dificile modularizare limitata.

  • Programarea orientata pe obiecte(POO)

    Ideea unificrii datelor cu modalitile de prelucrare aacestora; manevreaz entiti reprezentate sub formde obiecte obiect = date + cod de tratare a acestor date

    Ofer posibilitati de: Modelare a obiectelor, a proprietilor i a relaiilor dintre ele Descompunere a unei probleme n componentele sale (soft

    mai mentenabil, adaptabil, reciclabil)

    NOTIUNI INTRODUCTIVE 25

    Ideea unificrii datelor cu modalitile de prelucrare aacestora; manevreaz entiti reprezentate sub formde obiecte obiect = date + cod de tratare a acestor date

    Ofer posibilitati de: Modelare a obiectelor, a proprietilor i a relaiilor dintre ele Descompunere a unei probleme n componentele sale (soft

    mai mentenabil, adaptabil, reciclabil)

  • Dezvoltarea software-ului Abordareaorientata pe obiecte

    Paradigma se muta de la cea centrata pe functii la ceacentrata pe obiecte.Structura e indusa prin jucatori (care constituie maimult partea statica a sistemului) mai degraba decatprin functii (partea dinamica, evolutiva a sistemului).Nu inlocuieste abordarea structurata; construita lainceputul acesteia.Modularizare prin decuplarea sistemului in obiecteindependente.Unitatea de modularizare clasa.

    NOTIUNI INTRODUCTIVE 26

    Paradigma se muta de la cea centrata pe functii la ceacentrata pe obiecte.Structura e indusa prin jucatori (care constituie maimult partea statica a sistemului) mai degraba decatprin functii (partea dinamica, evolutiva a sistemului).Nu inlocuieste abordarea structurata; construita lainceputul acesteia.Modularizare prin decuplarea sistemului in obiecteindependente.Unitatea de modularizare clasa.

  • Avantajele abordarii OOModele mult mai apropiate de lumea reala.Mentenanta mai usoara (structura inerentdecuplata).Reutilizare, deci:

    Dezvoltare rapidaPrograme de calitate superioara

    NOTIUNI INTRODUCTIVE 27

    Modele mult mai apropiate de lumea reala.Mentenanta mai usoara (structura inerentdecuplata).Reutilizare, deci:

    Dezvoltare rapidaPrograme de calitate superioara

  • POO (2) Facilitile POO (conf. Pascou):

    abstractizarea datelor motenirea ncapsularea (ascunderea) informaiei legarea dinamic (trzie), polimorfism

    NOTIUNI INTRODUCTIVE 28

    Facilitile POO (conf. Pascou): abstractizarea datelor motenirea ncapsularea (ascunderea) informaiei legarea dinamic (trzie), polimorfism

  • Definirea termenilor Abstractizare Incapsulare Ascunderea informatiei Cuplare Coeziune

    Abstractizare Incapsulare Ascunderea informatiei Cuplare Coeziune

  • Definirea termenilor Abstractizare

    Extragerea trasaturilor esentiale despre o entitate saugrup de entitati si ignorarea detaliilor neesentiale(Edward Berard)

    Procesul de identificare a modelelor comune care auvariatiuni sistematice; o abstractiune reprezinta unmodel comun si asigura un mijloc de a specificavariatiunea care trebuie folosita (Richard Gabriel) Exemplu:

    Model: coada de prioritati Detalii esentiale: lungimea; obiectele prezente in coada

    operatiile (adaugare, stergere, gasire a unui obiect) Variatiuni: implementare de tip lista inlantuita sau vector;

    stiva, coada.

    Abstractizare Extragerea trasaturilor esentiale despre o entitate sau

    grup de entitati si ignorarea detaliilor neesentiale(Edward Berard)

    Procesul de identificare a modelelor comune care auvariatiuni sistematice; o abstractiune reprezinta unmodel comun si asigura un mijloc de a specificavariatiunea care trebuie folosita (Richard Gabriel) Exemplu:

    Model: coada de prioritati Detalii esentiale: lungimea; obiectele prezente in coada

    operatiile (adaugare, stergere, gasire a unui obiect) Variatiuni: implementare de tip lista inlantuita sau vector;

    stiva, coada.

  • Definirea termenilor Incapsulare

    Inchiderea tuturor partilor unei abstractiuni in interiorulunui container

    Ascunderea informatiilor Ascunderea partilor unei abstractiuni

    Cuplarea Puterea interactiunilor dintre obiectele din sistem

    Coeziunea Gradul in care task-urile efectuate de un singur modul

    sunt legate din punct de vedere functional

    Incapsulare Inchiderea tuturor partilor unei abstractiuni in interiorul

    unui container Ascunderea informatiilor

    Ascunderea partilor unei abstractiuni Cuplarea

    Puterea interactiunilor dintre obiectele din sistem Coeziunea

    Gradul in care task-urile efectuate de un singur modulsunt legate din punct de vedere functional

  • CONCEPTE DE BAZA ALE POO

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

    32

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

  • ABSTRACTIZAREA DATELOR Obiectele - componente software care

    modeleaz fenomene din lumea real Obiectele care reprezint aceeai idee sau

    concept sunt de acelai tip i pot fi grupaten clase (concrete sau abstracte).

    Clasele implementeaz tipuri de dateClas = Date + Operaii.

    Exemplu: tipul matrice, int.

    Obiectele - componente software caremodeleaz fenomene din lumea real

    Obiectele care reprezint aceeai idee sauconcept sunt de acelai tip i pot fi grupaten clase (concrete sau abstracte).

    Clasele implementeaz tipuri de dateClas = Date + Operaii.

    Exemplu: tipul matrice, int.

  • Abstractizarea datelor (cont) Clasa

    Tipul unui obiect, sablon al obiectului Caracteristici: numele clasei, atribute, funcii i relaii

    cu alte clase Obiect, instanta

    are proprietatile definite in clasa pentru o clasa - mai multe instante Obiectul

    stare (se refer la elementele de date coninute n obiect i lavalorile asociate acestora (datele membre)).

    comportament (determinat de care aciunile pe care obiectulpoate s le execute (metodele)

    Clasa Tipul unui obiect, sablon al obiectului Caracteristici: numele clasei, atribute, funcii i relaii

    cu alte clase Obiect, instanta

    are proprietatile definite in clasa pentru o clasa - mai multe instante Obiectul

    stare (se refer la elementele de date coninute n obiect i lavalorile asociate acestora (datele membre)).

    comportament (determinat de care aciunile pe care obiectulpoate s le execute (metodele)

  • Abstractizarea datelor (cont) Atribute

    atribute ale instantei (date membre, C++) atribute ale clasei (date membre statice, C++)

    Metode (functii membre) Crearea si distrugerea obiectelor:

    static sau dinamic constructori, destructori (destructori-doar in

    C++)

    Atribute atribute ale instantei (date membre, C++) atribute ale clasei (date membre statice, C++)

    Metode (functii membre) Crearea si distrugerea obiectelor:

    static sau dinamic constructori, destructori (destructori-doar in

    C++)

  • CONCEPTE DE BAZA ALE POO

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla (doar in C++, simulare prin

    interfete - Java)4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

    36

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla (doar in C++, simulare prin

    interfete - Java)4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

  • MOSTENIREA Caracteristic POO Permite refolosirea codului Permite extinderea funcionalitii claselor

    existente Permite crearea unei ierarhii de clase i

    trecerea de la clasele generale la celeparticulare

    Caracteristic POO Permite refolosirea codului Permite extinderea funcionalitii claselor

    existente Permite crearea unei ierarhii de clase i

    trecerea de la clasele generale la celeparticulare

  • Relatia clasa de baza-cls. derivata A - clasa de baz (este o generalizare); conine

    informaiile comune (disponibile prin motenire isubclaselor acesteia).

    B - clasa derivat (particularizare, o specializarea clasei A); extinde funcionalitatea clasei debaz i conine informaiile specifice.

    TERMINOLOGIE: clasa de baza, clasa derivata clasa, subclasa superclasa, clasa clasa parinte, clasa copil

    A - clasa de baz (este o generalizare); conineinformaiile comune (disponibile prin motenire isubclaselor acesteia).

    B - clasa derivat (particularizare, o specializarea clasei A); extinde funcionalitatea clasei debaz i conine informaiile specifice.

    TERMINOLOGIE: clasa de baza, clasa derivata clasa, subclasa superclasa, clasa clasa parinte, clasa copil

  • Tipuri de mostenire (1) Mostenirea simpla (unica):

    Fiecare clas are doar o superclas Structura arbore

    Mostenirea multipla: O clas are mai multe superclase Structura retea

    Modaliti de specializare a uneiclase de baz: introducerea de extra-atribute i extra-

    metode n clasa derivat (particularedoar clasei derivate)

    redefinirea membrilor n clase derivate(polimorfism)

    Mostenirea simpla (unica): Fiecare clas are doar o superclas Structura arbore

    Mostenirea multipla: O clas are mai multe superclase Structura retea

    Modaliti de specializare a uneiclase de baz: introducerea de extra-atribute i extra-

    metode n clasa derivat (particularedoar clasei derivate)

    redefinirea membrilor n clase derivate(polimorfism)

  • Tipuri de mostenire (2)

    Mostenirea multipla probleme posibile: ambiguitate (pentru acelai atribut se motenesc

    valori diferite) Remediu: strategii de rezolvare a conflictului (printele

    cel mai apropiat, cel mai deprtat, etc.)

    motenire repetat (o clas ajunge smoteneasc de la aceeai clas, pe drumuridiferite n reea) Remediu C++:

    clasa E poate avea dou copii ale lui A, una pentru fiecaredrum;

    clasa E are o singur copie, iar A este clas virtual de bazi pentru C i pentru B

    Mostenirea multipla probleme posibile: ambiguitate (pentru acelai atribut se motenesc

    valori diferite) Remediu: strategii de rezolvare a conflictului (printele

    cel mai apropiat, cel mai deprtat, etc.)

    motenire repetat (o clas ajunge smoteneasc de la aceeai clas, pe drumuridiferite n reea) Remediu C++:

    clasa E poate avea dou copii ale lui A, una pentru fiecaredrum;

    clasa E are o singur copie, iar A este clas virtual de bazi pentru C i pentru B

  • CONCEPTE DE BAZA ALE POO

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

    41

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

  • INCAPSULAREA (ASCUNDEREA)INFORMATIILOR

    Reflect faptul c atributele instan i metodeleunui obiect l definesc doar pe acesta: spunem cmetodele i atributele unui obiect sunt private,ncapsulate n obiect.

    Interfaa cu obiectul relev foarte puin din ceea cese petrece n interiorul lui.

    Obiectul deine controlul asupra atributelor instan,care nu pot fi alterate de ctre alte obiecte. Excepie: atributele de clas (nu sunt ncapsulate, fiind

    partajate ntre toate instanele clasei) -> tehnica deplasare a valorilor n datele membre private aleobiectului, reprezint un mecanism de ascundere adatelor.

    Reflect faptul c atributele instan i metodeleunui obiect l definesc doar pe acesta: spunem cmetodele i atributele unui obiect sunt private,ncapsulate n obiect.

    Interfaa cu obiectul relev foarte puin din ceea cese petrece n interiorul lui.

    Obiectul deine controlul asupra atributelor instan,care nu pot fi alterate de ctre alte obiecte. Excepie: atributele de clas (nu sunt ncapsulate, fiind

    partajate ntre toate instanele clasei) -> tehnica deplasare a valorilor n datele membre private aleobiectului, reprezint un mecanism de ascundere adatelor.

  • Niveluri de acces (C++) C++: ncapsularea - prin

    controlul accesului nivel de acces

    private protected public (friend)

    Mostenire: private protected public

    Clasa Aprotected

    private

    public C++: ncapsularea - princontrolul accesului

    nivel de acces private protected public (friend)

    Mostenire: private protected public

    Clasa Bclas derivat

    Figura 1.4. Accesul la membrii unei clase

  • CONCEPTE DE BAZA ALE POO

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

    44

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

  • LEGAREA DINAMICA (TARZIE,late binding)

    Obiectele unei clase printe trebuie cunoscute n momentul compilrii.Efectul combinat al motenirii poate determina ca o anumit metod sfie specializat diferit (prin redefinire), pentru subclase diferite.

    Polimorfismul = comportamente diferite ale unei metode n raport cutipul unui obiect. Suprascrierea (overriding) unei metode in mod dinamicgenereaza polimorfismul.

    Selectarea unei metode redefinite poate fi realizat n faza de compilare(legarea iniial, early binding), sau n momentul execuiei (legaretrzie).

    n limbajul C++, legarea dinamic se poate realiza prin implementareade: funcii virtuale (pot fi redefinite polimorfic); funcii virtuale pure (doar declarate, nu definite).

    In C++ polimorfismul necesita: mostenire pointeri functii virtuale

    Obiectele unei clase printe trebuie cunoscute n momentul compilrii.Efectul combinat al motenirii poate determina ca o anumit metod sfie specializat diferit (prin redefinire), pentru subclase diferite.

    Polimorfismul = comportamente diferite ale unei metode n raport cutipul unui obiect. Suprascrierea (overriding) unei metode in mod dinamicgenereaza polimorfismul.

    Selectarea unei metode redefinite poate fi realizat n faza de compilare(legarea iniial, early binding), sau n momentul execuiei (legaretrzie).

    n limbajul C++, legarea dinamic se poate realiza prin implementareade: funcii virtuale (pot fi redefinite polimorfic); funcii virtuale pure (doar declarate, nu definite).

    In C++ polimorfismul necesita: mostenire pointeri functii virtuale

  • CONCEPTE DE BAZA ALE POO

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

    46

    1. Introducere2. Abstractizarea datelor3. Mostenirea

    1. Mostenirea simpla2. Mostenirea multipla

    4. Incapsularea (ascunderea) informatiei5. Legarea dinamica (tarzie)6. Alte aspecte

  • ALTE ASPECTE Comunicarea intre obiecte

    mesaje-trimiterea de mesaje (invocarea metodelor)intre obiecte: unobiect poate stimula un altul s activeze (declaneze) o metod,trimindu-i un mesaj

    C++: funciile membre (metodele) - accesate n mod similaroricarei funcii, cu deosebirea c este necesar specificareaobiectului cruia i corespunde metoda.

    Pseudovariabile - difer de variabilele normale prin faptul cnu li se pot atribui valori n mod direct, de ctreprogramator. this (pointer ctre obiectul curent) c++ pointer catre clasa parinte a obiectului curent

    Metaclase = clase de clase C++ - nu include explicit metaclasele, dar suport variabilele clas

    sub forma datelor statice: o funcie membru static a unei clase, sefolosete o singur copie, partajat de ctre toate instanele clasei; oasemenea funcie nu este asociat unei anumite instane.

    Comunicarea intre obiecte mesaje-trimiterea de mesaje (invocarea metodelor)intre obiecte: un

    obiect poate stimula un altul s activeze (declaneze) o metod,trimindu-i un mesaj

    C++: funciile membre (metodele) - accesate n mod similaroricarei funcii, cu deosebirea c este necesar specificareaobiectului cruia i corespunde metoda.

    Pseudovariabile - difer de variabilele normale prin faptul cnu li se pot atribui valori n mod direct, de ctreprogramator. this (pointer ctre obiectul curent) c++ pointer catre clasa parinte a obiectului curent

    Metaclase = clase de clase C++ - nu include explicit metaclasele, dar suport variabilele clas

    sub forma datelor statice: o funcie membru static a unei clase, sefolosete o singur copie, partajat de ctre toate instanele clasei; oasemenea funcie nu este asociat unei anumite instane.

  • Alte aspecte (2)

    Persistenta - timpul de via al unui obiect Supraincarcarea (overloading) operatorilor

  • GRESELI FRECVENTEEURISTICI

    Toate datele trebuie ascunse in interiorul clasei! Datele publice afecteaza:

    decompozitia inteligibilitatea continuitatea protectia cuplarea

    Mentineti datele si operatiile inrudite in acelasi loc! Evitati clasele cu multe metode de accesare definite in

    intefetele publice O clasa trebuie sa reprezinte o singura abstractiune

    Toate datele trebuie ascunse in interiorul clasei! Datele publice afecteaza:

    decompozitia inteligibilitatea continuitatea protectia cuplarea

    Mentineti datele si operatiile inrudite in acelasi loc! Evitati clasele cu multe metode de accesare definite in

    intefetele publice O clasa trebuie sa reprezinte o singura abstractiune

  • NOTIUNI INTRODUCTIVE 50

  • CAPITOLUL 1

    2. C++/JavaSTUDIU COMPARATIV

  • 1.2. C++/Java STUDIUCOMPARATIV

  • C++ Java Procedural/obiectual:

    Permite progr. proced.,functionala, OO,mataprogramare (template)

    Compatibilitate cu C Compilat WOCA - Write once

    compile anywhere

    Pur obiectual (completorientat pe obiecte)

    - Compilat + Interpretat WORA / WORE - Write

    once run anywhere /everywhere

    Procedural/obiectual: Permite progr. proced.,

    functionala, OO,mataprogramare (template)

    Compatibilitate cu C Compilat WOCA - Write once

    compile anywhere

    Pur obiectual (completorientat pe obiecte)

    - Compilat + Interpretat WORA / WORE - Write

    once run anywhere /everywhere

  • C++ - limbaj compilat

    CompilareaPS PO

    Programobiect

    relocabil

    Editare delegaturi

    PEProgram informatexecutabil

    Incarcare

    Executie

    DATE

    Programobiect

    relocabil

    Program informatexecutabil REZULTATE

  • Java compilat/interpretat (1)

    Reprezentare intermediara: bytecod; Masinavirtuala Java

    Java sourcecode Java

    bytecode

    Javacompiler

    pentru JVM

    Reprezentare intermediara: bytecod; Masinavirtuala Java

    Machinecode

    Bytecodeinterpreter

    Bytecodecompiler

    Javacompiler

  • Java compilat/interpretat (2)

    Masina virtuala Java (Java Virtual Machine,JVM): calculator abstract (Gosling, 1992), cu un set

    de instructiuni ptr procesor, set de registri,mod de organizare a memoriei

    componenta a tehnologiei Java asigura posibilitatea transmiterii intre

    calculatoare a programelor codificate binar,chiar daca aceste calculatoare sunt de tipuridiferite

    Utilizarea JVM NOTIUNI INTRODUCTIVE 56

    Masina virtuala Java (Java Virtual Machine,JVM): calculator abstract (Gosling, 1992), cu un set

    de instructiuni ptr procesor, set de registri,mod de organizare a memoriei

    componenta a tehnologiei Java asigura posibilitatea transmiterii intre

    calculatoare a programelor codificate binar,chiar daca aceste calculatoare sunt de tipuridiferite

    Utilizarea JVM

  • C++ Java Executie (10-20) Executie

    +Optimizare (3-4)

    Executie +JIT (JustInTime)

    compiler +JIT (JustInTime)

    compiler

    NOTIUNI INTRODUCTIVE 57

    Executie (10-20) Executie

    +Optimizare (3-4)

    Executie +JIT (JustInTime)

    compiler +JIT (JustInTime)

    compiler

  • OBS. C++ (ex .NET)

  • OBS. C++ (ex .NET) (2)

    Aplicatii C++: ISO/ANSI C++ Aplicatii C++:

    Consola Windows (tratarea evenimentelor)

    Aplicatii C++: native (MFC Microsoft Foundation Classes) CLR (Common Language Run-Time) =

    C++/CLI (Common Language Runtime)

    NOTIUNI INTRODUCTIVE 59

    Aplicatii C++: ISO/ANSI C++ Aplicatii C++:

    Consola Windows (tratarea evenimentelor)

    Aplicatii C++: native (MFC Microsoft Foundation Classes) CLR (Common Language Run-Time) =

    C++/CLI (Common Language Runtime)

  • OBS. C++ (ex .NET) (3)

    CLR (Common Language Run-Time) = C++/CLI(Common Language Runtime) CLR mediu standardizat de executie a unor programe (Visual

    Basic, C#, C++) CLI specificatii pentru o masina virtuala Limbajul intermediar utilizat - Microsoft Intermediate Language

    (MSIL). Codul in MSIL mapat in cod masina prin JIT compiler CLI defineste o multime de tipuri de date Common Type

    System (CTS)

    NOTIUNI INTRODUCTIVE 60

    CLR (Common Language Run-Time) = C++/CLI(Common Language Runtime) CLR mediu standardizat de executie a unor programe (Visual

    Basic, C#, C++) CLI specificatii pentru o masina virtuala Limbajul intermediar utilizat - Microsoft Intermediate Language

    (MSIL). Codul in MSIL mapat in cod masina prin JIT compiler CLI defineste o multime de tipuri de date Common Type

    System (CTS)

  • Programe in C++/Java C++-colectie de

    functii Java

    class FirstApp{

    public static void main(String args[]){System.out.println("Hello world!");}

    }

    Java

    class FirstApp{

    public static void main(String args[]){System.out.println("Hello world!");}

    }

  • Programe (2) C++- Aplicatii Portabilitate limitata Compil: optiuni

    Java aplicatii, care pot fi executate pe orice

    calculator, legat sau nu la o retea, si auacces la toate resursele calculatoruluirespectiv, la fel ca programele scrise inorice alt limbaj;

    miniaplicatii (sau appleturi, de laengl. applet), care se pot transmiteprin reteaua de calculatoare si pot fiexecutate numai in cadrul unuinavigator de Web (engl. browser);ruleaza client

    JSP, ruleaza pe server Portabilitate totala, independenta totala

    fata de platforma (tipul tipulcalculatorului si al sistemului de operarefolosit)

    Java aplicatii, care pot fi executate pe orice

    calculator, legat sau nu la o retea, si auacces la toate resursele calculatoruluirespectiv, la fel ca programele scrise inorice alt limbaj;

    miniaplicatii (sau appleturi, de laengl. applet), care se pot transmiteprin reteaua de calculatoare si pot fiexecutate numai in cadrul unuinavigator de Web (engl. browser);ruleaza client

    JSP, ruleaza pe server Portabilitate totala, independenta totala

    fata de platforma (tipul tipulcalculatorului si al sistemului de operarefolosit)

  • ELEMENTE DE LIMBAJC++/Java

    Vocabular Unitati lexicale:

    Cuvinte cheie (cu cateva exceptii aceleasi) Identificatori

    NOTIUNI INTRODUCTIVE 63

    Vocabular Unitati lexicale:

    Cuvinte cheie (cu cateva exceptii aceleasi) Identificatori

  • ELEMENTE DE LIMBAJ (2)

    Comentarii: // - pe o singura linie /*..

    */ - pe mai multe linii /** ------------------------- */ - Java- generarea automata a

    comentariilor (javadoc)

    Mecanism de generare automata adocumentatiei inline: C++ - (Doxygen, soft suplimenntar) Java (Javadoc, standard documentation)

    NOTIUNI INTRODUCTIVE 64

    Comentarii: // - pe o singura linie /*..

    */ - pe mai multe linii /** ------------------------- */ - Java- generarea automata a

    comentariilor (javadoc)

    Mecanism de generare automata adocumentatiei inline: C++ - (Doxygen, soft suplimenntar) Java (Javadoc, standard documentation)

  • TIPURI DE DATE C++/Java

    Java: preia de la C si C++ aproape toate tipurile

    aritmetice (short, int, long, float, double) si tipul void mai putine tipuri de date primitive decat C/C++; Java impune o aceeasi lungime si reprezentare a

    tipurilor numerice pentru toate implementrilelimbajului (tipurile de date sunt definite pentru masinaabstracta virtuala).

    fara unsigned!

    NOTIUNI INTRODUCTIVE 65

    Java: preia de la C si C++ aproape toate tipurile

    aritmetice (short, int, long, float, double) si tipul void mai putine tipuri de date primitive decat C/C++; Java impune o aceeasi lungime si reprezentare a

    tipurilor numerice pentru toate implementrilelimbajului (tipurile de date sunt definite pentru masinaabstracta virtuala).

    fara unsigned!

  • TIPURI DE DATE (2)

    Java: tipul de date boolean (pentru date logice) si - deci - nu

    mai permite confuzia intre valorile logice si celenumerice: EX: gresit n Java, corect n C/C++. return x ? 1:0 ;

    // corect este: return x !=0 ? 1:0 ; cu x de tip int if ( ! n) { ... }

    // corect este: if (n==0) { ... } do { nf=nf *n--;} while (n) ;

    // corect este: do { nf=nf*n--;} while ( n>0);

    NOTIUNI INTRODUCTIVE 66

    Java: tipul de date boolean (pentru date logice) si - deci - nu

    mai permite confuzia intre valorile logice si celenumerice: EX: gresit n Java, corect n C/C++. return x ? 1:0 ;

    // corect este: return x !=0 ? 1:0 ; cu x de tip int if ( ! n) { ... }

    // corect este: if (n==0) { ... } do { nf=nf *n--;} while (n) ;

    // corect este: do { nf=nf*n--;} while ( n>0);

  • TIPURI DE DATE (3)

    Java: control strict al tipurilor, atat la

    atribuirea de valori unor variabile, cat sila transmiterea de parametri catrefunctii;

    nu permite folosirea in calcule a unorvariabile care nu au primit valoare;

    NOTIUNI INTRODUCTIVE 67

    Java: control strict al tipurilor, atat la

    atribuirea de valori unor variabile, cat sila transmiterea de parametri catrefunctii;

    nu permite folosirea in calcule a unorvariabile care nu au primit valoare;

  • TIPURI DE DATE (4)

    C++:

    NOTIUNI INTRODUCTIVE 68

  • TIPURI DE DATE (5)

    Java:

    NOTIUNI INTRODUCTIVE 69

  • TIPURI DE DATE (6)

    Java: Tipurile primitive: aritmetice

    ntregi: byte (1 octet), short(2), int (4), long (8) reale: float (4), double (8)

    caracter: char (2) logic: boolean (true i false) Tipul referin:

    Vectorii, clasele i interfeele Valoarea unei variabile de acest tip este, spre deosebire de tipurile

    primitive, o referin (adres de memorie) ctre valoarea saumulimea de valori reprezentat de variabila respectiv.

    Nu exist: pointer, struct i union.

    NOTIUNI INTRODUCTIVE 70

    Java: Tipurile primitive: aritmetice

    ntregi: byte (1 octet), short(2), int (4), long (8) reale: float (4), double (8)

    caracter: char (2) logic: boolean (true i false) Tipul referin:

    Vectorii, clasele i interfeele Valoarea unei variabile de acest tip este, spre deosebire de tipurile

    primitive, o referin (adres de memorie) ctre valoarea saumulimea de valori reprezentat de variabila respectiv.

    Nu exist: pointer, struct i union.

  • TIPURI DE DATE (7)

    Java: control strict al tipurilor:

    la atribuirea de valori unor variabile: Automat: conversiile depromovare de la un tip numeric inferior la un tip aritmetic superior(byte, short, int, long, float, double), care nu implic o trunchiere

    int n=3; float f; double d;d=f=n; // corect f=3.0, d=3.0n=f; // gresit sintacticf=d; // gresit sintactic

    transmiterea de parametri catre functii;double r = Math.sqrt(2); // promovare de la int la double ptr. 2

    O alt conversie automat, de promovare se face pentru rezultatul uneifunctii, dac tipul expresiei din instructiunea return difer de tipul declarat alfunctiei.

    static float rest (float a, float b) {int r = (int)a % (int) b;return r;}

    NOTIUNI INTRODUCTIVE 71

    Java: control strict al tipurilor:

    la atribuirea de valori unor variabile: Automat: conversiile depromovare de la un tip numeric inferior la un tip aritmetic superior(byte, short, int, long, float, double), care nu implic o trunchiere

    int n=3; float f; double d;d=f=n; // corect f=3.0, d=3.0n=f; // gresit sintacticf=d; // gresit sintactic

    transmiterea de parametri catre functii;double r = Math.sqrt(2); // promovare de la int la double ptr. 2

    O alt conversie automat, de promovare se face pentru rezultatul uneifunctii, dac tipul expresiei din instructiunea return difer de tipul declarat alfunctiei.

    static float rest (float a, float b) {int r = (int)a % (int) b;return r;}

  • TIPURI DE DATE (8)

    Java: Conversia de la un tip numeric superior la un tip aritmetic

    inferior trebuie cerut explicit prin folosirea operatoruluicast de fortare a tipului si nu se face automat ca n C.

    int n=3; float f; double d;f= (float)d; // cu pierdere de precizien=(int)f; // cu trunchiere

    int r = (int) Math.sqrt(4); // conversie necesara de la double la int// functie de rotunjire din clasa Math

    public static int round (float a) {return (int)floor(a + 0.5f); // "floor" are rezultat double}

    NOTIUNI INTRODUCTIVE 72

    Java: Conversia de la un tip numeric superior la un tip aritmetic

    inferior trebuie cerut explicit prin folosirea operatoruluicast de fortare a tipului si nu se face automat ca n C.

    int n=3; float f; double d;f= (float)d; // cu pierdere de precizien=(int)f; // cu trunchiere

    int r = (int) Math.sqrt(4); // conversie necesara de la double la int// functie de rotunjire din clasa Math

    public static int round (float a) {return (int)floor(a + 0.5f); // "floor" are rezultat double}

  • TIPURI DE DATE (9)

    Java: Nu se aplica modificatorul const! static, final

    public static final double PI = 3.14159265358979323846;

    Operatori: >>> (deplas. la dreapta fara semn) + - concatenare siruri Nu exista sizeof (nu e nevoie!)! Nu operator de referentiere (&), deferentiere (*),

    NU pointeri!NOTIUNI INTRODUCTIVE 73

    Java: Nu se aplica modificatorul const! static, final

    public static final double PI = 3.14159265358979323846;

    Operatori: >>> (deplas. la dreapta fara semn) + - concatenare siruri Nu exista sizeof (nu e nevoie!)! Nu operator de referentiere (&), deferentiere (*),

    NU pointeri!

  • PROGRAMATOR/PROIECTANTPOO IDEAL

    Capabil de gandire abstracta Poate trata bine incertitudinile Comunica rezonabil

  • Codificarea caracterelor C/C++ Cod ASCII

    1 octet Fara semn Cu semn

    Referire cod octal: \11 (pentru \t)

    Java Unicode (2 octeti)

    65536 semne Structurat in blocuri Basic, Latin, Greek, Arabic,

    Gothic, Currency,Mathematical, Arrows, Musical,

    referire prin cod hexa: \ uxxxx \u03B1 -\u03C9: - http://www.unicode.org

    C/C++ Cod ASCII

    1 octet Fara semn Cu semn

    Referire cod octal: \11 (pentru \t)

    Java Unicode (2 octeti)

    65536 semne Structurat in blocuri Basic, Latin, Greek, Arabic,

    Gothic, Currency,Mathematical, Arrows, Musical,

    referire prin cod hexa: \ uxxxx \u03B1 -\u03C9: - http://www.unicode.org

  • Implementarea structurilorde control (instructiuni)

    C/C++ Java Nu exist goto numeEticheta: definete o

    etichet. Pot fi definite etichete folosite

    astfel: break numeEticheata continue numeEticheta

    ex1

    Java Nu exist goto numeEticheta: definete o

    etichet. Pot fi definite etichete folosite

    astfel: break numeEticheata continue numeEticheta

    ex1

  • EX1. Etichete in Javai=0;eticheta:while (i < 10) {

    System.out.println("i="+i);j=0;while (j < 10) {

    j++;if (j==5) continue eticheta;//sau: if (j==5) break eticheta;System.out.println("j="+j);

    }i++;

    }

    i=0;eticheta:while (i < 10) {

    System.out.println("i="+i);j=0;while (j < 10) {

    j++;if (j==5) continue eticheta;//sau: if (j==5) break eticheta;System.out.println("j="+j);

    }i++;

    }

  • La nivel de limbaj C/C++ Semantica valorii:

    Obiectele sunt valori Semantica referintei:

    Pointeri Referinte

    Op. selectie membru: ob.membru (.)

    ->

    Java Semantica referintei

    refOb.membru

    C/C++ Semantica valorii:

    Obiectele sunt valori Semantica referintei:

    Pointeri Referinte

    Op. selectie membru: ob.membru (.)

    ->

    Java Semantica referintei

    refOb.membru

  • SPATIUL NUMELOR(namespace)

    C/C++ La nivel de constanta,

    var., functie Bibl. standard: std

    Java In interiorul unei definitii

    de tip: Clasa Interfata

    La nivelul unui pachet(Pachet = Colecie declase i interfee)

    C/C++ La nivel de constanta,

    var., functie Bibl. standard: std

    Java In interiorul unei definitii

    de tip: Clasa Interfata

    La nivelul unui pachet(Pachet = Colecie declase i interfee)

  • Pachete standard (J2SDK)

    java.lang - clasele de baz ale limbajului Java java.io - intrri/ieiri, lucrul cu fiiere java.util - clase i interfee utile java.applet - dezvoltarea de appleturi java.awt - interfaa grafic cu utilizatorul java.awt.event - tratare evenimente java.beans - scrierea de componente reutilizabile

    java.lang - clasele de baz ale limbajului Java java.io - intrri/ieiri, lucrul cu fiiere java.util - clase i interfee utile java.applet - dezvoltarea de appleturi java.awt - interfaa grafic cu utilizatorul java.awt.event - tratare evenimente java.beans - scrierea de componente reutilizabile

  • Pachete standard (J2SDK) java.net - programare de reea java.sql - lucrul cu baze de date java.rmi - execuie la distan java.security - mecanisme de securitate java.math - operaii matematice cu nr mari java.text - lucrul cu texte, date i nr indep. de

    limb java.lang.reflect - introspecie javax.swing - interfaa grafic cu utilizatorul, mult

    mbogit fa de AWT.

    java.net - programare de reea java.sql - lucrul cu baze de date java.rmi - execuie la distan java.security - mecanisme de securitate java.math - operaii matematice cu nr mari java.text - lucrul cu texte, date i nr indep. de

    limb java.lang.reflect - introspecie javax.swing - interfaa grafic cu utilizatorul, mult

    mbogit fa de AWT.

  • FUNCTII C++ - functia-unitate de modularizare Java clasa unitate de modularizare

    Functie=metoda main incepe executia programului Java:

    main inclusa, ca metoda statica, intr-o clasa argument vector de siruri

    C++ - functia-unitate de modularizare Java clasa unitate de modularizare

    Functie=metoda main incepe executia programului Java:

    main inclusa, ca metoda statica, intr-o clasa argument vector de siruri

  • FUNCTII C++/Java C++

    Declaratii de functii (specificarea prototipului) Definitii de functii (antet+corp)!

    Java Nu conteaza ordinea n care sunt scrise functiile

    (metodele) unei clase: o functie poate fi apelatanainte de a fi definita si nici nu este necesardeclararea functiilor utilizate (nu se folosescprototipuri de functii).

    Orice functie apartine unei clase. Nu se pot defini functii n afara claselor.

    C++ Declaratii de functii (specificarea prototipului) Definitii de functii (antet+corp)!

    Java Nu conteaza ordinea n care sunt scrise functiile

    (metodele) unei clase: o functie poate fi apelatanainte de a fi definita si nici nu este necesardeclararea functiilor utilizate (nu se folosescprototipuri de functii).

    Orice functie apartine unei clase. Nu se pot defini functii n afara claselor.

  • FUNCTII C++

    Functii cu parametri impliciti (NU si-n Java!) int cmmdc(int a=0, int b=0);

    Transmiterea parametrilor; Returneaza: Valoare Pointer (NU si-n Java!) Referinta

    Java Transmiterea parametrilor; Returneaza:

    Tipuri primitive si referinte transmise intotdeauna prin valoare C++/Java

    Transmiterea argumentelor in linia de comanda (la lansarea inexecutie) siruri de caractere

    Functii cu nr. variabil de parametri

    C++ Functii cu parametri impliciti (NU si-n Java!)

    int cmmdc(int a=0, int b=0); Transmiterea parametrilor; Returneaza:

    Valoare Pointer (NU si-n Java!) Referinta

    Java Transmiterea parametrilor; Returneaza:

    Tipuri primitive si referinte transmise intotdeauna prin valoare C++/Java

    Transmiterea argumentelor in linia de comanda (la lansarea inexecutie) siruri de caractere

    Functii cu nr. variabil de parametri

  • FUNCTII C++/Java Supraincarcarea functiilor (overloading)

    C++ - supraincarcarea operatorilor Java: +, += gata supraincarcati ptr Sring

    Suprascrierea (supradefinirea, overriding)functiilor

    Supraincarcarea functiilor (overloading) C++ - supraincarcarea operatorilor Java: +, += gata supraincarcati ptr Sring

    Suprascrierea (supradefinirea, overriding)functiilor

  • GENERICITATE C++: clase si functii templates:

    Generare de copii separate ale clasei/functieiptr. fiecare tip de parametru la compilare

    Template-urile pot fi specilizate

    Java: clase si functii generice O singura versiune a clasei/functiei pentru

    toate tipurile de parametri Cls/functiile generice NU pot fi specializate

    C++: clase si functii templates: Generare de copii separate ale clasei/functiei

    ptr. fiecare tip de parametru la compilare Template-urile pot fi specilizate

    Java: clase si functii generice O singura versiune a clasei/functiei pentru

    toate tipurile de parametri Cls/functiile generice NU pot fi specializate