Documente Academic
Documente Profesional
Documente Cultură
CURS 1. INTRODUCERE
Cuprins
• Introducere;
• Organizarea cursului POO. Procedura de evaluare;
• Paradigme de programare;
• Evoluţia limbajelor de programare orientate obiect;
• Obiect, mesaje, metode;
• Comparaţie Smalltalk versus C++;
• Concluzii.
Obiectivele învăţării
Introducere
Paradigme de programare
Ce este obiectul
Metode
Metodele sunt similare cu subrutinele, funcţiile sau procedurile din alte limbaje
de programare. Acestea sunt fragmente de cod identificate printr-un nume, care
pot fi invocate individual şi care returnează o valoare când se termină de rulat.
Metodele pot fi apelate pe baza unui selector.
Mesaje
• Deoarece starea unui obiect este privată şi nu poate fi accesată în mod direct din afara
lui, singura posibilitate de a accesa starea acestuia este de a transmite un mesaj
obiectului.
Limbajele POO au evoluat începând cu anii ’60, în prezent există o largă varietate de
limbaje pur orientate obiect sau hibride;
Cuprins
Introducere;
Clase şi instanţe;
Evaluarea metodelor;
Concluzii.
Obiectivele învăţării
Introducere
Metodele sunt fragmente de cod identificate printr-un nume, care pot fi invocate
individual şi care returnează o valoare când se termină de executat.
Oricum, este mult mai util să partajăm informaţii între obiecte similare.
Această abordare permite nu numai ocuparea unui spaţiu mai mic de memorie, dar
şi posibilitatea de a reutiliza codul.
Clase şi instanţe
Informaţia este partajată prin gruparea acelor obiecte care reprezintă acelaşi tip de
entitate într-o structură numită clasă.
Într-un limbaj de programare orientat pe obiecte, orice obiect este membru al unei
singure clase, acesta purtând numele de instanţa acelei clase.
Această relaţie dintre clase şi instanţe semnifică faptul că obiectele clase combină
două tipuri de cod şi date. Astfel, este codul şi datele pe care clasa obiect îl conţine în
sine (cunoscute sub numele metodele clasei şi variabilele clasei) dar şi un şablon pentru
codul şi datele pe care instanţa clasei îl va conţine (cunoscute sub numele de metodele
instanţei şi variabilele de instanţă).
Obiectele clasă înţeleg numai metodele clasei, iar obiectele instanţă înţeleg numai
metodele instanţei.
Programatorul trebuie să fie foarte atent deoarece foarte des pot apărea confuzii.
Dacă se aşteaptă ca mesajele transmise obiectelor să fie înţelese, atunci trebuie transmise
claselor - mesaje de clasă şi instanţelor - mesaje de instanţă.
Orice instanţă dintr-o clasă particulară are propriul set de variabile de instanţă
definit în acea clasă. Acestea nu sunt partajate între instanţe.
Dacă o clasă defineşte o variabilă de instanţă numită cont, orice instanţă a acelei clase
va avea o variabilă separată numită cont.
Variabilele de clasă sunt definite în clasă şi sunt vizibile şi partajate între toate
instanţele acelei clase.
Exemplu C++ (1)
1. Un mesaj este transmis unui obiect care este instanţa unei anumite clase.
3. Dacă metoda este găsită acolo, atunci aceasta este evaluată şi este întors un răspuns
corespunzător.
5. Acest proces se repetă în ierarhia claselor până când metoda este localizată sau nu
mai există nici o superclasă.
Moştenirea
În această ierarhie clasa moşteneşte atât clasa părinte aflată superior în ierarhie cât şi
clasa superioară clasei părinte.
Abstractizarea
Abstractizarea = caracteristica esenţială a unui obiect de a se distinge faţă de toate
celelalte obiecte şi care furnizează graniţe conceptuale clare, relative din perspectiva
utilizatorului.
¡ limbajele C++ şi Java au posibilitatea de a stabili dacă o subclasă poate suprascrie date
sau proceduri.
Modul în care mesajul este înţeles diferă însă de clasa fiecărei instanţe.
Diferenţa dintre cele două nume se referă la modul în care mecanismul folosit
determină ce cod este executat.
Este considerat polimorfism superior când procedura este definită atât în clasă cât şi
în subclasă. Aceasta înseamnă că atât clasa cât şi subclasa vor răspunde la cererea
pentru această procedură (considerând că nu a fost stabilită ca privată pentru clasă).
Concluzii
Informaţia este partajată prin gruparea acelor obiecte care reprezintă acelaşi tip de
entitate într-o structură numită clasă.
Într-un limbaj de programare orientat pe obiecte, orice obiect este membru al unei
singure clase, acesta purtând numele de instanţa acelei clase.
Variabilele de clasă sunt definite în clasă şi sunt vizibile şi partajate între toate
instanţele acelei clase.
Întrebări
Poate fi definită o clasă ca fiind un grup de obiecte?
Realizaţi o analogie cu obiecte din viaţa reală pentru a explica semnificaţia termenilor
clasă și instanţă. Ce tip de moștenire este implementată în limbajul Smalltalk?
Cuprins
Introducere;
Constructori;
Caracteristici constructori;
Tipuri de constructori;
Destructori;
Caracteristici destructori;
Concluzii.
Obiectivele învățării
După acest curs, veți putea:
Introducere
Destructorul este apelat automat la eliminarea unui obiect, la încheierea timpului sau
de viață, sau poate fi solicitat prin program, cu operatorul delete.
Constructor – Definiție
Rol:
alocare
inițializare
Constructor – Sintaxă
Exemplu
Constructori - Caracteristici
nu pot primi ca parametri instanțe ale clasei ce se definește, ci doar pointeri sau
referințe la instanțele clasei respective.
constructorii nu se moștenesc.
Tipuri de constructori
Constructori impliciți
Constructori cu parametri
definiți de utilizator
generați de compilator
Constructori de copiere
Sintaxa:
Utilizare
Destructorul este o funcție membră specială a unei clase ce apelează în mod automat
distrugerea unui obiect
Tipuri:
Definit de utilizator
Generat de compilator
Destructor – Sintaxă
Destructori - Caracteristici
Nu are parametri
Concluzii
Cuprins 2
Introducere;
Avantajele moștenirii;
Tipuri de moștenire;
Concluzii.
Obiectivele învățării
După acest curs, veți putea:
Introducere
Moștenirea este mecanismul prin care o clasă preia structura (datele membru) şi
comportamentul (metodele) unei alte clase la care adaugă elemente specifice.
Avantaje
Exemplu
Ce se moşteneşte?
În principiu, fiecare dată sau funcţie membru a clasei de bază se moşteneşte în clasa
derivată:
Supraîncărcarea operatorului =
Exemplul 2
Utilizarea datelor şi metodelor moştenite
Tipuri de moştenire
Moştenire simplă – clasa derivată preia caracteristicile şi metodele unei singure clase
de bază;
Dacă o clasă D este derivata din clase (B1, …, Bn) atunci constructorul clasei B va
avea suficienţi parametri pentru a iniţializa datele membru ale claselor B1,…, Bn.
La crearea unui obiect al clasei D se vor apela mai întâi constructorii claselor B1,…,Bn,
în ordinea specificată în lista de moştenire, pentru a se iniţializa datele membre ale
claselor de bază şi apoi se vor executa intrucţiunile constructorului clasei D.
Exemplu
Dacă clasa derivată are supraîncărcat operatorul de atribuire atunci acesta va realiza
copierea tuturor datelor membre.
Exemplu – partea 1
Exemplu – partea 2
Exemplu – partea 3
Concluzii
Moștenirea permite definirea de clase noi (clase derivate) reutilizând clasele existente
(clase de bază). Clasa nou creată moștenește comportamentul (metodele) și
caracteristicile (variabile membre, starea) de la clasa de bază.
Dacă A și B sunt două clase unde B moșteneste de la clasa A (B este derivată din clasa
A sau clasa B este o specializare a clasei A) atunci:
clasa B poate adauga noi membrii (variabile, metode) pe lângă cele moștenite de la
clasa A.
Întrebări