SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
GUIA 3
Programación Orientada a Objeto (POO)                                  Facultad: Ingeniería
                                                                       Escuela: Computación
                                                                       Asignatura: Java.

   I. OBJETIVOS

         •   Conocer la importancia de la implementación de métodos en Java
         •   Implementar los conceptos fundamentales de la programación orientada a objetos


   II. INTRODUCCIÓN TEÓRICA


   MODULOS DE PROGRAMAS EN JAVA


   Hay dos tipos de módulos en Java: métodos y clases. Para escribir programas en Java,
   se combinan nuevos métodos y clases escritas por el programador, con los métodos y
   clases “preempaquetados”, que están disponibles en la interfaz de programación de
   aplicaciones de Java (también conocida como la API de Java o biblioteca de clases de
   Java) y en diversas bibliotecas de clases. La API de Java proporciona una vasta colección
   de clases que contienen métodos para realizar cálculos matemáticos, manipulaciones de
   cadenas, manipulaciones de caracteres, operaciones de entrada/salida, comprobación de
   errores y muchas otras operaciones útiles.
   Las clases de la API de Java proporcionan muchas de las herramientas que necesitan los
   programadores. Las clases de la API de Java forman parte del Kit de desarrollo de
   software para Java 2 (J2SDK), el cual contiene miles de clases pre empaquetadas.


   Los métodos (también conocidos como funciones o procedimientos en otros lenguajes de
   programación) permiten al programador dividir un programa en módulos, por medio de la
   separación de sus tareas en unidades autónomas; también conocidas como métodos
   declarados por el programador. Las instrucciones que implementan los métodos se
   escriben sólo una vez, y están ocultos de otros métodos.


   Promoción de argumentos
   Otra característica importante de las llamadas a métodos es la promoción de argumentos
   (o coerción de argumentos); es decir, forzar a que se pasen argumentos del tipo



                                                                              Guía3 Pág.
                                                                                     Pág.   1
apropiado a un método. Por ejemplo, un programa puede llamar al método sqrt de Math
con un argumento entero, inclusive cuando el método espera recibir un argumento doble.




Paquetes de la API de Java.
La palabra clave package permite agrupar clases e interfaces. Los nombres de los
paquetes son palabras separadas por puntos y se almacenan en directorios que coinciden
con esos nombres.
Por ejemplo, los ficheros siguientes, que contienen código fuente Java:


Applet.java, AppletContext.java, AppletStub.java, AudioClip.java


Contienen en su código la línea:
package java.applet;


Y las clases que se obtienen de la compilación de los ficheros anteriores, se encuentran
con el nombre nombre_de_clase.class, en el directorio:java/applet


Import
Los paquetes de clases se cargan con la palabra clave import, especificando el nombre
del paquete como ruta y nombre de clase (es lo mismo que #include de C/C++). Se
pueden cargar varias clases utilizando un asterisco.


import java.Date;
import java.awt.*;


Si un fichero fuente Java no contiene ningún package, se coloca en el paquete por
defecto sin nombre. Es decir, en el mismo directorio que el fichero fuente, y la clase puede
ser cargada con la sentencia import:
import MiClase;


Paquetes de Java




                                                                             Guía3 Pág.
                                                                                    Pág.   2
El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un
sistema de entrada/salida general, herramientas y comunicaciones. En la versión actual
del JDK, los paquetes Java que se incluyen son:




   •   java.applet
Este paquete contiene clases diseñadas para usar con applets. Hay una clase Applet y
tres interfaces: AppletContext, AppletStub y AudioClip.


   •   java.awt
El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y
componentes GUI (Interfaz Gráfico de Usuario). Incluye las clases Button, Checkbox,
Choice, Component, Graphics, Menu, Panel, TextArea y TextField.


   •   java.io
El paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y
FileOutputStream.


   •   java.lang
Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread,
Exception, System, Integer, Float, Math, String, etc.


   •   java.net
Este paquete da soporte a las conexiones del protocolo TCP/IP y además, incluye las
Clases Socket, URL y URLConnection.


   •   java.util
Este paquete es una miscelánea de clases útiles para muchas cosas en programación. Se
incluyen, entre otras, Date (fecha), Dictionary (diccionario), Random (números aleatorios)
y Stack (pila FIFO).


PROGRAMACION ORIENTADA A OBJETOS
Esta tecnología utiliza clases para encapsular (es decir, envolver) datos (atributos) y
métodos (comportamientos). Por ejemplo, el estéreo de un auto encapsula todos los


                                                                           Guía3 Pág.
                                                                                  Pág.   3
atributos y comportamientos que le permiten al conductor del auto seleccionar una
estación de radio, o reproducir cintas o CDs. Las compañías que fabrican autos no
fabrican los estéreos, sino que los compran y simplemente los conectan en el tablero de
cada auto. Los componentes del radio están encapsulados en su caja.


El encapsulamiento permite a los objetos ocultar su implementación de otros objetos; a
este principio se le conoce como ocultamiento de la información. Aunque los objetos
pueden comunicarse entre sí, a través de interfaces bien definidas (de la misma forma
que la interfaz de un conductor para un auto incluye un volante, pedal del acelerador,
pedal del freno y palanca de velocidades), no están concientes de cómo se implementan
otros objetos. Por lo general, los detalles de implementación se ocultan dentro de los
mismos objetos. Evidentemente es posible conducir un auto de forma efectiva sin conocer
los detalles sobre el funcionamiento de los motores, transmisiones y sistemas de escape.


En los lenguajes de programación por procedimientos (como C), la programación tiende a
ser orientada a la acción. Sin embargo, la programación en Java está orientada a objetos.
En los lenguajes de programación por procedimientos, la unidad de programación es la
función (en Java las funciones se llaman métodos). En Java la unidad de programación
es la clase. Los objetos eventualmente se instancian (es decir, se crean) a partir de estas
clases, y los atributos y comportamientos están encapsulados dentro de los límites de las
clases, en forma de campos y métodos.


Los programadores, al crear programas por procedimientos, se concentran en la escritura
de funciones. Agrupan acciones que realizan cierta tarea en una función y luego agrupan
varias funciones para formar un programa. Evidentemente los datos son importantes en
los programas por procedimientos, pero existen principalmente para apoyar las acciones
que realizan las funciones.


Los verbos en un documento de requerimientos del sistema que describen los
requerimientos para una nueva aplicación, ayudan a un programador, que crea programas
por procedimientos, a determinar el conjunto de funciones que trabajarán entre sí para
implementar el sistema.




                                                                            Guía3 Pág.
                                                                                   Pág.   4
En contraste, los programadores en Java se concentran en la creación de sus propios
tipos de referencia, mejor conocidos como clases. Cada clase contiene como sus
miembros a un conjunto de campos (variables) y métodos que manipulan a esos campos.
Los programadores utilizan esas clases para instanciar objetos que trabajen en conjunto
para implementar el sistema.


Implementación de un tipo de dato abstracto con una clase
Las clases en Java facilitan la creación de ADT´s (tipos de datos abstractos), los cuales
ocultan su implementación a los clientes (o usuarios de la clase). Un problema en los
lenguajes de programación por procedimientos es que el código cliente a menudo
depende de los detalles de implementación de los datos utilizados en el código. Esta
dependencia tal vez requiera de reescribir el código cliente, si la implementación de los
datos cambia. Los ADTs eliminan este problema al proporcionar interfaces (conjunto de
métodos ofrecidos por las clases) independientes de la implementación a sus clientes. Es
posible para el creador de una clase cambiar la implementación interna de esa clase sin
afectar a los clientes de esa clase).


III. PROCEDIMIENTO



Ejercicio 1:


Declaración de la clase Tiempo1
El siguiente ejemplo consiste de dos clases: Tiempo1 y PruebaTiempo1. La clase
Tiempo1 (declarada en el archivo Tiempo1.java) se utiliza para crear objetos que
representan la hora. La clase PruebaTiempo1 (declarada en un archivo separado,
llamado PruebaTiempo1.java) es una clase de aplicación, en la cual el método main
crea un objeto de la clase Tiempo1 e invoca a sus métodos. Estas clases deben
declararse en archivos separados, ya que ambas son clases public.
De hecho, cada declaración de clase que comience con la palabra clave public debe
guardarse en un archivo que tenga exactamente el mismo nombre que la clase, y que
termine con la extensión .java en su nombre de archivo.


1. // DECLARACION DE LA CLASE Tiempo1.java
2. // Declaración de la clase Tiempo1 que mantiene la hora en formato de 24 horas.

                                                                          Guía3 Pág.
                                                                                 Pág.   5
3. import java.text.DecimalFormat;
4. public class Tiempo1 extends Object {
5. private int hora; // 0 - 23
6. private int minuto; // 0 - 59
7. private int segundo; // 0 - 59
8. // El constructor de Tiempo1 inicializa cada variable de instancia en cero;
9. // se asegura de que cada objeto Tiempo1 inicie en un estado consistente
10. public Tiempo1()
11. {
12. establecerHora( 0, 0, 0 );
13. }
14. // establecer un nuevo valor de hora utilizando hora universal; realizar
15. // comprobaciones de validez en los datos; establecer valores inválidos en cero
16. public void establecerHora( int h, int m, int s )
17. {
18. hora = ( ( h >= 0 && h < 24 ) ? h : 0 );
19. minuto = ( ( m >= 0 && m < 60 ) ? m : 0 );
20. segundo = ( ( s >= 0 && s < 60 ) ? s : 0 );
21. }
22. // convertir a String en formato de hora universal
23. public String aStringUniversal()
24. {
25. DecimalFormat dosDigitos = new DecimalFormat( “00” );
26. return dosDigitos.format( hora ) + “:” +
27. dosDigitos.format( minuto ) + “:” + dosDigitos.format( segundo );
28. }
29. // convertir a String en formato de hora estándar
30. public String aStringEstandar()
31. {
32. DecimalFormat dosDigitos = new DecimalFormat( “00” );
33. return ( (hora == 12 || hora == 0) ? 12 : hora % 12 ) + “:” +
34. dosDigitos.format( minuto ) + “:” + dosDigitos.format( segundo ) +
35. ( hora < 12 ? “ AM” : “ PM” );

                                                                           Guía3 Pág.
                                                                                  Pág.   6
36. }
37. } // fin de la clase Tiempo1




Explicación del código de la clase Tiempo1
En la línea 4:
public class Tiempo1 extends Object {


Comienza la declaración de la clase Tiempo1. En esta declaración se indica que
Tiempo1 extiende a (mediante extends) la clase Object (del paquete java.lang). Los
programadores en Java utilizan la herencia para crear clases a partir de clases existentes.
De hecho, todas las clases en Java (excepto Object) extienden a (heredan de) una clase
existente. La palabra clave extends seguida por el nombre de la clase Object indica que
la clase Tiempo1 hereda los atributos y comportamientos existentes de la clase Object.


El cuerpo de la declaración de la clase está delimitado por las llaves izquierda y derecha (
{ y } ).


Cualquier información que coloquemos en el cuerpo se dice que está encapsulada (es
decir, envuelta) en la clase. Por ejemplo, la clase Tiempo1 contiene tres valores enteros:
hora, minuto y segundo, los cuales representan la hora en formato de hora universal.
Anteriormente nos referimos a las variables declaradas en la declaración de una clase,
pero no dentro de la declaración de un método, como campos. A un campo que no se
declara como static se le conoce como variable de instancia; cada instancia (objeto) de la
clase contiene su propia copia separada de las variables de instancia de la clase.


Las palabras clave public y private son modificadoras de acceso. Las variables o
métodos declarados como public pueden utilizarse en cualquier parte del programa en
que haya una referencia a un objeto de la clase. Las variables o métodos declarados con
el modificador de acceso private pueden ser utilizadas solamente por los métodos de la
clase en la que están declarados.




