0% found this document useful (0 votes)
1 views40 pages

Programming language data types

Programming language data types study
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1 views40 pages

Programming language data types

Programming language data types study
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 40

CSC 331

Programming Languages

Data Types

Lecture 7 – Data Types CSC 331 1


Data Types
• What is a data type?
A name with certain attributes:
– The values that can be stored, the internal representation,
the operations, …
• A data type is a set of values
• e.g., int in Java:
int x;
xIntegers= [-2147483648, 2147483647]
• A data type is also a set of operations on the values

Lecture 7 – Data Types 2


Why are data types important?
• Example: z = x / y; (Java)
– int x, y; x=5; y=2;
• Integer division, x/y results in 2.
• int z: z = 2;
• double z: z=2.0;
– double x, y; x=5; y=2;
• floating-point division, x/y results in 2.5
• int z: wrong!
• double z: z=2.5;

Lecture 7 – Data Types CSC 331 3


Java Types

Primitive Reference

boolean Numeric Array class interface

Type structure
Integral Floating point of Java
char float
byte double
short
int
long
Lecture 7 – Data Types CSC 331 4
C Types

Basic Derived

void Numeric Pointer Array Function struct union

Integral Floating

float
Type structure
double
(signed) enum long double of C
(unsigned)
char
int
short int
long int

Lecture 7 – Data Types CSC 331 5


Simple Data Types
• No internal structure:
e.g., integer, double, character, and boolean.
• Often directly supported in hardware.
– machine dependency
• Most predefined types are simple types.
– Exceptions: String in Java.
• Some simple types are not predefined
• Enumerated types
• Subrange types

Lecture 7 – Data Types CSC 331 6


Enumerated Types
Ordered set, whose elements are named and listed explicitly.

• Examples:
enum Color_Type {Red, Green, Blue}; ( C )
type Color_Type is (Red, Green, Blue); ( Ada )
datatype Color_Type = Red | Green | Blue; ( ML )

• Operations: ?
Successor and predecessor

Lecture 7 – Data Types CSC 331 7


Ada Example
type Color_Type is (Red, Green, Blue);

x : Color_Type := Green;
x : Color_Type’Succ(x);
x : Color_Type’Pred(x);
put(x); -- prints GREEN

• No assumptions about the internal representation of


values
• Print the value name itself
8
Pascal Example
type
cardsuit = (club, diamond, heart, spade);
card = record
suit: cardsuit;
value: 1 .. 13;
end;
var
hand: array [ 1 .. 13 ] of card;

• Succ(diamond) = heart; Pred(spade) = heart;


