Sunteți pe pagina 1din 7

LUCRAREA DE LABORATOR N4

Tema:
Motenirea i compoziia
Scopul lucrrii:
studierea motenirii, avantajele i dezavantajele;
studierea compoziiei;
studierea regulilor de definire a motenirii i compoziiei;
studierea formelor de motenire;
studierea iniializatorilor;
principiul de substituie;
motenirea i compoziia ce s alegem.
Noiuni de baz
Motivarea
Motenirea reprezint unul din cele trei mecanisme de baz a motenirii orientate pe
obiecte. Motenirea poate fi studiat din dou puncte de vedere: dezvoltatorului i utilizatorului
clasei.
Din punct de vedere a dezvoltatorului motenirea nseamn, c comportarea i proprietile
clasei derivate, sunt nite dezvoltri a clasei de baz. Din punct de vedere a utilizatorului
motenirea reprezint existena unor particulariti de schimbare independenta a claselor cu o
interfa unic (Inginerii TI i constructorii de automobile, n primul rnd sunt inginerii).
Avantajele motenirii:
- micorarea cantitii codului i folosirea lui repetat;
- micorarea cantitii erorilor i a preului de cost;
- o interfaa unic i substituia;
- mrirea vitezei de prelucrare;
Cheltuielile motenirii: unicele cheltuieli la folosirea motenirii poate fi numit micorarea
vitezei la compilarea codului. Totui preocuprile de eficacitate nu trebuie s intre in
contrazicere cu avantajele, aa cum cheltuielile, cu adevrat, nu sunt eseniale, aa cum unele
din ele pot fi ocolite prin utilizarea funciilor de substituire.
Definirea i utilizarea motenirii:
Motenirea se desemneaz prin indicarea clasei de baz dup numele clasei derivate, dup
dou puncte. Ca de exemplu:
class Animal{
int NofLegs;
public:
void Say(){ cout<<!!!; }
};
class Dog: public Animal{ // motenirea
...
};
void main(){
Dog d;
d.Say();
}

Din exemplu se vede, c funcia i variabila, sunt definite n clasa Animal sunt importate i
pot fi utilizate de obiectul clasei Dog. Starea, ce complic percepia acestui mecanism, consta din
aceia c, clasa derivat poate sa-i defineasc comportamentul, primit n clasa de baz. (Struul i
pinguinul nu zboar, dei sunt psri, dar ornitoringul depune ou, dei este manifer). Ne vom
ntoarce la aceasta tem n urmtoarele lucrri de laborator.

Principiul de substituiei
Adugnd la cele relatate mai sus, putem spune c, motenirea presupune, c obiectul
clasei derivate poate fi utilizat n locul obiectului de baz:
void main(){
Animal *ptr = new Dog;
}

Din exemplu se vede c sunt indice la clasa de baz deci se ateapt utilizarea obiectului
de baz, dar, indicatorului i se atribuie obiectul derivatei.
Formele motenirii
n relaiile motenirii, C++ este un limbaj foarte bogat, aa cum exist cinci forme diferite
de motenire. n aceast lucrare de laborator noi vom studia trei dintre ele, acele care se numesc
simple.
- deschis;
- nchis;
- protejat;
Diferite forme de motenire sunt utilizate, pentru a modifica starea accesului pentru
variabilele membre clasei. De exemplu, la utilizarea motenirii nchise, toate care sunt accesibile
(deschise i protejate) variabilele clasei de baz devin nchise n derivare. Dar prin utilizarea
derivrii protejate protejate. Variabilele nchise a clasei de baz prin orice forma de derivare
devin inaccesibile. Mai mult ca att, metodele de motenire, se deosebesc prin aceia, c
motenirea deschis creeaz un subtip de date, adic exist principiul de substituie, dar protejata
i deschisa nu.
Compoziia
Compoziia reprezint nc un mecanism, legat de programarea orientat pe obiecte, care
reprezint relaia dintre obiecte, atunci cnd motenirea este relaia dintre clase.
Motenirea realizeaz relaia a fi is a . Dog este mamifer, iar mamiferul animal.
Compoziia realizeaz relaia de a conine has a . Automobilul conine motor i roi.
Definirea compoziiei
Cu adevrat compoziia este folosit foarte larg, aa cum variabilele ncorporate conin un
tip i sunt utilizate la definirea clasei. Dar la folosirea variabilelor ncorporate nu apar ntrebri,
ceia ce nu se poate spune despre clasele utilizatorilor. Definirea nu este grea, ns utilizarea
constructorilor creeaz probleme.
class Car{
Engine e;
};