                                                                             Guía3 Pág.
                                                                                    Pág.   7
Las tres variables de instancia enteras hora, minuto y segundo se declaran con el
codificador de acceso private, lo cual indica que estas variables de instancia son
accesibles solamente para los métodos de la clase; esto se conoce como ocultamiento de
datos. Cuando un programa crea (instancia) un objeto de la clase Tiempo1, dichas
variables se encapsulan en el objeto y pueden utilizarse sólo mediante métodos de la
clase de ese objeto (comúnmente a través de los métodos public de la clase). Por lo
general, los campos se declaran como private y los métodos como public. Es posible
tener métodos private y campos public. Los métodos private se conocen como:
Métodos Utilitarios o Métodos Ayudantes, ya que pueden ser llamados sólo por otros
métodos de esa clase, y se utilizan para dar soporte a la operación de esos métodos.


El uso de campos public es poco común, además de ser una práctica de programación
peligrosa.


La clase Tiempo1 contiene el constructor Tiempo1 (líneas 10 a 13) y los métodos
establecerHora (líneas 16 a 21), aStringUniversal (líneas 23 a 28) y aStringEstandar
(líneas 30 a 36). Estos son los métodos public (también conocidos como servicios public
o interfaces public) de la clase. Los clientes de la clase Tiempo1 como la clase
PruebaTiempo1, utilizan los métodos public de Tiempo1 para manipular los datos
almacenados en objetos Tiempo1 o para hacer que la clase Tiempo1 realice algún
servicio. Los clientes de una clase utilizan referencias para interactuar con un
objeto de la clase. Por ejemplo, el método paint de un applet es un cliente de la clase
Graphics. El método paint utiliza su argumento (una referencia a un objeto Graphics,
como g) para dibujar el applet, llamando a los métodos que son servicios public de la
clase Graphics (como drawString, drawLine, drawOval y drawRect). Como se verá en
este ejemplo, se utilizará una referencia a Tiempo1 para interactuar con un objeto
Tiempo1.


En las (líneas 10 a 13) se declara el constructor de la clase Tiempo1. Un constructor
inicializa los objetos de una clase. Cuando un programa crea un objeto de la clase
Tiempo1, la instrucción new asigna memoria para el objeto y llama al constructor para
que inicialice a ese objeto.




                                                                              Guía3 Pág.
                                                                                     Pág.   8
El método establecerHora (líneas 16 a 21) es un método public que declara tres
parámetros int y los utiliza para ajustar la hora. Una expresión condicional evalúa cada
argumento para determinar si el valor se encuentra en el rango especificado. Cualquier
valor fuera de estos rangos es un valor inválido y se establece en cero de manera
predeterminada, para asegurar que un objeto Tiempo1 siempre contenga datos válidos.
(En este ejemplo, cero es un valor válido para hora, minuto y segundo) esto también se
conoce como mantener el objeto en un estado consistente o mantener la integridad
del objeto.


El método aStringUniversal (líneas 23 a 28) no toma argumentos y devuelve una cadena
en formato de hora universal, el cual consiste de seis dígitos: dos para la hora, dos para el
minuto y dos para el segundo. Por ejemplo, si la hora fuera 1:30:07 PM, el método
aStringUniversal devolvería 13:30:07. En la línea 32 se crea una instancia de la clase
DecimalFormat (importada en la línea 3 del paquete java.text) para dar formato a la hora
universal. A la referencia dosDigitos se le asigna una referencia a un objeto de la clase
DecimalFormat, la cual se inicializa con el patrón “00”.


Como utilizar la clase Tiempo1:
Después de declarar la clase, podemos utilizarla como un tipo en las declaraciones como:
              Tiempo1 puestaDeSol; // referencia a un objeto Tiempo1


El nombre de la clase (Tiempo1) es un nombre de tipo. Una clase puede producir muchos
objetos, de igual forma que un tipo primitivo, como int, puede producir muchas variables.
Los programadores pueden declarar nuevos tipos de clases conforme lo necesiten; esta
es una de las razones por las que Java se conoce como un lenguaje extensible.


Ahora se procederá a escribir el código de la clase de aplicación
PruebaTiempo1.


1.     // PruebaTiempo1.java
2.     // Clase PruebaTiempo1 que utiliza la clase Tiempo1.
3.     import javax.swing.JOptionPane;




                                                                              Guía3 Pág.
                                                                                     Pág.   9
4.    public class PruebaTiempo1 {
5.    public static void main( String args[] )
6.    {
7.    Tiempo1 tiempo = new Tiempo1(); // llamar al constructor de Tiempo1
8.    // anexar versión String de tiempo a salida String
9.    String salida = “La hora universal inicial es: “ +
10.   tiempo.aStringUniversal() + “nLa hora estándar inicial es: “ +
11.   tiempo.aStringEstandar();
12.   // cambiar tiempo y anexar hora actualizada a salida
13.   tiempo.establecerHora( 13, 27, 6 );
14.   salida += “nnLa hora universal después de establecerHora es: “ +
15.   tiempo.aStringUniversal() +
16.   “nLa hora estándar después de establecerHora es: “ +
      tiempo.aStringEstandar();
17.   // establecer tiempo con valores inválidos; anexar hora actualizada a salida
18.   tiempo.establecerHora( 99, 99, 99 );
19.   salida += “nnDespués de intentar ajustes inválidos: “ +
20.   “nHora universal: “ + tiempo.aStringUniversal() +
21.   “nHora estándar: “ + tiempo.aStringEstandar();
22.   JOptionPane.showMessageDialog( null, salida,
23.   “Prueba de la clase Tiempo1”, JOptionPane.INFORMATION_MESSAGE );
24.   System.exit( 0 );
25.   } // fin de main
26.   } // fin de la clase PruebaTiempo1


Explicación del código de la clase de aplicación PruebaTiempo1


La clase de aplicación PruebaTiempo1 utiliza la clase Tiempo1. El método main de la
clase PruebaTiempo1 declara y crea una instancia de la clase Tiempo1 llamada tiempo,
en la línea 7. Al instanciarse el objeto, new asigna la memoria en la que el objeto
Tiempo1 se almacenará, después llama al constructor de Tiempo1 para inicializar las
variables de instancia del nuevo objeto Tiempo1. El constructor invoca al método


                                                                             Guía3 Pág.
                                                                                    Pág.   10
establecerHora para inicializar cada variable de instancia explícitamente con Cero (0).
Después new regresa una referencia al nuevo objeto y esa referencia se asigna a
tiempo.
Observe que el archivo PruebaTiempo1.java no importa la clase Tiempo1. Si una clase
se encuentra en el mismo paquete que la clase que va a utilizar, la declaración import no
se requiere.
Toda clase en Java es parte de un paquete. Si un programador no especifica un paquete
para una clase, ésta se coloca en un paquete predeterminado sin nombre, el cual incluye
a todas las clases compiladas en el directorio actual, que no se hayan colocado
explícitamente en un paquete. Debemos especificar declaraciones import para las clases
de la API de Java, ya que están declaradas fuera del paquete de cada nueva clase que
creamos.
La clase Tiempo1 es nuestro primer ejemplo de una clase que no es un applet, y que no
contiene un método main. La clase PruebaTiempo1 declara al método main, por lo que
PruebaTiempo1 puede utilizarse para iniciar la ejecución del programa. El método main
se conoce como el punto de entrada en el programa. Una clase que contiene a main se
conoce como una clase de aplicación o clase ejecutable.


Ejercicio 2


Control del acceso a los miembros
Los modificadores de acceso public y private controlan el acceso a las variables y los
métodos de una clase. El principal propósito de los métodos public es presentar a los
clientes de la clase una vista de los servicios que la clase proporciona (la interfaz pública
de la clase). Los clientes de la clase no necesitan preocuparse acerca de cómo la clase
realiza sus tareas. Por esta razón, las variables métodos private de una clase(es decir,
los detalles de implementación de la clase) no son directamente accesibles para los
clientes de una clase. Al proceso de restringir el acceso a los miembros de una clase
mediante la palabra clave private se le conoce como ocultación de la información.


En el siguiente ejemplo, se muestra que los miembros de clase private no son
directamente accesibles fuera de la clase. En la línea 7 se trata de acceder directamente
a la variable de instancia private llamada hora, del objeto Tiempo1 que es referenciado



                                                                              Guía3 Pág.
                                                                                     Pág.   11
por Tiempo. Al compilar este programa, el compilador genera mensajes de error
indicando que los miembros private hora, minuto y segundo no son accesibles.


1.      // PruebaTiempo2.java
2.     // Errores que se producen al tratar de acceder a los miembros private de
       Tiempo1.
3.     public class PruebaTiempo2 {
4.     public static void main( String args[] )
5.     {
6.            Tiempo1 tiempo = new Tiempo1();
7.            tiempo.hora = 7; // error: hora es una variable de instancia privada
8.            tiempo.minuto = 15; // error: minuto es una variable de instancia privada
9.            tiempo.segundo = 30; // error: segundo es una variable de instancia
              privada
10.    }
11.    } // fin de la clase PruebaTiempo2


Ejercicio 3


Referencias a los miembros del objeto actual mediante THIS
Todo objeto puede hacer referencia a sí mismo, mediante la palabra clave this (lo que se
conoce como una referencia this). En un método, la referencia this puede utilizarse en
forma implícita y explicita para hacer referencia a las variables de instancia y otros
métodos del objeto en el cual se haya llamado el método.


Ahora mostraremos el uso implícito y explícito de la referencia this, para permitir que el
método main de la clase PruebaThis muestre los datos private de un objeto
HoraSimple. La clase HoraSimple (líneas 16 a 44) declara tres variables de instancia
private: hora, minuto y segundo (líneas 17 a 19). El constructor (líneas 22 a 27) recibe
tres argumentos int para inicializar un objeto HoraSimple. Observe que para este ejemplo
hemos hecho que los nombres de los parámetros para el constructor (línea 22) sean
idénticos a los nombres de las variables de instancia para la clase.




