miércoles, 7 de abril de 2010

POO: clases y objetos

Hola. En este artículo vamos a hablar de clases y objetos, conceptos fundamentales de la programación orientada a objetos (denominada POO ó OOP si es inglés).

La programación imperativa se puede considerar como un subconjunto de la programación orientada a objetos. Así tendremos que distinguir entre:

  • Programación con un lenguaje orientado a objetos, que implica simplemente la utilización de clases y objetos como entidades útiles, pero no el aprovechamiento de las características implícitas en el paradigma de orientación a objetos, tales como herencia y polimorfismo.
  • Programación orientada a objetos, ó mas correctamente el desarrollo de software orientado a objetos implica un cambio de mentalidad desde el tradicional punto de vista funcional. Se ha de diseñar la formulación de la resolución de nuestro problema en términos de objetos y sus relaciones. Esto es, un programa escrito según el paradigma orientado a objetos consiste en una serie de objetos que interaccionan entre sí.
Los conceptos generales del paradigma orientado a objetos son el de objeto y el de clase.

OBJETO

Vamos a exponer el concepto de objeto estableciendo una analogía con los objetos físicos del mundo real. Imaginemos un objeto del mundo real tal como un coche. El coche tiene ciertas características:

- Color
- Peso
- Altura
- Anchura
- Posición
- Marca

Estas características definen el estado del coche, y la variación del alguna de estas características altera el estado del coche. Por otro lado el coche puede desplazarse hacia delante y hacia atrás, y puede girar a la derecha y a la izquierda. Estas "tareas" definen el comportamiento del coche. Con el estado y el comportamiento podemos conocer qué le pasa al coche en un instante determinado. Por tanto, cualquier objeto físico queda definido por su estado y comportamiento.

Si queremos simular el coche en un programa, necesitaremos datos (variables) para indicar su estado, y métodos que alteren esos datos para representar su comportamiento.

Estado -----------------------> Variables
Comportamiento -----------> Métodos

Las variables (o atributos) y métodos definidos establecen el estado y comportamiento que son relevantes. Qué datos y qué métodos vamos a usar depende del programa que vayamos a escribir. De hecho, son los requisitos del programa los que indican los datos y métodos necesarios.

El coche (objeto) es por tanto:

- un conjunto de características o propiedades.
- un conjunto de tareas o métodos (procedimientos).

Los programas suelen tener muchos objetos del mismo tipo, pero cada objeto en concreto es único. Para cada objeto, sus propiedades tendrán un valor y su comportamiento será uno dado. Dos objetos similares pueden tener distinto o el mismo valor de sus propiedades y el mismo posible comportamiento.

En un programa de simulación de carreras de coches habrá varios coches. Cada coche se representa como un objeto distinto, cada uno con sus propiedades (color, peso, posición, ...).

Resumiendo, los objetos son diferentes aunque sean del mismo tipo (tienen las mismas propiedades y el mismo comportamiento); cada uno tiene su identidad y su nombre.

Los objetos son las entidades en las que se basa un programa orientado a objetos. Estos objetos interaccionan (y el programa funciona) enviándose mensajes unos a otros que indican las tareas a realizar (son solicitudes de servicios, llamadas, invocaciones, a métodos). Los objetos software pueden manejar objetos abstractos (no tienen porque ser siempre físicos), tal como el control de errores.

Los objetos que tienen las mismas propiedades (aunque sus valores puedan ser distintos) y el mismo comportamiento se agrupan en categorías llamadas clases.


CLASE

Los objetos con las mismas propiedades y comportamiento tienen o son del mismo tipo.

El tipo de objeto define sus propiedades y su comportamiento.

Los objetos de un mismo tipo son elementos de un mismo conjunto. Dicho conjunto se denomina clase.

Cuando se hace un programa orientado a objetos lo que programamos es una clase y luego se crean tantos objetos de ella como se necesiten.

Para crear un objeto es necesario haber escrito previamente una definición de la clase del objeto. La clase es el "plano", el modelo, el patrón o plantilla para crear objetos. Es como el plano de un coche. El plano es único, pero a partir de él podemos crear coches diferentes, por ejemplo, con colores diferentes, más anchos ó menos largos.

Los atributos (datos) y procedimientos (métodos) de una clase se denominan miembros de la clase.

Una vez que hemos definido una clase podemos crear objetos de dicha clase. Se dice que creamos un ejemplar, una instancia de la clase.

Los objetos son instancias de una clase.

Cada objeto creado es único porque cada uno tiene su propio espacio de datos (estado), con diferentes valores, ocupando su propia zona de memoria.

En el siguiente ejemplo tenemos una clase "coche", y hemos instanciado 2 objetos, con mismas propiedades (que no valores de las propiedades) y comportamientos.

Saludos.

1 comentario:

  1. Aqui está el "quid" del tema. Es bastante fácil en principio pero yo lo que encuentro complicado es cuando intentas meter toda esta información en un entorno de wx.python ... donde todo se define mediante clases y se hace imposible pasar la información de un lado al otro.

    ResponderEliminar