Before we talk about software objects, let's talk about real-world objects in general. According to Merriam-Webster's Collegiate Dictionary, an object is
(1) Something material that may be perceived by the senses; (2) something mental or physical toward which thought, feeling, or action is directed.
The first part of this definition refers to objects as we typically think of them: as physical "things" that we can see and touch, and which occupy space. Because we intend to use the Student Registration System (SRS) case study as the basis for learning about objects throughout this book, let's think of some examples of physical objects that make sense in the general context of an academic setting, namely
The students who attend classes
The professors who teach them
The furniture in these classrooms
The buildings in which the classrooms are located
The textbooks students use
and on and on. Of course, while all of these types of objects are commonly found on a typical college campus, not all of them are relevant to registering students for courses, nor are they all necessarily called out by the SRS case study, but we won't worry about that for the time being. In Part Two of this book, you'll learn a technique for using a requirements specification as the basis for identifying which types of objects are relevant to a particular abstraction.
Now, let's focus on the second half of the definition, particularly on the phrase "something mental … toward which thought, feeling, or action is directed." There are a great many conceptual objects that play important roles in an academic setting; some of these are
The courses that students attend
The departments that faculty work for
The degrees that students receive
and, of course, many others. Even though we can't see, hear, touch, taste, or smell them, conceptual objects are every bit as important as physical objects are in describing an abstraction.
Let's now get a bit more formal, and define a software object:
A (software) object is a software construct that bundles together state (data) and behavior (operations) that, taken together, represent an abstraction of a "real-world" (physical or conceptual) object.
Let's explore the two sides of objects—their state and behavior—separately, in more depth.