Now, let's revisit the same two types of object—a student and a course—and talk about these objects' respective behaviors. A student's behaviors (relevant to academic matters, that is!) might include
Enrolling in a course
Dropping a course
Choosing a major field of study
Telling you his or her GPA
Telling you whether or not he or she has taken a particular course, and if so, when the course was taken, which professor taught it, and what grade the student received
It's a bit harder to think of an inanimate, conceptual object like a course as having behaviors, but if we were to imagine a course to be a living thing, then we can imagine that a course's behaviors might include
Permitting a student to register
Determining whether or not a given student is already registered
Telling you how many students have registered so far, or conversely, how many seats remain before the course is full
Telling you what its prerequisite courses are
Telling you how many credit hours it's worth
Telling you which professor is assigned to teach the course this semester
and so on.
When we talk about software objects specifically, we define an object's behaviors, also known as its operations, as both the things that an object does to access its attributes (data), and the things that an object does to modify/maintain its attribute values (data).
If we take a moment to reflect back on the behaviors we expect of a student as listed previously, we see that each operation involves one or more of the student's attributes. For example:
Telling you his or her GPA involves accessing the value of the student's "GPA" attribute.
Choosing a major field of study involves modifying the value of the student's "major" attribute.
Enrolling in a course involves modifying the value of the student's "course load" attribute.
Since we recently learned that the collective set of attribute values for an object defines its state, we now can see that operations are capable of changing an object's state. Let's say that we define the state of a student who hasn't yet selected a major field of study as an "undeclared" student. Asking such a student object to perform its "choosing a major field of study" method will cause that object to update the value of its "major field of study" attribute to reflect the newly selected major field. This, then, changes the student's state from "undeclared" to "declared".
Yet another way to think of an object's operations are as services that can be requested of the object. For example, one service that we might call upon a course object to perform is to provide us with a list of all of the students who are currently registered for the course (i.e., a student roster).
When we actually get around to programming an object in a language like C#, we refer to the programming language representation of an operation as a method, whereas, strictly speaking, the term "operation" is typically used to refer to a behavior conceptually.