Abstraction and Complexity

Introduction

The short musical phrases appearing at the beginning of each chapter are taken from The Notebook for Anna Magdalena Bach (which are intended primarily for young players). Despite their apparent simplicity, however, they are acknowledged by experienced pianists as being hard to play properly, yet they are among the standard exercises for learner pianists. In a way this reflects the problem of teaching object-oriented programming. The concepts underlying object-oriented programming may at first seem deceptively simple (and not require the complexity of C++ or a type theoretical analysis). However, in developing object-oriented models some intrinsically difficult questions remain, for which we have no definite answer and which may even require extensive expertise and technology to come up with a partial solution. Returning to the music, I often find myself improvising, leaving the written music for what it is, a starting point. The approach taken in this book may be characterized as abstract, in the sense that attention is paid primarily to concepts rather than particular details of a solution or implementation language. By chance, in response to a discussion in my class, I looked up the meaning of abstract in a dictionary, where to my surprise I learned that one of its meanings is to steal, to take away dishonestly. Jokingly, I remarked that this meaning sheds a different light on the notion of abstract data types, but at a deeper level I recognized the extent to which the ideas presented in this book have profited from the ideas originally developed by others. My rendering of these ideas in a more abstract form is, however, not meant to appropriate them in a dishonest way, but rather to give these ideas the credit they deserve by fitting them in a context, a framework encompassing both theoretical and pragmatical aspects of object-oriented computing. As one of the meanings of the adjective abstract, the dictionary also lists the word abstruse Jokingly, I remarked that this meaning sheds a different light on the notion of abstract data types, but at a deeper level I recognized the extent to which the ideas presented in this book have profited from the ideas originally developed by others. My rendering of these ideas in a more abstract form is, however, not meant to appropriate them in a dishonest way, but rather to give these ideas the credit they deserve by fitting them in a context, a framework encompassing both theoretical and pragmatical aspects of object-oriented computing. As one of the meanings of the adjective abstract, the dictionary also lists the word abstruse (not easy to understand). There is no need to say that, within the limits of my capabilities, I have tried to avoid becoming abstruse.

Empirical Results

Vitanyi

Source: Alta Vista

Documents 1-10 of about 500 matching the query, best matches first

Abstraction

Source: Alta Vista

Documents 1-10 of about 9000 matching the query, best matches firs

entity and ignores or conceals less important or non-essential.. Planning: Complexity and Expressivity and Abstraction in Problem Solving and Learning parts the behavior of which is known in isolation, The behavior of the system is described in terms of cause-and-effect relations. Another is by abstraction to a functional level and separation of the loops of interaction of interest. procedures and as values returned by procedures too ! Flexibility to incorporate new, changed information as it becomes available may be the single most important criterion for successful integrated assessment: Among strongly modeled assessments, models with certain characteristics have big advantages in their ability to assimilate such changes in knowledge. because this is a dead link! It argues that modernist poets have tended to resist the received values of their contemporary culture by finding idealizing principles in modes of pure abstraction. practice: it suggests that abstractions hide their implementation, whereas the evidence is that this is not generally possible. This discrepancy between our basic conceptual foundations and practice appears to be at the heart of a number of portability and complexity problems. action painting, a style which was in the ascendant in the United States, especially trough Jackson Pollock. His is the utterance: "When I'm in my painting, I'm not aware of what I'm doing". expertise. Design patters identify, name, and abstract common themes in object-oriented design. They capture the intent behind a design by identifying objects, their collaborations, and the distribution of responsibilities.

Complexity

Source: Alta Vista

Documents 1-10 of about 30000 matching the query, best matches first.

mathematical results on complexity as broadly conceived. by Bruce Edmonds Last updated on 24 May 1996. his is a bibliography covering some of the philosophical and practical references to the concept and measurement of Complexity. It does not attempt to cover all the new sciences that might come under the "Complexity" banner, unless they are relevant to the idea of Complexity per se. Also, ... sciences, one tends to think of economics and other social and... complex systems research. The theme of the journal is the field of complex systems, the generation of complex behaviour from the interaction of multiple parallel processes. Relevant topics include (but are not restricted to): artificial life, cellular automata, chaos theory, control theory, evolutionary programming, fractals, genetic algorithms, information systems, neural networks, non-linear dynamics, and parallel computation. efficiency considerations. Depending on the structure of the problem at hand, different implementations will have different runtime characteristics and space requirements. We refer to these as the (time or space) complexity. Other measures exist. difficult and subtle topic to discuss. But, I try to make it a... standard textbook in this area has been Hopcroft and Ullman. For... relevant" details. However, no interface is suitable for all the users of the implementation for exactly the same reason: each user has a slightly different view of what is "most relevant." Thus, although abstractions can reduce complexity, working around their limitations can introduce other complexities. Some abstractions are designed to minimize the added complexity. "The combination in the book of fantasy, satire, philosophy,. and defined the term complexity: In general, the complexity of an object is a function of the realtionships among the components of the object.

