Programación Orientada a Objetos en Java

La programación orientada a objetos (POO) es un paradigma de programación que usa objetos para crear aplicaciones. Está basada en tres pilares fundamentales: herencia, polimorfismo, encapsulación. Su uso se popularizó a principios de la década de 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos, entre ellos Java.

VENTAJAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS

  • Fomenta la reutilización y ampliación del código.
  • Permite crear sistemas más complejos.
  • La programación se asemeja al mundo real.
  • Agiliza el desarrollo de software.
  • Facilita el trabajo en equipo.

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.

Para entender este modelo vamos a revisar 2 conceptos fundamentales:

  • clases
  • objetos

LAS CLASES

En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono móvil es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto móvil es una instancia de una clase conocida como “móvil”. Los móviles tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.).

Cuando se fabrican los móviles, los fabricantes aprovechan el hecho de que los móviles comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos móviles del mismo modelo. A ese modelo o plantilla le llamamos clase, y a los equipos que sacamos a partir de ella la llamamos objetos.

Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo tipo y mismas características.

Definición teórica: La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares características.

Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una clase.

 

OBJETOS

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos.

Tomemos como ejemplo un ordenador. No necesitamos ser expertos para saber que un ordenador está compuesta internamente por varios componentes: placa base, procesador, disco duro, tarjeta de video, etc…

El trabajo en conjunto de todos estos componentes hace funcionar un ordenador, sin embargo no necesitamos saber cómo trabajan cada uno de estos componentes. Cada componente es una unidad autónoma, y todo lo que necesitamos saber es cómo interactúan entre sí los componentes, saber por ejemplo si el procesador y las memorias son compatibles con la placa base, o conocer donde se coloca la tarjeta de video. Cuando conocemos como interaccionan los componentes entre sí, podremos armar fácilmente un ordenador.

¿Que tiene que ver esto con la programación? La programacion orientada a objetos trabaja de esta manera. Todo el programa está construido en base a diferentes componentes (objetos), cada uno tiene un rol específico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas.

Todo objeto del mundo real tiene 2 componentes: variables de clase y métodos.

Por ejemplo, los automóviles pueden tener como variables de clase (marca, modelo, color, velocidad máxima, etc.) y como métodos (frenar, acelerar, retroceder, llenar combustible, cambiar llantas, etc.).

Los objetos de Software, al igual que los objetos del mundo real, también tienen variables de clase y métodos. Un objeto de software mantiene sus características en una o más “variables”, e implementa su comportamiento con “métodos”. Un método es una función o subrutina asociada a un objeto.

Imaginemos que tenemos aparcado en el garaje un Ford Focus color azul que corre hasta 260 km/h. Si pasamos ese objeto del mundo real al mundo del software, tendremos un objeto Automóvil con sus características predeterminadas:

Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Máxima = 260 km/h

Por lo tanto dentro de una clase tendremos como variables de clase las características descritas anteriormente y como métodos tendremos en este caso concreto (frenar, acelerar, retroceder, llenar combustible, etc…).

 

Vamos a ver un ejemplo práctico de como se hace esto en Java:

class Automovil {

   // VARIABLES DE CLASE
   private String marca;
   private String modelo;
   private String color;
   private String velocidadMaxima;

   // CONSTRUCTOR QUE INICIALIZA LAS VARIABLES DE CLASE
   public Automovil(String marca, String modelo, String color, String velocidadMaxima) {
      this.marca = marca;
      this.modelo = modelo;
      this.color = color;
      this.velocidadMaxima = velocidadMaxima;
   }

   // METODOS GETTER Y SETTER PARA PODER RECUPERAR O CAMBIAR
   // LOS DATOS DE LAS VARIABLES DE CLASE

   public String getMarca() {
      return marca;
   }

   public void setMarca(String marca) {
      this.marca = marca;
   }

   public String getModelo() {
      return modelo;
   }

   public void setModelo(String modelo) {
      this.modelo = modelo;
   }

   public String getColor() {
      return color;
   }

   public void setColor(String color) {
      this.color = color;
   }

   public String getVelocidadMaxima() {
      return velocidadMaxima;
   }

   public void setVelocidadMaxima(String velocidadMaxima) {
      this.velocidadMaxima = velocidadMaxima;
   }

}

OTROS CONCEPTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Encapsulación

La encapsulación consiste en unir en tener las variables de clase declaradas como private para evitar que cuando instanciemos un objeto podamos acceder a ellas (por seguridad). ¿Y entonces como accedemos a los valores de esas variables de clase? Mediante los métodos getter y setter que declaramos anteriormente.

Herencia

La herencia es uno de los conceptos más cruciales en la POO. La herencia consiste en que una clase puede heredar las variables y los métodos de otra clase (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.

Si partimos de la clase Automovil que creamos anteriormente podríamos crear clases hijas de Automovil, la cuales heredarán todo lo que contenga la clase Automovil.

¿Como se hereda en Java?

Para crear herencia se usa la palabra reservada extends:

class Coche extends Automovil {
    
    
}

Como puedes ver en este caso estamos haciendo que la clase Coche herede de la clase Automovil.

Polimorfismo

El polimorfismo es la habilidad de una función, método, variable u objeto de poseer varias formas distintas. Podríamos decir que un mismo identificador comparte varios significados diferentes.

El propósito del polimorfismo es implementar un estilo de programación llamado envío de mensajes en el que los objetos interactúan entre ellos mediante estos mensajes, que no son más que llamadas a distintas funciones.

Java tiene 4 grandes formas de polimorfismo:

  • Polimorfismo de asignación
  • Polimorfismo puro
  • Sobrecarga
  • Polimorfismo de inclusión

Estos conceptos los veremos en otra entrada!

Si te gusta Java y quieres seguir aprendiendo puedes apuntarte a algunos de nuestros cursos de Java:

Presencial: https://asociacionaepi.es/curso-programacion-java/

Presencial en aula virtual: https://asociacionaepi.es/curso-analista-programador-java-virtual/

Nos vemos pronto!!!

 

 

  • Share:
  1. Reply

    hola estoy interesado en aprender java pero quiero saber por donde empiezo ya que no se nada de ninguna de los lenguajes de programación, un amigo me indico que primero tendria que aprender a diseñar diagramas de flujos y estoy interesado en que me indicaran una pagina en que me pueda ilustrar bien acerca del tema y aplicarlo con java…

    1. Reply

      Hola Luis, un placer saludarte, lamento comunicarte que en AEPI no recomendamos sitios de terceras personas. Lo siento y un saludo

Deja un comentario

Your email address will not be published.

Enviar un mensaje




Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies
Call Now Button