Está en la página 1de 19

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

INTRODUCCIN AL LENGUAJE DE PROGRAMACIN JAVA Creacin de Clases Programar en el Lenguaje de Programacin de la Plataforma JAVA implica crear clases. La definicin de una clase en este lenguaje se desarrolla usando la siguiente nomenclatura: class Nombre_de_la_clase { } donde: class es la palabra reservada por el lenguaje para indicar la definicin de una clase. Nombre_de_la_clase es el nombre que se le asignar a la clase creada { } indica el mbito de la clase. Entre estas dos llaves se crearn los atributos y mtodos1 de la clase creada. Nomenclatura para la definicin de Nombres de Clase 1. 2. 3. 4. Los nombres de las clases deben ser sustantivos en Singular La primera letra del nombre de la Clase debe ser mayscula. El resto de la palabra debe ser minscula En caso de conformar el nombre de la clase con varias palabras se indica la distincin de cada una de ellas con letra en mayscula

Ejemplos: class Persona { } class MiPrimeraClase { }

Figura 1. Ejemplos de definicin de clases Los archivos con extensin .java Las clases en JAVA son definidas en archivos de texto. Estos archivos tienen extensin .java. El nombre del archivo debe coincidir con el nombre de la clase definida. Por lo tanto para los ejemplos indicados en la Figura 1 existir un archivo con el mismo nombre. class Persona { }

Su contenido es

Figura 2. La definicin de una clase se guarda en un archivo con extensin .java


1

En JAVA las operaciones de las clases se denominan mtodos.

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 1

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

JAVA permite que se definan ms de una clase en un nico archivo con extensin .java. Cuando ocurre esta situacin el nombre del archivo debe coincidir con la clase que se haya definido como public. Solo puede existir una clase pblica en un archivo .java. public class Persona { } class Computadora { } class Persona { } class Computadora { }

Su contenido puede ser?

Su contenido puede ser?

Su contenido puede ser?

class Persona { } public class Computadora { }

Figura 3. Cuando se definen varias clases en un archivo .java el nombre del mismo debe ser el de la nica clase definida como public Los paquetes Los paquetes permiten organizar los archivos .java (y en consecuencia las clases) en categoras que representen caractersticas comunes entre las clases. No pueden existir dentro de un paquete clases con el mismo nombre pero si es posible que existan clases con el mismo nombre en diferentes paquetes. Los paquetes se pueden utilizar para ocultar clases evitando que otros programas o paquetes accedan a clases que son de uso exclusivo de una aplicacin determinada, ya que por defecto las clases de un paquete solo reconocen las clases que se hallan en el mismo paquete. Al organizar ficheros .java en paquetes se proporciona un mecanismo sencillo y homogneo para acceder a clases generadas por otros programadores (usando la sentencia import). Fsicamente son carpetas o directorios que alojan ficheros .java. La sentencia package crea y/o indica a que paquete pertenece la clase de un fichero.java. En caso de que un fichero .java sea definido en un paquete, la sentencia package debe ser la primera lnea de cdigo generada. Solo puede existir una sentencia package por archivo .java

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 2

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

(dominio) (Persona.java)

package dominio; class Persona { }

Figura 4. Ejemplo de definicin de un paquete. Fsicamente es un directorio Un paquete puede contener a uno o varios paquetes. Para indicar la jerarqua de paquetes a la que pertenece un archivo .java se establece un separador entre los nombres de los paquetes de la jerarqua. Este separador es el .. La jerarqua de paquetes fsicamente es una jerarqua de directorios.

(modelo) (dominio) (Persona.java)

package modelo.dominio; class Persona { }