• club < heart; is true.
• for acard := club to heart do
9
C Example
#include <stdio.h>
enum Color {Red, Green, Blue};
enum Courses {CSE1111=1, CSE3302=3, CSE3310=3, CSE5555=4};
main() {
enum Color x = Green;
enum Courses c = CSE3302;
x++;
printf("%d\n“,x);
printf("%d\n",Blue+1);
printf("%d\n",c);
return 0;
}
• Enum in C is simply int
• Can customize the values
10
Java Example
public enum Planet { MERCURY (2.4397e6), EARTH (6.37814e6);
private final double radius; // in meters
Planet(double radius) {this.radius = radius; }
private double radius() { return radius; }

public static void main(String[] args) {


for (Planet p : Planet.values())
System.out.printf(“The radius of %s is %f\n", p, p.radius());
}
}

java.util.Enumeration has different meaning


for (Enumeration e = v.elements() ; e.hasMoreElements() ;)
System.out.println(e.nextElement());
Lecture 7 – Data Types 11
Evaluation of Enumeration Types
• Efficiency – e.g., compiler can select and use a compact
efficient representation (e.g., small integers)

• Readability -- e.g. no need to code a color as a number

• Maintainability – e.g., adding a new color doesn’t require


updating hard-coded constants.

• Reliability -- e.g. compiler can check operations and ranges of


value.

Courtesy of Charles Nicholas at UMBC


Lecture 7 – Data Types 12
C Example for Maintainability
enum Color {White, Green, Blue, Black};
enum Color {White, Yellow, Green, Blue, Black};
main(){
enum Color x = Black;
int i = x;
while (i >= White){
if (i < Green)
printf(“this is a light color!\n”);
i--;
}
}
What if no enumeration?
if (i < 1) printf(“this is a light color!\n”);
Has to be changed to:
if (i < 2) printf(“this is a light color!\n”);
Lecture 7 – Data Types 13
Ada Example for Reliability
type DAY is (MON, TUE, WED, THU, FRI, SAT, SUN);
type DIRECTION is (NORTH, EAST, SOUTH, WEST);

GOAL : DIRECTION;
TODAY : DAY;
START : DAY;

TODAY := MON;
GOAL := WEST;
START := TODAY;

TODAY := WEST; -- Illegal: WEST is not a DAY value


TODAY := 5; -- Illegal: 5 is not a DAY value
TODAY := TODAY + START; -- Illegal: "+" is not defined for DAYS

Lecture 7 – Data Types 14


Subrange Types
Contiguous subsets of simple types, with a least and greatest element.
• Example:
type Digit_Type is range 0..9; ( Ada)
• Not available in C,C++,Java. Need to use something like:
byte digit; //-128..127
...
if (digit>9 || digit <0) throw new DigitException();
• defined over ordinal types:
– ordered, every value has a next/previous element
• E.g., integer, enumerations, and subrange itself

Lecture 7 – Data Types CSC 331 15


Type constructors: Defining New Types

• Type constructors as set operations:


– Cartesian product
– Union
– Subset
– Functions (Arrays)
• Some type constructors do not correspond to set operations
(e.g., pointers)
• Some set operators don’t have corresponding type
constructors (e.g., intersection)

Lecture 7 – Data Types CSC 331 16


Cartesian Product
• Ordered Pairs of elements from U and V
U  V = {(u, v) | uU and vV}

• Operations:
– projection
p1: U  V → U; p2 : U  V → V
p1((u,v))=u; p2((u,v))=v

Lecture 7 – Data Types CSC 331 17


Examples
• struct in C
struct IntCharReal
{ int i;
char c;
double r;
}
int  char  double
• record in Ada
type IntCharReal is record
i: integer;
c: character;
r: float;
end record;

Lecture 7 – Data Types CSC 331 18


The same type?
struct IntCharReal
{ int i;
char c;
double r;
}

struct IntCharReal
{ char c;
int i;
double r;
}
Lecture 7 – Data Types CSC 331 19
The same type?
struct IntCharReal
{ int i;
char c;
double r;
}

struct IntCharReal
{ int j;
char ch;
double d;
}
Lecture 7 – Data Types CSC 331 20
Record/structure are not exactly
Cartesian products
• Component selector: projection by component
names
struct IntCharReal x;
x.i;

• Most languages consider component names to be


part of the type.
• Thus the previous two types can be considered
different, even though they represent the same
Cartesian product.
Lecture 7 – Data Types 21
ML: Pure Cartesian Product
type IntCharReal = int * char * real;

• (2, #"a", 3.14)


• #3(2, #"a", 3.14) = 3.14

Lecture 7 – Data Types CSC 331 22


Union
• U  V = { x | xU or xV}
– data items with different types are stored in overlapping
region, reduce memory allocation.
– Only one type of value is valid at one time.
– E.g.,
union IntOrReal {
int i;
double r;
}

• Different from records?

Lecture 7 – Data Types CSC 331 23


Undiscriminated Union in C
union IntOrReal {
int i;
double r;
}
union IntOrReal x;
x.i = 1;
printf(“%f\n”, x.r);

• Can be unsafe

Lecture 7 – Data Types 24


Create Discriminated Union in C++
struct IntOrReal {
bool isInt;
union {
int i;
double r;
};
};

IntOrReal x;
x.isInt = true;
x.i = 1;
...
if (x.isInt) printf(“%d\n”, x.i);
else printf(“%f\n”, x.r);

• Safe now
• or not?
Lecture 7 – Data Types 25
Discriminated Union in Ada
• Variant record (with tag or discriminator)
type Disc is (IsInt, IsReal);
type IntOrReal (which: Disc) is
record
case which is
when IsInt => i: integer;
when IsReal => r: float;
end case;
end record;
...
x: IntOrReal := (IsReal, 2.3);
put (x.i); -- generates ERROR

• Safe: programmers won’t be able to create


inconsistent data
Lecture 7 – Data Types CSC 331 26
Discriminated Union in Pascal
• Variant record

• Can be unsafe:
– First, the tag is optional
– Second, the tag can be set inconsistently.

Lecture 7 – Data Types 27


Discriminated Union in ML
datatype IntOrReal =
IsInt of int | IsReal of real;

• val x = IsReal(2.3);

28
How about Java?
• Is there record or union in java? Why?

Lecture 7 – Data Types 29


“Union” in Java
• public abstract class A {…};
public class B extends A {…};
public class C extends A {…};

Abstract class A: union of B and C.

• Discriminated union: instanceof

Lecture 7 – Data Types 30


Subset
• U = { v | v satisfies certain conditions and vV}

• Ada subtype

• Example 1
– type Digit_Type is range 0..9;
– subtype IntDigit_Type is integer range 0..9;

Lecture 7 – Data Types 31


subtype in Ada
• Example 2
type Disc is (IsInt, IsReal);
type IntOrReal (which: Disc) is
record
case which is
when IsInt => i: integer;
when IsReal => r: float;
end case;
end record;

subtype IRInt is IntOrReal(IsInt);


subtype IRReal is IntOrReal(IsReal);

x: IRReal := 2.3;

Lecture 7 – Data Types 32


Powerset
• P(U) = { U’ | U’  U }
• Example: Pascal
set of <ordinal type>

– var S: set of 1.. 10;


– var S: 1.. 10;
What’s the difference?

• The order isn’t significant though


unordered, values are distinct
Lecture 7 – Data Types 33
set of in Pascal
var S, T: set of 1 .. 10;
S := [1, 2, 3, 5, 7];
T := [1 .. 6];

Set operations can be performed on the variables.


What are these?
• T := S*T;
• If T = [1, 3, 5] then …;
• x = 3; if x in S then …;
• if S<=T then …;

•  (*)  (+) − (-) = (=)  (<>)


•  (>)  (>=)  (<)  (<=)  (in)
Lecture 7 – Data Types 34
Arrays and Functions
f: U → V

index type component type

• [0, …] (C/C++/Java)
• Ordinal type (Ada/Pascal)

Lecture 7 – Data Types 35


C/C++
Allocated on stack, size statically specified.

typedef int TenIntArray [10];


typedef int IntArray [];

TenIntArray x;
int y[5];
int z[]={1,2,3,4};
IntArray w={1,2};
IntArray w; //illegal
int n = ... //from user input
int a[n]; //illegal
Lecture 7 – Data Types 36
Java
Allocated on heap, size dynamically specified;
Size can be obtained by .length

int n = ... //from user input


int [] x = new int [n];
System.out.println(x.length);

Lecture 7 – Data Types 37


Ada
size dynamically specified;
Set of subscripts

type IntToInt is array(integer range <>) of integer;

get(n); //from user input


x: IntToInt(1..n);
for i in x’range loop
put(x(i));
end loop;

38
Multi-dimensional arrays
• C/C++
int x[10][20];

• Java ??
int [][] x = new int [10][20];

• Python ??

Lecture 7 – Data Types 39


Storage
• row-major form
x[1,-10],x[1,-9],…,x[1,10],x[2,-10],…,x[2,10],x[3,-10],…

• column-major form
x[1,-10],x[2,-10],…,x[10,-10],x[1,-9],…,x[10,-9],x[1,-8],…

• C/C++
int array_max(int a[][20], int size)
• Java
int array_max(int [][][]a)

Lecture 7 – Data Types 40

You might also like