Objects are described as instances of abstract data types, that is, data structures known from an official interface rather than through their representation. The basic modular unit, called the class, describes the implementation of the type. The emphasis is on structuring the system around the objects it manipulates rather than the functions it performs on them, and on reusing whole data structures together with the associated operations.
Object-oriented programming facilitates the creation of software components that closely parallel the application domain, and supports
Many object-oriented programming languages are in wide use today. Some were designed from scratch (Simula67, Eiffel, Trellis/Owl, Python, Java and Smalltalk); others are hybrids or extensions of existing languages (CLOS, Object Pascal, C++ and Objective-C).
The course will concentrate on the theoretical framework and design philosophies which form the basis for all languages supporting the object-oriented paradigm. These principles will be covered in a language-independent manner, although techniques for the incorporation of each in specific programming languages will be examined in some detail and illustrated through the study of applications realised in one or more of the languages--primarily Java, the course language.
The term paradigm (Gr.
, LL. paradigma) originally
meant an illustrative example, particularly an example sentence showing all
inflectional forms (declension and conjugation) of a word; however, the meaning was expanded by Thomas Kuhn
in The Structure of Scientific Revolutions to denote a set of theories,
standards and methods that together represent a way of organising knowledge,
a high-level plan or framework for solving specific types of problems--a form of Weltanschauung.
A programming paradigm provides a way of viewing the processes of computation and programming. A language supports a programming paradigm if it provides facilities that make it convenient (reasonably easy, safe and efficient) to use that style.
There are many ways to classify programming languages according to the paradigm they support. One could refer, for example, to languages as either functional or imperative.1
Imperative programming languages, such as C, FORTRAN, Pascal, Ada, Icon and Algol, contain statements or commands which affect the program state, that is, computation is viewed as massaging the memory and changing the state (the values stored in certain locations) by side-effect (Yech!). The resulting values obtained by these side-effects are then printed.
Functional programming, on the other hand, works with values and not states; its main tool is expressions, not commands. Expressions consist mainly of function applications; functions are allowed to take any type of argument and return any type of result. The main control structure is function application and recursion. There are no side-effects and, therefore, no need for an assignment statement; the result of the computation is the result returned by the main function. Languages supporting this paradigm include Miranda, Haskell, LISP and Standard ML.
Although the example paradigms presented above serve to illustrate
the concept of a programming paradigm, it is more relevant in the context of object-oriented
programming to examine another classification of paradigms and languages, based
upon abstraction mechanisms used by programming languages in the encapsulation
and isolation of execution and design information.