Logo Studenta

Leccion-5-Teoria-Clases

¡Este material tiene más páginas!

Vista previa del material en texto

JAVA BÁSICO 
 Página 1 Planes Gabriel 
 
Clases 
 En la programación orientada a objetos, aparecen por primera vez los conceptos de Clase y 
Objeto. Una clase es como una especie de patrón conceptual, mientras que un objeto es la 
materialización de dicho patrón. 
Imaginemos una clase llamada “Motocicleta”. Las motocicletas tienen características comunes 
que nos permiten distinguirlas como tales. Poseen dos ruedas, carecen de techo, tienen un 
manillar, un motor y una determinada cilindrada. Sera de alguna marca y tendrá un nombre de 
modelo. A este patrón, lo llamaremos “clase”. 
Sin embargo, motocicletas hay muchas. La mía, la de mi padre, la de mis amigos; todas con 
diferentes marcas, cilindradas y colores. A esta materialización del patrón le daremos el 
nombre de “objeto”. 
Clase puede haber solo una, pero objeto hay muchos. 
Para nuestro entendimiento tomaremos como ejemplo la clase “Producto”. Aunque los 
productos pueden variar el uno del otro, hay características compartidas entre todos ellos. 
Como puede ser un “código”, “descripción” y “precio”. 
A estas características las llamamos atributos. Y las podemos representar mediante variables. 
Las siguientes líneas definen la clase “Producto”. 
 
Como podemos observar el nombre de la clase “Producto”, va precedido por la palabra 
reservada class (clase). Y los atributos los declaramos de la misma manera que declaramos las 
variables, aunque encerrados entre llaves para indicar que forman parte de nuestra clase. 
Debemos destacar que una Clase en programación no es más que una simple representación 
de la realidad, por lo que solo definimos los atributos que son necesarios para resolver el 
problema que se nos plantea. 
Por otro lado, podemos tener una o más funciones que hagan uso de dichos atributos. Por 
ejemplo, una función que se encargue de leer y otra de escribir el precio del producto. 
 
 
 
JAVA BÁSICO 
 Página 2 Planes Gabriel 
 
Dichas funciones que están ligadas a los atributos también se definen dentro del ámbito de la 
clase a la que pertenecen. 
El código siguiente: 
 
Declara la clase “Producto” con dos funciones miembro: “fijarPrecio()” y “obtnerPrecio()”. Es 
importante observar que ambas funciones tienen visibilidad sobre los atributos de la clase, es 
decir, que pueden acceder de la misma manera que acceden a sus propios parámetros y 
variables. Estos métodos fijarPrecio() y ObtenerPrecio() se los llama también en java como set 
y get respectivamente, y podrían tener este aspecto: 
 
 
 
 
 
 
 
 
JAVA BÁSICO 
 Página 3 Planes Gabriel 
 
Instanciación de Objetos 
Como ya dijimos, una clase es solo un patrón de objetos. Los atributos de una clase no existen 
en la memoria hasta que no se materializan en un objeto. A este proceso de materialización se 
le llama instanciación. 
Un objeto se instancia mediante el operador new (nuevo). 
 
 
 
Este código instancia el objeto “sal” de la clase “Producto”. Se dice que, se declara el objeto 
“sal” que es de tipo “Producto”. Los paréntesis después del nombre de la clase son 
obligatorios. 
A partir de esta instanciación, ya tenemos en memoria un objeto con todos sus atributos. Cada 
nueva instanciación crea un objeto nuevo, independiente de los demás. Si tenemos por 
ejemplo, dos objetos “sal” y “azúcar”. 
 
En la memoria tendremos dos pares de atributos “código”, “descripción” y “precio”, uno por 
cada objeto: 
 
Para acceder a estos atributos, utilizaremos el operador “.” (punto) 
 
 
 
JAVA BÁSICO 
 Página 4 Planes Gabriel 
 
 
En estas líneas inicializamos el atributo “precio” de los objetos “sal” y “azúcar” a 0,60 y 0,81 
respectivamente. Observemos la independencia entre ambos objetos y como mediante el 
operador “.” Podemos especificar de forma univoca a que atributo de que objeto hacemos 
referencia. 
 
 
De la misma forma que accedemos a los atributos de las clases, mediante el operador punto 
también accedemos a las funciones. 
 
 
 
 
 
 
 
 
 
JAVA BÁSICO 
 Página 5 Planes Gabriel 
 
Agrupándolo todo, el código quedaría más o menos así: 
 
Observemos que las funciones miembro de una clase, como “fijarPrecio()” u “obtenerPrecio()”, 
acceden directamente a los atributos de un objeto sin necesidad de especificar a qué objeto 
pertenecen. Esto es así porque las funciones miembro siempre se ejecutan en el contexto de 
un objeto. Es decir, cuando nos encontramos con la llamada: 
 