Iniializatorii
Cum se tie variabilele nchise a clasei de baz devin inaccesibile, deci, ele nu pot fi iniiate
n constructor, mai mult ca att, aceasta contrazice principiul repetrii codului. Soluia este una
chemarea constructorului clasei de baz. Aa i se ntmpl, numai c pentru constructorii
implicii i copiilor sunt generate de compilator. Restul trebuie s fie chemate manual. Aceiai
problem apare i la utilizarea compoziiei, poate fi utilizat numai constructorul implicit i
copiile. Pentru rezolvarea acestor probleme se utilizeaz iniializatorii care permit chemarea
constructorilor i efectuarea oricrei iniializri.
class Engine{
int power;
public:
Engine(int p){power=p;}
};
class Transport{
...
public:

Transport(char*);
};
class Car:public Transport{ //
Engine e;
//
public:
Car():Transport(automobile),e(10){}
};

Pentru chemarea constructorului clasei de baz, dup parantezele rotunde a constructorului


derivat se scrie constructorul de baz, mai mult ca att se poate de transmis parametrii derivatei
de baz. La utilizarea compoziiei starea este aceeai, numai c sunt scrise numele variabilelor
dar nu a constructorului.
Ce s alegem ?
Aa ca i motenirea i compoziia este un instrument de reutilizare a codului, deci apare
ntrebare: cnd s utilizam motenirea i cnd s utilizam compoziia. Exist o mulime de
recomandri n acest sens, dar, mai uor este de memorat urmtoare regul: trebuie sa-i pui
urmtoarea ntrebare: noua clasa este un subtip (Dog is an Animal), dac noi am obinut un
rspuns afirmativ atunci trebuie fi utilizat motenirea, n caz contrar apare alt ntrebare: nu este
noua clas un container (Car has a door) n acest caz compoziia.
Cu prere de ru, pentru cteva cazuri aceast strategie este inutil. Ca de exemplu, clasa
mulime poate fi creat pe baza clasei list, ce metod s folosim. Se poate motenirea i se poate
compoziia. n acest caz regulile sunt complicate. Trebuie s-i pui cteva ntrebri:
- vor fi obiectele noii clase substituite n locul vechii clase?
- trebuie de redefinit o funcie virtual ?
- prelucreaz noul tip aceleai mesaje ca i vechiul ?
- nu este clasa de baz abstract ?
Dac rspunsul este afirmativ, utilizai motenirea.
ntrebri de control:
1.
2.
3.
4.
5.
6.
7.

Prin ce se deosebesc formele de motenire?


Ce reprezint compoziia ?
Care sunt avantajele motenirii?
Cum lucreaz constructorii la motenire?
Ce reprezint principiul de substituie?
n ce cazuri se utilizeaz motenirea i n care se utilizeaz compoziia?
Cum pot fi iniiate elementele containerului?

