Anda di halaman 1dari 16

TECNICAS DE PROGRAMACION

Universidad Catlica Los Angeles de Chimbote

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.

Docente: Ing. Martn Salcedo Quiones

Pagina: 1

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote 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. 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. El modificador 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. Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:

Docente: Ing. Martn Salcedo Quiones

Pagina: 2

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote Static A pesar de lo que podra parecer por su nombre, heredado de la terminologa de C++, el modificador static no sirve para crear constantes, sino para crear miembros que pertenecen a la clase, y no a una instancia de la clase. Esto implica, entre otras cosas, que no es necesario crear un objeto de la clase para poder acceder a estos atributos y mtodos. Este es el motivo por el cual es obligatorio que main se declare como static; de esta forma no tenemos que ofrecer un constructor vaco para la clase que contiene el mtodo, o indicar de alguna forma a la mquina virtual cmo instanciar la clase. Un uso del modificador static sera, por ejemplo, crear un contador de los objetos de la clase que se han creado, incrementando la variable esttica en el constructor:

Como es de esperar, dado que tenemos acceso a los atributos sin necesidad de crear un objeto, los atributos estticos como usuarios no se inicializan al crear el objeto, sino al cargar la clase. Podemos acceder a estos mtodos y atributos bien desde la propia clase

Docente: Ing. Martn Salcedo Quiones

Pagina: 3

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote o bien desde una instancia cualquiera de la clase:

Otro uso sera el de crear una recopilacin de mtodos y atributos relacionados a los que poder acceder sin necesidad de crear un objeto asociado, que podra no tener sentido o no ser conveniente, como es el caso de la clase Math.

Una caracterstica no muy conocida que se introdujo en Java 1.5 son los static imports, una sentencia similar al import habitual, con la salvedad de que esta importa miembros estticos de las clases, en lugar de clases de los paquetes, permitiendo utilizar estos miembros sin indicar el espacio de nombres en el que se encuentran. El ejemplo anterior podra haberse escrito tambin de la siguiente forma utilizando esta caracterstica:

Docente: Ing. Martn Salcedo Quiones

Pagina: 4

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote Si por algn motivo requerimos cualquier tipo de computacin para inicializar nuestras variables estticas, utilizaremos lo que se conoce como bloque esttico o inicializador esttico, el cul se ejecuta una sola vez, cuando se carga la clase.

Por ltimo, una curiosidad relacionada que podis utilizar para romper el hielo con una programadora Java es que podemos utilizar un bloque static para escribir un programa sencillo sin necesidad de un main, aadiendo una llamada a System.exit para que el programa termine tras cargar la clase sin intentar llamar al mtodo main

Final Indica que una variable, mtodo o clase no se va a modificar, lo cul puede ser til para aadir ms semntica, por cuestiones de rendimiento, y para detectar errores. Si una variable se marca como final, no se podr asignar un nuevo valor a la variable. Si una clase se marca como final, no se podr extender la clase. Si es un mtodo el que se declara como final, no se podr sobreescribir.

Docente: Ing. Martn Salcedo Quiones

Pagina: 5

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote Algo muy a tener en cuenta a la hora de utilizar este modificador es que si es un objeto lo que hemos marcado como final, esto no nos impedir modificar el objeto en s, sino tan slo usar el operador de asignacin para cambiar la referencia. Por lo tanto el siguiente cdigo no funcionara:

Pero, sin embargo, este si:

Miembros de clase Estaticos Cada objeto de una clase tiene su propia copia de todas las variables de ejemplar de clase. En ciertos casos, una sola copia de la variable en particular debe ser compartida por todos los objetos de la clase. Por esta y otras razones utilizamos las variables de clase static (estticas). Una variable de clase static representa informacin que abarca toda la clase. La declaracin de un mtodo esttico comienza con la palabra clave static. PROGRAMAS RESUELTOS 1) Crear una clase Empleado que haga uso del modificador static y luego crea dos objetos de Empleados. import java.io.*;

Docente: Ing. Martn Salcedo Quiones

