Differences

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

Link to this comparison view

poo-ca-cd:laboratoare:design-patterns-part-one [2025/11/24 10:54]
florian_luis.micu [A doua iterație: Overloading static]
poo-ca-cd:laboratoare:design-patterns-part-one [2025/11/24 11:05] (current)
florian_luis.micu [Single Dispatch]
Line 685: Line 685:
  
 <note important>​ <note important>​
-Polimorfismul dinamic nu ar avea problema de mai devreme. De exemplu, aceste apeluri sunt rezolvate corect la runtime:<​code java>+Polimorfismul dinamic ​**nu** ar avea problema de mai devreme. De exemplu, aceste apeluri sunt rezolvate corect la runtime:<​code java>
 city.show();​ // va apela metoda suprascrisă din City city.show();​ // va apela metoda suprascrisă din City
 industry.show();​ // va apela metoda suprascrisă din Industry industry.show();​ // va apela metoda suprascrisă din Industry
 </​code>​ </​code>​
  
-Însă această soluție permite **un singur comportament de afișare** per clasă. Dacă vrem să afișăm același obiect în mai multe formate (TEXT, JSON, XML), nu putem suprascrie ​`show()de trei ori. Ar trebui să delegăm afișarea către clase externe (''​ExporterText'',​ ''​ExporterJson'',​ ''​ExporterXml''​),​ iar dacă folosim overloading pentru acestea, revenim la aceeași problemă: **overloading-ul se decide la compile-time**,​ ignorând tipul real al obiectului.+Însă această soluție permite **un singur comportament de afișare** per clasă. Dacă vrem să afișăm același obiect în mai multe formate (TEXT, JSON, XML), nu putem suprascrie ​''​show()'' ​de trei ori. Ar trebui să delegăm afișarea către clase externe (''​ExporterText'',​ ''​ExporterJson'',​ ''​ExporterXml''​),​ iar dacă folosim overloading pentru acestea, revenim la aceeași problemă: **overloading-ul se decide la compile-time**,​ ignorând tipul real al obiectului.
 </​note>​ </​note>​
  
Line 733: Line 733:
  
 <note tip> <note tip>
-Aceasta este situația clasică unde single dispatch și overloading nu sunt suficiente. Avem nevoie de double dispatch.+Aceasta este situația clasică unde **single dispatch și overloading nu sunt suficiente**. Avem nevoie de **double dispatch**.
 </​note>​ </​note>​
  
Line 842: Line 842:
   - Operațiile se adaugă mai des decât clasele obiectelor.   - Operațiile se adaugă mai des decât clasele obiectelor.
   - Dorim să separăm algoritmii de structura de date, păstrând clasele vizitabile simple.   - Dorim să separăm algoritmii de structura de date, păstrând clasele vizitabile simple.
 +
 +**TL;DR:** Folosim Visitor când vrem să avem **mai mulți algoritmi** (ex. ExporterPDF,​ ExporterXML,​ ExporterJSON) pentru **mai multe tipuri de entități** (ex. SeightSeeing,​ Industry, City).
 </​note>​ </​note>​
  
poo-ca-cd/laboratoare/design-patterns-part-one.1763974482.txt.gz · Last modified: 2025/11/24 10:54 by florian_luis.micu
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