SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
TECNICAS DE PROGRAMACION
                Universidad Católica 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 ningún modificador de acceso se utiliza el nivel de acceso por
defecto, que consiste en que el elemento puede ser accedido sólo desde las
clases que pertenezcan al mismo paquete.




Docente: Ing. Martín Salcedo Quiñones                               Pagina: 1
TECNICAS DE PROGRAMACION
                Universidad Católica 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 más restrictivo y especifica que los
elementos que lo utilizan sólo pueden ser accedidos desde la clase en la que se
encuentran. Este modificador sólo 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 tendría sentido.

Es importante destacar también 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 sólo 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. Martín Salcedo Quiñones                               Pagina: 2
TECNICAS DE PROGRAMACION
                 Universidad Católica Los Angeles de Chimbote

Static
A pesar de lo que podría parecer por su nombre, heredado de la terminología 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 métodos. Este es el motivo por el cual es
obligatorio que main se declare como static; de esta forma no tenemos que ofrecer
un constructor vacío para la clase que contiene el método, o indicar de alguna
forma a la máquina virtual cómo instanciar la clase.
Un uso del modificador static sería, por ejemplo, crear un contador de los objetos
de la clase que se han creado, incrementando la variable estática en el
constructor:




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




Docente: Ing. Martín Salcedo Quiñones                               Pagina: 3
TECNICAS DE PROGRAMACION
                Universidad Católica Los Angeles de Chimbote

o bien desde una instancia cualquiera de la clase:




Otro uso sería el de crear una recopilación de métodos y atributos relacionados a
los que poder acceder sin necesidad de crear un objeto asociado, que podría no
tener 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 static
imports, una sentencia similar al import habitual, con la salvedad de que esta
importa 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 se
encuentran. El ejemplo anterior podría haberse escrito también de la siguiente
forma utilizando esta característica:




Docente: Ing. Martín Salcedo Quiñones                              Pagina: 4
TECNICAS DE PROGRAMACION
                  Universidad Católica Los Angeles de Chimbote

Si por algún motivo requerimos cualquier tipo de computación para inicializar nuestras
variables estáticas, utilizaremos lo que se conoce como bloque estático o inicializador
está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 una
programadora Java es que podemos utilizar un bloque static para escribir un programa
sencillo sin necesidad de un main, añadiendo una llamada a System.exit para que el
programa termine tras cargar la clase sin intentar llamar al método main




Final

Indica que una variable, método o clase no se va a modificar, lo cuál puede ser útil
para añadir más semántica, 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
método el que se declara como final, no se podrá sobreescribir.




Docente: Ing. Martín Salcedo Quiñones                                      Pagina: 5
TECNICAS DE PROGRAMACION
                  Universidad Católica 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 sólo usar el operador de asignación para cambiar la referencia. Por
lo tanto el siguiente código no funcionaría:




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 (estáticas). Una variable de clase static representa
información “que abarca toda la clase”. La declaración de un método estático
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. Martín Salcedo Quiñones                               Pagina: 6
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
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
TECNICAS DE PROGRAMACION
                 Universidad Católica Los Angeles de Chimbote

Interpretació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 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 método estatico
getContador() 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 los
mé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 par
llamar al método, solo se usa el nombre de la Clase y luego el método
getContador().


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
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
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
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
TECNICAS DE PROGRAMACION
                Universidad Católica 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. Martín Salcedo Quiñones                               Pagina: 13
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 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 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
TECNICAS DE PROGRAMACION
                Universidad Católica Los Angeles de Chimbote




3. Asi debe quedar luego de colocar las instrucciones de la primera aplicación.




Docente: Ing. Martín Salcedo Quiñones                             Pagina: 15
TECNICAS DE PROGRAMACION
                Universidad Católica Los Angeles de Chimbote

4. Luego a proceder a ejecutar la aplicación.




   Posteriormente dar clic en Ejecutar archivo.




Docente: Ing. Martín Salcedo Quiñones                      Pagina: 16

Weitere ähnliche Inhalte

Was ist angesagt?

Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Renny Batista
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetoschutas666
 
Constructor Y Destructor
Constructor Y DestructorConstructor Y Destructor
Constructor Y DestructorTecnologico
 
10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadoresClara Patricia Avella Ibañez
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetoslindacajaperuiz
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosguest160f88
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Ezer Ayala Mutul
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)Cristian
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOAnabel Jaramillo
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosale8819
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visualLibertad25
 
Poo Java
Poo JavaPoo Java
Poo Javaeccutpl
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completadoKai Exo
 

Was ist angesagt? (20)

Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Constructor Y Destructor
Constructor Y DestructorConstructor Y Destructor
Constructor Y Destructor
 
10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores10 Curso de POO en java - métodos modificadores y analizadores
10 Curso de POO en java - métodos modificadores y analizadores
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Poo ok
Poo okPoo ok
Poo ok
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1
 
