Modeling Heterogeneous Software Components