Poo 4
Poo 4
Clases y objetos
Elaborado por:
M.C. M. Angélica Nakayama C.
Ing. Jorge A. Solano Gálvez
Autorizado por:
M.C. Alejandro Velázquez Mena
Guía práctica de estudio 4
Clases y objetos
Actividades:
Crear clases.
Crear objetos o instancias.
Invocar métodos.
Utilizar constructores.
Introducción
Los objetos pueden agruparse en categorías y una clase describe (de un modo abstracto)
todos los objetos de un tipo o categoría determinada.
NOTA: En esta guía se tomará como caso de estudio el lenguaje de programación JAVA,
sin embargo, queda a criterio del profesor el uso de éste u otro lenguaje orientado a
objetos.
Objeto
Clase
En el mundo real existen varios objetos de un mismo tipo, o de una misma clase, por lo
que una clase equivale a la generalización de un tipo específico de objetos. Una clase es
una plantilla que define las variables y los métodos que son comunes para todos los
objetos de un cierto tipo.
En Java para definir una clase se utiliza la palabra reservada class seguida del nombre de
la clase.
class NombreDeLaClase
Instancia
Una vez definida la clase se pueden crear objetos a partir de ésta, a este proceso se le
conoce como crear instancias de una clase o instanciar una clase. En este momento el
sistema reserva suficiente memoria para el objeto con todos sus atributos.
Una instancia es un elemento de una clase (un objeto). Cada uno de los objetos o
instancias tiene su propia copia de las variables definidas en la clase de la cual son
instanciados y comparten la misma implementación de los métodos. Sin embargo, cada
objeto asigna valores a sus atributos y es totalmente independiente de los demás.
En Java para crear una instancia se utiliza el operador new seguido del nombre de la clase
y un par de paréntesis.
new NombreDeLaClase( );
Mensajes
Normalmente un único objeto por sí solo no es muy útil. Los objetos interactúan
enviándose mensajes unos a otros. Tras la recepción de un mensaje el objeto actuará.
Cuando un objeto A quiere que otro objeto B ejecute uno de sus métodos, el objeto A
manda un mensaje al objeto B.
En ocasiones, el objeto que recibe el mensaje necesita más información para saber
exactamente lo que tiene que hacer. Esta información se pasa junto con el mensaje en
forma de parámetro.
En Java para que un objeto ejecute algún método se utiliza el operador punto:
objeto.nombreDelMetodo( parametros );
Métodos
También se debe especificar el tipo y nombre de cada uno de los parámetros o argumentos
del método entre paréntesis. Si un método no tiene parámetros el paréntesis queda vacío
(no es necesario escribir void). Los parámetros de los métodos son variables locales a los
métodos y existen sólo en el interior de estos.
Los argumentos pueden tener el mismo nombre que los atributos de la clase, de ser así, los
argumentos “ocultan” a los atributos. Para acceder a los atributos en caso de ocultación se
referencian a partir del objeto actual this.
Ejemplo:
Se crea una clase Punto para representar un punto en el espacio 2D, cuyos atributos sean
las coordenadas (x, y) y contiene un método que imprima los valores de dicha coordenada
del punto.
Posteriormente se crea una clase de prueba para interactuar con la clase Punto. Dentro de
esta clase se tiene un método main y se crean 2 instancias de la clase Punto. Una vez
creadas se da valor a sus atributos y se manda ejecutar su método.
Java permite métodos sobrecargados (overloaded), es decir, métodos distintos que tienen
el mismo nombre, pero que se diferencian por el número y/o tipo de los argumentos.
Por ejemplo:
A la hora de llamar a un método sobrecargado, Java sigue algunas reglas para determinar
el método concreto que debe llamar:
Ejemplo:
También puede haber métodos que no actúen sobre objetos concretos a través del
operador punto. A estos métodos se les llama métodos de clase o static, estos pueden
recibir argumentos, pero no pueden utilizar la referencia this.
Un ejemplo típico son los métodos matemáticos de la clase java.lang.Math (sin( ), cos( ),
exp( ), pow( ), etc.).
Los métodos y variables de clase se crean anteponiendo la palabra static. Para llamarlos se
suele utilizar el nombre de la clase, en vez del nombre de un objeto de la clase.
Ejemplo:
System.out.println(Circulo.PI);
Los atributos static tendrán el mismo valor para todos los objetos que se creen de esa clase.
Es decir si se modifica el valor de un atributo static, el cambio afectará a todos los objetos
de esa clase.
Constructores
Un constructor es un método que tiene el mismo nombre que la clase y cuyo propósito es
inicializar los atributos de un nuevo objeto. Se ejecuta automáticamente cuando se crea
un objeto o instancia de la clase.
Ejemplo:
Para la clase Punto se declara un constructor que reciba los valores de las coordenadas (x,
y) y dichos valores se le asignan a los atributos correspondientes (x, y).
Al hacer esto, dado que ya se cuenta con un constructor que recibe dos parámetros, Java
deja de agregar el constructor por defecto (el constructor sin parámetros) por lo cual la
clase de prueba ahora marcará error.
Cambiar la creación de las instancias para que ahora reciban los valores (x, y)
desde el momento de su creación.
Agregar un constructor por defecto (sin parámetros) el cual puede inicializar los
valores a un valor por defecto (que se desee) o bien puede estar sin
implementación (código).
En este último caso, dado que se cuenta con 2 constructores distintos (diferenciados por el
número y tipo de parámetros) se tendrían disponibles las dos formas de crear instancias,
ya sea con los valores por defecto o pasándolos como parámetros.
Como los objetos se asignan dinámicamente, cuando estos objetos se destruyen será
necesarios verificar que la memoria ocupada por ellos ha quedado liberada para usos
posteriores. El procedimiento es distinto según el tipo de lenguaje utilizado. Por ejemplo,
en C++ los objetos asignados dinámicamente se deben liberar utilizando un operador
delete y en Java y C# se hace de modo automático utilizando una técnica conocida como
recolección de basura (garbage collection).
Cuando no existe ninguna referencia a un objeto se supone que ese objeto ya no se necesita
y la memoria ocupada por ese objeto puede ser recuperada (liberada), entonces el sistema
se ocupa automáticamente de liberar la memoria.
Java no soporta destructores pero existe el método finalize( ) que es lo más aproximado a
un destructor. Las tareas dentro de este método serán realizadas cuando el objeto se
destruya y se active el garbage collector.
Bibliografía
Martín, Antonio
Programador Certificado Java 2.
Segunda Edición.
México
Alfaomega Grupo Editor, 2008
Joyanes, Luis
Fundamentos de programación. Algoritmos, estructuras de datos y objetos.
Cuarta Edición
México
Mc Graw Hill, 2008