|
Comp201: Principles of Object-Oriented Programming I
|
The little dragon shown in class can be found at the web site of the Grand Illusions Toy Shop in England:
Summary: An introduction to the concepts of objects and classes
In an object-oriented software system, objects are entities used to represent or model a particular piece of the system.
Objects are the primary units used create abstract models.
There are a number of schools of object-oriented programming, which differ slightly on how they view objects. Here, we will take a "behaviorist" (our term) stance:
Essentially this defines an object by the way it interacts with its world. An object that does not interact with anything else effectively does not exist. Access to internally stored data is necessarily through some sort of defined behavior of the object. It is impossible for an outside entity to truly "know" whether or not a particular piece of data is being stored inside of another object.An object is characterized solely by it behaviors.
This does not mean however, that an object may not contain data (information) in fields. The essence of the object is in how the object behaves in relationship to or as a result of its data, should it contain any. The existence of data in an object is an implementation technique used to generate the required behavior of that object. Objects are not "bags of data".
Many objects are similar in many overall, generalized ways, differing only in smaller, more specific details. In biology and other fields, scientists organize objects into taxonomies, which are classification hierarchies used to express these similarities. For instance, a butterfly and a lobster are quite different, yet they share the common characteristics of all Arthropods, such as a jointed exoskeleton. The notion of an Arthropod enables us to understand and deal with butterflies and lobsters in an abstract, unified manner. So once again we are trying to express abstract equivalence.
Object-oriented systems use classes to express the above notions of abstract equivalence.
A class thus contain the descriptions of all the behaviors of the objects that it represents. In computer science parlance, we call the individual behaviors of a class its methods. In addition, a class may, but not always, contain descriptions of the internal data held by the objects, called its fields, as well as implementation details about its methods and fields.A class is an abstract description of a set of objects.
Turning the description around, we can say that a class is a template or recipe for the creation of a particular type of object. That is, one can use a class to create ("instantiate") objects of the type described by the class. Be careful not to make the very beginner's common mistake of equating classes and objects. A class is a specification of an set of objects, it is not the actual object.
In technical terms, a class defines a new type (See Lec02) in the system. Types are identifies used to differentiate different kinds of data. For instance, integers, characters, strings and arrays are all types of data.
class Pet {
}
class
above is called a
keyword and can only be used to state
that the following code is the definition of a class. The
class
keyword is immediately
followed by the desired name of the class,
Pet
here. The curly braces,
{...}
, indicate the extent of the
definition of the class. That is, any definitions of the class's
behaviors and data will be found between the curly braces. Curly
braces must therefore always appear as a matched set.In general, in Java, curly braces mark the extent of a definition.
Well, our class for pets is simple, but not very interesting because it doesn't do anything. We could say that our pet has a name, but personally, I have found that the behavior of most pets is not affected by the particular name we give them. That is, we can give our pet a name but that doesn't change the way they behave. Let's try something else.
Pets eat a certain amount of food per day. Pets have a certain weight. Let's create a model, that states that the number of hours that a pet sleeps per day is related to the amount of food they eat and their weight. Thus we could say that a pet has a behavior of sleeping a certain number of hours depending on its weight and the amount of food eaten.
/** * A class that models a household pet */ class Pet{ /** * The weight of the pet in lbs */ double weight; /** * The number of hours the pet will sleep after eating * the given lbs of food. * @param lbsOfFood The number of lbs of food eaten. * @return The number of hours slept after eating the food. */ double hoursSlept(double lbsOfFood) { return 24.0*lbsOfFood/weight; } }
But here's the crux of the issue: does your pet care how you are internally represented? Or does your pet just want something that is a person to be their owner?
/** * A class that models a household pet */ class Pet{ /** * The weight of the pet in lbs */ double weight; /** * The pet's owner */ Person owner; /** * The number of hours the pet will sleep after eating * the given lbs of food. * @param lbsOfFood The number of lbs of food eaten. * @return The number of hours slept after eating the food. */ double hoursSlept(double lbsOfFood) { return 24.0*lbsOfFood/weight; } /** * Determines whether or not this pet is happy to see a * particular person. * @param p The person who the pet sees. * @return true if the Person is their owner, false otherwise. */ boolean isHappyToSee(Person p) { return p == owner; } }
Person
,
which is a class used to represent people. It doesn't matter how
Person
is implemented, just that it
is a representation of a person.
We could use the class
definition of Person that we created in class the other day, or
perhaps one that is fixed up a little bit, or perhaps a
completely new one. The Pet doesn't care.Thus we see that objects can contain objects. What does this say about the possible complexity of a system of objects?
Download today's code:
Last Revised Thursday, 03-Jun-2010 09:50:14 CDT
©2006 Stephen Wong and Dung Nguyen