                                                                           Guía3 Pág.
                                                                                  Pág.   12
Se hizo esto para mostrar el uso explícito de this. Si un método contiene una variable
local con el mismo nombre que un campo de esa clase, ese método se referirá a la
variable local, en vez de referirse al campo. En este caso, la variable local sombrea al
campo en el alcance de ese método. Sin embargo, el método puede utilizar a this para
hacer referencia al campo sombreado en forma explícita.


El método crearCadena (línea 29 a 33) devuelve un String creado por una instrucción
que utiliza la referencia this en forma explícita e implícita. En la línea 31 se utiliza a this
explícitamente para llamar al método aStringEstandar. Sin embargo, en la línea 32 se
utiliza a this en forma implícita para llamar al mismo método. Observe que ambas líneas
realizan la misma tarea. Por lo tanto, los programadores generalmente no utilizan la
referencia this en forma explícita para hacer referencia a los métodos dentro del objeto
actual.


1.        // PruebaThis.java
2.        // Uso de la referencia this para hacer referencia a los campos y métodos.
3.        import javax.swing.*;
4.        import java.text.DecimalFormat;
5.        public class PruebaThis {
6.        public static void main( String args[] )
7.              {
8.              HoraSimple hora = new HoraSimple( 12, 30, 19 );
9.              JOptionPane.showMessageDialog( null, hora.crearCadena(),
10.              "Demostración de la referencia "this"",
11.             JOptionPane.INFORMATION_MESSAGE );
12.             System.exit( 0 );
13.             }
14.       } // fin de la clase PruebaThis
15.       // la clase HoraSimple demuestra el uso de la referencia "this"
16.       class HoraSimple {
17.       private int hora;
18.       private int minuto;
19.       private int segundo;


                                                                               Guía3 Pág.
                                                                                      Pág.   13
20.    // el constructor utiliza nombres de parámetros idénticos a los nombres de la
      variable
21.    // de instancia; se requiere la referencia "this" para diferenciar entre los
      nombres
22.   public HoraSimple( int hora, int minuto, int segundo )
23.   {
24.   this.hora = hora;            // establecer hora del objeto "this"
25.   this.minuto = minuto;        // establecer minuto del objeto "this"
26.   this.segundo = segundo; // establecer segundo del objeto "this"
27.   }
28.   // usar "this" explícito e implícito para llamar al método aStringEstandar
29.   public String crearCadena()
30.   {
31.   return "this.aStringEstandar(): " + this.aStringEstandar() +
32.   "naStringEstandar(): " + aStringEstandar();
33.   }
34.   // devolver la representación String de HoraSimple
35.   public String aStringEstandar()
36.   {
37.   DecimalFormat dosDigitos = new DecimalFormat( "00" );
38.   // "this" no se requiere aquí, ya que el método no tiene
39.   // variables locales con los mismos nombres que las variables de instancia
40.   return dosDigitos.format( this.hora ) + ":" +
41.   dosDigitos.format( this.minuto ) + ":" +
42.   dosDigitos.format( this.segundo );
43.   }
44.   } // fin de la clase HoraSimple




Ejercicio 4
// Tiempo3.java
// Declaración de la clase Tiempo3 con métodos establecer y obtener.
import java.text.DecimalFormat;

                                                                            Guía3 Pág.
                                                                                   Pág.   14
public class Tiempo3 {
       private int hora;            // 0 - 23
       private int minuto;          // 0 - 59
       private int segundo;         // 0 - 59


       // El constructor de Tiempo3 inicializa cada variable de instancia en cero;
       // asegura que el objeto Tiempo3 inicie en un estado consistente


public Tiempo3()
{
       this( 0, 0, 0 ); // invoca al constructor de Tiempo3 con tres argumentos
}


       // Constructor de Tiempo3: se proporciona hora; minuto y segundo con valor
       //predeterminado de 0
public Tiempo3( int h )
{
       this( h, 0, 0 ); // invoca al constructor de Tiempo3 con tres argumentos
}


       // Constructor de Tiempo3: se proporcionan hora y minuto; segundo con //valor
       predeterminado de 0
public Tiempo3( int h, int m )
{
       this( h, m, 0 ); // invoca al constructor de Tiempo3 con tres argumentos
}


// Constructor de Tiempo3: se proporcionan hora, minuto y segundo
public Tiempo3( int h, int m, int s )
{
       establecerHora( h, m, s );
}


                                                                          Guía3 Pág.
                                                                                 Pág.   15
// Constructor de Tiempo3: se proporciona otro objeto Tiempo3
public Tiempo3( Tiempo3 tiempo )
{
       // invocar al constructor de Tiempo3 con tres argumentos
       this( tiempo.obtenerHora(), tiempo.obtenerMinuto(),
       tiempo.obtenerSegundo() );
}


// Métodos establecer
// establecer un nuevo valor de hora usando hora universal; realizar
// comprobaciones de validez en los datos; establecer valores inválidos en cero


public void establecerHora( int h, int m, int s )
{
       establecerHora( h );        // establecer la hora
       establecerMinuto( m );      // establecer el minuto
       establecerSegundo( s ); // establecer el segundo
}
// validar y establecer la hora
public void establecerHora( int h )
{
       hora = ( ( h >= 0 && h < 24 ) ? h : 0 );
}


// validar y establecer minuto
public void establecerMinuto( int m )
{
       minuto = ( ( m >= 0 && m < 60 ) ? m : 0 );
}
// validar y establecer segundo
public void establecerSegundo( int s )
{

                                                                        Guía3 Pág.
                                                                               Pág.   16
segundo = ( ( s >= 0 && s < 60 ) ? s : 0 );
}


// Métodos obtener
// obtener el valor de hora
public int obtenerHora()
{
       return hora;
}
// obtener el valor de minuto
public int obtenerMinuto()
{
       return minuto;
}


// obtener el valor de segundo
public int obtenerSegundo()
{
       return segundo;
}


// convertir a String en formato de hora universal
public String aStringUniversal()
{
       DecimalFormat dosDigitos = new DecimalFormat( "00" );
       return dosDigitos.format( obtenerHora() ) + ":" +
              dosDigitos.format( obtenerMinuto() ) + ":" +
              dosDigitos.format( obtenerSegundo() );
}


// convertir a String en formato de hora estándar
public String aStringEstandar()
{


                                                               Guía3 Pág.
                                                                      Pág.   17
DecimalFormat dosDigitos = new DecimalFormat( "00" );
       return ( ( obtenerHora() == 12 || obtenerHora() == 0 ) ?
       12 : obtenerHora() % 12 ) + ":" + dosDigitos.format( obtenerMinuto() ) +
       ":" + dosDigitos.format( obtenerSegundo() ) +
       ( obtenerHora() < 12 ? " AM" : " PM" );
}
} // fin de la clase Tiempo3




Y ahora el código de la clase de implementación


// PruebaTiempo4.java
// Demostración de los métodos establecer y obtener de la clase Tiempo3.


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class PruebaTiempo4 extends JApplet implements ActionListener {
       private Tiempo3 tiempo;


       private JLabel horaEtiqueta, minutoEtiqueta, segundoEtiqueta;
       private JTextField horaCampo, minutoCampo, segundoCampo,
       pantallaCampo;
       private JButton ticBoton;


// crear objeto Tiempo3 y configurar GUI
public void init()
{
       tiempo = new Tiempo3(); // crear objeto Tiempo3
       // obtener el panel de contenido del subprograma y cambiar esquema a
       //FlowLayout
       Container contenedor = getContentPane();

                                                                      Guía3 Pág.
                                                                             Pág.   18
contenedor.setLayout( new FlowLayout() );
// configurar horaEtiqueta y horaCampo
horaEtiqueta = new JLabel( "Establecer hora" );
horaCampo = new JTextField( 10 );
contenedor.add( horaEtiqueta );
contenedor.add( horaCampo );


// configurar minutoEtiqueta y minutoCampo
minutoEtiqueta = new JLabel( "Establecer minuto" );
minutoCampo = new JTextField( 10 );
contenedor.add( minutoEtiqueta );
contenedor.add( minutoCampo );


// configurar segundoEtiqueta y segundoCampo
segundoEtiqueta = new JLabel( "Establecer segundo" );
segundoCampo = new JTextField( 10 );
contenedor.add( segundoEtiqueta );
contenedor.add( segundoCampo );


// configurar pantallaCampo
pantallaCampo = new JTextField( 30 );
pantallaCampo.setEditable( false );
contenedor.add( pantallaCampo );


// configurar ticBoton
ticBoton = new JButton( "Agregar 1 a Segundo" );
contenedor.add( ticBoton );


//   registrar   los   manejadores   de   eventos;   este   subprograma   es    el
//ActionListener,
// el cual contiene el método actionPerformed que será llamado para
// manejar los eventos de acción generados por horaCampo, minutoCampo,
// segundoCampo y ticBoton

                                                                  Guía3 Pág.
                                                                         Pág.   19
horaCampo.addActionListener( this );
       minutoCampo.addActionListener( this );
       segundoCampo.addActionListener( this );
       ticBoton.addActionListener( this );
       mostrarHora(); // actualizar texto en pantallaCampo y barra de estado
} // fin del método init




// manejador de eventos para los eventos de botón y campo de texto
public void actionPerformed( ActionEvent evento )
{
       // procesar evento de ticBoton
       if ( evento.getSource() == ticBoton )
       tic();


       // procesar evento de horaCampo
       else if ( evento.getSource() == horaCampo ) {
       tiempo.establecerHora( Integer.parseInt( evento.getActionCommand() ) );
       horaCampo.setText( "" );
       }


// procesar evento de minutoCampo
else if ( evento.getSource() == minutoCampo ) {
       tiempo.establecerMinuto( Integer.parseInt( evento.getActionCommand() )
);
       minutoCampo.setText( "" );
}


// procesar evento de segundoCampo
else if ( evento.getSource() == segundoCampo ) {
       tiempo.establecerSegundo( Integer.parseInt( evento.getActionCommand()
       ) );


                                                                       Guía3 Pág.
                                                                              Pág.   20
segundoCampo.setText( "" );
}
       mostrarHora(); // actualizar texto en pantallaCampo y barra de estado
} // fin del método actionPerformed


// actualizar pantallaCampo y barra de estado del contenedor de subprogramas
public void mostrarHora()
{
       pantallaCampo.setText( "Hora: " + tiempo.obtenerHora() + "; Minuto: " +
       tiempo.obtenerMinuto() + "; Segundo: " + tiempo.obtenerSegundo() );
       showStatus( "La hora estándar es: " + tiempo.aStringEstandar() +
       "; la hora universal es: " + tiempo.aStringUniversal() );
} // fin del método mostrarHora


// sumar uno al segundo y actualizar la hora/minuto si es necesario
public void tic()
{
       tiempo.establecerSegundo( ( tiempo.obtenerSegundo() + 1 ) % 60 );
               if ( tiempo.obtenerSegundo() == 0 ) {
                          tiempo.establecerMinuto( ( tiempo.obtenerMinuto() + 1 ) % 60
                          );
                          if ( tiempo.obtenerMinuto() == 0 )
                                tiempo.establecerHora( ( tiempo.obtenerHora() + 1 ) %
                                24 );
}
} // fin del método tic
} // fin de la clase PruebaTiempo4


HERENCIA
La herencia es una forma de reutilización de software en la que las clases se crean
absorbiendo los datos (atributos) y métodos (comportamientos) de una clase existente, y
se mejoran con las nuevas capacidades, o con modificaciones en las capacidades ya
existentes.


                                                                         Guía3 Pág.
                                                                                Pág.   21
Al crear una clase, en vez de declarar miembros (variables y métodos) completamente
nuevos, el programador puede designar que la nueva clase herede los miembros de una
clase existente. Esta clase existente se conoce como superclase, y la nueva clase se
conoce como subclase. Una vez creada, cada subclase puede convertirse en superclase
de futuras subclases. Una subclase generalmente agrega sus propias variables y
métodos. Por lo tanto, una subclase es más específica que su superclase y representa a
un grupo más especializado de objetos. Generalmente, la subclase exhibe los
comportamientos de su superclase junto con comportamientos adicionales específicos de
esta subclase.
La superclase directa es la superclase a partir de la cual la subclase hereda en forma
explicita. Una superclase indirecta se hereda de dos o más niveles arriba en la jerarquía
de clases, la cual define las relaciones de herencia entre las clases. En java, la jerarquía
de clases empieza con la clase Object (en el paquete java.lang), a partir de la cual
heredan todas las clases en Java, ya sea en forma directa o indirecta. En el caso de la
herencia simple, una clase se deriva de una superclase Java, a diferencia de C++, no
soporta la herencia múltiple (que ocurre cuando una clase se deriva de más de una
superclase directa).


Las relaciones de herencia forman estructuras jerárquicas en forma de árbol. Una
superclase existe en una relación jerárquica con sus subclases. Aunque las clases
pueden existir de manera independiente, cuando participan en relaciones de herencia se
afilian con otras clases. Una clase se convierte ya sea en una superclase proporcionando
datos y comportamientos a otras clases, o en una subclase, heredando sus datos y
comportamientos de otras clases.


Miembros Protected
En los ejemplos anteriores hablamos sobre los modificadores de acceso public y private.
Los miembros public de una clase son accesibles en cualquier parte en donde el
programa tenga una referencia al objeto de esa clase, o una de sus subclases. Los
miembros private de una clase son accesibles sólo en los métodos de la clase.


Estos miembros private de la superclase no se heredan. Ahora es tiempo de conocer el
modificador de acceso protected. El uso del acceso protected ofrece un nivel intermedio


