Defining the product (abstract type) and its concrete implementation