Sarcina
Varianta 1
) De creat o ierarhie a claselor joc joc sportiv volei. Determinai constructorii, destructorii,
operatorii de atribuire i alte funcii obligatorii.
b) De creat clasa roata, care conine raz. Determinai constructorii i metodele de acces. Creai
clasa automobil, care conine roi i un cmp care reprezint firma productoare. Creai o clas
derivat autocamion care se deosebete prin tonaj. Determinai constructorii, destructorii i alte
funcii necesare.
Varianta 2
) De creat clasa student, care are un nume, specialitate, anul de nvmnt i balul mediu.
Determinai funcia de definire, schimbare a datelor i comparare. Pentru sarcina cmpurilor
textuale se folosete operatorul new. Determinai constructorul, destructorul i alte funcii
necesare. Creai clasa derivat student-diplomant, pentru care este definit tema de diplom.
Deasemenea, este necesar de definit toate funciile necesare.
b) De creat clasa camera, care conine suprafa. Determinai constructorii i metodele de acces.
Creai clasa apartamente cu o odaie, care conine o odaie i o buctarie (suprafaa ei), etajul
(camera este n clasa apartament cu o odaie). Determinai constructorii, metodele de acces.
Determinai clasa derivat apartamente cu o odaie cu adres (un cmp adugtor - adresa).
Determinai constructorii, destructorii i fluxul de ieire.
Varianta 3
) De creat clasa mobil, care conine informaie despre pre, stil i domeniul de utilizare (oficiu,
buctrie i alt modil). Pentru sarcina cmpurilor textuale folosii memoria dinamic. Definii
clasele derivate masa i scaun. Determinai constructorii, destructorii, operatorii de atribuire i
alte funcii necesare.
b) De creat clasa garaj, care conine suprafa. Determinai constructorii i metodele de acces.
Creai clasa casa, care conine o odaie i o buctarie (suprafaa ei), i garaj. Determinai clasa
derivat vil (ca parametru adugator cantitatea de pamnt). Determinai constructorii,
destructorii i fluxul de ieire.
Varianta 4
) De creat o ierarhie a claselor om i colaborator, care ocup un post anumit i primete un
salariu anumit. Determinai fluxul de ieire i fluxul de intrare, constructorul de copiere,
operatorii de atribuire prin anumite funcii a clasei de baz.
b) De creat clasa carte, care conine grad i culoare. Cartea poate fi ntoars i deschis. Creai
clasa butuc de cri, a crii pe care o conine. Creai dou clase derivate de la butuc de cri, n
una crile pot fi scoase numai ntr-o ordine, iar n alta aleator.
Varianta 5
) De creat clasa lichid, care conine informaie despre denumire (pointer la cmp), densitate.
Determinai constructorii, destructorii, operatorii fluxului de intrare. Creai a clas derivat
buturi alcoolice, care conin trie. Determinai funciile predestinate densitii i triei.
b) De creat clasa buton, care conine un text anumit. Determinai constructorii i metodele de
acces. Creai clasa fereastra, care conine un buton i coordonatele ferestrei. Definii
constructorii i destructorii. Definii clasa derivat fereastra cu buton i cu un mesaj. Definii
constructorii, destructorii i operatorii fluxului de ieire.

Varianta 6
) De creat clasa om, care are un nume (pointer la cmp), vrsta, greutate. Determinai
constructorii, destructorii i operatorii de atribuire. Creai clasa derivata - major, care are
numrul paaportului. Definii constructorii implicii cu diferii parametri, destructorii, operatorii
fluxului de ieire. Definii funciile destinate vrstei i numrului paaportului.
b) Definii clasa vaca care este compus din urmtoarele cmpuri: numrul de identificare
trebuie s fie garantat unic (pentru care se utilizeaz un contor statistic), cantitatea medie de
lapte, vrsta, porecla i rasa. Pentru sarcina cmpurilor textuale utilizai operatorul new. Definii
clasa ciread, starea creia ine de numrul de vaci. Definii metodele de introducere, eliminare,
determinarea cantitii medii de lapte n ciread i laptele n comun i alte funcii necesare.
Varianta 7
) De creat o ierarhie a claselor cldire administrarea cldirii cldire de locuit. Determinai
fluxul de ieire i fluxul de intrare, constructorul de copiere, operatorul de atribuire prin funcia
corespunztoare a clasei de baz.
b) De creat clasa student, care are un nume, specialitate, anul de nvmnt i balul mediu.
Determinai funcia de definire, schimbare a datelor i comparare. Pentru sarcina cmpurilor
textuale se folosete operatorul new. Determinai constructorul, destructorul i alte funcii
necesare. Creai clasa grupa, care conine studeni (o cantitate nelimitat). Definii metodele de
adugare i eliminare a studenilor, determinarea balului mediu pe grup, constructorii,
destructorii i alte funcii necesare.
Varianta 8
) De creat o ierarhie a claselor cldire de nvmnt clasa de baz abstract i cldirea
precolar, medie i superioar clase derivate. Determinai fluxul de ieire i fluxul de intrare,
constructorul de copiere, operatorul de atribuire prin funcia corespunztoare a clasei de baz.
b) De creat clasa motor, care are o firm productoare, tip i putere. Determinai funciile de
definire, schimbare a parametrilor motoarelor. Creai o ierarhie a claselor: corabie clasa de baz
i vapor pentru pasageri derivat. Corabia are un motor, capacitate de ncrcare, msurtor de
ap, denumire, portul unde este nscris. Pentru sarcina cmpurilor textuale, utilizai operatorul
new.
Varianta 9
) De creat o ierarhie a claselor presa gazeta, jurnal i ziar electronic. Determinai cmpurile:
denumirea ziarului, tirajul, numrul de abonament, periodicitatea de publicare. Pentru sarcina
cmpurilor textuale, utilizai operatorul new. Determinai fluxul de ieire i fluxul de intrare,
constructorul de copiere, operatorul de atribuire prin funcia corespunztoare a clasei de baz.
b) De creat clasa Procesor, care conine informaia despre denumirea procesorului, frecvena lui,
tehnologiile utilizate de producere i mrimea memoriei. Determinai clasa computer , care este
compus dintr-un procesor i alte componente. Pentru sarcina cmpurilor textuale, utilizai
operatorul new. Determinai constructorii funciile fluxului de ieire i alte funcii necesare.
Varianta 10
) De creat o ierarhie a claselor transport transport aerian elicopter. Determinai fluxul de
ieire i fluxul de intrare, constructorul de copiere, operatorul de atribuire prin funcia
corespunztoare a clasei de baz.
b) Definii clasa element chimic, care conine informaia despre denumirea elementului i
proprietile ei chimice. Determinai clasa medicamente, care conine diferite elemente chimice
i diferite cantiti. Determinai constructorii, funciile fluxului de ieire i alte funcii necesare.

