Information hiding in Erlang
Luke Gorrie
luke@REDACTED
Fri Apr 28 12:00:30 CEST 2000
Jith Meganathan <jith@REDACTED> writes:
> I've attached a module I wrote implementing a simple priority queue with
> operations to add and pop elements, and to view the element with highest
> priority. The data structure used is a list of tuples, where each tuple
> contains an element and a priority. In writing the module, I felt a
> certain...nervousness at trusting callers to pass in a valid data
> structure each time they invoked a function in the module. Does Erlang
> provide mechanisms for encapsulating data structures, or is lack of
> information hiding just something to be accepted when programming a
> functional language?
You could make an abstract data type out of queue elements with:
qelement({Elt, _Priority}) -> Elt.
qpriority({_Elt, Priority}) -> Priority.
Since it's often useful to use these things as lists anyway, you could
also add:
%% Turn a Queue into an ordered list of {Element, Priority} and vice versa
queue_to_list(Queue) -> Queue.
list_to_queue(List) -> List.
This should be sufficient to let you change the "internal" data
structure however you want in future. The "dict" module in stdlib
makes a good example, I think.
So, you still don't have compilier- or runtime- checks enforcing
encapsulation, but you do have a way to write clients which doesn't
rely on the format of the list.
Cheers,
Luke
More information about the erlang-questions
mailing list