PROGRAMARE ORIENTATA PE OBIECTE

Documente similare
Ingineria Sistemelor de Programare

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Laborator 3

Microsoft Word - lab4.doc

Paradigme de Programare

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Proiectarea Sistemelor Software Complexe

Microsoft Word _POO_Lab_1_Modificari_v01.htm

SUBPROGRAME

Paradigme de programare

PowerPoint Presentation

Microsoft Word - CarteC.doc

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Slide 1

Top

PowerPoint Presentation

E_d_Informatica_sp_MI_2015_bar_02_LRO

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Slide 1

Slide 1

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

Prezentarea calculatorului

Microsoft Word - CarteC.doc

Programarea şi utilizarea calculatoarelor

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

E_d_Informatica_sp_SN_2014_bar_10_LRO

2 BAZE TEORETICE ALE REȚELELOR DE CALCULATOARE CAPITOLUL 2 BAZE TEORETICE ALE REŢELELOR DE CALCULATOARE 2.1. Necesitatea standardizării (referenţierii

Limbaje de Programare Curs 6 – Functii de intrare-iesire

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Microsoft Word - Curs_09.doc

proiectarea bazelor de date

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

CURS

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

PPSD

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Microsoft Word - Cap09_AutoorganizareSiEmergentaInSistemeleAdaptiveComplexe_grile.doc

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

Microsoft Word - CarteC.doc

1

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Facultatea de Electronica Telecomunicatii si Tehnologia Informatiei Arhitectura.Net Indrumator : Conf. dr. ing. Stefan Stancescu Masterand: ing. Codru

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

tehnologii web

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

C++ Probleme

Discipline aferente competenţelor Facultate: Facultatea de Electronică şi Telecomunicaţii Universitate: UNIVERSITATEA POLITEHNICA DIN TIMIȘOARA Domeni

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Microsoft Word - Tematica examen AII.doc

PowerPoint-Präsentation

Microsoft Word - 2 ES RO.doc

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Subiectul 1

Slide 1

Limbaje de programare. Laborator Clasa, obiect, abstractizare Clasa : descrie tipul obiectelor dintr-un program; poate fi asociată cu un şablon

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA COORDONAT: _ J _ 2016 Nr. de înregistrare a olanului de UNIVERSITATEA DE STAT DIN MOLDOVA APROBAT: SENATUL

Slide 1

Microsoft Word - c6.doc

Lucrarea 10

Microsoft Word - Curs_08.doc

..MINISTERUL EDUCAŢIEI NAȚIONALE ŞI CERCETARII STIINTIFICE UNIVERSITATEA DE VEST DIN TIMIȘOARA.I CENTRUL DE DEZVOLTARE ACADEMICĂ. FIȘA DISCIPLINEI 1.

Lab6LCD

Analiză statică Analiza fluxului de date 23 octombrie 2014

Tablouri (continuare)

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Diapositive 1

Paradigme de Programare

Programarea şi utilizarea calculatoarelor

Microsoft Word - Planuri_Mate_

VALORIFICAREA EXPERIENŢEI POZITIVE PRIVIND PROIECTAREA CURRICULARĂ ÎN ÎNVĂŢĂMÂNTUL LICEAL PORNIND DE LA COMPETENŢE CA FINALITĂŢI ALE ÎNVĂŢĂRII Prof. P

A TANTÁRGY ADATLAPJA

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

PLAN DE ÎNVĂŢĂMÂNT

-

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Curs 10

L7

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA COORDONAT: 2017 Nr. de înregistrare a planului de învăţământ UNIVERSITATEA DE STAT

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Babeş-Bolyai Cluj-Napoca 1.2 Facultatea Matematică şi Info

U.T.Cluj-Napoca, C.U.N. Baia Mare Facultatea: Inginerie PLAN de INVĂŢĂMÂNT Domeniul: Calculatoare şi Tehnologia Informaţiei anul univ Progr

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Analiză de flux de date 29 octombrie 2012

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

Transcriere:

Curs 2 Principiile Programării Orientate pe Obiecte Programare Orientată pe Obiecte

Tehnici de programare Programarea procedurală Modul în care este abordată programarea, din punct de vedere al descompunerii programelor Paradigme Programarea procedurală prima modalitate de programare, încă frecvent folosită descompunerea programului în proceduri (funcţii) care sunt apelate în ordinea de desfăşurare a algoritmului sunt prevăzute posibilităţi de transfer a argumentelor către funcţii şi de returnare a valorilor rezultate limbajul Fortran: primul limbaj de programare procedurală. au urmat Algol60, Algol68, Pascal, iar C este unul din ultimele invenţii în acest domeniu.

Programarea modulară (structurată) accentul s-a deplasat de la proiectarea procedurilor către organizarea datelor, datorită creşterii dimensiunii programelor. stilul de programare este în continuare procedural datele şi procedurile sunt grupate în module, nu implică însă şi o asociere strictă între acestea Modul: o mulţime de proceduri corelate, împreună cu datele pe care le manevrează tehnică de ascundere a datelor (data-hiding): posibilitatea de ascundere a unor informaţii definite într-un modul faţã de celelalte module. modularitatea şi ascunderea informaţiilor sunt caracteristici implicite în programarea orientată pe obiecte.

Programarea orientată pe obiecte programarea procedurală şi structurată: descriere a algoritmilor ca o secvenţă de paşi care duc de la datele iniţiale la rezultatul căutat. limbaje de programare orientate la o clasă concretă de probleme: sisteme de dirijare cu baze de date, modelare ş.a. a apărut necesitatea sporirii siguranţei programelor - interzicerea accesului neautorizat la date.

Programarea orientată pe obiecte dezvoltarea sistemelor orientate pe obiecte, bazate pe programarea orientată pe obiecte a cunoscut o amploare deosebită în anii 90 programarea orientată pe obiecte presupune: 1. determinarea şi descrierea claselor utilizate în program 2. crearea exemplarelor de obiecte necesare 3. determinarea interacţiunii dintre ele.

Modelul obiect Reprezintă aplicarea în domeniul programării a unei metode din tehnică (tehnologia orientată pe obiecte, care se bazează pe modelul obiect) Primele aplicaţii: limbajul Simula (a stat la baza Smaltalk), Object Pascal, C++, Clos, Ada, Eiffel Modelul obiect al unei aplicaţii implică patru principii importante: abstractizare; încapsulare; modularitate; ierarhizare. Modelul obiect: un concept unificator în ştiinţa calculatoarelor, aplicabil nu numai în programare, ci şi în arhitectura calculatoarelor, în proiectarea interfeţelor utilizator, în baze de date.

Programarea orientată pe obiecte Object-oriented programming: metodă de programare în care programele sunt organizate ca şi colecţii de obiecte cooperante, fiecare dintre ele reprezentând o instanţă a unei clase, iar clasele sunt membre ale unei ierarhii de clase, corelate între ele prin relaţii de moştenire. Se folosesc obiecte, nu algoritmi, ca unităţi constructive de bază. Fiecare obiect este o instanţã (un exemplar) al unei clase. Clasele sunt componente ale unei ierarhii de tip, fiind corelate între ele prin relaţii de moştenire. Obs: Dacă lipseşte una din aceste caracteristici: programare prin abstractizarea datelor (o clasă este un tip de date abstract)

Limbaj de programare orientată pe obiecte Cerinţe: 1. Suportă obiecte (instanţe ale unor clase), clasele fiind tipuri definite de utilizator (numite şi tipuri abstracte de date) 2. Tipurile (clasele) pot moşteni atribute de la alte clase, numite clase de bază Dacă un limbaj nu suportă direct moştenirea între clase se numeşte limbaj de programare bazat pe obiecte (objectbased), cum este, de exemplu, limbajul Ada.

Principii POO: Abstractizarea ignorarea unor aspecte ale informaţiei manipulate, adică posibilitatea de a se concentra asupra esenţialului identificarea similitudinilor între diferite entităţi, situaţii sau procese din lumea reală, concentrarea atenţiei asupra acestor aspecte comune şi ignorarea pentru început a detaliilor identificarea trăsăturilor caracteristice esenţiale ale unui obiect, care îl deosebesc de toate celelalte feluri de obiecte fiecare obiect în sistem are rolul unui actor abstract, care poate executa acţiuni, îşi poate modifica şi comunica starea şi poate comunica cu alte obiecte din sistem fără a dezvălui cum au fost implementate acele facilitaţi procesele, funcţiile sau metodele pot fi de asemenea abstracte

Principii POO: Încapsularea ascunderea de informaţii (data-hiding) obiectele nu pot schimba starea internă a altor obiecte în mod direct (ci doar prin metode puse la dispoziţie de obiectul respectiv) doar metodele proprii ale obiectului pot accesa starea acestuia procesul de compartimentare a elementelor unei abstractizări în două părţi: structura şi comportarea încapsularea separă comportarea (accesată prin interfaţă) de structură, definită prin implementare fiecare tip de obiect expune o interfaţă pentru celelalte obiecte care specifică modul cum acele obiecte pot interacţiona cu el

Principii POO: Modularizarea este procesul de partiţionare a unui program în componente individuale (module) permite reducerea complexităţii programului prin definirea unor graniţe bine stabilite şi documentate în program. modularizarea constă în partiţionarea programului în module care pot fi compilate separat, dar care au conexiuni cu alte module ale programului. modulele servesc ca şi containere în care sunt declarate clasele şi obiectele programului.

Principii POO: Ierarhizarea Modalitatea de a ordona abstractizările (tipurile abstracte de date). Ierarhiile pot să denote relaţii de tip sau relaţii de agregare. Relaţiile de tip sunt definite prin moştenirile între clase, prin care o clasă (clasa derivată) moşteneşte structura sau comportarea definită în altă clasă (clasa de bază ) Relaţiile de agregare specifică compunerea unui obiect din mai multe obiecte mai simple. Obs: în limbajele de programare procedurală agregarea se realiza prin structuri de tip înregistrare (record în Pascal, struct în C, etc).

Principii POO: Moştenirea permite definirea şi crearea unor clase specializate plecând de la clase (generale) care sunt deja definite permite construirea unor clase noi, care păstrează caracteristicile şi comportarea, deci datele şi funcţiile membru, de la una sau mai multe clase definite anterior, numite clase de bază, fiind posibilă redefinirea sau adăugarea unor date şi funcţii noi. o clasă ce moşteneşte una sau mai multe clase de bază se numeşte clasa derivată. posibilitatea refolosirii lucrurilor care funcţionează organizează şi facilitează polimorfismul şi încapsularea Anumite obiecte sunt similare dar în acelaşi timp diferite.

Principii POO: Moştenirea Proprietatea de moştenire: proprietatea claselor prin care o clasă nou construită poate prelua datele şi metodele clasei mai vechi. Clasa derivată se află întotdeauna pe un nivel imediat inferior celui corespunzător clasei de bază. În Java există doar moştenire simplă, o ierarhie de clase în care fiecare clasă derivată are o singură clasă de bază.

Principii POO: Moştenirea Exemplu. paralelogram dreptunghi romb patrat Clasa dreptunghi este o clasă derivată (subclasă) a clasei paralelogram, iar clasa paralelogram este o clasă de bază (supraclasă) a clasei dreptunghi Astfel, o ierarhie de concepte conduce la o ierarhie între clasele care implementează conceptele ierarhice respective.

Principii POO: Polimorfismul, supraîncărcarea Mai multe funcţii pot avea acelaşi nume în acelaşi domeniu de definiţie, dacă se pot diferenţia prin numărul sau tipul argumentelor de apel. O funcţie este polimorfică dacă se poate executa cu acelaşi efect asupra unor valori de tipuri diferite (ex. operatorul & din C) Un alt mecanism este supraîncărcarea funcţiilor( function overloading). O funcţie este supraîncărcată dacă execută operaţii diferite în contexte diferite (ex. operatorul + din Java) Se poate aplica doar funcţiilor. Supradefinirea (overriding) oferă posibilitatea de a redefini metode pentru clasele derivate, metodele au acelaşi tip şi aceeaşi parametri.

Principii POO: Polimorfismul, supraîncărcarea Dacă în acelaşi domeniu sunt definite mai multe funcţii cu acelaşi nume, la fiecare apel se selectează funcţia corectă prin compararea tipurilor argumentelor reale de apel cu tipurile argumentelor formale ale funcţiei. double abs(double); int abs(int); abs(1); // apeleaza abs(int) abs(1.0); // apeleaza abs(double) Nu este admis ca funcţiile să difere doar prin tipul returnat! Două funcţii declarate cu acelaşi nume se referă la aceeaşi funcţie dacă sunt în acelaşi domeniu şi au număr şi tipuri identice de argumente.

Concluzii POO Programele: o colecţie de obiecte, unităţi individuale de cod care interacţionează unele cu altele, în loc de simple liste de instrucţiuni sau de apeluri de proceduri Obiectele POO sunt de obicei reprezentări ale obiectelor din viaţa reală Programele sunt mai uşor de înţeles, de depanat şi de extins decât programele procedurale (mai ales în cazul proiectelor software complexe şi de dimensiuni mari, care se gestionează făcând apel la ingineria programării).

Tip abstract de date mulţime de date care au aceeaşi reprezentare şi pentru care este definit setul de operaţii care se pot executa asupra elementelor mulţimii respective. are două părţi: o parte care defineşte reprezentarea datelor o parte care defineşte operaţiile asupra datelor respective.

Noţiunea de clasă O clasă defineşte un tip abstract de date. Definiţie clasă: class nume{ lista_elementelor_membru } Lista elementelor membru poate conţine: declaraţii de date; implementări de funcţii; prototipuri de funcţii abstracte. Datele declarate printr-o definiţie de clasă se numesc date membru Funcţiile definite sau pentru care este prezent numai prototipul în definiţia clasei, se numesc funcţii membru sau metode. Atât datele cât şi metodele pot avea modificatori de acces

Modificatorii de acces Modificatorii de acces sunt cuvinte rezervate ce controlează accesul celorlalte clase la membrii unei clase. Specificatorii de acces pentru variabilele şi metodele unei clase sunt: public, protected, private şi cel implicit (la nivel de pachet). Specificator Clasa Subcls* Pachet Oriunde Private X Implicit X X Protected X X X Public X X X X *subclasă din alt pachet

Clasă Exemplu: class Complex { // date membru float real; float imag; // functii membru publice public void atribuire(float x, float y) { real = x; imag=y; } public double retreal() { return real; } public void afiscomplex(){ System.out.println(real+ + +imag+ *i ); } }

Obiecte Un obiect este o dată de un tip definit printro clasă. Se spune că obiectul este o instanţiere a clasei respective. Formatul declaratiei unui obiect: nume_clasă nume_obiect; Instanţierea obiectelor se face folosind operatorul new. nume_obiect = new nume_clasă(..);

Obiecte Datele membru se alocă distinct la fiecare instanţiere a clasei. O excepţie o constituie datele membru care au clasa de memorare static, ea este o parte comună pentru toate instanţierile clasei şi există într-un singur exemplar. Funcţiile membru sunt într-un singur exemplar oricâte instanţieri ar exista. Legătura dintre funcţii membru şi obiectul pentru care se face apelul se realizează folosind operatorul punct.

Obiecte Exemplu de instanţieri pentru clasa complex: Complex z; z=new Complex(); Atunci: z.atribuire(0,0); z.afiscomplex(); afişează numărul complex z (în cazul de faţă 0+0i).

Constructori Obiectele se generează şi se pot iniţializa la instanţiere cu ajutorul constructorilor Funcţii membru ce au acelaşi nume cu numele clasei Funcţii apelate automat la crearea obiectelor. Valorile de iniţializare se transferă constructorului şi ele joacă acelaşi rol ca parametrii efectivi de la apelurile funcţiilor obişnuite. Se pot defini mai mulţi constructori pentru o clasă. În acest caz ei au acelaşi nume, dar diferă prin numărul şi/sau tipurile parametrilor.

Constructori Dacă există mai mulţi constructori, atunci la iniţializare se utilizează regulile de la apelurile funcţiilor supraîncărcate. Funcţiile constructor nu întorc valori, dar nu sunt precedaţi de cuvântul void. Dacă clasa nu conţine constructori, se generează un constructor fără parametri, adică un constructor implicit. El are rolul numai de alocare a obiectelor clasei respective, fără a le iniţializa.

Constructori Exemplu: class Complex { double real; double imag; public Complex(double x, double y) {real = x; imag = y;} public Complex ( ) {real = 0; imag = 0;} } Exemple de instanţiere: Complex z= new Complex(); // z = 0 + 0*i Complex z1= new Complex(1,0); // z1 = 1 + 0*

Realizarea încapsulării datelor accesul la datele sau funcţiile membre ale unei clase din orice punct al domeniului de definiţie al clasei s-ar putea rezolva simplu prin declararea de tip public a acestora o astfel de implementare nu respectă principiul încapsulării datelor şi se recomandă să fie evitată din punct de vedere al dreptului de acces la membrii clasei, o clasă bine definită permite încapsularea (sau ascunderea informaţiilor), prin care un obiect poate ascunde celor care-l folosesc modul de implementare, prin interzicerea accesului la datele şi funcţiile private sau protected.

Realizarea încapsulării datelor în general, respectând principiul încapsulării, datele membre sunt declarate private sau protected şi nu pot fi accesate direct (pentru citire sau scriere) din funcţii nemembre ale clasei. Pentru citirea sau modificarea unora dintre datele membre protejate în clasa respectivă se pot prevedea funcţii membre de tip public, care pot fi apelate din orice punct al domeniului de definiţie al clasei şi fac parte din interfaţa clasei. De exemplu, pentru clasa Complex, o implementare care respectă principiul încapsulării, dar, în acelaşi timp permite accesul la datele private ale clasei poate arăta astfel:

Realizarea încapsulării datelor class Complex { private double real; private double imag; public Complex(double x, double y){ real = x; imag = y;} public Complex ( ){ real = 0; imag = 0;} public void set(double x, double y){ real = x; imag = y; } public void setre(double x){ real = x;} public void setim(double y){ imag = y; } public double getre(){ return real ;} public double getim() { return imag;}

Realizarea încapsulării datelor } public void display(){ System.out.println(real+ + + imag + i ); } class test{ public static void main(string arg[]){ Complex c1=new Complex(), c2=new Complex(1,1); c1.set(7.2, 9.3); c1.display(); // afiseaza 7.2+9.3i c1.setre(1.3); c1.setim(2.8); c1.display(); // afiseaza 1.3+2.8i } }