use calss for abstraction