Differences

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

Link to this comparison view

poo-is:laboratoare:05 [2020/09/20 16:01]
ruben_gilian.udroiu [Exemplu amanuntit]
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 important>​In C++, avem mai multe tipuri de polimorfism:​ <note important>​In C++, avem mai multe tipuri de polimorfism:​
Line 13: 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 27: 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>​
 <note important>​ Semnatura unei metode consta in: <note important>​ Semnatura unei metode consta in:
Line 37: Line 39:
   * numarul si tipul parametrilor ​   * 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>​
poo-is/laboratoare/05.1600606886.txt.gz · Last modified: 2020/09/20 16:01 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