abstract data types, smart constructors stubs