Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-is:laboratoare:05 [2020/09/20 15:58]
ruben_gilian.udroiu [Exemplu]
poo-is:laboratoare:05 [2020/09/29 22:26] (current)
alexandru.ionita99
Line 1: Line 1:
 ======= Laboratorul 05: Polimorfism. Agregare ======= ======= Laboratorul 05: Polimorfism. Agregare =======
-In cadrul laboratorului 5 al Programarii Orientate pe Obiecte, vom aprofunda unul dintre cele 4 principii ale POO-ului, **polimorfismul**, si un alt concept important, **agregarea**.+In cadrul laboratorului 5 al Programarii Orientate pe Obiecte, vom aprofunda unul dintre cele 4 principii ale POO-ului, **Polimorfismul**. De asemeneavom aborda conceptul de **Agregare**. 
 + 
 +Cele 4 mari concepte ale Programarii Obiectuale sunt: **Incapsulare**, **Polimorfism**, **Mostenire** si **Abstractizare**. (Echivalent in engleza, pentru documentare suplimentara:​ Encapsulation,​ Polymorphism,​ Inheritance,​ Abstraction).
  
 Ca referinte externe, recomandam urmatorul capitol din [[https://​discourse-production.oss-cn-shanghai.aliyuncs.com/​original/​3X/​2/​3/​2380479dcb8e375425884a10da232730bbc7f88d.pdf|Absolute C++]]: Ca referinte externe, recomandam urmatorul capitol din [[https://​discourse-production.oss-cn-shanghai.aliyuncs.com/​original/​3X/​2/​3/​2380479dcb8e375425884a10da232730bbc7f88d.pdf|Absolute C++]]:
   * Capitolul 15 (Chapter 15: Polymorphism and virtual functions, pag. 661-693)   * Capitolul 15 (Chapter 15: Polymorphism and virtual functions, pag. 661-693)
  
-===== Polimorfism =====+===== 1. Polimorfism =====
 <note important>​**Polimorfism** = abilitatea unei functii cu un anumit nume sa aiba comportamente diferite, in functie de parametrii de intrare.</​note>​ <note important>​**Polimorfism** = abilitatea unei functii cu un anumit nume sa aiba comportamente diferite, in functie de parametrii de intrare.</​note>​
-<​note>​ Semnatura unei metode consta in: 
-  * numele metodei 
-  * numarul si tipul parametrilor ​ 
-</​note>​ 
 <note important>​In C++, avem mai multe tipuri de polimorfism:​ <note important>​In C++, avem mai multe tipuri de polimorfism:​
   * Compile Time Polymorphism   * Compile Time Polymorphism
Line 17: Line 15:
 <​note>​**Compile Time Polymorphism** <​note>​**Compile Time Polymorphism**
  
-Acest tip de polimorfism este obtinut ​cand supraincarcarea ​o functie ​(Function Overloading) sau un operator (Operator Overloading).+Acest tip de polimorfism este obtinut ​prin supraincarcarea ​unei functii ​(Function Overloading) sau al unui operator (Operator Overloading).
  
-**Overloading (supraincarcarea)** = posibilitatea ​dea avea intr-o clasa mai multe metode cu acelasi nume, acestea ​fiind diferentiate prin semnatura+**Overloading (supraincarcarea)** = posibilitatea ​de a avea intr-o clasa mai multe metode cu acelasi nume, fiind diferentiate prin **semnatura**.
  
 Extra: Supraincarcarea are loc la compilare => Compile Time Extra: Supraincarcarea are loc la compilare => Compile Time
Line 31: Line 29:
 Observatie: ​ Observatie: ​
   * Se pot suprascrie doar metodele vizibile pe lantul de mostenire (public, protected)   * Se pot suprascrie doar metodele vizibile pe lantul de mostenire (public, protected)
-  * O metoda din clasa copil poate suprascrie o metoda din clasa parinte daca au aceeasi semnatura si acelasi tip de return +  * O metoda din clasa copil poate suprascrie o metoda din clasa parinte daca au aceeasi semnatura si acelasi tip de return. 
-  ​* ​+
 Extra: Suprascrierea are loc la executare => Run time Extra: Suprascrierea are loc la executare => Run time
  
-(Exemplu in cadrul Laboratorului ​cand invatam despre ​Derivare)+(Exemplu in cadrul Laboratorului ​cand invatam despre ​Functii Virtuale) 
 +</​note>​ 
 +<note important>​ Semnatura unei metode consta in: 
 +  * numele metodei 
 +  * numarul si tipul parametrilor ​
 </​note>​ </​note>​
-==== Exemplu ====+==== 1.1. Exemplu ====
 <code c++ CompileTime.cpp>​ <code c++ CompileTime.cpp>​
 #include <​iostream>​ #include <​iostream>​
Line 66: Line 68:
 <​note>​Observam ca, desi au acelasi nume, **semnatura** metodelor difera doar prin **tipul** si **numarul** parametrilor.</​note>​ <​note>​Observam ca, desi au acelasi nume, **semnatura** metodelor difera doar prin **tipul** si **numarul** parametrilor.</​note>​
  
-===== Agregare =====+===== 2. Agregare =====
 <note important>​**Agregarea** = procedeul prin care se creeaza un nou tip de date (o noua clasa) folosind tipuri de date (clase) existente <note important>​**Agregarea** = procedeul prin care se creeaza un nou tip de date (o noua clasa) folosind tipuri de date (clase) existente
  
 **Relatia de agregare** = o relatie intre clase de tipul "has a", "has many"</​note>​ **Relatia de agregare** = o relatie intre clase de tipul "has a", "has many"</​note>​
-==== De ce? ====+==== 2.1. De ce? ====
 <note tip>​**Reutilizarea codului duplicat in dezvoltarea de aplicatii** (code reuse) <note tip>​**Reutilizarea codului duplicat in dezvoltarea de aplicatii** (code reuse)
  
Line 78: Line 80:
 </​note>​ </​note>​
  
-==== Scurt exemplu ====+==== 2.2. Scurt exemplu ====
  
 <code c++> <code c++>
Line 98: Line 100:
   * se reutilizeaza codul deja implementat din A   * se reutilizeaza codul deja implementat din A
 </​note>​ </​note>​
-==== Exemplu amanuntit ====+==== 2.3. Exemplu amanuntit ====
 <code c++> <code c++>
 #include <​iostream>​ #include <​iostream>​
Line 158: Line 160:
   * la **definirea** obiectului (inaintea constructorului folosind o valoare initiala sau blocuri de initializare)   * la **definirea** obiectului (inaintea constructorului folosind o valoare initiala sau blocuri de initializare)
   * **in cadrul constructorului**   * **in cadrul constructorului**
-  * **inainte de folosire (lazy initialization)** (Cursul 6, pag 37/47, observam ca s-a facut alocarea de spatiu pentru Pagina din vectorul de pagini, dar nu s-au dat valori pentru atributele din Pagina)+  * **inainte de folosire (lazy initialization)** (Exemplu in Cursul 6, pag 37/47, observam ca s-a facut alocarea de spatiu pentru Pagina din vectorul de pagini, dar nu s-au dat valori pentru atributele din Pagina)
 </​note>​ </​note>​
poo-is/laboratoare/05.1600606683.txt.gz · Last modified: 2020/09/20 15:58 by ruben_gilian.udroiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0