Pagina: 6

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote class Empleado{ private String nombres; private String apellidos; private static int contador; public Empleado(String nom, String ape) { nombres=nom; apellidos=ape; contador++; } public void finalize() { --contador; } public void setNombres(String nom) { nombres=nom; } public void setApellidos(String ape) { apellidos=ape; } public static void setContador(int cont) { contador=cont; } public String getNombres() { return nombres; }

Docente: Ing. Martn Salcedo Quiones

Pagina: 7

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote

public String getApellidos() { return apellidos; } public static int getContador() { return contador; } public String toString() { return apellidos+" "+nombres; } } public class PruebaEmpleadoVariableEstatica{ public static void main(String args[]) throws IOException { System.out.println(Numero de objetos creados : +Empleado.getContador()); Empleado e1= new Empleado("Torres","Fidel"); System.out.println(e1); System.out.println("Nmero de objetos creados : "+e1.getContador()); Empleado e2= new Empleado("Villanueva","Nelsa"); System.out.println(e2); System.out.println("Nmero de objetos creados : "+Empleado.getContador()); } }

Docente: Ing. Martn Salcedo Quiones

Pagina: 8

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote Interpretacin de la programacin: En el programa anterior usamos un atributo private static y un mtodo public static. El atributo contador se inicializa en cero por omisin. Esta variable va contando el numero de Objetos de la Clase Empleado que se van creando, esta variable se va incrementando en el constructor cada vez que se crea un objeto. Para saber cuantos objetos hemos creados llamamos al mtodo estatico getContador() que devuelve el valor de la variable contador. Un mtodo declarado static no puede acceder a miembros de clase no estticos. Un mtodo static no tiene referencia this porque las variables de clase static y los mtodos static existen independientemente de que existan o no objetos de clase. En la primera linea del Programa colocamos llamamos Empleado.getContador() pues como es un mtodo exttico no es necesario usar un objeto de la clase par llamar al mtodo, solo se usa el nombre de la Clase y luego el mtodo getContador(). 2) Crea una clase denominada FigurasGeometricas y calcula el rea y el permetro del cuadrado, rectngulo y del triangulo. Hacerlo con mtodos estticos y mtodos no estticos. Respuesta con mtodos estticos: import java.io.*; class FigurasGeometricas { public static double areaCuadrado(int lado1) { return lado1*lado1; } public static double areaRectangulo(int lado1, int lado2) { return lado1*lado2; } public static double areaTriangulo(int lado1, int lado2, int lado3) {

Docente: Ing. Martn Salcedo Quiones

Pagina: 9

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote double p, r; p=(lado1+lado2+lado3)/2.0; r=p*(p-lado1)*(p-lado2)*(p-lado3); if (r>0) return Math.sqrt(r); else return 0.0; } public static int perimetroCuadrado(int lado1) { return 4*lado1; } public static int perimetroRectangulo(int lado1, int lado2) { return 2*lado1+2*lado2; } public static int perimetroTriangulo(int lado1, int lado2, int lado3) { return lado1+lado2+lado3; } } public class CalculoAreaPerimetro { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int opcion, l1,l2,l3; System.out.println("CALCULO DEL AREA Y PERIMETRO"); System.out.print("Ingrese 1: cuadrado, 2:rectangulo, 3:triangulo -> "); opcion=Integer.parseInt(br.readLine()); if (opcion==1) { System.out.print("Ingrese el valor del lado del cuadrado: "); l1=Integer.parseInt(br.readLine()); System.out.println("El area del cuadrado es: "+FigurasGeometricas.areaCuadrado(l1));

Docente: Ing. Martn Salcedo Quiones

Pagina: 10

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote System.out.println("El perimetro del "+FigurasGeometricas.perimetroCuadrado(l1)); } if (opcion==2) { System.out.print("Ingrese el valor del lado 1 del rectangulo: "); l1=Integer.parseInt(br.readLine()); System.out.print("Ingrese el valor del lado 2 del rectangulo: "); l2=Integer.parseInt(br.readLine()); System.out.println("El area del "+FigurasGeometricas.areaRectangulo(l1,l2)); System.out.println("El perimetro del "+FigurasGeometricas.perimetroRectangulo(l1,l2)); } if (opcion==3) { System.out.print("Ingrese el valor del lado 1 del triangulo: "); l1=Integer.parseInt(br.readLine()); System.out.print("Ingrese el valor del lado 2 del triangulo: "); l2=Integer.parseInt(br.readLine()); System.out.print("Ingrese el valor del lado 3 del triangulo: "); l3=Integer.parseInt(br.readLine()); System.out.println("El area del "+FigurasGeometricas.areaTriangulo(l1,l2,l3)); System.out.println("El perimetro del "+FigurasGeometricas.perimetroTriangulo(l1,l2,l3)); } } } Respuesta con mtodos no estticos: import java.io.*; class FigurasGeometricas { cuadrado es:

rectangulo rectangulo

es: es:

triangulo rectangulo

es: es:

Docente: Ing. Martn Salcedo Quiones

Pagina: 11

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote public double areaCuadrado(int lado1) { return lado1*lado1; } public double areaRectangulo(int lado1, int lado2) { return lado1*lado2; } public double areaTriangulo(int lado1, int lado2, int lado3) { double p, r; p=(lado1+lado2+lado3)/2.0; r=p*(p-lado1)*(p-lado2)*(p-lado3); if (r>0) return Math.sqrt(r); else return 0.0; } public int perimetroCuadrado(int lado1) { return 4*lado1; } public int perimetroRectangulo(int lado1, int lado2) { return 2*lado1+2*lado2; } public int perimetroTriangulo(int lado1, int lado2, int lado3) { return lado1+lado2+lado3; } }