                                                                             Guía3 Pág.
                                                                                    Pág.   22
de acceso entre public y private. Los miembros protected de una superclase pueden ser
utilizados por los miembros de esa superclase, por los miembros de cualquier clase que
se derive de esa superclase y por los miembros de otras clases en el mismo paquete (los
miembros protected también tienen acceso a nivel de paquete).


Todos los miembros public y protected de una superclase retienen su modificador de
acceso original cuando se convierten en miembros de la subclase (por ejemplo, los
miembros public de la superclase se convierten en miembros protected de la subclase).
Una subclase puede efectuar cambios de estado en los miembros private de la
superclase, pero sólo a través de los métodos no private que se proporcione en la
superclase y sean heredados por esa subclase.
Los métodos de una subclase pueden referirse a los miembros public y protected que se
hereden de la superclase con sólo utilizar los nombres de los miembros. Cuando un
método de la subclase sobrescribe al método de la superclase, éste último puede
utilizarse desde la subclase si se antepone a su nombre la palabra super y un punto (.).



Ejercicio 5


// Punto.java
// La declaración de la clase Punto representa un par de coordenadas x-y.
public class Punto {
       private int x; // parte x de un par de coordenadas
       private int y; // parte y de un par de coordenadas


// constructor sin argumentos
public Punto()
       {
       // la llamada implícita al constructor de Object ocurre aquí
       }


// constructor
public Punto( int valorX, int valorY )
{


                                                                            Guía3 Pág.
                                                                                   Pág.    23
// la llamada implícita al constructor de Object ocurre aquí
       x = valorX; // no hay necesidad de validación
       y = valorY; // no hay necesidad de validación
}




// establecer x en el par de coordenadas
public void establecerX( int valorX )
{
       x = valorX; // no hay necesidad de validación
}


// devuelve x del par de coordenadas
public int obtenerX()
{
       return x;
}


// establecer y en el par de coordenadas
public void establecerY( int valorY )
{
       y = valorY; // no hay necesidad de validación
}


// devuelve y del par de coordenadas
public int obtenerY()
{
       return y;
}
// devuelve la representación String del objeto Punto
public String toString()
{

                                                                      Guía3 Pág.
                                                                             Pág.   24
return "[" + x + ", " + y + "]";
}
} // fin de la clase Punto




Código de implementación de la clase Punto
// PruebaPunto.java
// Prueba de la clase Punto.
import javax.swing.JOptionPane;


public class PruebaPunto {


public static void main( String[] args )
{
       Punto punto = new Punto( 72, 115 ); // crea objeto Punto


       // obtener las coordenadas del punto
       String salida = "La coordenada X es " + punto.obtenerX() +
               "nLa coordenada Y es " + punto.obtenerY();
       punto.establecerX( 10 ); // establecer la coordenada x
       punto.establecerY( 20 ); // establecer la coordenada y


// obtener la representación String del nuevo valor de punto
salida += "nnLa nueva ubicación de punto es " + punto.toString();


       JOptionPane.showMessageDialog( null, salida ); // mostrar resultados
       System.exit( 0 );
} // fin de main
} // fin de la clase PruebaPunto


Ejercicio 6


                                                                       Guía3 Pág.
                                                                              Pág.   25
// Circulo.java
// La clase Circulo contiene un par de coordenadas x-y y un radio.


public class Circulo {
       private int x; // coordenada x del centro del círculo
       private int y; // coordenada y del centro del círculo
       private double radio; // radio del círculo


// constructor sin argumentos
public Circulo()
{
       // la llamada implícita al constructor de Object ocurre aquí
}


// constructor
public Circulo( int valorX, int valorY, double valorRadio )
{
       // la llamada implícita al constructor de Object ocurre aquí
       x = valorX; // no hay necesidad de validación
       y = valorY; // no hay necesidad de validación
       establecerRadio( valorRadio );
}


// establecer x en el par de coordenadas
public void establecerX( int valorX )
{
       x = valorX; // no hay necesidad de validación
}


// devuelve la x del par de coordenadas
public int obtenerX()
{

                                                                      Guía3 Pág.
                                                                             Pág.   26
return x;
}


// establecer y en el par de coordenadas
public void establecerY( int valorY )
{
       y = valorY; // no hay necesidad de validación
}


// devuelve la y del par de coordenadas
public int obtenerY()
{
       return y;
}


// establecer el radio
public void establecerRadio( double valorRadio )
{
       radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );
}


// devuelve el radio
public double obtenerRadio()
{
       return radio;
}


// calcula y devuelve el diámetro
public double obtenerDiametro()
{
       return 2 * radio;
}
// calcula y devuelve la circunferencia


                                                          Guía3 Pág.
                                                                 Pág.   27
public double obtenerCircunferencia()
{
       return Math.PI * obtenerDiametro();
}




// calcula y devuelve el área
public double obtenerArea()
{
return Math.PI * radio * radio;
}


// devuelve representación String del objeto Circulo
public String toString()
{
       return "Centro = [" + x + ", " + y + "]; Radio = " + radio;
}
} // fin de la clase Circulo


Código de implementación de la clase Círculo
// PruebaCirculo.java
// Prueba de la clase Circulo.


import java.text.DecimalFormat;
import javax.swing.JOptionPane;


public class PruebaCirculo {


public static void main( String[] args )
{
Circulo circulo = new Circulo( 37, 43, 2.5 ); // crea el objeto Circulo


// obtener las coordenadas x-y y radio iniciales de Circulo

                                                                          Guía3 Pág.
                                                                                 Pág.   28
String salida = "La coordenada X es " + circulo.obtenerX() +
"nLa coordenada Y es " + circulo.obtenerY() +
"nEl radio es " + circulo.obtenerRadio();


circulo.establecerX( 35 ); // establecer la nueva coordenada x
circulo.establecerY( 20 ); // establecer la nueva coordenada y
circulo.establecerRadio( 4.25 ); // establecer el nuevo radio


// obtener la representación String del nuevo valor de circulo
salida += "nnLa nueva ubicación y el radio del círculo sonn" +
circulo.toString();


// da formato a los valores de punto flotante con 2 dígitos de precisión
DecimalFormat dosDigitos = new DecimalFormat( "0.00" );


// obtener el diámetro del Circulo
salida += "nEl diámetro es " +
dosDigitos.format( circulo.obtenerDiametro() );




// obtener la circunferencia del Circulo
salida += "nLa circunferencia es " +
dosDigitos.format( circulo.obtenerCircunferencia() );


// obtener el área del Circulo
salida += "nEl área es " + dosDigitos.format( circulo.obtenerArea() );
JOptionPane.showMessageDialog( null, salida ); // muestra la salida


System.exit( 0 );


} // fin de main


} // fin de la clase PruebaCirculo

                                                                           Guía3 Pág.
                                                                                  Pág.   29
IV.TAREA DE INVESTIGACION COMPLEMENTARIA



  •   Buscar sobre el tema de Swing


V. BIBLIOGRAFIA

  •   Java Como Programar
      Quinta edición
      Autor: Deitel y Deitel.
      Editorial: Pearson




                                           Guía3 Pág.
                                                  Pág.   30

Más contenido relacionado

La actualidad más candente

investigacion unidad tres componentes y librerias
investigacion unidad tres componentes y libreriasinvestigacion unidad tres componentes y librerias
investigacion unidad tres componentes y libreriasAnel Sosa
 
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Didier Granados
 
Informe de programacion
Informe de programacionInforme de programacion
Informe de programacionguerreroslaura
 
Apendice general 4 terminos de programador
Apendice general 4 terminos de programadorApendice general 4 terminos de programador
Apendice general 4 terminos de programadorWilson Delgado Ramos
 
Introduccion java
Introduccion javaIntroduccion java
Introduccion javaals_8
 
Programacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooProgramacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooJosé Antonio Sandoval Acosta
 
Apuntes ejercicios programacion i
Apuntes ejercicios programacion iApuntes ejercicios programacion i
Apuntes ejercicios programacion iRicardo Ramos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosJuan Carlos Riva
 
M O D U L A R I D A D
M O D U L A R I D A DM O D U L A R I D A D
M O D U L A R I D A DJORGE ARMANDO
 
Diseño de Sistemas
Diseño de SistemasDiseño de Sistemas
Diseño de Sistemasjorgecaruci
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad iiIrving Trigo
 
Paradigma de poo
Paradigma de pooParadigma de poo
Paradigma de poopixeleante
 

La actualidad más candente (20)

investigacion unidad tres componentes y librerias
investigacion unidad tres componentes y libreriasinvestigacion unidad tres componentes y librerias
investigacion unidad tres componentes y librerias
 
Java basico
Java basicoJava basico
Java basico
 
Curso Java Inacap
Curso Java InacapCurso Java Inacap
Curso Java Inacap
 
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
 
Informe de programacion
Informe de programacionInforme de programacion
Informe de programacion
 
62016561 java
62016561 java62016561 java
62016561 java
 
Java
JavaJava
Java
 
JAVA- basico
JAVA- basicoJAVA- basico
JAVA- basico
 
Apendice general 4 terminos de programador
Apendice general 4 terminos de programadorApendice general 4 terminos de programador
Apendice general 4 terminos de programador
 
Introduccion java
Introduccion javaIntroduccion java
Introduccion java
 
Java
JavaJava
Java
 
Programacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma pooProgramacion orientada a objetos Unidad 1-intro al paradigma poo
Programacion orientada a objetos Unidad 1-intro al paradigma poo
 
Apuntes ejercicios programacion i
Apuntes ejercicios programacion iApuntes ejercicios programacion i
Apuntes ejercicios programacion i
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
M O D U L A R I D A D
M O D U L A R I D A DM O D U L A R I D A D
M O D U L A R I D A D
 
Diseño de Sistemas
Diseño de SistemasDiseño de Sistemas
Diseño de Sistemas
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
Paradigma de poo
Paradigma de pooParadigma de poo
Paradigma de poo
 

Destacado

Guia de Laboratorios 2 - VB.NET 2005
Guia de Laboratorios 2 - VB.NET 2005Guia de Laboratorios 2 - VB.NET 2005
Guia de Laboratorios 2 - VB.NET 2005Jose Ponce
 
Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Jose Ponce
 
Guía de Laboratorio 1 - VB.NET 2005
Guía de Laboratorio 1 - VB.NET 2005Guía de Laboratorio 1 - VB.NET 2005
Guía de Laboratorio 1 - VB.NET 2005Jose Ponce
 
