# RE: Come iniettare funzionalitÃ  in classi esis?

**URL:** <https://www.ruby-forum.com/t/re-come-iniettare-funzionalita-in-classi-esis/99749>\
**Category:** IT\
**Created:** [July 25, 2006, 10:08am UTC](https://www.ruby-forum.com/t/re-come-iniettare-funzionalita-in-classi-esis/99749 "2006-07-25T10:08:11Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [July 25, 2006, 10:08am UTC](https://www.ruby-forum.com/t/re-come-iniettare-funzionalita-in-classi-esis/99749/1 "2006-07-25T10:08:11Z")

</div>

> Alla fine è un po’ come chiedersi, “perché esistono le interfacce in\> Java se si può ereditare”?

> Perché puoi ereditare da una sola classe, ma implementare 10mila interfacce.  
> Il punto è anche che in java non puoi riaprire la classe per aggiungerne  
> metodi, qui si.  
> A me interesserebbe sapere se oltre a motivi _filosofici_ ci sono anche  
> quelli tecnici,  
> ma proprio nel weekend ho fatto un plugin che applica questo principio e  
> funziona una bomba…  
> quindi credo non ce ne siano.

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [July 25, 2006, 6:23pm UTC](https://www.ruby-forum.com/t/re-come-iniettare-funzionalita-in-classi-esis/99749/2 "2006-07-25T18:23:40Z")

</div>

On Jul 25, 2006, at 10:06 AM, Giuliano U. wrote:

> Il punto è anche che in java non puoi riaprire la classe per  
> aggiungerne metodi, qui si.  
> A me interesserebbe sapere se oltre a motivi _filosofici_ ci sono  
> anche quelli tecnici,  
> ma proprio nel weekend ho fatto un plugin che applica questo  
> principio e funziona una bomba…  
> quindi credo non ce ne siano.

Il motivo “filosofico” te lo spiego con un esempio, riprendendo il tuo:

module MyExtension  
def self.append\_features(base)  
super  
base.extend ClassMethods  
end

module ClassMethods  
def my\_method(data)  
…  
end  
end  
end

class ActiveRecord::Base  
include MyExtension  
end

class  
MyClassWhichIsACompleteAndTotallyCompatibleReplacementForActiveRecord  
include MyExtension  
end

spero di essere stato chiaro 🙂

–  
Stefano C.  
removed\_email\_address@domain.invalid
