In a book we purchased on COM specifically tailored to VB (VB COM by Wrox Press)... the author insists on creating his interfaces using separate class modules then using the Implements keyword to assign them as the Interface in another Class module.

He gives the example of a IFarmYardAnimal class which is the Interface for CCow. So, CCow would contain code that looks like:

Implements IFarmYardAnimal

And then CCow would have a method like IFarmYardAnimal_Sing in which you would "Make the cow sing"

The implementation gets nasty when you must do this:

Dim o As New CCow
Dim i As New IFarmYardAnimal

Set i = o

i.Sing


I realize one might use this to keep versioning in check easily, but...

My question is: Has anyone ever seen this done with a professionally published component? Or in your own? Are there alternatives to changing or adding Interfaces to components?