¡Esta es una revisión vieja del documento!


08 - Programación Orientada a Objetos

La Programación Orientada a Objetos (POO) es un paradigma de la programación donde se organiza el código en unidades denominadas clases que contienen propiedades (o atributos) y métodos.

En realidad, al ser Java un lenguaje totalmente orientado a objetos, ya hemos utilizado este paradigma desde el principio. Fíjate en la primera línea del código de nuestra primera aplicación:

public class holaMundo {

    public static void main(String[] args) {
        System.out.println("Hola mundo");
    }
}

Lo primero que hacemos es definir una clase llamada holaMundo mediante la palabra reservada class (más adelante veremos lo que significa public). La idea es encapsular (esconder) el código de nuestra aplicación en clases y que estas se comuniquen entre sí mediante métodos.

Piensa, por ejemplo, en una televisión. Podemos interactuar con ella a través de ciertos métodos definidos (encender o apagar la TV, subir o bajar el volumen, cambiar de canal…), pero no podemos ver como funcionan esos procesos internamente (los circuitos electrónicos que permiten ejecutar esos procesos están ocultos). La POO funciona de forma parecida. Escondemos los detalles de implementación de nuestras clases y creamos métodos para que las clases puedan interactuar entre ellas.

Cuando hablamos de POO, existen una serie de características que se deben cumplir. Las características más importantes de la POO son:

  • Abstracción: Es el proceso por el cual definimos las características más importantes de un objeto, sin preocuparnos de cómo se escribirán en el código del programa. En la POO la herramienta más importante para soportar la abstracción es la clase. Básicamente, una clase es un tipo de dato que agrupa las características comunes de un conjunto de objetos. Por ejemplo, si pensamos en una clase Vehículo que agrupa las características comunes de todos ellos, a partir de dicha clase podríamos crear objetos como Coche y Camión . Entonces se dice que Vehículo es una abstracción de Coche y de Camión.
  • Modularidad: Una vez que hemos representado el escenario del problema en nuestra aplicación, tenemos como resultado un conjunto de objetos software a utilizar. Este conjunto de objetos se crean a partir de una o varias clases. Cada clase se encuentra, normalmente, en un archivo diferente, por lo que la modularidad nos permite modificar las características de la clase que define un objeto, sin que esto afecte al resto de clases de la aplicación.
  • Encapsulación: También llamada ocultamiento de la información. La encapsulación o encapsulamiento es el mecanismo básico para ocultar la información de las partes internas de un objeto a los demás objetos de la aplicación. Con la encapsulación un objeto puede ocultar la información que contiene al mundo exterior, o bien restringir el acceso a la misma para evitar ser manipulado de forma inadecuada. Por ejemplo, pensemos en un programa con dos objetos, un objeto Persona y otro Coche . Persona comunica con el objeto Coche para llegar a su destino, utilizando para ello las acciones que Coche tenga definidas como por ejemplo conducir. Es decir, Persona utiliza Coche pero no sabe cómo funciona internamente, sólo sabe utilizar sus métodos o acciones.
  • Jerarquía: Mediante esta propiedad podemos definir relaciones de jerarquías entre clases y objetos. Las dos jerarquías más importantes son la jerarquía es un llamada generalización o especialización y la jerarquía es parte de, llamada composición o agregación. Conviene detallar algunos aspectos: La generalización o especialización, también conocida como herencia, permite crear una clase nueva en términos de una clase ya existente (herencia simple) o de varias clases ya existentes (herencia múltiple). Por ejemplo, podemos crear la clase CochedeCarreras a partir de la clase Coche , y así sólo tendremos que definir las nuevas características que tenga. La composición, permite agrupar objetos relacionados entre sí dentro de una clase. Así, un Coche está formado por Motor , Ruedas , Frenos y Ventanas.
  • Polimorfismo: Esta propiedad indica la capacidad de que varias clases creadas a partir de una antecesora realicen una misma acción de forma diferente. Por ejemplo, pensemos en la clase Animal y la acción de expresarse. Nos encontramos que cada tipo de Animal puede hacerlo de manera distinta, los Perros ladran, los Gatos maullan, las Personas hablamos, etc. Dicho de otra manera, el polimorfismo indica la posibilidad de tomar un objeto (de tipo Animal , por ejemplo), e indicarle que realice la acción de expresarse. Esta acción será diferente según el tipo de animal del que se trate.

Como hemos visto, las clases son las definiciones generales de los objetos de nuestra aplicación. Por ejemplo, podemos definir una clase TV que contendrá los métodos (encender, apagar, subir volumen…) y atributos (canal, volumen…) que van a contener todos los objetos creados a partir de ella, pero no se refiere a ninguna TV en concreto. Cuando instanciamos una clase (creamos una instancia de ella), creamos un objeto. En nuestro caso, una TV en concreto. Por ejemplo, podemos crear un objeto TV Samsung QLed 4k QN85A derivado de la clase TV.

Los objetos tienen unas características fundamentales que los distinguen:

  • Identidad: Es la característica que permite diferenciar un objeto de otro. De esta manera, aunque dos objetos sean exactamente iguales en sus atributos, son distintos entre sí. Puede ser una dirección de memoria, el nombre del objeto o cualquier otro elemento que utilice el lenguaje para distinguirlos. Por ejemplo, dos vehículos que hayan salido de la misma cadena de fabricación y sean iguales aparentemente, son distintos porque tienen un código que los identifica.
  • Estado: El estado de un objeto viene determinado por una serie de parámetros o atributos que lo describen, y los valores de éstos. Por ejemplo, si tenemos un objeto Coche , el estado estaría definido por atributos como Marca, Modelo, Color, Cilindrada, etc.
  • Comportamiento. Son las acciones que se pueden realizar sobre el objeto. En otras palabras, son los métodos o procedimientos que realiza el objeto. Siguiendo con el ejemplo del objeto Coche, el el comportamiento serían acciones como: arrancar(), parar(), acelerar(), frenar(), etc.

En otras palabras, una clase es una plantilla o prototipo donde se especifican:

  • Los atributos comunes a todos los objetos de la clase.
  • Los métodos que pueden utilizarse para manejar esos objetos.

Si existe una clase, podemos crear objetos en nuestro programa a partir de esas clases.

Cuando creamos un objeto a partir de una clase se dice que hemos creado una instancia de la clase. A efectos prácticos, objeto e instancia de clase son términos similares. Es decir, nos referimos a objetos como instancias cuando queremos hacer hincapié que son de una clase particular.

Los objetos se crean a partir de las clases, y representan casos individuales de éstas.

Por ejemplo, cuando vimos los tipos de datos en Java, hablamos del tipo String, que no es un tipo de dato primitivo. En realidad, String es una clase predefinida de Java que define el comportamiento de todas las cadenas de texto en Java. Cuando creamos una variable de tipo String, estamos creando un objeto (instancia) de esa clase:

public class ClaseString {
    
    public static void main(String[] args) {
        String mensaje;
        
        mensaje = "Hola mundo";
        System.out.println(mensaje.length());
    }
}

En el ejemplo anterior, creamos un objeto llamado mensaje que pertenece a la clase String. Una vez creado, podemos utilizar los métodos definidos en la clase String, como length().

  • clase/daw/prog/2eval/poo_clases.1657178106.txt.gz
  • Última modificación: 2022/07/07 09:15
  • por cesguiro