well, in this case the first question would be: what is a primitive data
Well, that's the interesting thing. Every object (as far as I can think of)
boils down to a aggregation of primitive data types, even if it is
aggregating object as well, because those objects boil down to primitives.
Delphi/Julian stores dates in the form of double with the whole numbers
representing days past a base date and the fraction representing the
fraction of a day. Gregorian/Java dates are stored as a long and represent
the number of milliseconds past a base date, so essentially, yes, they are
primitive data types, but no different than any other structure/object.
Concerning the ADT, back in high school days (late 80's early 90's) ADT was
always a conceptual structure only, like a stack/heap/queue. They were
defined by algorithmic pseudocode and could be implemented any way you like
as long as they followed the conceptual algorithm (has a pop, has a push,
LIFO, etc). Now, can they be implemented as an abstract class, with the pop
and push defined but not implemented therefore making it an abstract class,
but I think the two definitions are different with the common word
"abstract" in them. Granted, the early 90's have long since past and ADT
could have been anointed a new definition. As always though, I could be
wrong.