Modules -- representation hiding
ADT
typedef int element;
enum { NIL, CONS };
struct list {
int tag;
element e;
list* next;
};
Generators
list* nil() { nil
list* l = new list; l->tag = NIL; return l;
}
list* cons( element e, list* l) { cons
list* x = new list;
x->tag = CONS; x->e = e; x->next = l;
return x;
}
slide: Data abstraction and modules