Clase es la implantación de un tipo de objeto. Especifica la estructura de datos y los métodos operativos permitidos que se aplican a cada uno de sus objetos.
La clase especifíca la estructura de datos de cada uno de sus objetos y las operaciones que se utilizan para tener acceso a los objetos. La especificación de cómo se llevan a cabo las funciones de una clase se llama método. Los objetos se pueden utilizar exclusivamente con métodos específicos.
Una instancia de una clase, almacena sus datos dentro de él. Se tiene acceso a los datos y se les modifica sólo mediante operaciones permisibles. Esta restricción al acceso se debe al encapsulado. El encapsulado protege los datos del uso arbitrario o no permitido. El acceso o la actualización directa de los datos de un objeto por parte del usuario violaría el encapsulado.
Los usuarios observan el "comportamiento" del objeto en términos
de las operaciones que se pueden aplicar a los objetos, así como
los resultados de tales operaciones. Estas operaciones forman la interfaz
del objeto con sus usuarios.
Por ejemplo una operación asociada con la clase pedido podría ser aquella que calcule el total del pedido. El método especificaría la forma de calcular el total. Para esto, el método podría obtener el precio de cada artículo del pedido al enviar una solicitud a los objetos artículo asociados. A su vez, cada objeto artículo regresaría su precio al método pedido mediante un método de la clase artículo.
Los métodos de una clase controlan solamente a los objetos de
esa clase. No pueden tener acceso directo a las estructuras de datos de
un objeto en una clase distinta. Para utilizar las estructuras de datos
en una clase diferente, deben enviar una solicitud a ese objeto.
La herencia de clase hace que la estructura de datos y operaciones sean
disponibles para su reutilización por parte de sus subclases. La
herencia de las operaciones de una superclase permite que las clases compartan
código. La herencia de la estructura de datos permite la reutilización
de la estructura.
Por ejemplo supóngase que existe un tipo de objeto cuenta, que
tiene como subtipos a los tipos de objetos cuenta de cliente y cuenta vencida.
A su vez, cuenta de cliente tiene como a subtipo a cuenta de cliente vencida
y cuenta vencida tambien tiene como subtipo a cuenta de cliente vencida.
En ese caso, el mecanismo de selección buscará la operación en su superclase y en todas las superclases de la jerarquía hasta que lo encuentre, nivel por nivel. Si la encuentra, selecciona la operación. Si la operación no se encuentra en ningún nivel de la superclase, se considera inválida la fuente de la solicitud.
De esta forma, los usuarios sólo deben especificar lo que se
debe hacer, dejando que sea el mecanismo de selección el que determine
la forma de localizar la operación y la ejecute. El mecanismo de
selección deja en manos de la aplicación OO el problema de
localizar la operación y la ejecute.
Esta necesidad, se da generalmente entre superclases y subclases, donde una subclase es una especialización de su superclase, y puede requerir alcanzar los mismos objetivos, pero con distintos mecanismos. Por ejemplo, una superclase rectángulo podría tener una operación área cuyo objetivo es calcular el área del rectángulo, definida como la multiplicación de los largos de dos lados contiguos. A su vez, la clase cuadrado es una subclase de rectángulo que también tiene una operación área cuyo objetivo es calcular el área del cuadrado, pero que está definida especialmente para los objetos del tipo cuadrado como la multiplicación del largo de uno de sus lados por si mismo.
El fenómeno recién descrito se conoce como polimorfismo, y se aplica a una operación que adopta varias formas de implantación segun el tipo de objeto, pero cumple siempre el mismo objetivo.
Una de las ventajas del polimorfismo es que se puede hacer una solicitud de una operación sin conocer el método que debe ser llamado. Estos detalles de la implantación quedan ocultos para el usuario; la responsabilidad descansa en el mecanismo de selección de la implantación OO.