Guia de Laboratorios 6 - VB.NET 2005
Guia de Laboratorios 6 - VB.NET 2005Guia de Laboratorios 6 - VB.NET 2005
Guia de Laboratorios 6 - VB.NET 2005Jose Ponce
 
Proyecto, PHP y MySQL
Proyecto, PHP y MySQLProyecto, PHP y MySQL
Proyecto, PHP y MySQLyanburbano
 
Guia de Laboratorios 3 - VB.NET 2005
Guia de Laboratorios 3 - VB.NET 2005Guia de Laboratorios 3 - VB.NET 2005
Guia de Laboratorios 3 - VB.NET 2005Jose Ponce
 
Guia N3 Proyectos Web Php Css, Js
Guia N3   Proyectos Web   Php Css, JsGuia N3   Proyectos Web   Php Css, Js
Guia N3 Proyectos Web Php Css, JsJose Ponce
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My SqlJose Ponce
 
Guia N1 Proyectos Web Html
Guia N1   Proyectos Web   HtmlGuia N1   Proyectos Web   Html
Guia N1 Proyectos Web HtmlJose Ponce
 
Guia N2 Proyectos Web Php
Guia N2   Proyectos Web   PhpGuia N2   Proyectos Web   Php
Guia N2 Proyectos Web PhpJose Ponce
 
Guia N4 Proyectos Web My Sql Y Php
Guia N4   Proyectos Web   My Sql Y PhpGuia N4   Proyectos Web   My Sql Y Php
Guia N4 Proyectos Web My Sql Y PhpJose Ponce
 
Tópicos avanzados de programación eventos
Tópicos  avanzados  de programación   eventosTópicos  avanzados  de programación   eventos
Tópicos avanzados de programación eventosKanddy Mobylml
 

Destacado (20)

Guia4 java
Guia4 javaGuia4 java
Guia4 java
 
Guia1 java
Guia1 javaGuia1 java
Guia1 java
 
Guia2 java
Guia2 javaGuia2 java
Guia2 java
 
Guia8 java
Guia8 javaGuia8 java
Guia8 java
 
Guia de Laboratorios 2 - VB.NET 2005
Guia de Laboratorios 2 - VB.NET 2005Guia de Laboratorios 2 - VB.NET 2005
Guia de Laboratorios 2 - VB.NET 2005
 
Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005
 
Guía de Laboratorio 1 - VB.NET 2005
Guía de Laboratorio 1 - VB.NET 2005Guía de Laboratorio 1 - VB.NET 2005
Guía de Laboratorio 1 - VB.NET 2005
 
Guia de Laboratorios 6 - VB.NET 2005
Guia de Laboratorios 6 - VB.NET 2005Guia de Laboratorios 6 - VB.NET 2005
Guia de Laboratorios 6 - VB.NET 2005
 
HTML
HTMLHTML
HTML
 
Proyecto, PHP y MySQL
Proyecto, PHP y MySQLProyecto, PHP y MySQL
Proyecto, PHP y MySQL
 
Guia de Laboratorios 3 - VB.NET 2005
Guia de Laboratorios 3 - VB.NET 2005Guia de Laboratorios 3 - VB.NET 2005
Guia de Laboratorios 3 - VB.NET 2005
 
Guia N3 Proyectos Web Php Css, Js
Guia N3   Proyectos Web   Php Css, JsGuia N3   Proyectos Web   Php Css, Js
Guia N3 Proyectos Web Php Css, Js
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
 
Guia N1 Proyectos Web Html
Guia N1   Proyectos Web   HtmlGuia N1   Proyectos Web   Html
Guia N1 Proyectos Web Html
 
Guia7 java
Guia7 javaGuia7 java
Guia7 java
 
Guia N2 Proyectos Web Php
Guia N2   Proyectos Web   PhpGuia N2   Proyectos Web   Php
Guia N2 Proyectos Web Php
 
Guia5 java
Guia5 javaGuia5 java
Guia5 java
 
Guia6 java
Guia6 javaGuia6 java
Guia6 java
 
Guia N4 Proyectos Web My Sql Y Php
Guia N4   Proyectos Web   My Sql Y PhpGuia N4   Proyectos Web   My Sql Y Php
Guia N4 Proyectos Web My Sql Y Php
 
Tópicos avanzados de programación eventos
Tópicos  avanzados  de programación   eventosTópicos  avanzados  de programación   eventos
Tópicos avanzados de programación eventos
 

Similar a Guia3 java

Similar a Guia3 java (20)

Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Conceptos estructuras de datos
Conceptos estructuras de datosConceptos estructuras de datos
Conceptos estructuras de datos
 
Historia java ruben
Historia java rubenHistoria java ruben
Historia java ruben
 
Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguez
 
Lp pract2006
Lp pract2006Lp pract2006
Lp pract2006
 
Benita ppp unidad 1
Benita ppp unidad 1Benita ppp unidad 1
Benita ppp unidad 1
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 
Apendice general 4
Apendice general 4Apendice general 4
Apendice general 4
 
Interface-swt-swing.pptx
Interface-swt-swing.pptxInterface-swt-swing.pptx
Interface-swt-swing.pptx
 
Grupo 6 - clases
Grupo 6  - clasesGrupo 6  - clases
Grupo 6 - clases
 
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
 
Leccion 11 Java
Leccion 11 JavaLeccion 11 Java
Leccion 11 Java
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Java desde 0
Java desde 0Java desde 0
Java desde 0
 
Lec11 metodos
Lec11 metodosLec11 metodos
Lec11 metodos
 
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 

Más de odelys2003

Más de odelys2003 (6)

Curso de redes
Curso de redesCurso de redes
Curso de redes
 
Introduccion2
Introduccion2Introduccion2
Introduccion2
 
S
SS
S
 
Sisoper
SisoperSisoper
Sisoper
 
Sistoper
SistoperSistoper
Sistoper
 
Guia
GuiaGuia
Guia
 

Último

R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 

Último (20)

R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 

