why favor object composition over class inheritance