tags:

views:

243

answers:

9

I've had trouble finding a clear, concise laymans definition of a class. Usually, they give general ideas without specifically spelling it out, and I'm wondering if I'm understanding this correctly. As I understand it, a class is the set of code that controls an object. For example, in an app that has a button for 'Yes' and a button for 'No', and a text box for output, the code that tells the computer what to do when the user uses the Yes button is one class, the code for hitting No is another class, and an object is the two buttons and what they do together to influence the output box. Am I right, or am I confusing terms here?

Thanks

+1  A: 

A class is basically a way to organize your code.

It allows you to put all of the code related to one abstraction (think "concept" or "idea") in one place.

As an example - in your example of an app, the Window with the two buttons, a text box, and some code for handling what happens when the user types in the information may be organized into a single class: something like "PromptWindow". This class would be made up of multiple classes internally (two buttons, a textbox, etc) This would probably be used by some separate class, which would create an instance of the PromptWindow class, call a method on the class to show the window, then use the results.

Reed Copsey
A: 

In a language agnostic fasion, I would describe a class as being an object that contains related information.

A person class would have methods like Talk(), Walk(), Eat(); and attributes like Height, Color, Language, etc.

A class is like a blueprint of things that you can instantiate, and also procedures that are related to each other.

If you have a Database class, you might have many methods related to databases that do all sorts of voodoo with a database.

Serg
I think you if start off describing a class as an object of any kind you might just confuse the OP more than he already is.
Larry Lustig
I didn't mean object in a programming sense, but in a real world sense. I guess I'll edit it to "thingamajig". :P
Serg
+2  A: 

In object-oriented programming, a class is a type for objects. An object is a bundle of data together with functionality that can operate in the context of that data; the definition of what the object is and does when it is first created is determined by its class.