Guia3 java

  • 1. GUIA 3 Programación Orientada a Objeto (POO) Facultad: Ingeniería Escuela: Computación Asignatura: Java. I. OBJETIVOS • Conocer la importancia de la implementación de métodos en Java • Implementar los conceptos fundamentales de la programación orientada a objetos II. INTRODUCCIÓN TEÓRICA MODULOS DE PROGRAMAS EN JAVA Hay dos tipos de módulos en Java: métodos y clases. Para escribir programas en Java, se combinan nuevos métodos y clases escritas por el programador, con los métodos y clases “preempaquetados”, que están disponibles en la interfaz de programación de aplicaciones de Java (también conocida como la API de Java o biblioteca de clases de Java) y en diversas bibliotecas de clases. La API de Java proporciona una vasta colección de clases que contienen métodos para realizar cálculos matemáticos, manipulaciones de cadenas, manipulaciones de caracteres, operaciones de entrada/salida, comprobación de errores y muchas otras operaciones útiles. Las clases de la API de Java proporcionan muchas de las herramientas que necesitan los programadores. Las clases de la API de Java forman parte del Kit de desarrollo de software para Java 2 (J2SDK), el cual contiene miles de clases pre empaquetadas. Los métodos (también conocidos como funciones o procedimientos en otros lenguajes de programación) permiten al programador dividir un programa en módulos, por medio de la separación de sus tareas en unidades autónomas; también conocidas como métodos declarados por el programador. Las instrucciones que implementan los métodos se escriben sólo una vez, y están ocultos de otros métodos. Promoción de argumentos Otra característica importante de las llamadas a métodos es la promoción de argumentos (o coerción de argumentos); es decir, forzar a que se pasen argumentos del tipo Guía3 Pág. Pág. 1
  • 2. apropiado a un método. Por ejemplo, un programa puede llamar al método sqrt de Math con un argumento entero, inclusive cuando el método espera recibir un argumento doble. Paquetes de la API de Java. La palabra clave package permite agrupar clases e interfaces. Los nombres de los paquetes son palabras separadas por puntos y se almacenan en directorios que coinciden con esos nombres. Por ejemplo, los ficheros siguientes, que contienen código fuente Java: Applet.java, AppletContext.java, AppletStub.java, AudioClip.java Contienen en su código la línea: package java.applet; Y las clases que se obtienen de la compilación de los ficheros anteriores, se encuentran con el nombre nombre_de_clase.class, en el directorio:java/applet Import Los paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquete como ruta y nombre de clase (es lo mismo que #include de C/C++). Se pueden cargar varias clases utilizando un asterisco. import java.Date; import java.awt.*; Si un fichero fuente Java no contiene ningún package, se coloca en el paquete por defecto sin nombre. Es decir, en el mismo directorio que el fichero fuente, y la clase puede ser cargada con la sentencia import: import MiClase; Paquetes de Java Guía3 Pág. Pág. 2
  • 3. El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un sistema de entrada/salida general, herramientas y comunicaciones. En la versión actual del JDK, los paquetes Java que se incluyen son: • java.applet Este paquete contiene clases diseñadas para usar con applets. Hay una clase Applet y tres interfaces: AppletContext, AppletStub y AudioClip. • java.awt El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y componentes GUI (Interfaz Gráfico de Usuario). Incluye las clases Button, Checkbox, Choice, Component, Graphics, Menu, Panel, TextArea y TextField. • java.io El paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y FileOutputStream. • java.lang Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System, Integer, Float, Math, String, etc. • java.net Este paquete da soporte a las conexiones del protocolo TCP/IP y además, incluye las Clases Socket, URL y URLConnection. • java.util Este paquete es una miscelánea de clases útiles para muchas cosas en programación. Se incluyen, entre otras, Date (fecha), Dictionary (diccionario), Random (números aleatorios) y Stack (pila FIFO). PROGRAMACION ORIENTADA A OBJETOS Esta tecnología utiliza clases para encapsular (es decir, envolver) datos (atributos) y métodos (comportamientos). Por ejemplo, el estéreo de un auto encapsula todos los Guía3 Pág. Pág. 3
  • 4. atributos y comportamientos que le permiten al conductor del auto seleccionar una estación de radio, o reproducir cintas o CDs. Las compañías que fabrican autos no fabrican los estéreos, sino que los compran y simplemente los conectan en el tablero de cada auto. Los componentes del radio están encapsulados en su caja. El encapsulamiento permite a los objetos ocultar su implementación de otros objetos; a este principio se le conoce como ocultamiento de la información. Aunque los objetos pueden comunicarse entre sí, a través de interfaces bien definidas (de la misma forma que la interfaz de un conductor para un auto incluye un volante, pedal del acelerador, pedal del freno y palanca de velocidades), no están concientes de cómo se implementan otros objetos. Por lo general, los detalles de implementación se ocultan dentro de los mismos objetos. Evidentemente es posible conducir un auto de forma efectiva sin conocer los detalles sobre el funcionamiento de los motores, transmisiones y sistemas de escape. En los lenguajes de programación por procedimientos (como C), la programación tiende a ser orientada a la acción. Sin embargo, la programación en Java está orientada a objetos. En los lenguajes de programación por procedimientos, la unidad de programación es la función (en Java las funciones se llaman métodos). En Java la unidad de programación es la clase. Los objetos eventualmente se instancian (es decir, se crean) a partir de estas clases, y los atributos y comportamientos están encapsulados dentro de los límites de las clases, en forma de campos y métodos. Los programadores, al crear programas por procedimientos, se concentran en la escritura de funciones. Agrupan acciones que realizan cierta tarea en una función y luego agrupan varias funciones para formar un programa. Evidentemente los datos son importantes en los programas por procedimientos, pero existen principalmente para apoyar las acciones que realizan las funciones. Los verbos en un documento de requerimientos del sistema que describen los requerimientos para una nueva aplicación, ayudan a un programador, que crea programas por procedimientos, a determinar el conjunto de funciones que trabajarán entre sí para implementar el sistema. Guía3 Pág. Pág. 4
  • 5. En contraste, los programadores en Java se concentran en la creación de sus propios tipos de referencia, mejor conocidos como clases. Cada clase contiene como sus miembros a un conjunto de campos (variables) y métodos que manipulan a esos campos. Los programadores utilizan esas clases para instanciar objetos que trabajen en conjunto para implementar el sistema. Implementación de un tipo de dato abstracto con una clase Las clases en Java facilitan la creación de ADT´s (tipos de datos abstractos), los cuales ocultan su implementación a los clientes (o usuarios de la clase). Un problema en los lenguajes de programación por procedimientos es que el código cliente a menudo depende de los detalles de implementación de los datos utilizados en el código. Esta dependencia tal vez requiera de reescribir el código cliente, si la implementación de los datos cambia. Los ADTs eliminan este problema al proporcionar interfaces (conjunto de métodos ofrecidos por las clases) independientes de la implementación a sus clientes. Es posible para el creador de una clase cambiar la implementación interna de esa clase sin afectar a los clientes de esa clase). III. PROCEDIMIENTO Ejercicio 1: Declaración de la clase Tiempo1 El siguiente ejemplo consiste de dos clases: Tiempo1 y PruebaTiempo1. La clase Tiempo1 (declarada en el archivo Tiempo1.java) se utiliza para crear objetos que representan la hora. La clase PruebaTiempo1 (declarada en un archivo separado, llamado PruebaTiempo1.java) es una clase de aplicación, en la cual el método main crea un objeto de la clase Tiempo1 e invoca a sus métodos. Estas clases deben declararse en archivos separados, ya que ambas son clases public. De hecho, cada declaración de clase que comience con la palabra clave public debe guardarse en un archivo que tenga exactamente el mismo nombre que la clase, y que termine con la extensión .java en su nombre de archivo. 1. // DECLARACION DE LA CLASE Tiempo1.java 2. // Declaración de la clase Tiempo1 que mantiene la hora en formato de 24 horas. Guía3 Pág. Pág. 5
  • 6. 3. import java.text.DecimalFormat; 4. public class Tiempo1 extends Object { 5. private int hora; // 0 - 23 6. private int minuto; // 0 - 59 7. private int segundo; // 0 - 59 8. // El constructor de Tiempo1 inicializa cada variable de instancia en cero; 9. // se asegura de que cada objeto Tiempo1 inicie en un estado consistente 10. public Tiempo1() 11. { 12. establecerHora( 0, 0, 0 ); 13. } 14. // establecer un nuevo valor de hora utilizando hora universal; realizar 15. // comprobaciones de validez en los datos; establecer valores inválidos en cero 16. public void establecerHora( int h, int m, int s ) 17. { 18. hora = ( ( h >= 0 && h < 24 ) ? h : 0 ); 19. minuto = ( ( m >= 0 && m < 60 ) ? m : 0 ); 20. segundo = ( ( s >= 0 && s < 60 ) ? s : 0 ); 21. } 22. // convertir a String en formato de hora universal 23. public String aStringUniversal() 24. { 25. DecimalFormat dosDigitos = new DecimalFormat( “00” ); 26. return dosDigitos.format( hora ) + “:” + 27. dosDigitos.format( minuto ) + “:” + dosDigitos.format( segundo ); 28. } 29. // convertir a String en formato de hora estándar 30. public String aStringEstandar() 31. { 32. DecimalFormat dosDigitos = new DecimalFormat( “00” ); 33. return ( (hora == 12 || hora == 0) ? 12 : hora % 12 ) + “:” + 34. dosDigitos.format( minuto ) + “:” + dosDigitos.format( segundo ) + 35. ( hora < 12 ? “ AM” : “ PM” ); Guía3 Pág. Pág. 6
  • 7. 36. } 37. } // fin de la clase Tiempo1 Explicación del código de la clase Tiempo1 En la línea 4: public class Tiempo1 extends Object { Comienza la declaración de la clase Tiempo1. En esta declaración se indica que Tiempo1 extiende a (mediante extends) la clase Object (del paquete java.lang). Los programadores en Java utilizan la herencia para crear clases a partir de clases existentes. De hecho, todas las clases en Java (excepto Object) extienden a (heredan de) una clase existente. La palabra clave extends seguida por el nombre de la clase Object indica que la clase Tiempo1 hereda los atributos y comportamientos existentes de la clase Object. El cuerpo de la declaración de la clase está delimitado por las llaves izquierda y derecha ( { y } ). Cualquier información que coloquemos en el cuerpo se dice que está encapsulada (es decir, envuelta) en la clase. Por ejemplo, la clase Tiempo1 contiene tres valores enteros: hora, minuto y segundo, los cuales representan la hora en formato de hora universal. Anteriormente nos referimos a las variables declaradas en la declaración de una clase, pero no dentro de la declaración de un método, como campos. A un campo que no se declara como static se le conoce como variable de instancia; cada instancia (objeto) de la clase contiene su propia copia separada de las variables de instancia de la clase. Las palabras clave public y private son modificadoras de acceso. Las variables o métodos declarados como public pueden utilizarse en cualquier parte del programa en que haya una referencia a un objeto de la clase. Las variables o métodos declarados con el modificador de acceso private pueden ser utilizadas solamente por los métodos de la clase en la que están declarados. Guía3 Pág. Pág. 7
  • 8. Las tres variables de instancia enteras hora, minuto y segundo se declaran con el codificador de acceso private, lo cual indica que estas variables de instancia son accesibles solamente para los métodos de la clase; esto se conoce como ocultamiento de datos. Cuando un programa crea (instancia) un objeto de la clase Tiempo1, dichas variables se encapsulan en el objeto y pueden utilizarse sólo mediante métodos de la clase de ese objeto (comúnmente a través de los métodos public de la clase). Por lo general, los campos se declaran como private y los métodos como public. Es posible tener métodos private y campos public. Los métodos private se conocen como: Métodos Utilitarios o Métodos Ayudantes, ya que pueden ser llamados sólo por otros métodos de esa clase, y se utilizan para dar soporte a la operación de esos métodos. El uso de campos public es poco común, además de ser una práctica de programación peligrosa. La clase Tiempo1 contiene el constructor Tiempo1 (líneas 10 a 13) y los métodos establecerHora (líneas 16 a 21), aStringUniversal (líneas 23 a 28) y aStringEstandar (líneas 30 a 36). Estos son los métodos public (también conocidos como servicios public o interfaces public) de la clase. Los clientes de la clase Tiempo1 como la clase PruebaTiempo1, utilizan los métodos public de Tiempo1 para manipular los datos almacenados en objetos Tiempo1 o para hacer que la clase Tiempo1 realice algún servicio. Los clientes de una clase utilizan referencias para interactuar con un objeto de la clase. Por ejemplo, el método paint de un applet es un cliente de la clase Graphics. El método paint utiliza su argumento (una referencia a un objeto Graphics, como g) para dibujar el applet, llamando a los métodos que son servicios public de la clase Graphics (como drawString, drawLine, drawOval y drawRect). Como se verá en este ejemplo, se utilizará una referencia a Tiempo1 para interactuar con un objeto Tiempo1. En las (líneas 10 a 13) se declara el constructor de la clase Tiempo1. Un constructor inicializa los objetos de una clase. Cuando un programa crea un objeto de la clase Tiempo1, la instrucción new asigna memoria para el objeto y llama al constructor para que inicialice a ese objeto. Guía3 Pág. Pág. 8
  • 9. El método establecerHora (líneas 16 a 21) es un método public que declara tres parámetros int y los utiliza para ajustar la hora. Una expresión condicional evalúa cada argumento para determinar si el valor se encuentra en el rango especificado. Cualquier valor fuera de estos rangos es un valor inválido y se establece en cero de manera predeterminada, para asegurar que un objeto Tiempo1 siempre contenga datos válidos. (En este ejemplo, cero es un valor válido para hora, minuto y segundo) esto también se conoce como mantener el objeto en un estado consistente o mantener la integridad del objeto. El método aStringUniversal (líneas 23 a 28) no toma argumentos y devuelve una cadena en formato de hora universal, el cual consiste de seis dígitos: dos para la hora, dos para el minuto y dos para el segundo. Por ejemplo, si la hora fuera 1:30:07 PM, el método aStringUniversal devolvería 13:30:07. En la línea 32 se crea una instancia de la clase DecimalFormat (importada en la línea 3 del paquete java.text) para dar formato a la hora universal. A la referencia dosDigitos se le asigna una referencia a un objeto de la clase DecimalFormat, la cual se inicializa con el patrón “00”. Como utilizar la clase Tiempo1: Después de declarar la clase, podemos utilizarla como un tipo en las declaraciones como: Tiempo1 puestaDeSol; // referencia a un objeto Tiempo1 El nombre de la clase (Tiempo1) es un nombre de tipo. Una clase puede producir muchos objetos, de igual forma que un tipo primitivo, como int, puede producir muchas variables. Los programadores pueden declarar nuevos tipos de clases conforme lo necesiten; esta es una de las razones por las que Java se conoce como un lenguaje extensible. Ahora se procederá a escribir el código de la clase de aplicación PruebaTiempo1. 1. // PruebaTiempo1.java 2. // Clase PruebaTiempo1 que utiliza la clase Tiempo1. 3. import javax.swing.JOptionPane; Guía3 Pág. Pág. 9
  • 10. 4. public class PruebaTiempo1 { 5. public static void main( String args[] ) 6. { 7. Tiempo1 tiempo = new Tiempo1(); // llamar al constructor de Tiempo1 8. // anexar versión String de tiempo a salida String 9. String salida = “La hora universal inicial es: “ + 10. tiempo.aStringUniversal() + “nLa hora estándar inicial es: “ + 11. tiempo.aStringEstandar(); 12. // cambiar tiempo y anexar hora actualizada a salida 13. tiempo.establecerHora( 13, 27, 6 ); 14. salida += “nnLa hora universal después de establecerHora es: “ + 15. tiempo.aStringUniversal() + 16. “nLa hora estándar después de establecerHora es: “ + tiempo.aStringEstandar(); 17. // establecer tiempo con valores inválidos; anexar hora actualizada a salida 18. tiempo.establecerHora( 99, 99, 99 ); 19. salida += “nnDespués de intentar ajustes inválidos: “ + 20. “nHora universal: “ + tiempo.aStringUniversal() + 21. “nHora estándar: “ + tiempo.aStringEstandar(); 22. JOptionPane.showMessageDialog( null, salida, 23. “Prueba de la clase Tiempo1”, JOptionPane.INFORMATION_MESSAGE ); 24. System.exit( 0 ); 25. } // fin de main 26. } // fin de la clase PruebaTiempo1 Explicación del código de la clase de aplicación PruebaTiempo1 La clase de aplicación PruebaTiempo1 utiliza la clase Tiempo1. El método main de la clase PruebaTiempo1 declara y crea una instancia de la clase Tiempo1 llamada tiempo, en la línea 7. Al instanciarse el objeto, new asigna la memoria en la que el objeto Tiempo1 se almacenará, después llama al constructor de Tiempo1 para inicializar las variables de instancia del nuevo objeto Tiempo1. El constructor invoca al método Guía3 Pág. Pág. 10
  • 11. establecerHora para inicializar cada variable de instancia explícitamente con Cero (0). Después new regresa una referencia al nuevo objeto y esa referencia se asigna a tiempo. Observe que el archivo PruebaTiempo1.java no importa la clase Tiempo1. Si una clase se encuentra en el mismo paquete que la clase que va a utilizar, la declaración import no se requiere. Toda clase en Java es parte de un paquete. Si un programador no especifica un paquete para una clase, ésta se coloca en un paquete predeterminado sin nombre, el cual incluye a todas las clases compiladas en el directorio actual, que no se hayan colocado explícitamente en un paquete. Debemos especificar declaraciones import para las clases de la API de Java, ya que están declaradas fuera del paquete de cada nueva clase que creamos. La clase Tiempo1 es nuestro primer ejemplo de una clase que no es un applet, y que no contiene un método main. La clase PruebaTiempo1 declara al método main, por lo que PruebaTiempo1 puede utilizarse para iniciar la ejecución del programa. El método main se conoce como el punto de entrada en el programa. Una clase que contiene a main se conoce como una clase de aplicación o clase ejecutable. Ejercicio 2 Control del acceso a los miembros Los modificadores de acceso public y private controlan el acceso a las variables y los métodos de una clase. El principal propósito de los métodos public es presentar a los clientes de la clase una vista de los servicios que la clase proporciona (la interfaz pública de la clase). Los clientes de la clase no necesitan preocuparse acerca de cómo la clase realiza sus tareas. Por esta razón, las variables métodos private de una clase(es decir, los detalles de implementación de la clase) no son directamente accesibles para los clientes de una clase. Al proceso de restringir el acceso a los miembros de una clase mediante la palabra clave private se le conoce como ocultación de la información. En el siguiente ejemplo, se muestra que los miembros de clase private no son directamente accesibles fuera de la clase. En la línea 7 se trata de acceder directamente a la variable de instancia private llamada hora, del objeto Tiempo1 que es referenciado Guía3 Pág. Pág. 11
  • 12. por Tiempo. Al compilar este programa, el compilador genera mensajes de error indicando que los miembros private hora, minuto y segundo no son accesibles. 1. // PruebaTiempo2.java 2. // Errores que se producen al tratar de acceder a los miembros private de Tiempo1. 3. public class PruebaTiempo2 { 4. public static void main( String args[] ) 5. { 6. Tiempo1 tiempo = new Tiempo1(); 7. tiempo.hora = 7; // error: hora es una variable de instancia privada 8. tiempo.minuto = 15; // error: minuto es una variable de instancia privada 9. tiempo.segundo = 30; // error: segundo es una variable de instancia privada 10. } 11. } // fin de la clase PruebaTiempo2 Ejercicio 3 Referencias a los miembros del objeto actual mediante THIS Todo objeto puede hacer referencia a sí mismo, mediante la palabra clave this (lo que se conoce como una referencia this). En un método, la referencia this puede utilizarse en forma implícita y explicita para hacer referencia a las variables de instancia y otros métodos del objeto en el cual se haya llamado el método. Ahora mostraremos el uso implícito y explícito de la referencia this, para permitir que el método main de la clase PruebaThis muestre los datos private de un objeto HoraSimple. La clase HoraSimple (líneas 16 a 44) declara tres variables de instancia private: hora, minuto y segundo (líneas 17 a 19). El constructor (líneas 22 a 27) recibe tres argumentos int para inicializar un objeto HoraSimple. Observe que para este ejemplo hemos hecho que los nombres de los parámetros para el constructor (línea 22) sean idénticos a los nombres de las variables de instancia para la clase. Guía3 Pág. Pág. 12
  • 13. Se hizo esto para mostrar el uso explícito de this. Si un método contiene una variable local con el mismo nombre que un campo de esa clase, ese método se referirá a la variable local, en vez de referirse al campo. En este caso, la variable local sombrea al campo en el alcance de ese método. Sin embargo, el método puede utilizar a this para hacer referencia al campo sombreado en forma explícita. El método crearCadena (línea 29 a 33) devuelve un String creado por una instrucción que utiliza la referencia this en forma explícita e implícita. En la línea 31 se utiliza a this explícitamente para llamar al método aStringEstandar. Sin embargo, en la línea 32 se utiliza a this en forma implícita para llamar al mismo método. Observe que ambas líneas realizan la misma tarea. Por lo tanto, los programadores generalmente no utilizan la referencia this en forma explícita para hacer referencia a los métodos dentro del objeto actual. 1. // PruebaThis.java 2. // Uso de la referencia this para hacer referencia a los campos y métodos. 3. import javax.swing.*; 4. import java.text.DecimalFormat; 5. public class PruebaThis { 6. public static void main( String args[] ) 7. { 8. HoraSimple hora = new HoraSimple( 12, 30, 19 ); 9. JOptionPane.showMessageDialog( null, hora.crearCadena(), 10. "Demostración de la referencia "this"", 11. JOptionPane.INFORMATION_MESSAGE ); 12. System.exit( 0 ); 13. } 14. } // fin de la clase PruebaThis 15. // la clase HoraSimple demuestra el uso de la referencia "this" 16. class HoraSimple { 17. private int hora; 18. private int minuto; 19. private int segundo; Guía3 Pág. Pág. 13
  • 14. 20. // el constructor utiliza nombres de parámetros idénticos a los nombres de la variable 21. // de instancia; se requiere la referencia "this" para diferenciar entre los nombres 22. public HoraSimple( int hora, int minuto, int segundo ) 23. { 24. this.hora = hora; // establecer hora del objeto "this" 25. this.minuto = minuto; // establecer minuto del objeto "this" 26. this.segundo = segundo; // establecer segundo del objeto "this" 27. } 28. // usar "this" explícito e implícito para llamar al método aStringEstandar 29. public String crearCadena() 30. { 31. return "this.aStringEstandar(): " + this.aStringEstandar() + 32. "naStringEstandar(): " + aStringEstandar(); 33. } 34. // devolver la representación String de HoraSimple 35. public String aStringEstandar() 36. { 37. DecimalFormat dosDigitos = new DecimalFormat( "00" ); 38. // "this" no se requiere aquí, ya que el método no tiene 39. // variables locales con los mismos nombres que las variables de instancia 40. return dosDigitos.format( this.hora ) + ":" + 41. dosDigitos.format( this.minuto ) + ":" + 42. dosDigitos.format( this.segundo ); 43. } 44. } // fin de la clase HoraSimple Ejercicio 4 // Tiempo3.java // Declaración de la clase Tiempo3 con métodos establecer y obtener. import java.text.DecimalFormat; Guía3 Pág. Pág. 14
  • 15. public class Tiempo3 { private int hora; // 0 - 23 private int minuto; // 0 - 59 private int segundo; // 0 - 59 // El constructor de Tiempo3 inicializa cada variable de instancia en cero; // asegura que el objeto Tiempo3 inicie en un estado consistente public Tiempo3() { this( 0, 0, 0 ); // invoca al constructor de Tiempo3 con tres argumentos } // Constructor de Tiempo3: se proporciona hora; minuto y segundo con valor //predeterminado de 0 public Tiempo3( int h ) { this( h, 0, 0 ); // invoca al constructor de Tiempo3 con tres argumentos } // Constructor de Tiempo3: se proporcionan hora y minuto; segundo con //valor predeterminado de 0 public Tiempo3( int h, int m ) { this( h, m, 0 ); // invoca al constructor de Tiempo3 con tres argumentos } // Constructor de Tiempo3: se proporcionan hora, minuto y segundo public Tiempo3( int h, int m, int s ) { establecerHora( h, m, s ); } Guía3 Pág. Pág. 15
  • 16. // Constructor de Tiempo3: se proporciona otro objeto Tiempo3 public Tiempo3( Tiempo3 tiempo ) { // invocar al constructor de Tiempo3 con tres argumentos this( tiempo.obtenerHora(), tiempo.obtenerMinuto(), tiempo.obtenerSegundo() ); } // Métodos establecer // establecer un nuevo valor de hora usando hora universal; realizar // comprobaciones de validez en los datos; establecer valores inválidos en cero public void establecerHora( int h, int m, int s ) { establecerHora( h ); // establecer la hora establecerMinuto( m ); // establecer el minuto establecerSegundo( s ); // establecer el segundo } // validar y establecer la hora public void establecerHora( int h ) { hora = ( ( h >= 0 && h < 24 ) ? h : 0 ); } // validar y establecer minuto public void establecerMinuto( int m ) { minuto = ( ( m >= 0 && m < 60 ) ? m : 0 ); } // validar y establecer segundo public void establecerSegundo( int s ) { Guía3 Pág. Pág. 16
  • 17. segundo = ( ( s >= 0 && s < 60 ) ? s : 0 ); } // Métodos obtener // obtener el valor de hora public int obtenerHora() { return hora; } // obtener el valor de minuto public int obtenerMinuto() { return minuto; } // obtener el valor de segundo public int obtenerSegundo() { return segundo; } // convertir a String en formato de hora universal public String aStringUniversal() { DecimalFormat dosDigitos = new DecimalFormat( "00" ); return dosDigitos.format( obtenerHora() ) + ":" + dosDigitos.format( obtenerMinuto() ) + ":" + dosDigitos.format( obtenerSegundo() ); } // convertir a String en formato de hora estándar public String aStringEstandar() { Guía3 Pág. Pág. 17
  • 18. DecimalFormat dosDigitos = new DecimalFormat( "00" ); return ( ( obtenerHora() == 12 || obtenerHora() == 0 ) ? 12 : obtenerHora() % 12 ) + ":" + dosDigitos.format( obtenerMinuto() ) + ":" + dosDigitos.format( obtenerSegundo() ) + ( obtenerHora() < 12 ? " AM" : " PM" ); } } // fin de la clase Tiempo3 Y ahora el código de la clase de implementación // PruebaTiempo4.java // Demostración de los métodos establecer y obtener de la clase Tiempo3. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class PruebaTiempo4 extends JApplet implements ActionListener { private Tiempo3 tiempo; private JLabel horaEtiqueta, minutoEtiqueta, segundoEtiqueta; private JTextField horaCampo, minutoCampo, segundoCampo, pantallaCampo; private JButton ticBoton; // crear objeto Tiempo3 y configurar GUI public void init() { tiempo = new Tiempo3(); // crear objeto Tiempo3 // obtener el panel de contenido del subprograma y cambiar esquema a //FlowLayout Container contenedor = getContentPane(); Guía3 Pág. Pág. 18
  • 19. contenedor.setLayout( new FlowLayout() ); // configurar horaEtiqueta y horaCampo horaEtiqueta = new JLabel( "Establecer hora" ); horaCampo = new JTextField( 10 ); contenedor.add( horaEtiqueta ); contenedor.add( horaCampo ); // configurar minutoEtiqueta y minutoCampo minutoEtiqueta = new JLabel( "Establecer minuto" ); minutoCampo = new JTextField( 10 ); contenedor.add( minutoEtiqueta ); contenedor.add( minutoCampo ); // configurar segundoEtiqueta y segundoCampo segundoEtiqueta = new JLabel( "Establecer segundo" ); segundoCampo = new JTextField( 10 ); contenedor.add( segundoEtiqueta ); contenedor.add( segundoCampo ); // configurar pantallaCampo pantallaCampo = new JTextField( 30 ); pantallaCampo.setEditable( false ); contenedor.add( pantallaCampo ); // configurar ticBoton ticBoton = new JButton( "Agregar 1 a Segundo" ); contenedor.add( ticBoton ); // registrar los manejadores de eventos; este subprograma es el //ActionListener, // el cual contiene el método actionPerformed que será llamado para // manejar los eventos de acción generados por horaCampo, minutoCampo, // segundoCampo y ticBoton Guía3 Pág. Pág. 19
  • 20. horaCampo.addActionListener( this ); minutoCampo.addActionListener( this ); segundoCampo.addActionListener( this ); ticBoton.addActionListener( this ); mostrarHora(); // actualizar texto en pantallaCampo y barra de estado } // fin del método init // manejador de eventos para los eventos de botón y campo de texto public void actionPerformed( ActionEvent evento ) { // procesar evento de ticBoton if ( evento.getSource() == ticBoton ) tic(); // procesar evento de horaCampo else if ( evento.getSource() == horaCampo ) { tiempo.establecerHora( Integer.parseInt( evento.getActionCommand() ) ); horaCampo.setText( "" ); } // procesar evento de minutoCampo else if ( evento.getSource() == minutoCampo ) { tiempo.establecerMinuto( Integer.parseInt( evento.getActionCommand() ) ); minutoCampo.setText( "" ); } // procesar evento de segundoCampo else if ( evento.getSource() == segundoCampo ) { tiempo.establecerSegundo( Integer.parseInt( evento.getActionCommand() ) ); Guía3 Pág. Pág. 20
  • 21. segundoCampo.setText( "" ); } mostrarHora(); // actualizar texto en pantallaCampo y barra de estado } // fin del método actionPerformed // actualizar pantallaCampo y barra de estado del contenedor de subprogramas public void mostrarHora() { pantallaCampo.setText( "Hora: " + tiempo.obtenerHora() + "; Minuto: " + tiempo.obtenerMinuto() + "; Segundo: " + tiempo.obtenerSegundo() ); showStatus( "La hora estándar es: " + tiempo.aStringEstandar() + "; la hora universal es: " + tiempo.aStringUniversal() ); } // fin del método mostrarHora // sumar uno al segundo y actualizar la hora/minuto si es necesario public void tic() { tiempo.establecerSegundo( ( tiempo.obtenerSegundo() + 1 ) % 60 ); if ( tiempo.obtenerSegundo() == 0 ) { tiempo.establecerMinuto( ( tiempo.obtenerMinuto() + 1 ) % 60 ); if ( tiempo.obtenerMinuto() == 0 ) tiempo.establecerHora( ( tiempo.obtenerHora() + 1 ) % 24 ); } } // fin del método tic } // fin de la clase PruebaTiempo4 HERENCIA La herencia es una forma de reutilización de software en la que las clases se crean absorbiendo los datos (atributos) y métodos (comportamientos) de una clase existente, y se mejoran con las nuevas capacidades, o con modificaciones en las capacidades ya existentes. Guía3 Pág. Pág. 21
  • 22. Al crear una clase, en vez de declarar miembros (variables y métodos) completamente nuevos, el programador puede designar que la nueva clase herede los miembros de una clase existente. Esta clase existente se conoce como superclase, y la nueva clase se conoce como subclase. Una vez creada, cada subclase puede convertirse en superclase de futuras subclases. Una subclase generalmente agrega sus propias variables y métodos. Por lo tanto, una subclase es más específica que su superclase y representa a un grupo más especializado de objetos. Generalmente, la subclase exhibe los comportamientos de su superclase junto con comportamientos adicionales específicos de esta subclase. La superclase directa es la superclase a partir de la cual la subclase hereda en forma explicita. Una superclase indirecta se hereda de dos o más niveles arriba en la jerarquía de clases, la cual define las relaciones de herencia entre las clases. En java, la jerarquía de clases empieza con la clase Object (en el paquete java.lang), a partir de la cual heredan todas las clases en Java, ya sea en forma directa o indirecta. En el caso de la herencia simple, una clase se deriva de una superclase Java, a diferencia de C++, no soporta la herencia múltiple (que ocurre cuando una clase se deriva de más de una superclase directa). Las relaciones de herencia forman estructuras jerárquicas en forma de árbol. Una superclase existe en una relación jerárquica con sus subclases. Aunque las clases pueden existir de manera independiente, cuando participan en relaciones de herencia se afilian con otras clases. Una clase se convierte ya sea en una superclase proporcionando datos y comportamientos a otras clases, o en una subclase, heredando sus datos y comportamientos de otras clases. Miembros Protected En los ejemplos anteriores hablamos sobre los modificadores de acceso public y private. Los miembros public de una clase son accesibles en cualquier parte en donde el programa tenga una referencia al objeto de esa clase, o una de sus subclases. Los miembros private de una clase son accesibles sólo en los métodos de la clase. Estos miembros private de la superclase no se heredan. Ahora es tiempo de conocer el modificador de acceso protected. El uso del acceso protected ofrece un nivel intermedio Guía3 Pág. Pág. 22
  • 23. de acceso entre public y private. Los miembros protected de una superclase pueden ser utilizados por los miembros de esa superclase, por los miembros de cualquier clase que se derive de esa superclase y por los miembros de otras clases en el mismo paquete (los miembros protected también tienen acceso a nivel de paquete). Todos los miembros public y protected de una superclase retienen su modificador de acceso original cuando se convierten en miembros de la subclase (por ejemplo, los miembros public de la superclase se convierten en miembros protected de la subclase). Una subclase puede efectuar cambios de estado en los miembros private de la superclase, pero sólo a través de los métodos no private que se proporcione en la superclase y sean heredados por esa subclase. Los métodos de una subclase pueden referirse a los miembros public y protected que se hereden de la superclase con sólo utilizar los nombres de los miembros. Cuando un método de la subclase sobrescribe al método de la superclase, éste último puede utilizarse desde la subclase si se antepone a su nombre la palabra super y un punto (.). Ejercicio 5 // Punto.java // La declaración de la clase Punto representa un par de coordenadas x-y. public class Punto { private int x; // parte x de un par de coordenadas private int y; // parte y de un par de coordenadas // constructor sin argumentos public Punto() { // la llamada implícita al constructor de Object ocurre aquí } // constructor public Punto( int valorX, int valorY ) { Guía3 Pág. Pág. 23
  • 24. // la llamada implícita al constructor de Object ocurre aquí x = valorX; // no hay necesidad de validación y = valorY; // no hay necesidad de validación } // establecer x en el par de coordenadas public void establecerX( int valorX ) { x = valorX; // no hay necesidad de validación } // devuelve x del par de coordenadas public int obtenerX() { return x; } // establecer y en el par de coordenadas public void establecerY( int valorY ) { y = valorY; // no hay necesidad de validación } // devuelve y del par de coordenadas public int obtenerY() { return y; } // devuelve la representación String del objeto Punto public String toString() { Guía3 Pág. Pág. 24
  • 25. return "[" + x + ", " + y + "]"; } } // fin de la clase Punto Código de implementación de la clase Punto // PruebaPunto.java // Prueba de la clase Punto. import javax.swing.JOptionPane; public class PruebaPunto { public static void main( String[] args ) { Punto punto = new Punto( 72, 115 ); // crea objeto Punto // obtener las coordenadas del punto String salida = "La coordenada X es " + punto.obtenerX() + "nLa coordenada Y es " + punto.obtenerY(); punto.establecerX( 10 ); // establecer la coordenada x punto.establecerY( 20 ); // establecer la coordenada y // obtener la representación String del nuevo valor de punto salida += "nnLa nueva ubicación de punto es " + punto.toString(); JOptionPane.showMessageDialog( null, salida ); // mostrar resultados System.exit( 0 ); } // fin de main } // fin de la clase PruebaPunto Ejercicio 6 Guía3 Pág. Pág. 25
  • 26. // Circulo.java // La clase Circulo contiene un par de coordenadas x-y y un radio. public class Circulo { private int x; // coordenada x del centro del círculo private int y; // coordenada y del centro del círculo private double radio; // radio del círculo // constructor sin argumentos public Circulo() { // la llamada implícita al constructor de Object ocurre aquí } // constructor public Circulo( int valorX, int valorY, double valorRadio ) { // la llamada implícita al constructor de Object ocurre aquí x = valorX; // no hay necesidad de validación y = valorY; // no hay necesidad de validación establecerRadio( valorRadio ); } // establecer x en el par de coordenadas public void establecerX( int valorX ) { x = valorX; // no hay necesidad de validación } // devuelve la x del par de coordenadas public int obtenerX() { Guía3 Pág. Pág. 26
  • 27. return x; } // establecer y en el par de coordenadas public void establecerY( int valorY ) { y = valorY; // no hay necesidad de validación } // devuelve la y del par de coordenadas public int obtenerY() { return y; } // establecer el radio public void establecerRadio( double valorRadio ) { radio = ( valorRadio < 0.0 ? 0.0 : valorRadio ); } // devuelve el radio public double obtenerRadio() { return radio; } // calcula y devuelve el diámetro public double obtenerDiametro() { return 2 * radio; } // calcula y devuelve la circunferencia Guía3 Pág. Pág. 27
  • 28. public double obtenerCircunferencia() { return Math.PI * obtenerDiametro(); } // calcula y devuelve el área public double obtenerArea() { return Math.PI * radio * radio; } // devuelve representación String del objeto Circulo public String toString() { return "Centro = [" + x + ", " + y + "]; Radio = " + radio; } } // fin de la clase Circulo Código de implementación de la clase Círculo // PruebaCirculo.java // Prueba de la clase Circulo. import java.text.DecimalFormat; import javax.swing.JOptionPane; public class PruebaCirculo { public static void main( String[] args ) { Circulo circulo = new Circulo( 37, 43, 2.5 ); // crea el objeto Circulo // obtener las coordenadas x-y y radio iniciales de Circulo Guía3 Pág. Pág. 28
  • 29. String salida = "La coordenada X es " + circulo.obtenerX() + "nLa coordenada Y es " + circulo.obtenerY() + "nEl radio es " + circulo.obtenerRadio(); circulo.establecerX( 35 ); // establecer la nueva coordenada x circulo.establecerY( 20 ); // establecer la nueva coordenada y circulo.establecerRadio( 4.25 ); // establecer el nuevo radio // obtener la representación String del nuevo valor de circulo salida += "nnLa nueva ubicación y el radio del círculo sonn" + circulo.toString(); // da formato a los valores de punto flotante con 2 dígitos de precisión DecimalFormat dosDigitos = new DecimalFormat( "0.00" ); // obtener el diámetro del Circulo salida += "nEl diámetro es " + dosDigitos.format( circulo.obtenerDiametro() ); // obtener la circunferencia del Circulo salida += "nLa circunferencia es " + dosDigitos.format( circulo.obtenerCircunferencia() ); // obtener el área del Circulo salida += "nEl área es " + dosDigitos.format( circulo.obtenerArea() ); JOptionPane.showMessageDialog( null, salida ); // muestra la salida System.exit( 0 ); } // fin de main } // fin de la clase PruebaCirculo Guía3 Pág. Pág. 29
  • 30. IV.TAREA DE INVESTIGACION COMPLEMENTARIA • Buscar sobre el tema de Swing V. BIBLIOGRAFIA • Java Como Programar Quinta edición Autor: Deitel y Deitel. Editorial: Pearson Guía3 Pág. Pág. 30