TECNICAS DE PROGRAMACION                Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBRO...
TECNICAS DE PROGRAMACION                Universidad Católica Los Angeles de ChimboteEl nivel de acceso public permite a ac...
TECNICAS DE PROGRAMACION                 Universidad Católica Los Angeles de ChimboteStaticA pesar de lo que podría parece...
TECNICAS DE PROGRAMACION                Universidad Católica Los Angeles de Chimboteo bien desde una instancia cualquiera ...
TECNICAS DE PROGRAMACION                  Universidad Católica Los Angeles de ChimboteSi por algún motivo requerimos cualq...
TECNICAS DE PROGRAMACION                  Universidad Católica Los Angeles de ChimboteAlgo muy a tener en cuenta a la hora...
TECNICAS DE PROGRAMACION                 Universidad Católica Los Angeles de Chimbote  class Empleado{      private String...
TECNICAS DE PROGRAMACION               Universidad Católica Los Angeles de Chimbote      public String getApellidos()     ...
TECNICAS DE PROGRAMACION                 Universidad Católica Los Angeles de ChimboteInterpretación de la programación:En ...
TECNICAS DE PROGRAMACION                Universidad Católica Los Angeles de Chimbote      double p, r;      p=(lado1+lado2...
TECNICAS DE PROGRAMACION                    Universidad Católica Los Angeles de Chimbote                                  ...
TECNICAS DE PROGRAMACION                   Universidad Católica Los Angeles de Chimbote    public double areaCuadrado(int ...
TECNICAS DE PROGRAMACION                Universidad Católica Los Angeles de Chimbotepublic class CalculoAreaPerimetro{  pu...
TECNICAS DE PROGRAMACION                 Universidad Católica Los Angeles de Chimbote       System.out.println("El area de...
TECNICAS DE PROGRAMACION                Universidad Católica Los Angeles de Chimbote3. Asi debe quedar luego de colocar la...
TECNICAS DE PROGRAMACION                Universidad Católica Los Angeles de Chimbote4. Luego a proceder a ejecutar la apli...
Próxima SlideShare
Cargando en…5
×

Sesion 07 nivel_acceso_miembros_clases

229 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
229
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
4
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Sesion 07 nivel_acceso_miembros_clases

  1. 1. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASELos 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 claveasociada, pero se suele conocer como default o package-private.Si no especificamos ningún modificador de acceso se utiliza el nivel de acceso pordefecto, que consiste en que el elemento puede ser accedido sólo desde lasclases que pertenezcan al mismo paquete.Docente: Ing. Martín Salcedo Quiñones Pagina: 1
  2. 2. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de ChimboteEl nivel de acceso public permite a acceder al elemento desde cualquier clase,independientemente de que esta pertenezca o no al paquete en que se encuentrael elemento.private, por otro lado, es el modificador más restrictivo y especifica que loselementos que lo utilizan sólo pueden ser accedidos desde la clase en la que seencuentran. Este modificador sólo puede utilizarse sobre los miembros de unaclase y sobre interfaces y clases internas, no sobre clases o interfaces de primernivel, dado que esto no tendría sentido.Es importante destacar también que private convierte los elementos en privadospara otras clases, no para otras instancias de la clase. Es decir, un objeto de unadeterminada clase puede acceder a los miembros privados de otro objeto de lamisma clase.El modificador protected, por último, indica que los elementos sólo pueden seraccedidos desde su mismo paquete (como el acceso por defecto) y desdecualquier clase que extienda la clase en que se encuentra, independientemente desi esta se encuentra en el mismo paquete o no. Este modificador, como private, notiene sentido a nivel de clases o interfaces no internas.Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:Docente: Ing. Martín Salcedo Quiñones Pagina: 2
  3. 3. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de ChimboteStaticA pesar de lo que podría parecer por su nombre, heredado de la terminología deC++, el modificador static no sirve para crear constantes, sino para crearmiembros que pertenecen a la clase, y no a una instancia de la clase. Estoimplica, entre otras cosas, que no es necesario crear un objeto de la clase parapoder acceder a estos atributos y métodos. Este es el motivo por el cual esobligatorio que main se declare como static; de esta forma no tenemos que ofrecerun constructor vacío para la clase que contiene el método, o indicar de algunaforma a la máquina virtual cómo instanciar la clase.Un uso del modificador static sería, por ejemplo, crear un contador de los objetosde la clase que se han creado, incrementando la variable estática en elconstructor:Como es de esperar, dado que tenemos acceso a los atributos sin necesidad decrear un objeto, los atributos estáticos como usuarios no se inicializan al crear elobjeto, sino al cargar la clase.Podemos acceder a estos métodos y atributos bien desde la propia claseDocente: Ing. Martín Salcedo Quiñones Pagina: 3
  4. 4. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimboteo bien desde una instancia cualquiera de la clase:Otro uso sería el de crear una recopilación de métodos y atributos relacionados alos que poder acceder sin necesidad de crear un objeto asociado, que podría notener sentido o no ser conveniente, como es el caso de la clase Math.Una característica no muy conocida que se introdujo en Java 1.5 son los staticimports, una sentencia similar al import habitual, con la salvedad de que estaimporta miembros estáticos de las clases, en lugar de clases de los paquetes,permitiendo utilizar estos miembros sin indicar el espacio de nombres en el que seencuentran. El ejemplo anterior podría haberse escrito también de la siguienteforma utilizando esta característica:Docente: Ing. Martín Salcedo Quiñones Pagina: 4
  5. 5. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de ChimboteSi por algún motivo requerimos cualquier tipo de computación para inicializar nuestrasvariables estáticas, utilizaremos lo que se conoce como bloque estático o inicializadorestático, el cuál se ejecuta una sola vez, cuando se carga la clase.Por último, una curiosidad relacionada que podéis utilizar para romper el hielo con unaprogramadora Java es que podemos utilizar un bloque static para escribir un programasencillo sin necesidad de un main, añadiendo una llamada a System.exit para que elprograma termine tras cargar la clase sin intentar llamar al método mainFinalIndica que una variable, método o clase no se va a modificar, lo cuál puede ser útilpara añadir más semántica, por cuestiones de rendimiento, y para detectarerrores.Si una variable se marca como final, no se podrá asignar un nuevo valor a lavariable. Si una clase se marca como final, no se podrá extender la clase. Si es unmétodo el que se declara como final, no se podrá sobreescribir.Docente: Ing. Martín Salcedo Quiñones Pagina: 5
  6. 6. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de ChimboteAlgo muy a tener en cuenta a la hora de utilizar este modificador es que si es unobjeto lo que hemos marcado como final, esto no nos impedirá modificar el objetoen sí, sino tan sólo usar el operador de asignación para cambiar la referencia. Porlo tanto el siguiente código no funcionaría:Pero, sin embargo, este si:Miembros de clase EstaticosCada objeto de una clase tiene su propia copia de todas las variables de ejemplarde clase. En ciertos casos, una sola copia de la variable en particular debe sercompartida por todos los objetos de la clase. Por esta y otras razones utilizamoslas variables de clase static (estáticas). Una variable de clase static representainformación “que abarca toda la clase”. La declaración de un método estáticocomienza con la palabra clave static.PROGRAMAS RESUELTOS1) Crear una clase Empleado que haga uso del modificador static y luego crea dos objetos de Empleados. import java.io.*;Docente: Ing. Martín Salcedo Quiñones Pagina: 6
  7. 7. TECNICAS DE PROGRAMACION Universidad Católica 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. Martín Salcedo Quiñones Pagina: 7
  8. 8. TECNICAS DE PROGRAMACION Universidad Católica 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("Número de objetos creados : "+e1.getContador()); Empleado e2= new Empleado("Villanueva","Nelsa"); System.out.println(e2); System.out.println("Número de objetos creados : "+Empleado.getContador()); } }Docente: Ing. Martín Salcedo Quiñones Pagina: 8
  9. 9. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de ChimboteInterpretación de la programación:En el programa anterior usamos un atributo private static y un método public static.El atributo contador se inicializa en cero por omisión. Esta variable va contando elnumero de Objetos de la Clase Empleado que se van creando, esta variable se vaincrementando en el constructor cada vez que se crea un objeto.Para saber cuantos objetos hemos creados llamamos al método estaticogetContador() que devuelve el valor de la variable contador.Un método declarado static no puede acceder a miembros de clase no estáticos.Un método static no tiene referencia this porque las variables de clase static y losmétodos 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 método extático no es necesario usar un objeto de la clase parllamar al método, solo se usa el nombre de la Clase y luego el métodogetContador().2) Crea una clase denominada FigurasGeometricas y calcula el área y el perímetro del cuadrado, rectángulo y del triangulo. Hacerlo con métodos estáticos y métodos no estáticos. Respuesta con métodos estáticos: 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. Martín Salcedo Quiñones Pagina: 9
  10. 10. TECNICAS DE PROGRAMACION Universidad Católica 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. Martín Salcedo Quiñones Pagina: 10
  11. 11. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote System.out.println("El perimetro del cuadrado es: "+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 rectangulo es: "+FigurasGeometricas.areaRectangulo(l1,l2)); System.out.println("El perimetro del rectangulo es: "+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 triangulo es: "+FigurasGeometricas.areaTriangulo(l1,l2,l3)); System.out.println("El perimetro del rectangulo es: "+FigurasGeometricas.perimetroTriangulo(l1,l2,l3)); } } }Respuesta con métodos no estáticos:import java.io.*;class FigurasGeometricas{Docente: Ing. Martín Salcedo Quiñones Pagina: 11
  12. 12. TECNICAS DE PROGRAMACION Universidad Católica 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. Martín Salcedo Quiñones Pagina: 12
  13. 13. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbotepublic 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. Martín Salcedo Quiñones Pagina: 13
  14. 14. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote System.out.println("El area del triangulo es: "+F.areaTriangulo(l1,l2,l3)); System.out.println("El perimetro del rectangulo es:"+F.perimetroTriangulo(l1,l2,l3)); } }}EJECUTANDO LA PRIMERA APLICACION1. Crea un proyecto denominado: Sesion07_Aplicaciones. Observa que debes crear la clase principal PruebaEmpleadoVariableEstatica dentro del paquete sesion07_aplicaciones. Luego dar clic en el botón de comando Terminar.2. Ahora se observa el entorno de NetBeans listo para colocar la programación de la primera aplicación.Docente: Ing. Martín Salcedo Quiñones Pagina: 14
  15. 15. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote3. Asi debe quedar luego de colocar las instrucciones de la primera aplicación.Docente: Ing. Martín Salcedo Quiñones Pagina: 15
  16. 16. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote4. Luego a proceder a ejecutar la aplicación. Posteriormente dar clic en Ejecutar archivo.Docente: Ing. Martín Salcedo Quiñones Pagina: 16

×