Like a type for data, the class of an object specifies what is common to all instances of that class. Instances, which are the objects themselves, then get to override that common baseline (otherwise there's not much point having distinct instances). In many OO systems, instances may or may not have new members that are not part of the class definition.

What that means in the context of a specific object-oriented language is going to differ from language to language. But if you think of classes as types, and build on that, you won't go far wrong.

bignose
Note that this definition implies the important point that every object which is of the type of the class has all the same members as the class.
John Saunders
If one wanted to be nit-picky, one might observe that in object systems based on generic functions (like CLOS), a class doesn't contain methods. :-)
Ken
John: good point, I've expanded on that in the answer.
bignose
+2  A: 

This is going to be a very simplified explanation. A class is a set of functions and variables and is used to create objects. I think it's good to use real examples instead of dog / bark / talk etc.

  • Class Email
    • Subject (string)
    • Message (string)
    • ToAddress (string)
    • FromAddress (string)
    • Send (function)

When you call 'new Email()' it creates a new object with those variables and functions. Then you can populate the variables and send it.

Shawn Simon
And so for example, a button that creates an email will call this class, and create an object that has those five variables?So an object isn't something thats actually in the coding, its created by the use of classes?
Matt
yes exactly... calling new <class name> creates an object of that class
Shawn Simon
A: 

A class is a bunch of code that defines an entity in your application. There may be many such entities, but the behaviour of each is the same, as defined by the class. The class will typically define fields, whose contents are local to the instances (or objects) of that class. It is these fields that provide the objects with state and make them distinguishable from one another.

To use your example, there might be a Button class that defines what a button is in your application. This class would then be instantiated twice to provide two objects: one for the "No" button and another for the "Yes" button. The Button class could have a Text field/property that defines what text it contains – this could be set to "No" and "Yes" on the appropriate Button instances to give them their different appearances.

As for the click behaviour of the buttons, this would typically be implemented via the observer pattern, in which the subject class (Button in this case) maintains a list of separate "observer" objects which it notifies whenever some event occurs (i.e. when the button is clicked).

Will Vousden
A: 

From the definition of Class at Wikipedia:

In object-oriented programming, a class is a construct that is used as a blueprint (or template) to create objects of that class. This blueprint describes the state and behavior that the objects of the class all share. An object of a given class is called an instance of the class. The class that contains (and was used to create) that instance can be considered as the type of that object, e.g. an object instance of the "Fruit" class would be of the type "Fruit".

A class usually represents a noun, such as a person, place or (possibly quite abstract) thing - it is a model of a concept within a computer program. Fundamentally, it encapsulates the state and behavior of the concept it represents. It encapsulates state through data placeholders called attributes (or member variables or instance variables); it encapsulates behavior through reusable sections of code called methods.

Your understanding of a Class isn't at all incorrect but to make things clear consider the following...

The Yes and No buttons plus the TextBox are usually specified within a class taking for example code written in C# (Microsoft .NET Framework). Let's name this class MyClass.

The actions the buttons cause are handled by what are called handlers (methods). You could write your code in such a way that when you click the Yes button something gets written in the TextBox.

To instantiate MyClass you'd do the following:

MyClass myClass = new MyClass();

myClass.ButtonYes += new EventHandler(YourMethodForYes);
myClass.ButtonNo += new EventHandler(YourMethodForNo);

myClass.TextBox.Text = "Yes button was clicked";

Hope you get the idea.

I wrote usually above because this cenario you described could be implemented in a number of ways. OOP gives you plenty of ways to accomplish the same task.

Besides the definition of Class I think that reading about Object Oriented Programming (OOP) can help you a lot to understand it even more. Take a look at Fundamental Concepts.

Leniel Macaferi
+13  A: 

A class is a kind of thing, an object is an actual thing. So, in the real world, "person" is a class, you and I are objects (or instances) of that class. "Car" is a class, my 1996 beater Volvo station wagon is an object.

Objects all have certain similarities in form and function because of the class they belong to. When I say my station wagon is a "car", you have a pretty good idea of what it looks like, what it's used for, and what it can do. But objects of a class can also differ from each other. Just because something's a car doesn't tell you exactly what shape it is or how many seats it has or what color it is.

In the example you gave, it's likely that the yes and no buttons are both objects of the class "button" (or some similar name) and that the differences in their behavior are due to changes added by the programmer without his or her bothering to create a new class. However, it is possible that the programmer made the decision to make each type of button a subclass of the original class "button".

What's a subclass? Well, if you think of "car" as a class, it is obvious that there are several intermediate "kinds" of things between "car" and "Larry's 1996 beater Volvo station wagon". These could be "station wagon" and "Volvo station wagon". So my car would be an instance of "Volvo station wagon" which itself would be subclass of "station wagon" which would be a subclass of "car". From the "car" part, we know a good deal about my object, from the "station wagon" part we learn a little more, and from the "Volvo station wagon" a little more still.

The way in which classes and subclasses are arranged is a decision made by the programmer. In my example above, another programmer might have made the classes "car", "Volvos", "pre-Ford", and "Wagons". It depends on the problem you're trying to solve.

Larry Lustig
A: 

You should look at some sample code, in your language of choice. Just reading about the concept of classes will not answer many questions.

For example, I could tell you that a class is a "blueprint" for an object. Using this class, you can instantiate multiple such objects, each one of them (potentially) having unique attributes.

But you didn't understand a thing, now, did you? Your example with the buttons is very limited. Classes have nothing to do with user interfaces or actions or whatever. They define a way of programming, just like functions/methods/whatever you want to call them do.

So, to give a concrete example, here's a class that defines a ball, written in Python:

class Ball:
    color = ''
    def __init__(self, color):
        self.color = color
    def bounce(self):
        print "%s ball bounces" % self.color

blueBall = Ball("blue")
redBall = Ball("red")

blueBall.bounce()
redBall.bounce()

Running this produces the expected output:

blue ball bounces
red ball bounces

However, there is much more to classes than I described here. Once you understand what a class is, you go on to learn about constructors, destructors, inheritance and a lot of other good stuff. Break a leg :)

Felix
A: 

At the very basis, there's procedural code:

var a = 4
var b = 5;
print a + b;
… and so on, statements following statements…

To make such pieces of code reusable, you make a function out of them:

function a_plus_b() {
    var a = 4
    var b = 5;
    print a + b;
}

Now you can use that piece of code as often as you want, but you only had to write it once.

Usually an application depends on a certain way of how pieces of code and variables have to work together. This data needs to be processed by that function, but cannot be processed by that other function.

function foo(data) {
    …do something…
    return data;
}

function bar(data) {
    …do something else…
    return data;
}

a = "some data";
b = 123456;

a = foo(a);
b = bar(b);
c = bar(a); // ERROR, WRONG DATA FOR FUNCTION

To help group these related parts together, there are classes.

class A {
    var data = 'some data';
    function foo() {
        …do something…
        return data;
    }
}

The function foo now has a variable data that is "bundled" with it in the same class. It can operate on that variable without having to worry about that it may be the wrong kind of data. Also there's no way that data can accidentally end up in function bar, which is part of another class.

The only problem is, there's only one variable data here. The function is reusable, but it can only operate on one set of data. To solve this, you create objects (also called instances) from the class:

instance1 = new A();
instance2 = new A();

instance1 and instance2 both behave exactly like class A, they both know how to perform function foo (now called an instance method) and they both hold a variable data (now called an instance variable or attribute), but that variable data can hold different data for both instances.

That's the basics of classes and objects. How your particular "OK", "Cancel" dialog box is implemented is a different story. Both buttons could be linked to different methods of different classes, or just to different methods of the same class, or even to the same method of the same class. Classes are just a way to logically group code and data, how that's going to be used is up to you.

deceze