Figura 5. Ejemplo de definicin de una jerarqua de paquetes Nota Importante: El nombre completo de una clase est conformado de la siguiente forma Jerarqua de paquetes + . + Nombre de la clase Ejemplo: modelo.dominio.Persona Ejecucin de Aplicaciones JAVA J2SE. Salida por Consola Desarrollar aplicaciones JAVA J2SE, implica generar clases. Al ejecutar la aplicacin se crearn en memoria objetos de las clases involucradas y se enviarn mensajes a los mismos para que ejecuten el cdigo introducido en los mtodos invocados. El punto de arranque de una aplicacin JAVA J2SE se realiza desde alguna clase que posea el mtodo main(). Cuando la Mquina Virtual de JAVA (JVM, en ingls) halle este mtodo en alguna de las clases, ejecutar el cdigo existente en ella. Para entender la nomenclatura de este mtodo observe el siguiente ejemplo: public class MiPrimerEjemplo { public static void main(String[] args { System.out.println(Hola mundo); } } Resultado: Hola Mundo

Figura 6. Ejemplo de Ejecucin de una Aplicacin JAVA J2SE

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 3

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

En este ejemplo se observa como se ha de definir el mtodo main(). La descripcin de cada parte se realizar al momento de describir la nomenclatura y uso de mtodos JAVA. Si se define en alguna clase el mtodo main() como se describe en el ejemplo de la Figura 6, al ejecutar la aplicacin JAVA se mostrara por salida de consola la frase Hola Mundo. Toda aplicacin desarrollada en JAVA J2SE que quiera ejecutarse debe poseer al menos un mtodo main() definido en alguna de las clases de la aplicacin. Salida por Consola System.out.println(a) donde a es cualquier variable o literal de cualquier tipo de dato, permite visualizar dicha variable o literal por consola. Para ello convierte el valor de la variable o el literal en una cadena de caracteres. Proceso de Ejecucin de Aplicaciones JAVA Dos de las caractersticas importantes de JAVA son la portabilidad y la ejecucin multiplataforma como consecuencia de la portabilidad. Esto se logra porque JAVA ejecuta dos procesos para realizar la ejecucin de una aplicacin JAVA. 1. Por un lado realiza un proceso de compilacin que traduce el programa fuente (los archivos con extensin .java) a un cdigo intermedio cercano a los lenguajes mquina de las computadoras, el resultado no es un cdigo mquina concreto sino un cdigo binario denominado bytecode que es independiente de la computadora y del sistema operativo. El cdigo del bytecode se almacena en archivos con extensin .class (por cada archivo .java se genera un archivo .class). El compilador que realiza esta accin es un archivo de la biblioteca del Java Development Kit (JDK) denominado javac.

Figura 7. Proceso de compilacin 2. Por otro lado el proceso de ejecucin requiere que en cada mquina donde se deba ejecutar la aplicacin posea una JVM. La JVM es un intrprete que recibir como entrada los bytecode y generar las instrucciones elementales para ejecutar la aplicacin en la computadora que aloja la JVM. Por lo tanto la JVM es el intrprete de bytecodes. El intrprete es un archivo del Java RunTime Environment (JRE) denominado java.

Figura 8. Proceso de interpretacin Como se observa en la Figura 8, los bytecodes son interpretados en conjunto con los datos (peticiones del usuarios, datos que ingresan al programa desde otras aplicaciones) por la JVM (indicada como JVM-1) de la mquina instalada en la computadora donde se ejecutar la aplicacin (Maquina base.). La existencia del bytecode permite que este Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura Pgina 4

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

mismo proceso se pueda realizar en otras mquinas, siempre que en la misma est instalada la JVM compatible con la plataforma de la computadora (Sistema Operativo).

Figura 9. Proceso de interpretacin. Observe que en ambas mquinas se nterpreta el mismo bytecode. Observe que cada mquina tiene su respectiva JVM Definicin de atributos de una clase. Tipos de Datos. Modificadores de acceso La declaracin de un atributo de una clase consiste en definir una variable fuera del mbito de un mtodo. En java las variables se declaran de la siguiente forma: Tipo_de_dato Nombre_de_la_variable; Tipos de Datos Para poder declarar una variable es necesario previamente definir el tipo de dato de esa variable. En JAVA se definen dos familias de tipos de datos: Los primitivos. Las referencias u objetos. Los primitivos son tipos de datos elementales, esto es, sirven para definir variables de forma anloga a como lo hacen los lenguajes de programacin no orientados a objetos. Su objetivo es reservar un espacio de memoria para que la variable pueda alojar en el mismo un valor. En el caso especial de JAVA, los mismos pertenecen a la biblioteca del JDK de tal forma que el tipo de dato posea el mismo espacio en memoria y por lo tanto el mismo rango de valores posibles en cualquiera de las plataformas que posean una JVM. Todos los primitivos poseen un rango predefinido de valores permitidos (definidos por el tamao de memoria que reserva el tipo de dato) y un valor predefinido por defecto. Las referencias u objetos son tipos de datos complejos, en el sentido que sus clases pueden ser usadas para la definicin de variables. Esto provoca que estas variables puedan poseer atributos y mtodos. A diferencia de los tipos primitivos, las referencias u objetos al ser declarados no ocupan espacio en memoria, su referencia es igual a null. Esto se debe a la forma en particular por la cual JAVA gestiona la memoria para los objetos de una aplicacin. Esta gestin es descripta ms adelante. Existen tipos de datos que son objetos u referencias predefinidos en la biblioteca de JAVA (cuyos atributos generalmente son valores constantes). El programador tambin puede crear clases que se utilizarn como tipo de Datos. Estos se denominan referencias o tipos definidos por el usuario. Las estructuras de datos en JAVA son definidas como clases, por lo tanto tambin son tipos referencias (por ejemplo los arreglos, vectores y colecciones). Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura Pgina 5

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

El siguiente grfico muestra los tipos de datos en JAVA:

Figura 9. Tipos de Datos en JAVA

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 6

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Tipos Primitivos La siguiente tabla indica cual es el valor por defecto de cualquier variable que se haya definido con un tipo de dato primitivo. Tipo de dato byte short int long float double char boolean Valor predeterminado 0 0 0 0L 0.0f 0.0d '\u0000' False

Tabla 1. Valor por defecto para variables cuyo tipo de dato es primitivo Observe que para los tipos de datos long, float y double el valor por defecto posee una letra al final. Esto se debe a que para JAVA todos los valores literales numricos y enteros por defectos se consideran del tipo int. De la misma forma todos los valores literales de tipo numricos y decimal por defecto se consideran double. Esto es consecuencia de que JAVA gestiona una Conversin Implcita para Variables cuyo tipo de datos es primitivo, de la siguiente forma: double float long int short byte Consecuencias de este tipo de conversin Ejemplo 1: public class MiPrimerEjemplo { public static void main(String[] args) { short z; byte x = 40; z = x; System.out.println(z); } } Resultado: 40 Razones: El literal 40 es un entero int. JAVA permite asignar un literal int a un tipo de datos menor sin consecuencias inesperadas si el literal se halla dentro del rango del tipo de datos menor. Por la conversin implicita se puede asignar un byte a short.

Figura 10. Conversin implicita de literal. Conversin implicita de byte a short

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 7

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Ejemplo 2: public class MiPrimerEjemplo { public static void main(String[] args) { short z; byte x = 128; z = x; System.out.println(z); } } Resultado: -128 o no permite compilar

Razones: El literal 128 es un entero int. JAVA. El rango del byte es de -128 a 127 (vea Figura 9). Por lo tanto se supera en una unidad el valor maximo. Por ello se pierde precisin y pasa al valor menor del rango. Como consecuencia el valor almacenado en x es -128. Las ltimas versiones de JAVA advierten esta prdida y no permite la asignacin. Figura 11. Error tipico al intentar convertir un literal a un tipo de dato menor a int

Ejemplo 3: public class MiPrimerEjemplo { public static void main(String[] args) { long x = 128; System.out.println(x); } } Resultado: 128 Razones: El literal 128 es un entero int. JAVA convierte en forma implicita un literal numrico a un tipo primitivo superior.

Figura 12. Conversin implcita de un tipo de dato numrico primitivo a otro primitivo numrico superior Ejemplo 4: public class MiPrimerEjemplo { public static void main(String[] args) { long x = 3245678999; System.out.println(x); } } Resultado: No permite compilar

Razones: El literal 3245678999 es un entero int cuyo valor supera el rango que el tipo entero soporta. JAVA no permite asignar un literal int o float a un tipo de datos superior si el valor del literal supera su rango. Figura 13. Conversin implcita de un tipo de dato numrico primitivo a otro primitivo numrico superior

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 8

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Ejemplo 5: public class MiPrimerEjemplo { public static void main(String[] args) { long x = 3245678999L; System.out.println(x); } } Resultado: 3245678999 Razones: El literal 3245678999L es un long porque la letra L indica a JAVA que no es un int sino un long.

Figura 14. Conversin de un literal int a un long Modificadores de acceso Los modificadores de acceso se aplican principalmente a los atributos y mtodos. Permiten definir la visibilidad y acceso a los mismos. Los modificadores de acceso, determinan desde qu clases se puede acceder a un determinado elemento (atributo o mtodo). En JAVA existen 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 Nivel de acceso por defecto: consiste en que el elemento puede ser accedido slo desde las clases que pertenezcan al mismo paquete. 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. Nivel de acceso private: es el modificador ms restrictivo y establece 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 (atributos o mtodos) de una clase y sobre interfaces y clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendra sentido. El modificador 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. Nivel de acceso protected: 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. Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 9

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Tabla 2. Visibilidad y acceso a los atributos y mtodos segn el tipo de modificador aplicado Creacin de atributos Ya se mencion que para crear un atributo hay que definir una variable fuera del mbito de un mtodo. Se agrega que esa misma variable debe ser definida dentro del mbito de la clase (delimitada por las llaves que obligatoriamente se deben definir al programar una clase). El formato de la declaracin de un atributo es el siguiente: modificador_de_acceso tipo_de_dato nombre_atributo; Ejemplos: public class Circulo { double radio; } El modificador de acceso del atributo es por default (puede ser accedido por las clases del mismo paquete y por los mtodos de la misma clase). El atributo se define dentro de las llaves que delimitan el mbito de la clase. public class Rectangulo { public double base; public double altura; } Se han definido dos atributos de tipo double modificador de acceso public. Cualquier clase puede acceder a ellos, adems de los mtodos de la misma clase. public class Rectangulo { private double base; private double altura; } Se han definido dos atributos de tipo double. Ambos poseen modificador de acceso private. Ninguna clase puede acceder a ellos, salvo los mtodos de la misma clase. public class Rectangulo { private double base; protected double altura; }

El segundo atributo posee un modificador de acceso protected. Solo puede ser accedido por las clases del mismo paquete, por las subclases (independientemente de si se hallan o no en el mismo paquete) y por los mtodos de la misma clase Figura 15. Ejemplos de definicin de atributos

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 10

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Nomenclatura para la definicin de Atributos de una Clase 1. 2. 3. 4. Los nombres de los atributos no deben ser verbos. La primera letra del atributo debe ser escrita en minscula. El resto de la palabra tambin debe ser minscula En caso de conformar el nombre de un atributo con varias palabras se indica la distincin de cada una de ellas con letra en mayscula

Ejemplo public class Mesa { private byte numeroPatas; private double largo; private double ancho; private double altura; } Figura 16. Ejemplo de definicin de atributos Definicin de mtodos de una clase La declaracin de un mtodo de una clase consiste en definir un bloque dentro del cual se podr escribir cdigo que represente la accin que debe realizar el mtodo. Un mtodo debe ser escrito dentro del mbito de una clase. El formato de la definicin de un mtodo es el siguiente: modificador_de_acceso tipo_retorno nombre_mtodo ( Lista de parmetros ) { Cuerpo del mtodo } Donde modificador_de_acceso puede ser public, private, protected o default. tipo_retorno indica si el mtodo devolver algn valor o no. Si devuelve un valor tipo_retorno indica cual es el tipo de dato del valor que devolver el mtodo. Si el mtodo no devuelve ningn valor JAVA define la palabra reservada void, para indicar dicha situacin. nombre_mtodo es el nombre con el cual se identificar al mtodo. Lista de parmetros: Se declaran dentro del parntesis que sigue al nombre del mtodo. Son declaraciones de variables (definidos como tipo_de_dato nombre_variable). Cada uno de los parmetros es separado del otro por medio del uso de una coma. Un mtodo puede o no tener una lista de parmetros. Cuerpo del mtodo: Contiene el bloque de cdigo que cumple la accin determinada en el nombre del mtodo. Debe ser escrita dentro de las llaves del mtodo. Estas llaves determinan el mbito del mtodo.

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 11

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Ejemplo 1 public class Circulo { private double radio; public void asignarValorRadio(double xRadio) { radio = xRadio; } } Figura 17. Ejemplo de mtodo sin retorno de valor En el ejemplo de la Figura 17 se crea el mtodo cuyo nombre es asignarValorRadio(). El nombre del mtodo indica la accin que realizar. En este caso se asigna el valor que viene como parmetro (xRadio) al atributo radio. Observe que ahora hay dos bloques de llaves. El mtodo ha sido definido dentro del mbito de las llaves que definen a la clase Circulo. El mtodo posee a su vez un bloque de llaves que indica donde inicia y donde finaliza el cuerpo del mtodo. Observe que el mtodo fue definido con modificador de acceso public. Esto significa que este mtodo podr ser visible por cualquier clase y accedido por los mtodos de esas clases. Ejemplo 2 public class Circulo { private double radio; public void asignarValorRadio(double xRadio) { radio = xRadio; } public double obtenerValorRadio() { return radio; } } Figura 18. Ejemplo de mtodo con retorno de valor En el ejemplo de la Figura 18 observe que la clase Circulo posee 2 mtodos. Ambos se hallan claramente separados uno del otro por sus respectivos bloques delimitados por sus llaves. Ambos mtodos se definen dentro del mbito delimitado por las llaves que indican donde inicia y finaliza

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 12

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

la clase. Observe que se ha definido un atributo. Este atributo no ha sido definido en ninguno de los 2 mtodos, pero si es usado en el cuerpo de ambos mtodos. El nombre del mtodo obtenerValorRadio() indica que este mtodo debe devolver el valor del atributo radio. Por ello posee un tipo de retorno. Los tipos de retorno deben indicar el tipo de dato que desea devolver. Dado que radio es un atributo de tipo double el tipo de retorno tambin ser double. El tipo de retorno es en realidad una variable sin nombre, por ello solo se indica el tipo de dato. El siguiente paso ser entonces asignarle a esta variable el valor que devolver. Para ello JAVA utiliza la palabra return definida previamente al literal, variable o mtodo que posea el valor a ser devuelto. En el ejemplo se debe devolver el radio por ello a continuacin de return se coloca el nombre del atributo. Si se define un tipo de retorno es obligatorio que exista al menos un return dentro del cuerpo del mtodo. Ejemplo 3 public class Rectangulo { private double base; private double altura; public void asignarValores(double xBase, double xAltura) { base = xBase; altura = xAltura; } } Figura 19. Ejemplo de mtodo con ms de un parametro En el ejemplo de la Figura 19 el mtodo asignarValores() posee dos parmetros. Cada parmetro es una declaracin de una variable y se hallan separados por una coma. Uso de la palabra reservada this en JAVA La palabra reservada this indica que esa clase est por invocar un atributo o un mtodo que posea. Para entender qu significa esto observe los siguientes ejemplos: Ejemplo 3 public class Circulo { private double radio; public void asignarValorRadio(double radio) { radio = radio; } } Figura 20. Error tipico al no comprender la precedencia de ambitos Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura Pgina 13

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

En el ejemplo de la Figura 20. El mtodo asignarValorRadio() tiene como finalidad asignar el valor del parmetro al atributo radio. Observe que el parmetro se llama exactamente igual que el atributo. El mbito del parmetro es el cuerpo del mtodo. El mbito del atributo es toda la clase. El parmetro tiene mayor precedencia que el atributo porque ha sido definida en el bloque de cdigo involucrado (el cuerpo del mtodo, recuerde que los parmetros son variables definidas para el mtodo). Por lo tanto la asignacin radio = radio; asigna el valor del parmetro al parmetro!, con lo cual nunca se asigna el valor a atributo. Para corregir este error sin necesidad de cambiar el nombre del parmetro se puede utilizar la palabra this de la siguiente forma. public class Circulo { private double radio; public void asignarValorRadio(double radio) { this.radio = radio; } } Figura 21. Uso de this para invocar un atributo de la misma clase La palabra this puede ser utilizada tambin para invocar un mtodo de la misma clase, por ejemplo: public class Circulo { private double radio; public void asignarValorRadio(double radio) { this.radio = radio; } public double obtenerRadio() { return radio; // tambin puede ser return this.radio } public void mostrarDatos() { System.out.println(this.obtenerRadio()); } } Figura 22. Uso de this para invocar un metodo dentro de la misma clase

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 14

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Encapsulacin de atributos en JAVA. Las propiedades Para implementar en JAVA la encapsulacin de los atributos, se recurre a la aplicacin de propiedades de primer nivel. Una propiedad de primer nivel consiste en definir un atributo en forma privada, de tal forma que solo puede ser accedida para lectura y escritura por los mtodos correspondientes. Estos mtodos normalmente se conocen como mtodos accesores y son dos: get (para poder obtener el valor de un atributo) y set (para asignar un valor a un atributo). Por lo tanto la propiedad de un atributo consiste en la definicin del mismo en forma privada ms sus respectivos mtodos accesores. public class Circulo { private double radio; public void setRadio(double radio) { this.radio = radio; } public double getRadio() { return radio; } } Figura 23. Definicin de la propiedad radio En la Figura 23 se ha creado la propiedad radio. Es una propiedad porque: 1) El atributo radio es private 2) Se ha creado su mtodo get(). La nomenclatura que se adopta para los mtodos get es iniciar con la palabra get seguida del nombre del atributo. 3) Se ha creado su mtodo set(). La nomenclatura que se adopta para los mtodos set es iniciar con la palabra set seguida del nombre del atributo. Creacin de Objetos. Los constructores Para crear objetos a partir de una clase es necesario que esa clase posea un constructor. Un constructor es un bloque de cdigo cuyo objetivo principal es indicar que suceder al momento de crear un objeto. Por defecto JAVA define para cada clase un constructor sin parmetros que tiene la siguiente forma: public nombre_clase() { } Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura Pgina 15

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

