Conclusioni
Template ed ereditarieta` sono strumenti assai diversi pur condividendo lo
stesso fine: il riutilizzo di codice gia` sviluppato e testato. In effetti la
programmazione orientata agli oggetti e la programmazione generica sono due
diverse scuole di pensiero relative al modo di implementare il polimorfismo
(quello della OOP e` detto polimorfismo per inclusione, quello della programmazione
generica invece e` detto polimorfismo parametrico). Le conseguenze dei due approcci
sono diverse e diversi sono i limiti e le possibilita` (ma si noti che tali
differenze dipendono anche da come il linguaggio implementa le due tecniche).
Tali differenze non sempre comunque pongono in antitesi i due strumenti: abbiamo
visto qualche limite del polimorfismo della OOP nel C++ (ricordate il problema
delle classi contenitore) e abbiamo visto il modo elegante in cui i template
lo risolvono.
Anche i template hanno alcuni difetti (ad esempio quello dei vincoli impliciti,
o il fatto che i template generano eseguibili molto piu grandi) che non troviamo
nel polimorfismo della OOP. Tutto cio` in C++ ci permette da un lato di scegliero
lo strumento che piu` si preferisce (e in particolare di scegliere tra un programma
basato su OOP e uno su programmazione generica), e dall'altra parte di rimediare
ai difetti dell'uno ricorrendo all'altro. Ovviamente saper mediare tra i due
strumenti richiede molta pratica e una profonda conoscenza dei meccanismi che
stanno alla loro base.
|