3.1 Overview of Object-Oriented Software Design

The PDP++ software is based on the principles of object-oriented software design. The effects of this are pervasive, and an understanding of these basic principles can help the user to understand the software better.

First of all, everything in the software is an object: units, connections, layers, networks, etc. While this sounds intuitive for these kinds of objects, other kinds of objects, like the object that controls the way a network is viewed, or the ones that control the way the network is trained, are somewhat less intuitive. However, if you just think of an object as representing some discrete piece or aspect of the software, it makes more sense. Essentially the PDP++ software is just a big collection of objects that work together to let you get things done.

The primary advantage of an object-oriented design is its flexibility. Because the functionality is broken up into object-sized pieces, these pieces can be combined in many different ways to accomplish many different tasks. However, this power comes at the price of simplicity---since everything is accomplished by the interactions between multiple objects, setting things up to perform any given task requires knowing which objects to use and how to configure them. The very distributed nature of the processing makes it less easy to identify one single thing that needs to be operated on in order to do something. Its like the difference between a neural network and a conventional computer program, in some sense. In a computer program, things proceed in a relatively linear, straightforward fashion from one step to the next, whereas in a neural network, processing is distributed among many different units that all work together to get something done.

While the tradeoff between flexibility and simplicity is inevitable to a certain extent, we have endeavored to make the commonly-used tasks simpler by including menus or buttons that do all of the right things in one simple step. However, as you become a more advanced user and want to perform tasks that have not been "pre-compiled" in this way, expect to encounter some of the difficulties associated with object-oriented software.