El nombre del constructor debe coincidir siempre con el nombre de la clase. Las llaves permiten definir el cdigo que se desea que se ejecute inmediatamente despus de crear el objeto. Para crear el objeto a partir de una clase se debe declarar una variable cuyo tipo sea la clase de la cual se crea el objeto y realizar una asignacin usando la palabra new y un constructor de la clase. Ejemplo public class MiPrimerEjemplo { public static void main(String[] args { Circulo unCirculo = new Circulo(); } } Resultado: Se crea el objeto denominado unCirculo

Figura 24. Ejemplo de creacin de un objeto En el ejemplo de la Figura 24 se crea un objeto de la clase definida en la Figura 23. Observe que no se ha definido en la clase Circulo (Figura 23) un constructor y sin embargo se ha podido crear el objeto unCirculo porque JAVA crea por defecto un constructor para todas las clases. La forma de este constructor puede ser explcitamente declarada y tendra la siguiente forma: public class Circulo { private double radio; public Circulo() { } public void setRadio(double radio) { this.radio = radio; } public double getRadio() { return radio; } } Figura 25. Definicin explicita del constructor por defecto de la clase Circulo Una clase puede poseer ms de un constructor, dado que todos deben llamarse igual que la clase la diferencia entre ellos radica por la lista de parmetros que posea el constructor. Los constructores con parmetros son utilizados generalmente para establecer el estado del objeto al momento de su creacin. Es decir asignar un valor especfico a cada uno de sus atributos en el momento de su creacin. Si se crean constructores con parmetros es necesario explicitar la definicin del constructor por defecto. Por ejemplo: Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura Pgina 16

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

public class Circulo { private double radio; public Circulo() { } public Circulo(double radio) { this.radio = radio; // o this.setRadio(radio); }

public void setRadio(double radio) { this.radio = radio; } public double getRadio() { return radio; } } Figura 26. Definicin de constructores parametrizados en la clase Circulo Observe que se ha definido un constructor con un parmetro, cuyo objetivo es asignar un valor al radio del objeto en el momento de la creacin. Adems observe que se vuelve obligatorio definir el constructor por defecto. La ejecucin del mismo puede ser de la siguiente forma: public class MiPrimerEjemplo { public static void main(String[] args { Circulo unCirculo = new Circulo(); Circulo otroCirculo = new Circulo(23.6); } Resultado: Se crea el objeto denominado unCirculo utilizando el constructo pr defecto. Se crea el objeto otroCirculo utilizando el constructor parametrizado

Figura 27. Ejemplo de creacin de un objeto

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 17

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

Observe que JAVA puede determinar cul es constructor a utilizar en el momento de la creacin de un objeto basndose en el tipo, orden y cantidad de argumentos que se le pase al constructor definido luego de la palabra new. Envi de mensajes entre objetos. Protocolo de Mensajes JAVA Una vez que se crean los objetos con sus atributos y mtodos es necesario ejecutar la aplicacin y que ejecuten sus mtodos. Algunos objetos requerirn los mtodos de otros objetos. Para que pueda existir la posibilidad de invocar esos mtodos los mismos no deben haber sido definidos como privados. Los mtodos de un objeto estarn disponibles para todos los otros objetos nicamente si han sido definidos como pblicos. De esta forma estos mtodos son considerados Servicios. La forma en la cual un objeto puede invocar un servicio est definida por un conjunto de reglas que se conoce con el nombre de Protocolo de mensajes de JAVA. Este protocolo establece lo siguiente: Un mtodo de un objeto solo brinda su nombre, ocultando su implementacin. Es decir cada objeto solo ofrece el nombre de su mtodo para que sea accedido, pero no se puede acceder al cdigo del mismo (Encapsulacin de mtodos). Para que un objeto pueda solicitar un mtodo de otro objeto debe hacerlo de la siguiente forma: Nombre_objeto . nombre_mtodo(); Ejemplo public class MiPrimerEjemplo { public static void main(String[] args { Circulo unCirculo = new Circulo(); Circulo otroCirculo = new Circulo(23.6); unCirculo.setRadio(15.7); unCirculo.mostrarDatos(); otroCirculo.mostrarDatos(); } } Figura 28. Ejemplo de creacin de un objeto Este ejemplo utiliza la definicin generada en la Figura 29. Observe que se crean dos objetos de tipo Circulo. Se requiere poder asignarle a unCirculo un valor a su radio. Entonces se enva a ese objeto la invocacin del mtodo setRadio(). Como este mtodo fue definido con un parmetro es necesario enviarle un argumento. En este caso el argumento es el valor 15.7; Luego cada objeto invoca su mtodo mostrarDatos() porque el programador requiere que los mismos sean mostrados por consola. De esta forma se invocan los mtodos de un objeto, con una sentencia en la cual primero se referencia el objeto, seguido de un punto y finalmente el nombre del mtodo, el cual puede o no recibir argumentos, segn como lo haya creado el programador. Resultado: 15.7 23.6

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 18

Asignatura: Programacin Orientada a Objetos Carrera: Analista Programador Universitario Plan 2008 Facultad de Ingeniera Universidad Nacional de Jujuy

public class Circulo { private double radio; public Circulo() { } public Circulo(double radio) { this.radio = radio; // o this.setRadio(radio); }

public void setRadio(double radio) { this.radio = radio; } public double getRadio() { return radio; } public void mostrarDatos() { System.out.println(this.getRadio()); } } Figura 29. Definicin de la clase Circulo

Autor: Ingeniero Ariel Alejandro Vega Profesor Adjunto de la Asignatura

Pgina 19