Sunteți pe pagina 1din 11

Paradigma OO

- completări -
Clase
Numele claselor este, de obicei, un substantiv la singular, care trebuie
să fie cât mai sugestiv faţă de abstracţia modelată.

Atributele sunt de două feluri:


• atribute de instanţiere, care au valori specifice unui obiect particular;
• atribute de clasă, care au valori comune tuturor instanţelor clasei şi
se reprezintă subliniat

Atributele au următoarele tipuri:


• integer
• real
• boolean
• string
• enumerare
• boolean
• alte tipuri sau chiar clase
Sintaxa unui atribut va fi următoarea:
[vizibilitate] nume:tip_expresie [=valoarea_iniţială {listă de proprietăţi}]

Atributele clasei se pot clasifica după gradul de vizibilitate în:


-atribute publice, care sunt atribute vizibile, pot fi folosite şi în alte
clase şi sunt precedate de semnul "+"; mulţimea acestora se mai
numeşte şi interfaţă;
-atribute private (informaţionale), care pot fi accesate numai în clasa
respectivă şi care sunt precedate de semnul "-";
-atribute protejate, care pot fi accesate de clasa care le-a definit,
precum şi de generalizările sau de specializările ei, şi sunt precedate
de semnul "#".
Exemplu. Clasa Asigurări poate avea următoarele atribute:
Mesaje şi metode
Obiectele nu sunt izolate, ele acţionează asupra altor obiecte şi/sau
permit să se acţioneze asupra lor. Relaţiile dintre obiecte se numesc
linkuri sau legături, iar comunicarea dintre obiecte se numeşte stimul.
Comportamentul se referă la modul în care un obiect reacţionează
(schimbă starea) la cererile altor obiecte din sistem, precum şi la modul
cum acţionează (trimite mesaje altor obiecte).

Un mesaj este o comunicare între clase via asocieri, aşa cum un stimul
este comunicarea dintre obiecte via legături.

Operaţia este abstractizarea unui mesaj care poate fi trimis clasei. La


primirea unui mesaj, o clasă execută o operaţie.
Sintaxa unei operaţii este:
[vizibilitate] nume_operaţie ([arg1 :tip1,............argn :tipn ] ): [tip]
public (+)
privat (-)
partajat (#)
Mesaje şi metode (continuare)
Implementarea operaţiei se numeşte metodă, adică o metodă este o
unitate de cod, scris într-un limbaj de programare orientat pe obiecte.

Dacă, într-un limbaj de programare, se defineşte o funcţie şi se scrie


codul care determină ce trebuie să execute funcţia, atunci declaraţia
funcţiei este o operaţie, iar corpul funcţiei este o metodă.

Metodele se clasifică în:


a) Constructori - sunt metode care crează noi instanţe ale clasei. Unei
se aplică clase îi pot corespunde mai mulţi costructori.
numai
clasei
b) Destructori - sunt metode care elimină un obiect din memorie.

c) Selectori - sunt metode care accesează starea unui obiect fără a


o modifica.

d) Modificatori - sunt metode care schimbă starea obiectului.


Mesaje şi metode (continuare)

Ceea ce obiectele ştiu şi pot să facă se numeşte caracteristică.


structurale
Caracteristicile sunt de două tipuri
comportamentale

Asocierile şi atributele alcătuiesc caracteristicile structurale (structural


features), deoarece ele indică structura clasei, similar cu modelarea
structurală, care indică structura modelului realizat

Operaţiile şi metodele sunt caracteristici dinamice (behavioral features),


deoarece comunică comportamentul clasei, asemănător cu modelarea
dinamică, folosită pentru a comunica comportamentul unui sistem
Interfeţe
Mesajele primite de obiect pot fi:
• mesaje publice – mesaje care pot fi recepţionate de obiect, indiferent de
cine trimite mesajul;
• mesaje private – mesaje trimise obiectului de diferite părţi ale sistemului
sau chiar de el însuşi.

Interfaţa unui obiect cuprinde mesajele publice ale obiectului.


Obs. Obiectele din aceeaşi clasă au aceeaşi interfaţă, aşadar, interfaţa
unui obiect poate fi considerată ca o interfaţă a clasei.
Obs. Interfaţa conţine numai operaţiile, nu şi metodele (codul) care
implementează operaţiile.

Obs. În UML, interfeţele vor fi redate printr-un cerc, căruia i se ataşează


numele interfeţei.
Obs. Accesul către datele obiectului se poate face prin serviciile (operaţiile)
pe care acesta le oferă clienţilor săi. Aceste operaţii care găsesc şi setează
valorile atributelor se numesc getters şi setters. În acest caz, starea
obiectului este privată, în timp ce serviciile sale sunt publice.
Clase abstracte
O clasă care are, cel puţin, o operaţie abstractă (operaţie pentru care nu e
dată decât signatura) se numeşte clasă abstractă.
Obs. O clasă abstractă nu poate fi instanţiată.

Obs. Clasa care moşteneşte o clasă abstractă va trebui să implementeze


operaţile abstracte din superclasă; în caz contrar, şi ea devine clasă
abstractă.
Moştenire

Atributele şi operaţiile cu vizibilitate publică (precedate de '+') din


superclasă vor fi publice şi în subclasă, pe când cele private (precedate de
'-') vor fi moştenite în subclasă, dar nu vor fi accesibile acesteia. Atributele
şi operaţiile cu vizibilitate protejată (precedate de '#') nu pot fi accesate de
alte clase, ci numai de clasa respectivă şi de subclasele ei.

Când o clasă are o singură superclasă, spunem că există o moştenire


simplă.

Poate să existe şi o ierarhie de clase, adică o clasă să fie atât subclasă,


cât şi superclasă, şi, în acest caz, avem o moştenire multiplă.

Există mai multe scenarii de moştenire :


• adăugarea unor noi metode şi/sau stări subclasei;
• rescrierea unor metode din superclasă, din motive de eficienţă.
Polimorfism

Polimorfismul constă în abilitatea de a folosi mai multe metode pentru o


operaţie (de exemplu: desenarea unei figuri sau calculul ariei).

Datorită polimorfismului, o subclasă poate să redefinească o operaţie


moştenită chiar dacă operaţia nu este abstractă în superclasă.

Implementarea unei operaţii va fi aleasă în funcţie de obiectul căruia i se


aplică operaţia. Se caută metoda întâi în clasa cea mai specializată a
obiectului; dacă aceasta nu se găseşte, se merge la superclasa imediat
următoare, până la găsirea ei în ierarhia de clase definită. Se constată
dacă există o clasă abstractă de bază, toate celelalte clase abstracte şi
concrete pot deriva din această clasă de bază.

S-ar putea să vă placă și