through well defined accounting
procedures. COBOL is naturally suited by design to express such problems. Among
the total number of computer cycles expended today on computational problems of
all varieties, a very significant fraction derives from COBOL based programs.
However, COBOL is a rather verbose language and it is rather awkward in its
formulation of scientific, particularly logic based problems.
Many of the
problem areas addressed by programming languages used for creating application
level software deal with extremely large amounts of data. Consequently, very
powerful subsystems have evolved for efficiently storing such large amounts of
information; subsystems termed databases.
The efficient but comprehensive storage and retrieval of information in
databases gave rise to a rather special purpose language termed the Structured Query Language, or SQL. This
language is quite adept at locating and formatting various sets of data out of
an extremely large data store, but it is somewhat lacking in the ability to
provide procedural processing on that data.
The C
Programming Language is a product of the design methodology that gave rise to
the UNIX operating system. C provides many of the mechanisms found in FORTRAN
for the expression of algebraic formulas. Moreover, it offers many of the
characteristics of assembly languages in allowing the programming to get much
closer to the sensori-motor environment of the central processing unit in the
formulation of application-level programs. As it happens, some of the
mechanisms provided by C are so powerful that they allow the programmer
inadvertently to create very subtle problems. Because of this, C is often
viewed to be an extremely sharp-edged tool. One can carve beautiful sculptures
with it, but one risks cutting off a useful appendage along the way. C offers
very powerful constructs for representing complex data structures. In so doing,
it came perhaps closer than other prior mainstream languages to establishing a
strong context facility; but it does not yet go far enough to approach the
capabilities of the brain in supporting metaphorical understanding, which is
the desired derivative of effective context. That is perhaps achieved through object-oriented languages.
In Chapter 4, we
noted the development of the Simula language as perhaps the earliest example of
an object-oriented programming language. Object-oriented languages provide for
contextual encapsulation of data together with procedural actions to be applied
to that data. Such languages take us much closer to the metaphorical
understanding facilities of the human brain. Over the course of development of
high-level programming languages, significant efforts have been made to morph these
into object-oriented varieties. Two of the more popular such variants are the
C++ and the Java languages.
C++ is a
derivative of the C language. It was initially developed by Bjarne Stroustrup.
While C++ encompasses the C language for purely procedural aspects, it provides
for the creation and use of encapsulated data plus procedural elements that we
can then think of as metaphorical constructs called objects. As a direct illustration of evolutionary construction, the
data map to C language structures and the methods that can act on this data map
to C language sub-programs. Object-oriented languages provide a limited degree
of metaphorical abstraction by enabling capabilities termed inheritance and specialization. Specialization allows one to create a new object
that is substantially like a previously established object and inheritance
allows actions established for that previously defined object to be applied to
the new object. The two capabilities provide a first approximation to a
metaphorical context, a step toward the cognitive languages we will present
next in this chapter.
|