next up previous
Next: The Procedural Paradigm Up: Introduction to OOP (Object-Oriented Previous: Introduction to OOP (Object-Oriented

Course Description

Object-oriented design is the construction of software systems as structured collections of abstract data type implementations.

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

encapsulation
the strict enforcement of information hiding
reusability
the ability of a system to be reused, in whole or in part, for the construction of new systems
extensibility
the ease with which a software system may be changed to reflect a modification of its requirements

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. $\pi\alpha\rho\alpha\delta\epsilon\iota\gamma\mu\alpha$, 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.


Subsections
next up previous
Next: The Procedural Paradigm Up: Introduction to OOP (Object-Oriented Previous: Introduction to OOP (Object-Oriented
len blanks 2001-04-02