Computability and complexity

Mathematically, a computing device consists of a finite table of instructions and a possible infinite memory in which to store intermediate results. In order to perform a computation the device also needs an input and some means by which to display the results. For now, we need not be concerned with the precise mathematical details of our model of a computing device. For a very much more precise and elaborate description of the Turing machine, the interested reader is referred to  [Hopcroft]. What is important, however, is that this model captures in a very precise sense the notion of computation, in that it allows us to characterize what can be computed, and also what a computation will cost, in terms of computing time and memory usage. An interesting, but perhaps somewhat distressing, feature of the Turing machine model is that it is the strongest model we have, which means that any other model of computation is at best equivalent to it. Parallel computation models in effect do extend the power of (sequential) Turing machines, but only in a linear relation with the number of processors. In other words, the Turing machine defines what we may regard as computable and establishes a measure of the complexity of a computation, in space and time. The awareness of the intrinsic limitations imposed by a precise mathematical notion of computability has, for example, led to regard the claims of artificial intelligence with some caution (see Rabin, 1974). However, the theoretical insight that a problem may in the worst case not be solved in finite time or space should not hinder us in looking for an optimal, approximate solution that is reachable with bounded resources. An equally important feature of the Turing machine model is that it gives us an illustration of what it means to program a computing device, that is to instruct the machine to perform actions dependent on its input and state. As an extension to the model, we can easily build a universal computing device, into which we may feed the description of some particular machine, in order to mimic the computation of that machine. Apparently, this gives us a more powerful machine. However, this has proven not to be the case. Neither does this universal device enlarge the class of computable problems, nor does it affect in any significant sense the computational complexity of what we know to be computable. See slide 2-devices. \slide{2-devices}{Computing devices}{

Computing devices

Object-oriented programming does not enlarge the class of computable problems, nor does it reduce the computational complexity of the problems we can handle. } } Interestingly, there is an extension of the (basic and universal) Turing machine model that allows us to extend the narrow boundaries imposed by a mathematical characterization of computability. This extension is known as an oracle machine, and as the name suggests, the solution to an (otherwise) intractable problem must come from some external source, be it human, machine-like or divine (which is unlikely). Partly, this explains why intelligent systems (such as automatic translation systems) are, to a certain extent, intrinsically interactive, since only the human user can provide the (oracle) information needed to arrive at a solution. Our model of a computing device does quite precisely delimit the domain of computable problems, and gives us an indication of what we can expect the machine to do for us, and what not. Also, it illustrates what means we have available to program such a device, in order to let it act in the way we want. Historically, the Turing machine model may be regarded as a mathematical description of what is called the Von Neumann machine architecture, on which most of our present day computers are based. The Von Neumann machine consists of a memory and a processor that fetches data from the memory, does some computation and stores the data back in memory. This architecture has been heavily criticized, but no other model has yet taken its place. This criticism has been motivated strongly by its influence on the practice of programming. Traditionally, programs for the Von Neumann architecture are conceived as sequences of instructions that may modify the state of the machine. In opposition to this limited, machine oriented view of programming a number of proposals have been made that intended to arrive at a more abstract notion of programming, where the machine is truly at the service of the programmer and not the other way around. One of these proposals to arrive at a more abstract notion of programming is advocated as the object-oriented approach. Before studying the intrinsics of the object-oriented approach, however, it may be useful to reflect on what we may expect from it. Do we hope to be able to solve more problems, or to solve known problems better? In other words, what precisely is the contribution of an object-oriented approach? Based on the characterization of a computing device, some answers are quite straightforward. We cannot expect to be able to solve more problems, nor can we expect to reduce the computational complexity of the problems that we can solve. What an object-oriented approach can contribute to, however, is simply in providing better means with which to program the machine. Better means, to reduce the chance of (human) errors, better means, also, to manage the complexity of the task of programming (but not to reduce the computational complexity of the problem itself). In other words, by providing abstractions that are less machine oriented and more human oriented, we may enlarge the class of problems that we can tackle in the reality of software engineering. However, we simply cannot expect that an object-oriented approach may in any sense enlarge our notion of what is computable.