CLASES Y OBJETOS
En este archivo encontrar una antologa de los conceptos bsicos de la Programacin Orientada a Objetos.
Contenido
UNIDAD II ............................................................................................................................................................................. 2 CLASES Y OBJETOS ................................................................................................................................................................ 2 2.1 Declaracin de clases: atributos, mtodos, encapsulamiento. ................................................................................... 2 2.2 Instanciacin de una clase. ......................................................................................................................................... 6 2.3 Referencia al objeto actual. ........................................................................................................................................ 7 2.4 Mtodos: declaracin, mensajes, paso de parmetros, retorno de valores. .............................................................. 8 2.5 Sobrecarga de mtodos. ............................................................................................................................................. 9 2.6 Constructores y destructores: declaracin, uso y aplicaciones. ................................................................................ 10
pg. 1
La estructura de una clase es: class [nombre de la clase] { [atributos o variables de la clase] //Define el estado [mtodos o funciones de la clase] //Define el comportamiento [ mtodo main] //Punto de arranque }
Esto es una declaracin de clase. El cuerpo de la clase (el rea entre los corchetes) contiene todo el cdigo necesario durante el ciclo de vida de los objetos creados a partir de ella: constructores para inicializar objetos nuevos, atributos que proporcionan el estado de la clase (y de sus objetos) y mtodos que implementan el comportamiento de la clase (y de sus objetos). Adems las clases contienen mtodos constructores (que definen el estado inicial del objeto).
pg. 2
Los modificadores de acceso, como su nombre indica, determinan desde qu clases se puede acceder a un determinado elemento. En Java tenemos 4 tipos: public, private, protected y el tipo por defecto, que no tiene ninguna palabra clave asociada, pero se suele conocer como default o package-private.
Si no especificamos ningn modificador de acceso se utiliza el nivel de acceso por defecto, que consiste en que el elemento puede ser accedido slo desde las clases que pertenezcan al mismo paquete.
El nivel de acceso public permite a acceder al elemento desde cualquier clase, independientemente de que esta pertenezca o no al paquete en que se encuentra el elemento.
El acceso private, por otro lado, es el modificador ms restrictivo y especifica que los elementos que lo utilizan slo pueden ser accedidos desde la clase en la que se encuentran. Este modificador slo puede utilizarse sobre los miembros de una clase y sobre interfaces y clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendra sentido. Es importante destacar tambin que private convierte los elementos en privados para otras clases, no para otras instancias de la clase. Es decir, un objeto de una determinada clase puede acceder a los miembros privados de otro objeto de la misma clase, por lo que algo como lo siguiente sera perfectamente vlido:
El modificador de acceso protected, por ltimo, indica que los elementos slo pueden ser accedidos desde su mismo paquete (como el acceso por defecto) y desde cualquier clase que extienda la clase en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o no. Este modificador, como private, no tiene sentido a nivel de clases o interfaces no internas.
pg. 3
Modificadores de acceso La misma clase Otra clase del mismo paquete Subclase de otro paquete Otra clase de otro paquete
public protected default private
X X X X
X X X
X X
Encapsulacin En la Programacin Orientada a Objetos se denomina encapsulamiento al ocultamiento del estado del objeto, es decir, de los datos miembro de un objeto. De manera que el estado del objeto slo se puede cambiar mediante las operaciones definidas para ese objeto. Una de las premisas de POO, es que la mayora, sino todos, los atributos de un objeto deben ser privados, esto para tener seguridad sobre los valores del objeto, pero entonces. Cmo acceder a los atributos de una clase?, la respuesta es el encapsulamiento. Por otra parte, la mayora, sino todos, los mtodos de un objeto deben ser pblicos, esto para que el objeto tenga una manera de mostrarse al mundo exterior y permitir acceso a sus datos de manera controlada. Ejemplo: Definicin de la Clase Circulo, cuyo nico atributo ser radio.
public class Circulo { private double radio; //Atributo privado public double getRadio() { //Mtodo get<Atributo> que me permite conocer u return radio; //obtener el valor actual del atributo } public void setRadio(double radio) { // Mtodo set<Atributo> que me permite cambiar o this.radio = radio; // establecer el valor actual del atributo } }
pg. 4
Cada objeto est aislado del exterior, es un mdulo natural, y la aplicacin entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto contra su modificacin por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones. De esta forma el usuario de la clase puede obviar la implementacin de los mtodos y propiedades para concentrarse slo en cmo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas. Hay muchos datos que no tiene por que conocerlos aquel que est usando una Clase ya que son inherentes al objeto y solo controlan su funcionamiento interno. La encapsulacin u ocultacin es hacer las variables que son innecesarias para el tratamiento del objeto pero necesarias para su funcionamiento privadas (as como las funciones que no necesitan interaccin del usuario o que solo pueden ser llamadas por otras funciones dentro del objeto). La encapsulacin es muy conveniente y nos permite (Si programamos bien) colocar en funcionamiento nuestro objeto en cualquier tipo de sistema, de una manera modular y escalable (regla de la ingeniera del software).
pg. 5
La frase instanciar una clase significa lo mismo que crear un objeto. Cuando se crea un objeto, se crea una instancia de una clase, por lo tanto se instancia una clase.
pg. 6
pg. 7
Los mtodos que tienen un tipo de retorno distinto de void devuelven un valor utilizando la sentencia return (return valor), donde valor es el valor devuelto por el mtodo y debe de ser del mismo tipo de tipoDeRetorno como se especific al declarar el mtodo. Ejemplo class Caja{ double anchura; double altura; //calcula y devuelve el volumen de la caja double volumen(){ return anchura *altura *profundidad; } }
Como puede observarse una definicin de mtodo consta de dos partes: cabecera y cuerpo. Un mtodo es un bloque de cdigo que tiene un nombreDeMetodo, ModificadorDeAcceso , tipoDeRetorno y una listaDeParametros.
pg. 8
pg. 9
El objetivo del constructor es el de inicializar un objeto cuando ste es creado. Asignaremos los valores iniciales al objeto creado, as como los procesos que sta clase deba realizar. Es un mtodo especial dentro de una clase, que se llama automticamente cada vez que se crea un objeto de esa clase. Posee el mismo nombre de la clase a la cual pertenece y no puede regresar ningn valor (ni siquiera se puede especificar la palabra reservada void). Por ejemplo si aadiramos a la clase Suma un constructor, entonces a ese mtodo constructor tendramos que llamarlo tambin Suma. Cuando en una clase no se escribe propiamente un constructor, java asume uno por afecto (Constructor por defecto). Un constructor por defecto es un constructor sin parmetros y que no contiene instrucciones dentro de l (no hace nada). Sin embargo ser invocado cada vez que se construya un objeto sin especificar ningn argumento, en cuyo caso el objeto ser iniciado con los valores predeterminados por el sistema (los atributos numricos a ceros, los alfanumricos a nulos, y las referencias a objetos a null).
Ejemplo 1 Un constructor por defecto, para la clase Suma quedara as: public Suma() {} Como se observa el constructor no posee ningn parmetro, ya que como no ha sido definido propiamente por el programador, Java lo hace por default. Si se define un constructor con parmetros, (definido explcitamente) el constructor por default se reemplaza por ste.
Ejemplo 2 Este es el cdigo de la clase Point: 1. public class Point { 2. public int x = 0; 3. public int y = 0; 4. 5. 6. 7. 8. //constructor public Point(int a, int b) { x = a; y = b; }
9. } Esta clase contiene un solo constructor. Se puede reconocer a un constructor porque su declaracin utiliza el mismo nombre que la clase y no tiene tipo de retorno. El constructor de la clase Point espera dos argumentos enteros, como se observa en la lnea 5.
pg. 10
Ejemplo 3 ste es el cdigo de la clase Rectangulo, que contiene cuatro constructores: public class Rectangulo { public int ancho = 0; public int alto = 0; public Point origin; // cuatro constructores public Rectangulo () { origin = new Point(0, 0); ancho = 1; alto = 1; } public Rectangulo (Point p) { origin = p; ancho = 1; alto = 1; } public Rectangulo (int w, int h) { origin = new Point(0, 0); ancho = w; alto = h; } public Rectangulo (Point p, int w, int h) { origin = p; ancho = w; alto = h; } // un mtodo para mover el rectngulo public void move(int x, int y) { origin.x = x; origin.y = y; } // un mtodo para calcular el rea del rectngulo public int getArea() { return ancho * alto; } }
pg. 11
Cada constructor le permite proporcionar valores iniciales para el tamao y anchura del rectngulo, utilizando tanto tipo primitivos como de referencia. Si una clase tiene varios constructores, stos deben tener diferentes firmas. El compilador Java diferencia los constructores basndose en la cantidad y/o el tipo de los argumentos. Cuando el compilador Java se encuentra con el siguiente cdigo sabe que debe llamar al constructor de la clase Rectangle que necesita un argumento de tipo Point seguido de dos enteros: Rectangle rectOne = new Rectangle(originOne, 100, 200);
Esto llama a uno de los constructores de Rectangle que inicializa origin a originOne. El constructor tambin fija ancho a 100 y alto a 200. Ahora hay dos referencias al mismo objeto Point object - un objeto puede tener varias referencias a l, como se muestra en la siguiente figura:
La siguiente lnea de cdigo llama al constructor de Rectangle que necesita dos argumentos enteros que proporcionan los valores iniciales para ancho y alto. Si inspecciona el cdigo dentro del constructor ver que crea un nuevo objeto Point cuyos valores x e y se inicializan a 0: Rectangle rectTwo = new Rectangle(50, 100); El constructor de Rectangle utilizado en la siguiente sentencia no toma ningn argumento, por lo que se denomina un constructor sin argumentos: Rectangle rect = new Rectangle(); Todas las clases tienen por lo menos un constructor. Si una clase no declara uno explcitamente, el compilador Java proporciona automticamente un constructor sin argumentos, llamado el constructor predeterminado.
pg. 12
pg. 13