Tema2
Tema2Tema2
Tema2
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visual
 
9.herencia en java
9.herencia en java9.herencia en java
9.herencia en java
 
Unidad 2 clases y objetos
Unidad 2 clases y objetosUnidad 2 clases y objetos
Unidad 2 clases y objetos
 
Poo Java
Poo JavaPoo Java
Poo Java
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 

Ähnlich wie Sesion 07 nivel_acceso_miembros_clases

Ähnlich wie Sesion 07 nivel_acceso_miembros_clases (20)

JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 
Datos previos
Datos previosDatos previos
Datos previos
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetos
 
Conceptos basicos POO
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POO
 
Clase viii
Clase viiiClase viii
Clase viii
 
Lp2docclases
Lp2docclasesLp2docclases
Lp2docclases
 
Java
JavaJava
Java
 
Clase 2 poo java
Clase 2 poo javaClase 2 poo java
Clase 2 poo java
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
 
INTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVA
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
Clases y objetos
Clases y objetosClases y objetos
Clases y objetos
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10
 
Intro Java
Intro JavaIntro Java
Intro Java
 
manual de C#
manual de C#manual de C#
manual de C#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4
 

Sesion 07 nivel_acceso_miembros_clases

  • 1. TECNICAS DE PROGRAMACION Universidad Católica 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 ningún modificador de acceso se utiliza el nivel de acceso por defecto, que consiste en que el elemento puede ser accedido sólo desde las clases que pertenezcan al mismo paquete. Docente: Ing. Martín Salcedo Quiñones Pagina: 1
  • 2. TECNICAS DE PROGRAMACION Universidad Católica 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 más restrictivo y especifica que los elementos que lo utilizan sólo pueden ser accedidos desde la clase en la que se encuentran. Este modificador sólo 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 tendría sentido. Es importante destacar también 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 sólo 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. Martín Salcedo Quiñones Pagina: 2
  • 3. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote Static A pesar de lo que podría parecer por su nombre, heredado de la terminología 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 métodos. Este es el motivo por el cual es obligatorio que main se declare como static; de esta forma no tenemos que ofrecer un constructor vacío para la clase que contiene el método, o indicar de alguna forma a la máquina virtual cómo instanciar la clase. Un uso del modificador static sería, por ejemplo, crear un contador de los objetos de la clase que se han creado, incrementando la variable estática en el constructor: Como es de esperar, dado que tenemos acceso a los atributos sin necesidad de crear un objeto, los atributos estáticos como usuarios no se inicializan al crear el objeto, sino al cargar la clase. Podemos acceder a estos métodos y atributos bien desde la propia clase Docente: Ing. Martín Salcedo Quiñones Pagina: 3
  • 4. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote o bien desde una instancia cualquiera de la clase: Otro uso sería el de crear una recopilación de métodos y atributos relacionados a los que poder acceder sin necesidad de crear un objeto asociado, que podría no tener 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 static imports, una sentencia similar al import habitual, con la salvedad de que esta importa 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 se encuentran. El ejemplo anterior podría haberse escrito también de la siguiente forma utilizando esta característica: Docente: Ing. Martín Salcedo Quiñones Pagina: 4
  • 5. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote Si por algún motivo requerimos cualquier tipo de computación para inicializar nuestras variables estáticas, utilizaremos lo que se conoce como bloque estático o inicializador está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 una programadora Java es que podemos utilizar un bloque static para escribir un programa sencillo sin necesidad de un main, añadiendo una llamada a System.exit para que el programa termine tras cargar la clase sin intentar llamar al método main Final Indica que una variable, método o clase no se va a modificar, lo cuál puede ser útil para añadir más semántica, 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 método el que se declara como final, no se podrá sobreescribir. Docente: Ing. Martín Salcedo Quiñones Pagina: 5
  • 6. TECNICAS DE PROGRAMACION Universidad Católica 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 sólo usar el operador de asignación para cambiar la referencia. Por lo tanto el siguiente código no funcionaría: 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 (estáticas). Una variable de clase static representa información “que abarca toda la clase”. La declaración de un método estático 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. Martín Salcedo Quiñones Pagina: 6
  • 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. 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. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote Interpretació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 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 método estatico getContador() 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 los mé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 par llamar al método, solo se usa el nombre de la Clase y luego el método getContador(). 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. 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. 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. 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. TECNICAS DE PROGRAMACION Universidad Católica 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. Martín Salcedo Quiñones Pagina: 13
  • 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 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 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. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote 3. Asi debe quedar luego de colocar las instrucciones de la primera aplicación. Docente: Ing. Martín Salcedo Quiñones Pagina: 15
  • 16. TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote 4. Luego a proceder a ejecutar la aplicación. Posteriormente dar clic en Ejecutar archivo. Docente: Ing. Martín Salcedo Quiñones Pagina: 16