http://www.csci.csusb.edu/dick/cs320/sebesta/06.html

The book does not define what a data type is until chapter 11! But it has lots of examples here instead. My definition A data type is a collection of values and operations. Operations do things to values and produce values as a result. This defines the Abstract data Type or ADT. Compare with a C++ class. Structured objects(values) with functions(operations). T operator +(T left, T right){.....}

To describe a data type we need to define both the syntax and the semantics. Primitive data is often described by giving the syntax and an informal mapping into mathematical objects: Numerical Data Types map into NUMBERS (surprise :-) Integer A SUBSET of the integers ...-3,-2,-1,0,+1,+2,+3,... Reals and doubles SUBSETS of real numbers Decimal A subset of the fractions. An important property of Numerical data is that they have arithmetical operations(+*-/...) defined. Implementation: A finite number of bits. Axioms: Like arithmetic but approximate and with risk of overflow. Denotation: Number theory, Real Analysis. Question: Why is decimal arithmetic important? Answer: MONEY Sebesta does not mention "fixed point number". Few languages except COBOL provide it. Essentially it provides an efficient way to handle non-integral numbers that have a fixed range and fixed precision. Note. In Ada you can specify your own "bespoke" integer, fixed point and floating point data types. The compiler generates a a new type (with values, syntax, operations, ...) as needed to fit the ranges and precision that you want. Or it rejects your program. Good Ada programmers always define the precision and range that they require for floating point types There is no reason why you shouldn't have Decimal Floating point. (except it isn't on most chips...) Boolean Two values - true and false Operations include - and, or, not, ... Implementation: A single bit Assumptions: http://www.csci.csusb.edu/dick/maths/intro_logic.html Denotation: A Boolean Algebra with two elements. Was available in Algol 60! Recently added to C++ (and called 'bool') #include <stdlib.h> XLISP: T and NIL Scheme: true false (I think?) Prolog: true fails (not false!) Java: Boolean True False (I think) SmallTalk: True and False are special classes of Object within the class of Boolean. They are responsible for handling selections and iterations.

Values: zero or more characters Operations: Concatenation, substrings, substitution,.... Assumptions: No loss of information when strings concatenated. ... How does C do strings? Answer: ... It fakes them. How about C++ Original answer: It fakes them New standard answer #include <string> ^no .h! The faking is hidden behind an abstract data type or interface. How about: Java, Ada, Smalltalk, Prolog, LISP, ....

Values: Chosen by the programmer Operations: Minimal, predecessor, successor? ORDERED, like 0,1,2,3,... Assumptions: Just like a subset of the non-negative integers. C++: enum{...} How about: Java, Prolog, LISP,.... Danger: A Java Enumeration is not an Ordinal type. Pity.

Ada, Pascal Adds a run time test to all operations on the type, unless the compiler can prove that the operation is safe in some way of other Not in C. Or C++ In Ada and Pascal subranges (sub types) are used to check subscripts, as well as the results of arithmetic expressions. Ada 95. Takes this idea further to handle coercions and a kind of polymorphism. Notice: The theory of inheritance is that it is a way to implement subtyping.

Values: Each array associates subscript values with elements. Operations:.... Assumptions:....

You need this in C,C++,Java, and CS330... For example: C/C++ implementation is via pointers, but the Standard Template Library (STL) will provide safer arrays. #include <vector> For any given type T, vector<T> my_row_of_Ts; http://www.csci.csusb.edu/dick/c++std/ http://www.csci.csusb.edu/dick/cs202/stl.html

In essence a record is a primitive object with a minimal set of methods/functions/operations available for manipulating it. Can you recode the books examples in C? Java doesn't have any 'struct's. Instead it has ________. (The answer to this question is the same as every other Java question... Objects )

Can you recode the example in C? Is it simpler/safer/... In C++ a kind of union and tag situation is set up whenever a class has virtual methods and that class has several classes derived from it. Figure 5.10 looks at first glance like a C++ object. Notice that Object oriented languages replace Union data types by polymorphic data types. So in C++ inheritance and virtual functions make unions a bit obsolete.

NOT in C.... Not in Ada The C++ STL has a <bitset>. The STL <set> is an ordered set. See CSCI330. Instead: The logical operations (and,or,not,...) are extended to apply to small arrays of bits. C: &, |, ~ Ada: and, or, not However sets can be implemented in C, C++, Ada, Pascal,..... Notice that higher level languages have set implementations: Sets are part of SmallTalk and LISP. Prolog uses Lists and/or predicates instead. In Java, we have a HashTable that might be used for sets of objects?

The goto of data structures. Lost objects are commonly called GARBAGE. Do you need them? yes? no? What languages do not have pointers? Java, Edison, Basic, Algol 60,... (However in Java every object is accessed as a pointer and its address can be stored in another object )

Safe and constant pointers!

I do not expect you know anything about the VAX minicomputers(problem 4). Can you answer this question instead: How do you find out whether a Pentium is up to the IEEE Standard? Translation of review qn 13 into C/C++ enum colors{red,blue,green}; enum mood{happy, angry, blue};