# Generic term for "objects" vs "fundamental types"?

What are the exact terms to call data types with a logic structure (like C structures, C++ or Java objects) versus fundamental data types (like numeric types, characters, booleans...) independently of any language or paradigm. (I am searching for abstract/academic computer science words).

• structs/objects are normally called Cartesian Products.
– tp1
Aug 25, 2013 at 16:44
• @tp1 Only among people who take one (admittedly insightful) idea from type theory too far. Almost everyone else will stare at you blankly, even/especially those who are familiar with the more common use of "Cartesian product".
– user7043
Aug 25, 2013 at 16:55
• Numeric types, characters and booleans are called primitives. Aug 25, 2013 at 17:19
• @delnan: Structs / records were introduced to me as Cartesian products in my first semester at college. Jan 19, 2014 at 20:05
• @Giorgio It's entirely possible that your professors fall under the characterization I gave six months ago.
– user7043
Jan 19, 2014 at 20:47

In Object-Oriented systems they are almost universally called "Objects" and "Primitive Types" respectively. Before we had OO, there were "Data Structures" and "Primitive Types".

I would say compound data-types. As an example, see those documentations for different languages: C++, guile and C (beware, audio speech).

Also, check Rosetta Code, where the term is defined as:

``````[a type] that holds multiple independent values.
``````

This definition encompasses arrays, structures, classes, and so on. Here, "value" means either a primitive type or another compound type, I guess.

• +1 compound data type is more general than object, structure or record. Aug 26, 2013 at 15:37

I don't think there are any.

It depends entirely on the language: in Lambda Calculus, functions (and only functions) are primitive, booleans, numbers, strings, lists are not. In Smalltalk, objects are primitive, integers are not. In C, integers are primitive, objects are not. Pairs are not primitive in Java, but they are in Scheme. Java makes a difference between primitives and objects, C# doesn't.

• Please fix this "booleans are primitive" heretic statement before the ayatollahs of the Cee language have a chance to see your post!
– user44761
Aug 25, 2013 at 20:22
• ARRRRGH, the One Holy Standard of the Language C says nothing about your evil booleans! Aug 25, 2013 at 21:12
• I replaced "boolean" with "integer". Aug 26, 2013 at 2:10

#Abstract Data Types

from wikipedia:

In computer science, an abstract data type (ADT) is a mathematical model for a certain class of data structures that have similar behavior; or for certain data types of one or more programming languages that have similar semantics. An abstract data type is defined indirectly, only by the operations that may be performed on it and by mathematical constraints on the effects (and possibly cost) of those operations.

(or just say "data structure", most people will know what you mean)

Exact academic terms are arguable (see comments); I say 'data structure' or even 'abstract data type' and have no trouble being understood. 'Object' is more specific than what you asked for.

If you want total precision, say 'primitive' and 'non-primitive' (or 'secondary').

I'm wondering why this matters? What's the purpose?

• So you would say "Abstract Data Types" vs "Primitive Types" ? Aug 25, 2013 at 20:16
• @Vincent: I would, yes. Not sure if there is an 'official' answer though. To me, an ADT is a structure, but the formal definition references 'access through behaviors'. You could also say 'data structure' and most people will know what you mean. Aug 25, 2013 at 20:24
• The OP mentioned "objects", however, which are fundamentally different from ADTs. See On Understanding Data Abstraction, Revisited by William R. Cook for details. Aug 26, 2013 at 12:24
• @JörgWMittag: very interesting, thanks for the reference. The author (Cook) says "Academic computer science has generally not accepted the fact that there is another form of data abstraction besides abstract data types" but then later says "When classes are used as types, the programmer is implicitly choosing to use a form of abstract data type". Professor Cook is trying to make a very precise distinction here which may or may not be a generally accepted definition; I don't know. Answer revised to err on the side of caution ;) Aug 26, 2013 at 13:50