A data type defined by the programmer that is not supported by the language. These data types are generally high level definitions within a program that correspond to real world objects.