Ejecutamos la función “fijarPrecio()” para el objeto “sal”. Entonces, dentro de la función, cada 
vez que se hace referencia a un atributo, a éste se le supone implícitamente el objeto “sal”. 
 
 
 
 
JAVA BÁSICO 
 Página 6 Planes Gabriel 
 
El objeto this 
Como ya hemos explicado, cuando una función miembro accede a un atributo lo hace en el 
contexto de un objeto. Por eso no es necesario que especifique a que objeto hace referencia. 
Sin embargo, hay casos en que puede ser interesante disponer de dicho objeto, por ejemplo, 
para pasarlo por parámetro a una función o diferenciarlo de una variable. 
Las funciones miembros pueden acceder al objeto actual mediante el objeto predefinido this 
(éste). 
 
En este caso se utiliza this para distinguir entre el atributo de la clase y el parámetro de la 
función. El “this.precio” hace referencia al atributo del objeto actual, mientras que “precio” sin 
el this hace referencia al parámetro de la función. 
Mediante el this explicitamos a que objeto hacemos referencia. En el contexto de la función, 
this será el mismo objeto que “sal”. 
 
 
El Constructor 
Cuando se instancia un objeto, puede ser necesario inicializar sus atributos. Volviendo al 
ejemplo anterior, establecíamos el precio del producto después de haber instanciado al 
objeto, ya fuese accediendo directamente al atributo “precio” o mediante la función 
“fijarPrecio()”. Sin embargo, las clases nos ofrecen un mecanismo mucho más elegante de 
inicializar un objeto: constructor. 
El constructor es una función como cualquier otra, pero con ciertas particularidades: se llama 
como la clase y no tiene un tipo de dato de retorno. 
 
 
 
 
 
JAVA BÁSICO 
 Página 7 Planes Gabriel 
 
La siguiente línea muestra un posible constructor de la clase “Producto”: 
 
Observemos como el constructor espera tres parámetros: el código, la descripción y el precio 
del producto. En este caso, la tarea del constructor es sencilla: tan solo copiar el código, la 
descripción y el precio proporcionados a los atributos del objeto. 
El ejemplo siguiente instancia otra vez los productos “sal” y “azucar”. Sin embargo, esta vez se 
hace uso del constructor que acabamos de definir: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
JAVA BÁSICO 
 Página 8 Planes Gabriel 
 
Agrupando todo en un código, quedaría de la siguiente manera: 
 
 
Observemos que lo que le sigue al operador new no es otra cosa que la llamada al constructor 
de la clase. Después de la instanciación, los atributos de los objetos “sal” y “azucar” ya estarán 
inicializados con los valores que hayamos pasado al constructor. 
 
 
JAVA BÁSICO 
 Página 9 Planes Gabriel 
 
El programa generara la siguiente salida: 
 
Una clase puede tener más de un constructor, de la misma manera que puede tener más de 
una función con el mismo nombre. Sin embargo, como en el caso de las funciones, lo que debe 
ser distintos son los parámetros en cuanto a cantidad y tipo. 
Si no se define ningún constructor para una clase, esta tendrá un constructor implícito: el 
constructor por defecto. El constructor por defecto, es el que no espera ningún parámetro, es 
el que usábamos en las primeras implementaciones de la clase “Producto”. 
 
 
Constantes 
Una constante es una variable del sistema que mantiene un valor inmutable a lo largo de toda 
la vida del programa. Las constantes en Java se definen mediante el modificador final y static. 
El uso de constantes tanto en una aplicación ejecutable como en una clase, siempre es útil. 
En una clase, el mejoruso que tiene es definir valores por defecto de nuestros atributos, no es 
necesario hacer una constante para cada atributo. Al crearla, debemos darle algún valor. 
Veamos un ejemplo: 
 
toString() 
El método toString nos permite mostrar la información completa de un objeto, es decir, el 
valor de sus atributos. 
 
 
 
 
 
 
JAVA BÁSICO 
 Página 10 Planes Gabriel 
 
 
 
 
El mensaje puede ser como nosotros queramos. Veamos un ejemplo práctico: 
 
 
 
El resultado sería: 
 
 
 
Comparando: == vs equals() 
 
En este caso estamos comparando tipos de datos primitivos. 
 
 
JAVA BÁSICO 
 Página 11 Planes Gabriel 
 
Pero para comparar objetos no podemos hacer uso del operador “==”, sino que tenemos que 
hacer uso de un método particular llamado equals. Entonces, siempre que queramos 
comparar dos objetos debemos hacer uso de dicho método. 
 
 
Notemos como la comparación se hace directamente contra los atributos del objeto. En este 
ejemplo, dos objetos serán igual si tienen el mismo “nombre”.

Continuar navegando