3 de dic. de 2010

Programación orientada a objetos

La programación orientada a objetos se hiso famoso a principios de los años 90s, es un paradigma de programación que utiliza objetos y sus interacciones para realizar aplicaciones, se basa en técnicas como herencia, abstracción, polimorfismo y encapsulamiento.

Origen

Los conceptos de programación orientada a objetos tienen sus orígenes en Simula 67 un lenguaje diseñado para hacer simulaciones, aunque más tarde estos conceptos fueron refinados en Smaltalk diseñado para ser un lenguaje dinámico en el cual los objetos se podían crear y modificar en tiempo de ejecución.

Fue a mediados de los años 80s cuando la programación orientada a objetos tomo una posición dominante en la programación, en gran parte gracias a C++, además por su característica de interfaces graficas de usuarios, en donde la programación orientada a objetos está muy bien adaptada.

¿Qué son los objetos?

Son entidades que se componen fundamentalmente de ESTADO(atributo), COMPORTAMIENTO(método) e IDENTIDAD.

Estado, el estado se compone de datos.

Comportamiento, se refiere principalmente a los métodos que tiene cada objeto, se puede decir que a las operaciones que se pueden hacer con él.

Identidad, se refiere a una propiedad del objeto que lo hace único, lo diferencia de los demás.

La comunicación entre los objetos se lleva a cabo mediante métodos, esta comunicación ayuda a cambiar el estado de los mismos objetos, esta característica es la que hace que los objetos sean indivisibles, es decir no se separa el estado y el comportamiento.

Los métodos y atributos están muy relacionados por la propiedad de conjunto, en esta propiedad se destaca que una clase necesita métodos para poder tratar los atributos que tiene.

Conceptos de POO

La programación orientada a objetos maneja conceptos muy diferentes a los demás lenguajes y es muy importante saber de que trata cada uno para entender la POO.

Clase: Es en donde se define las propiedades y comportamientos de los objetos.
Herencia: Por ejemplo se tiene una clase A y otra B en donde la clase A tiene definidos sus atributos y operaciones, la clase B puede utilizar estos mismos atributos y operaciones como si se hubieran declarado en ella, a esto es a lo que se le llama herencia.
Objeto: Es la entidad que se compone de atributos y comportamientos que reaccionan a eventos.
Método: Es lo que puede hacer un objeto, puede cambiar las propiedades del objeto o generar eventos.

Características de POO

Abstracción
Se refiere a las características y comportamientos de los objetos, por ejemplo al decir que tenemos una clase a la que llamamos perro, se pueden obtener características y comportamientos que podría tener cualquier perro por ejemplo patas, pelo, cola, y entre los comportamientos ladrar, morder, comer.

Encapsulamiento
Consiste en unir en la clase las variables y métodos, esto quiere decir tener todo en una sola entidad. La utilidad del encapsulamiento se debe a que facilita el uso de clases, es decir se puede utilizar alguna clase compleja, pero para usarla no necesitamos saber cómo es que lo hace sino más bien que lo haga, el encapsulamiento permite utilizar una clase sin saber cómo es que hace su función.

Ocultamiento
Ocultamiento es la capacidad de la clase para ocultar los detalles internos de la clase y mostrar solo los útiles para el sistema. Permite controlar y restringir el uso de la clase, controlar porque se pueden modificar los estados de la clase y restringir porque la clase tendrá cierto comportamiento al que otra clase no podrá entrar.

Polimorfismo
Esto quiere decir que se pueden tener diferentes objetos, con distintos comportamientos pero que comparten el mismo nombre.

Recolección de basura
Se refiere a que el programador no debe de preocuparse por asignar o liberar memoria ya que el entorno decidirá cuando se cree un objeto en asignar la memoria o cuando ya no se utiliza en liberarla.

Programa ejemplo en lenguaje JAVA, en el que se muestra la herencia:
public class Mamifero{
    private int patas;
    private String nombre;
    public void imprimirPatas(){
      JOptionPane.showMessageDialog(null," Tiene " + patas +
      "patas\n","Mamifero",JOptionPane.INFORMATION_MESSAGE);
    }
    public Mamifero(String nombre, int patas){
      this.nombre = nombre;
      this.patas = patas;
    }
  }
 
  public class Perro extends Mamifero {
    public Perro(String nombre){
      super(nombre, 4);
    }
  }
 
  public class Gato extends Mamifero {
    public Gato(String nombre){
      super(nombre, 4);
    }
  }
 
  public class CrearPerro {
    public static void main(String [] args) {
      Perro perrito = new Perro("Canelita");
      perrito.imprimirPatas();
    }
  }

UML

El modelamiento visual es muy importante en el análisis Orientado a objetos. El Lenguaje de Modelamiento Unificado (UML), tiene como fin modelar cualquier tipo de sistema utilizando los conceptos de orientación a objetos, este lenguaje es entendible para máquinas y humanos.

El UML tiene elementos y diagramas que permiten modelar los sistemas orientados a objetos, este modelamiento es flexible al cambio y es posible crear componentes plenamente reutilizables.
Racional Rose es uno de los programas más conocidos para este fin, también existe otro llamado Poseidon que permite su uso libremente.

Lenguajes orientados a objetos:

Java
PHP5
C++
Ruby
Pascal
Delphi
Python

Referencias: Ejemplo de herencia | Java | Programación orientada a objetos

1 comentario: