A classification of data that determines the possible values for that type, the operations that can be performed on values of that type, and the way values of that type can be stored
A theoretical understanding of condition(s) at either end of an iterative structure is required, regardless of whether they are supported by the language being used