So
how do we implement an abstract data type? As an example we consider a set of
elements with the operations add, find, and drop.* They all apply to a set and
an element and return the element added to, found in, or removed from a set.
find can be used to implement a condition contains which tells us whether an
element is already contained in a set.
Viewed this way, set is an
abstract data type. To declare what we can do with a set, we start a header
file Set.h:
#ifndef SET_H
#define SET_H
extern const void * Set;
void * add (void * set, const void * element);
void * find (const void * set, const void * element);
void * drop (void * set, const void * element);
int contains (const void * set, const void * element);
#endif
The preprocessor statements protect the
declarations: no matter how many times we include Set.h, the C compiler only
sees the declarations once. This technique of protecting header files is so
standard, that the GNU C preprocessor recognizes it and does not even access
such a file when its protecting symbol is defined.
Set.h is complete, but is it useful? We can
hardly reveal or assume less: Set will have to somehow represent the fact, that
we are working with sets; add() takes an element, adds it to a set, and returns
whatever was added or already present in the set; find() looks for an element
in a set and returns whatever is present in the set or a null pointer; drop()
locates an element, removes it from a set, and returns whatever was removed;
contains() converts the result of find() into a truth value.
NB: Unfortunately, remove is an ANSI-C library function to
remove a file. If we used this name for a set function, we could no longer
include stdio.h.
The generic pointer void * is used
throughout. On the one hand it makes it impossible to discover what a set looks
like, but on the other hand it permits us to pass virtually anything to add()
and the other functions. Not everything will behave like a set or an element —
we are sacrificing type security in the interest of information hiding.
However, we will see in chapter 8 that this approach can be made completely
secure.
Terima kasih telah membaca artikel tentang C : 3 An Example — Set (Abstract Data Types Information Hiding) di blog Game Guides with Backdoor jika anda ingin menyebar luaskan artikel ini di mohon untuk mencantumkan link sebagai Sumbernya, dan bila artikel ini bermanfaat silakan bookmark halaman ini diwebbroswer anda, dengan cara menekan Ctrl + D pada tombol keyboard anda.