Docente: Ing. Martn Salcedo Quiones

Pagina: 12

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote

public class CalculoAreaPerimetro { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int opcion, l1,l2,l3; FigurasGeometricas F=new FigurasGeometricas(); System.out.println("CALCULO DEL AREA Y PERIMETRO"); System.out.print("Ingrese 1: cuadrado, 2:rectangulo, 3:triangulo -> "); opcion=Integer.parseInt(br.readLine()); if (opcion==1) { System.out.print("Ingrese el valor del lado del cuadrado: "); l1=Integer.parseInt(br.readLine()); System.out.println("El area del cuadrado es: "+F.areaCuadrado(l1)); System.out.println("El perimetro del cuadrado es: "+F.perimetroCuadrado(l1)); } if (opcion==2) { System.out.print("Ingrese el valor del lado 1 del rectangulo: "); l1=Integer.parseInt(br.readLine()); System.out.print("Ingrese el valor del lado 2 del rectangulo: "); l2=Integer.parseInt(br.readLine()); System.out.println("El area del rectangulo es: "+F.areaRectangulo(l1,l2)); System.out.println("El perimetro del rectangulo es: "+F.perimetroRectangulo(l1,l2)); } if (opcion==3) { System.out.print("Ingrese el valor del lado 1 del triangulo: "); l1=Integer.parseInt(br.readLine()); System.out.print("Ingrese el valor del lado 2 del triangulo: "); l2=Integer.parseInt(br.readLine()); System.out.print("Ingrese el valor del lado 3 del triangulo: "); l3=Integer.parseInt(br.readLine());

Docente: Ing. Martn Salcedo Quiones

Pagina: 13

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote System.out.println("El area del triangulo es: "+F.areaTriangulo(l1,l2,l3)); System.out.println("El perimetro del rectangulo "+F.perimetroTriangulo(l1,l2,l3)); } } }

es:

EJECUTANDO LA PRIMERA APLICACION 1. Crea un proyecto denominado: Sesion07_Aplicaciones.

Observa que debes crear la clase principal PruebaEmpleadoVariableEstatica dentro del paquete sesion07_aplicaciones. Luego dar clic en el botn de comando Terminar. 2. Ahora se observa el entorno de NetBeans listo para colocar la programacin de la primera aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 14

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote

3. Asi debe quedar luego de colocar las instrucciones de la primera aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 15

TECNICAS DE PROGRAMACION
Universidad Catlica Los Angeles de Chimbote 4. Luego a proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo.

Docente: Ing. Martn Salcedo Quiones

Pagina: 16