22. Java: programación orientada a objetos
Programación orienta a objetos (POO)
Java es un lenguaje de programación orientado a objetos.Es cierto que JavaScript es también a día de hoy un lenguaje de programación orientado a objetos aunque si lo que estamos haciendo con JavaScript es tan sólo manipular o hacer interactivo nuestro documento HTML, no vamos a hacer uso (en la mayoría de los casos) de las caracteristicas en las que se basa la POO (herencia, encapsulación, etc.) ni definir clases para crear objetos.
En el caso Java, por lo general, sí se hace un uso constante de aquellas caracteristicas que caracterizan la POO como puede ser la creación de clases, la herencia, etc.
En JS vimos el tipo de dato objeto. En particular, vimos que el llamado DOM de JavaScript está compuesto de datos en forma de objeto.
En el caso de Java, es la aplicación misma la que vamos a descomponer en forma de objetos. (https://en.wikipedia.org/wiki/Component-based_software_engineering" < - El "divide y vencerás" de la ingenería del software).
En el caso de Java, para poder crear una objeto, es necesario previamente definir una plantilla o estructura llamada "CLASE" (class).
Las clases, es necesario definirlas. Cuando definimos una clase, se suelen crear en su interior 2 tipos de elementos:
- Los atributos o propiedades del futuro objeto (título, páginas, etc, en el caso de un objeto "libro"). Almacenan los datos del objeto.
- Y una serie de funciones, o mejor dicho, métodos. Representan comportamientos del objeto. En muchos casos los métodos permiten cambiar el estado de los atributos del objeto.
Veamos un ejemplo de definición de clase:
En este ejemplo de clase, hemos definido la clase "Dog". Vemos que en su interior se han definido los 2 tipos de elementos que acabamos de mencionar (atributos y métodos). En el caso de la clase "Dog", son estos:
- Atributos o propiedades: "numberOfLegs" y "hasOwner".
- Métodos: Dog(), bark() y move().
Dog perro;
perro = new Dog();
En la primera de las anteriores sentencias, hemos creado una variable llamada "perro" de la clase "Dog". En la segunda setencia hemos creado un objeto de la clase "Dog" y lo hemos asignado a la variable "perro". Cuando creamos un objeto a partir de una clase usamos la expresión "hemos creado una instancia del clase X". Cuando creamos un objeto estamos reservando espacio en memoría.
Otro ejemplo de objeto: el objeto ventana tendrá:
- Un atributo "estado", que podrá tener como valor, "abierto" o "cerrado".
- Dos métodos: abrir() y cerrar() que permitan cambiar el valor del atributo "estado".
Descomponer una aplicación informática en objetos no es tarea fácil en muchos de los casos. En dicha tarea, nuestra experiencia será un factor fundamental para lleva a buen puerto nuestra descomposición. Otro factor del que dependerá la complejidad de dicha descomposición, será la complejidad del "software" que estemos creando: no es igual de complejo distinguir cuales serán los objetos de una aplicación informática para gestionar algo tan cercano a nosotros como pueda ser un hospital, como distinguir los objetos que tiene una API como la de Android.
La descomposición de una aplicación en objetos es considerada por algunas persona como un arte.
Acceder a los atributos y los métodos
Para acceder/llamar a los atributos/métodos de un objeto tendremos que usar el punto(.). Por ejemplo, una vez que hemos creado el objeto "perro", podemos llamar por ejemplo a su método "move()":Dog perro = new Dog();
perro.move();
Es incorrecto, pero "digamos" que para acceder al atributo "numberOfLegs" habría que escribir los siguiente:
Dog perro = new Dog();
perro.numberOfLegs = 4;
Elementos en el interior de una clase: el constructor
Las clases pueden contener el llamado método "constructor". Por ejemplo, en la clase "Dog", el constructor aparece debajo de la definición del atributo "hasOwner", o sea, es este:public Dog() {
numberOfLegs = 4;
hasOwner = false;
}
Como se puede apreciar, en su interior hemos asignado valores para los dos atributos que contiene la clase (numberOfLegs y hasOwner).
Sin saberlo, en nuestro código anterior (new Dog()), hemos realizado una llamada al constructor que acabamos de mencionar. Es decir, en realidad, cuando creamos un objeto "Dog", lo que estamos haciendo es llamar al método constructor.
En general el método "constructor" realiza en su interior la inicialización de los atributos de un objeto. En este caso, el constructor inicializa a "4" el atributo "numberOfLegs" y a "false" el atributo "hasOwner".
También es posible inicializar los atributos de manera dinámica, es decir. en el anterior ejemplo, cada vez que creamos un objeto "Dog", sus atributos se inicializan siempre con los mismo valores. Pero es posible inicializar los atributos de manera dinámica. Por ejemplo, veamos la definición de la siguiente clase:
En esta clase "Lugar" hay un constructor, pero a diferencia del constructor de "Dog", entre parentesis podemos ver escrito esto:
(String nombre, String direccion, double longitud....
Como podemo deducir, en este caso, el constructor tiene definidos una serie de parametros. En el cuerpo del constructor hay una serie de sentencias, por ejemplo:
this.nombre = nombre;
En este caso, dicha sentencia asigna el valor del parametro "nombre" pasado en el constructor, al valor del atributo "nombre". Es decir, en la siguiente linea:
new Lugar("Escuela Politécnica Superior de Gandía", "C/ Paranimf, 1 46730 Gandia (SPAIN)", -0.166093, 38.995656, 962849300, "http://www.epsg.upv.es", "Uno de los mejores lugares para formarse.", 3);
creamos un objeto "Lugar" asignandole valores a todos sus atributos.
Declaración de variables
Para declarar variables en Java es necesario añadir el nombre del tipo de variable que vamos a crear. Por ejemplo:int i = 0;
Tipos simples o primitivos
A diferencia de otros lenguajes, como en JavaScript, no aparece la palabra "var", sino el nombre del tipo de variable que vamos a crear.Ejem:
int a = 0; // variable de tipo entero inicializada a 0.
String b = "hola"; //cadena de caracteres inicializada "hola"
En la siguiente lista aparecen los tipos de datos soportados en Java:
De la lista anterior, los siguientes tipos de datos sirven para almacenar números enteros:
- byte
- short
- int
- long
Los siguiente para almacenar número decimales (o en coma flotante):
- double
- float
El siguiente para almacenar datos booleanos (true o false) :
- boolean
- char
En la parte derecha de la tabla anterior podemos ver una columna que se llama "envolvente". Es decir, cada uno de los tipos primitivos cuenta con una clase Java. Estas clases cuentan con métodos que nos pueden ser útiles.
Cadenas de caracteres
Si queremos crear un cadena de caracteres usaremos la clase String.Ejemplo:
String a = "hola";
String s = new String("hola");//las 2 sentencias son equivalentes
A continuación aparecen los métodos de la clase String:
Comentarios
Publicar un comentario