Descarga la aplicación para disfrutar aún más
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”.
Compartir