Anda di halaman 1dari 14

UNIDAD II

CLASES Y OBJETOS

CLASES, OBJETOS Y MTODOS

En este archivo encontrar una antologa de los conceptos bsicos de la Programacin Orientada a Objetos.

Ing. Guillermo Castaeda Ortiz

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

UNIDAD II CLASES Y OBJETOS


2.1 Declaracin de clases: atributos, mtodos, encapsulamiento.
Una de las principales caractersticas de Java es ser un lenguaje totalmente orientado a objetos. Como tal, todo programa Java debe estar escrito en una o varias clases, dentro de la cuales se podr hacer uso, adems de poder usar el amplio conjunto de paquetes de clases pre diseadas. Los objetos son entidades que tienen un determinado estado, comportamiento (mtodo) e identidad: El estado est compuesto de datos, ser uno o varios atributos a los que se habrn asignado unos valores concretos (datos). El comportamiento est definido por los mtodos o mensajes a los que sabe responder dicho objeto, es decir, qu operaciones se pueden realizar con l. La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto anlogo al de identificador de una variable o una constante). La programacin orientada a objetos se basa en la programacin de clases; a diferencia de la programacin estructurada, que est centrada en las funciones. Una clase es un molde del que luego se pueden crear mltiples objetos, con similares caractersticas. Una clase es una plantilla (molde), que define atributos (variables) y mtodos (funciones). La clase define los atributos y mtodos comunes a los objetos de ese tipo, pero luego, cada objeto tendr sus propios valores y compartirn las mismas funciones. Debemos crear una clase antes de poder crear objetos (instancias) de esa clase. Al crear un objeto de una clase, se dice que se crea una instancia de la clase o un objeto propiamente dicho.

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

Modificadores de acceso a los miembros de una Clase.

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:

class MiObjeto { private short valor = 0; MiObjeto(MiObjeto otro) { valor = otro.valor; } }

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

Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:

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

2.2 Instanciacin de una clase.


Las clases representan el concepto general de una cosa, mientras que los objetos representan instancias concretas de una clase. Las clases actan de forma muy parecida a una plantilla o molde para galletas en el sentido de que una clase se utiliza para crear o instanciar objetos. Una clase en Java es el contenedor para el cdigo de nuestros programas. Todo programa en Java consiste en por lo menos una declaracin de clase. Los programas en Java, giran alrededor de instancias de Objetos que son manipuladas a travs de referencias. Ejemplo: Supongamos que existe la Clase Empleado, para crear una instancia de esta Clase usamos la palabra clave new. Empleado trabajador = new Empleado (Raul); trabajador.altaSeguro(); La declaracin anterior no solo genera una instancia nueva de la Clase Empleado, sino le asigna un valor inicial ("Raul") a un atributo de la Clase Empleado (que seguramente ser el nombre del empleado). Esta nueva instancia es asignada a la variable referencia trabajador. Adems, despus de crear a trabajador invocamos una de sus mtodos llamado altaSeguro (que muy probablemente sirva para darlo de lata en el Seguro mdico). Como ya se ha dicho, una clase proporciona los planos para un objeto; se puede crear un objeto a partir de una clase (este proceso se le llama instanciacin). Cada una de las siguientes sentencias crea un objeto y lo asigna a una variable: Point originOne = new Point(23, 94); Rectangle rectOne = new Rectangle(originOne, 100, 200); Rectangle rectTwo = new Rectangle(50, 100); La primera lnea crea un objeto de la clase Point, mientras que la segunda y la tercera crean un objeto de la clase Rectangle. Cada una de estas sentencias tiene tres partes: Declaracin: El cdigo en negrita son declaraciones de variables que asocian un nombre de variable con un tipo de objeto. Instanciacin: La palabra clave new es un operador Java que crea el objeto. Inicializacin: El operador new precede a una llamada a un constructor, que inicializa el objeto nuevo.

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

2.3 Referencia al objeto actual.


Anteriormente hemos aprendido que, para declarar una variable, se debe escribir: tipo nombre; Esto le indica al compilador que se utilizar nombre para referirse a datos cuyo tipo es tipo. Con una variable primitiva esta declaracin tambin reserva la cantidad adecuada de memoria para la variable. Tambin se puede declarar una variable de referencia en su propia lnea. Por ejemplo: Point originOne; Si declara originOne de este modo, su valor ser indeterminado. La simple declaracin de una variable de referencia no crea un objeto, para ello necesitar utilizar el operador new. Debe asignar un objeto a originOne antes de utilizarlo en su cdigo, de lo contrario obtendr un error de compilacin. Una variable declarada de esta forma no referencia a ningn objeto. El operador new instancia una clase reservando memoria para un objeto nuevo y devolviendo una referencia a esa memoria. El operador new tambin invoca al constructor de objetos. El operador new devuelve una referencia al objeto que ha creado. Esta referencia normalmente se asigna a una variable del tipo apropiado, como: Point originOne = new Point(23, 94);

pg. 7

2.4 Mtodos: declaracin, mensajes, paso de parmetros, retorno de valores.


Un mtodo proporciona la implementacin del comportamiento dinmico de los objetos y puede cambiar el estado de los objetos a que llaman. Sintaxis ModificadorDeAcceso tipoDeRetorno nombreDeMetodo (listaDeParametros){ Secuencia de sentencia //Cuerpo del mtodo }

//Cabecera del mtodo

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

2.5 Sobrecarga de mtodos.


Una de las principales caractersticas de la programacin orientada a objetos (POO) es exactamente la sobrecarga de mtodos, el funcionamiento es sencillo pero de mucha utilidad a la hora de realizar la misma terea pero con diferentes comportamientos. Este concepto lo podremos entender con un ejemplo sumamente sencillo, imaginemos que necesitamos sumar dos nmeros (a+b), para este ejemplo debemos definir un mtodo llamado suma en una clase previamente creada como se muestra en el ejemplo. Nuestro mtodo declarado recibe dos parmetros los cuales se sumaran y regresara su resultado. Si nuestra aplicacin necesita realizar clculos con diversos tipos de datos, la sobre carga de mtodos nos permite definir el mismo mtodo con diferentes firmas (orden y tipo de los argumentos que recibe el mtodo) con lo que aseguramos la integridad de nuestros clculos sin prdida de precisin. Como se observa en el cdigo, se defini el mtodo Suma en tres ocasiones con distintas firmas, cuando se necesite invocar al mtodo Suma, dependiendo del tipo de datos con el que se invoca ser el que se utilizar.

pg. 9

2.6 Constructores y destructores: declaracin, uso y aplicaciones.

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

La siguiente sentencia proporciona 23 y 94 como valores para esos argumentos:

Point originOne = new Point(23, 94);

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

Anda mungkin juga menyukai