Varianta 11
a) De creat o ierarhie a claselor senzor clasa de baz abstract i senzori de temperatur,
umiditate i viteza vntului. Pentru fiecare clasa definii unitile sale de msur i metode de
citire a datelor despre starea mediului nconjurtor. Determinai fluxul de ieire i fluxul de
intrare, constructorul de copiere, operatorul de atribuire prin funcia corespunztoare a clasei de
baz.
b) De creat clasa dispozitiv de colectare a informaiei despre starea timpului care este compus
din senzori dup sarcina a. Pentru citirea valorilor de creat clasa generatorul de valori pentru
fiecare senzor. Demonstrai lucrul dispozitivului.
Varianta 12
a) De creat o ierarhie a claselor Figuri de ah clasa abstract, care conine cmpul culoarea.
Creai clasa derivat toate figurile, care conine denumirea ei i coordonatele poziiei pe tabl.
Pentru sarcina cmpurilor textuale, utilizai operatorul new. Determinai fluxul de ieire i fluxul
de intrare, constructorul de copiere, operatorul de atribuire prin funcia corespunztoare a clasei
de baz.
b) De creat clasa figuri de ah, care este compus dintr-un set de figuri din sarcina a., i tabla de
ah tablou bidimensional 8 pe 8. Trebuie s fie posibilitatea de a elimina figurile de pe tabl.
Determinai constructorul care creeaz dinamic figuri i le d poziii dinamic n notarea ah (E2).
Varianta 13
) De creat o ierarhie a claselor joc joc sportiv volei. Determinai constructorii, destructorii,
operatorii de atribuire i alte funcii obligatorii.
b) De creat clasa roata, care conine raz. Determinai constructorii i metodele de acces. Creai
clasa automobil, care conine roi i un cmp care reprezint firma productoare. Creai o clas
derivat autocamion care se deosebete prin tonaj. Determinai constructorii, destructorii i alte
funcii necesare.
Varianta 14
) De creat clasa student, care are un nume, specialitate, anul de nvmnt i balul mediu.
Determinai funcia de definire, schimbare a datelor i comparare. Pentru sarcina cmpurilor
textuale se folosete operatorul new. Determinai constructorul, destructorul i alte funcii
necesare. Creai clasa derivat student-diplomant, pentru care este definit tema de diplom.
Deasemenea, este necesar de definit toate funciile necesare.
b) De creat clasa camera, care conine suprafa. Determinai constructorii i metodele de acces.
Creai clasa apartamente cu o odaie, care conine o odaie i o buctarie (suprafaa ei), etajul
(camera este n clasa apartament cu o odaie). Determinai constructorii, metodele de acces.
Determinai clasa derivat apartamente cu o odaie cu adres (un cmp adugtor - adresa).
Determinai constructorii, destructorii i fluxul de ieire.

Varianta 15
) De creat clasa mobil, care conine informaie despre pre, stil i domeniul de utilizare (oficiu,
buctrie i alt modil). Pentru sarcina cmpurilor textuale folosii memoria dinamic. Definii
clasele derivate masa i scaun. Determinai constructorii, destructorii, operatorii de atribuire i
alte funcii necesare.
b) De creat clasa garaj, care conine suprafa. Determinai constructorii i metodele de acces.
Creai clasa casa, care conine o odaie i o buctarie (suprafaa ei), i garaj. Determinai clasa
derivat vil (ca parametru adugator cantitatea de pamnt). Determinai constructorii,
destructorii i fluxul de ieire.
Determinai constructorul de copiere i operatorul de atribuire.