La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.

Presentaciones similares


Presentación del tema: ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."— Transcripción de la presentación:

1 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación

2 Interfaces Programación I Una interface Java declara solo el contrato y no la implementación, parecido a una clase abstracta que difiere la implementación de sus métodos y los hace abstractos. Captura similitudes entre clases que no poseen relación de herencia y declara métodos útiles para ellas.

3 Interfaces Programación I Una interface contiene una colección de métodos que se implementan en otro lugar y también puede incluir constantes. Muchas clases pueden implementar la misma interface. Éstas clases no necesitan compartir la misma jerarquía de herencia. Otro beneficio de las interfaces es que permiten que una clase puede implementar mas de una interface.

4 Interfaces Programación I [public] interface NombredeInterface [extends listadeSuperInterfaces] { //Declaración de constantes //Declaración de métodos abstractos }

5 Interfaces Programación I Restricciones con las declaraciones de atributos: No se pueden utilizar los especificadores private y protected. Por defecto, las variables miembro son public, static y final.

6 Interfaces Programación I Restricciones con las declaraciones de los métodos: Sólo declaran comportamiento, no lo implementan. Por defecto, las definiciones de los métodos miembro son públicos y abstractos. No se pueden utilizar los especificadores private, protected, static, native, final y synchronized.

7 Interfaces Programación I [public] interface NombredeInterface [extends listadeSuperInterfaces] { //Constantes [public] tipo_dato final NOMBRECONSTANTE1 = valor; [public] tipo_dato NOMBRECONSTANTE2 = valor; … //Métodos [public] abstract tipoRetorno nomMetodo1(Parámetros Formales); [public] tipoRetorno nomMetodo2(Parámetros Formales); } Sintáxis en Java:

8 Interfaces Programación I public interface Control{ final int CantCanales = 32; /* Permite Encender ó Apagar el televisor */ void EncenderApagar( ); /* Permite cambiar el canal activo */ void CambiarCanal( ); /* Permite ajustar el volumen actual */ void AjustarVolumen( ); }

9 Interfaces Programación I Para que una clase pueda usar una interface, se utiliza la palabra clave implements y el nombre de la interface en la línea de declaración de la clase. La clase debe implementar todos los métodos de la interface. Si la clase no proporciona la implementación para todos los métodos de la interface debe ser declarada como abstracta. ¿Cómo usar una interfaz?

10 Interfaces Programación I public class Televisor implements Control { private String marca; private float costo; void EncenderApagar( ){ //código } void CambiarCanal( ){ //código } void AjustarVolumen( ){ //código } public void mostrar(){ System.out.println(marca+” ”+costo); }

11 Interfaces Programación I Imagine un grupo de objetos que comparten una misma habilidad: Volar, se podría implementar una interface que soporte las tres operaciones: despegar, aterrizar y volar. > Volar Despegar() Volar() Aterrizar() Avion Despegar() Volar() Aterrizar() HacerManiobras()

12 Interfaces Programación I public interface Volar{ void despegar(); void volar(); void aterrizar(); } public class Avion implements Volar { void despegar(){ //acelera hasta despegar } void volar(){ //mantener el vuelo } void aterrizar(){ //bajar hacia la tierra hasta tocarla y desacelerar } void HacerManiobras(){ //Hacer maniobras }

13 Interfaces Programación I Puede darse el caso, que múltiples clases implementen la interface Volar. > Volar Despegar() Volar() Aterrizar() Pajaro Despegar() Volar() Aterrizar() HacerNido() PonerHuevos() Avion Despegar() Volar() Aterrizar() HacerManiobras() Superman Despegar() Volar() Aterrizar() SaltarEdificios() PararBalas()

14 Interfaces Programación I Un Avión es un Vehículo y puede volar. Un pájaro es un animal y puede volar. Esto muestra que una clase puede heredar de una clase pero también puede implementar algunas interfaces. > Volar Despegar() Volar() Aterrizar() Pajaro Despegar() Volar() Aterrizar() HacerNido() PonerHuevos() Avion Despegar() Volar() Aterrizar() HecerManiobras() Superman Despegar() Volar() Aterrizar() SaltarEdificios() PararBalas() Animal Vehiculo HomoSapien public class HomoSapien extends Animal { … } public class Avion extends Vehiculo implements Volar { …} public class Pajaro extends Animal implements Volar { …} public class Superman extends HomoSapien implements Volar { … } AvionPajaroSuperman

15 Sin embargo, como PatodeGoma hereda de Pato debe implementar el método volar, ya que de lo contrario la clase PatodeGoma tendría que ser abstracta Interfaces Programación I Analizando este diseño, nos conseguimos con un grave problema. Los patos de Goma no vuelan y por tal motivo no deberían tener un método volar() Suponga que se esta diseñando un programa sobre Patos, el cual debe mostrar imágenes de cada especie, sus diferentes graznidos y formas de volar Un error más grave ocurre si se agregara un PatoSeñuelo, el cual por ser una especie de muñeco, ni grazna ni vuela. El problema se puede resolver usando interfaces Se crean dos interfaces Vuelo y Graznido, de tal forma que aquellos patos que graznen deben implementar la interface Graznido y los que vuelen implementaran la interfaz Vuelo Como el PatodeGoma solo grazna, implementa la interfaz Graznido pero no implementa la interfaz Vuelo ya que él no puede volar. PatoSeñuelo no implementa ninguna interfaz ya que no puede volar ni graznar Los métodos mostrar, graznar y volar son abstractos ya que cada especie de pato se muestra, vuela y grazna de forma diferente Por medio de una clase abstracta se podría definir el comportamiento común para todos los patos, como mostrar imagen, nadar, graznar y volar Ejemplo de una interface:

16 Interfaces Programación I Las Clases dentro de este círculo ya existen y debemos basarnos en ellas para resolver el problema Creamos las clases RectanguloGráfico y CirculoGráfico que agregan información sobre el color de línea Suponga, que existen clases Circulo y Rectángulo que definen las propiedades necesarias pero que no manejan información gráfica Un Diagrama de clases para resolver el problema se muestra a continuación Otro Ejemplo, podría ser un programa para dibujar figuras geométricas (en este caso círculos y rectángulos) Estás clases implementan la interfaz Dibujable que define el comportamiento gráfico de las clases Al PanelDibujo se puede agregar cualquier objeto que pueda ser Dibujable, es decir, objetos de clases que implementen la interfaz Dibujable De este modo, la interfaz Dibujable pasa a ser Polimórfica, ya que puede comportarse como un RetanguloGráfico o como un CirculoGráfico Ejemplo de una interface:

17 Interfaces Programación I Ejemplo de una interface: En este ejemplo vemos que tanto el CD-R como el DVD-R son medios ópticos, que únicamente pueden ser leídos El DVD-RW también es un medio óptico y puede ser leído, pero además es un medio grabable

18 Interfaces Programación I Código en Java para la interface Grabable: Visibilidad de la Interface Palabra reservada para definir una interfaz en Java Nombre de la Interfaz a Definir La interfaz Grabable define el método grabar() el cual por defecto es publico y abstracto La Clase MedioOptico Las Clases CDR y DVDR que heredan de MedioOptico

19 Interfaces Programación I La Clase DVDRW Hereda de la Clase DVDR Implementa la interfaz Grabable Se implementa el método grabar() Ahora, se presenta un programa que hace uso de las clases DVDRW y CDRW Note como el Burner tiene una variable de tipo Grabable la cual permite tanto DVD’s como CD’s por medio del polimorfismo Ejemplo de uso:

20 Interfaces Programación I public interface Contador { int MAX_INT = 2147483647; void avanzar(); int obtenerValor(); } public class ContadorSegundos implements Contador { int valor; ContadorSegundos(){ valor = 0; } public void avanzar(){ valor++; if (valor>60) valor = 0; } public int obtenerValor(){ return valor; } } public class ContadorInverso implements Contador { int valor; ContadorInverso(){valor=MAX_INT;} public void avanzar(){ valor--; if (valor<0) valor = MAX_INT; } public int obtenerValor(){ return valor; } } Otro Ejemplo de Interface.

21 Interfaces Programación I Una clase puede implementar más de una interface. interface1 interface2superClase Clase public class Clase extends superClase implements interface1, interface2 {…}

22 Interfaces Programación I Herencia de Interfaces La primera forma es crear una nueva interfaz “Clonable” e implementarla en las clases DVD-RW y CD-RW La segunda forma es crear una interface que herede de la interface Grabable y agregue el nuevo comportamiento Las Clases DVD-RW y CD-RW al implementar la interfaz GrabClon, deberán implementar el comportamiento para grabar así como para clonar Para este caso particular es preferible la segunda forma, ya que podemos manejar el polimorfismo de manera más simple, sin necesidad de hacer un casting explicito. Suponga, que ahora desea que su DVD o CD, además de poderse grabar (esta acción puede grabar datos de otro CD o de un medio magnetico) se pueda clonar (crear una copia fiel de un CD), esto se puede resolver de dos formas.

23 Interfaces Programación I Herencia de Interfaces La nueva interface que queremos definir Hereda de la interface Grabable, no la implementa Interface de la cual queremos heredar El nuevo método que queremos incorporar Las clases que implementen la interface GrabClon deberán implementar todos su métodos así como los métodos derivados de la clase Grabable Implementamos todos los métodos de la interfaz GrabClon La palabra reservada instanceof es usada para saber que tipo de referencia de las clases concretas se esta manipulando En este caso se usa para saber si el MedioOptico es un DVDR, ya que no se puede clonar un CDR en un DVDRW De igual manera La Clase CDRW implementa los métodos de la interface Un programa que hace uso de las clases concretas CDRW y DVDRW Note como el Burner tiene una variable de tipo GrabClon la cual permite grabar y clonar tanto DVD’s como CD’s por medio del polimorfismo El medio de origen es un MedioOptico y por el uso del polimorfismo puede ser tanto un CDR como un DVDR

24 Interfaces Programación I public interface ColoresBase { int ROJO = 1, VERDE = 2, AZUL = 4; void ajustarColoresBase( ); } public interface ColoresArcoIris extends ColoresBase { int AMARILLO = 3, NARANJA = 5, INDIGO = 6, VIOLETA = 7; void ajustarColoresArcoIris( ); } public interface MasColores extends ColoresArcoIris, ColoresBase { int FUCSIA = 17, COBRE = 43, ESMERALDA = 90; void ajustarMasColores( ); } Herencia de Interfaces Observe que las interfaces ColoresArcoIris y MasColores no deben implementar los métodos de las superInterfaces.

25 Interfaces Programación I public class Figura implements MasColores { void ajustarColoresBase( ){ //código } void ajustarColoresArcoIris( ){ //código } void ajustarMasColores( ){ //código } Herencia de Interfaces Cuando una clase implemente alguna interface, ésta debe darle vida (código) a los métodos de la interface que implementa y a los de sus interfaces madre.

26 Interfaces Programación I public interface ColoresBase { int ROJO = 1, VERDE = 2, AZUL = 4; public void ajustar( ); } public interface ColoresImpresora extends ColoresBase { int AMARILLO = 3, ROJO=5, NEGRO=0; public void ajustar( ); } public class Impresora implements ColoresImpresora { } Atributos ó Métodos Ambiguos

27 Interfaces Programación I public interface ColoresBase { int ROJO = 1, VERDE = 2, AZUL = 4; public void ajustar( ); } public interface ColoresImpresora extends ColoresBase { int AMARILLO = 3, ROJO=5, NEGRO=0; public void ajustar( ); } public class Impresora implements ColoresImpresora { } Atributos ó Métodos Ambiguos

28 Interfaces Programación I public class Impresora implements ColoresImpresora { public Impresora(){ } void ajustar( ){ //código } public static void main(String [] args){ System.out.println( “ColoresBase.ROJO=” +ColoresBase.ROJO); System.out.println( “ColoresImpresora.ROJO=” +ColoresImpresora.ROJO); Impresora hp = new Impresora(); hp.ajustar(); } Atributos ó Métodos Ambiguos

29 Interfaces Programación I Modificación de Interfaces Una interface una vez implementada no debería ser modificada. Lo que implica, que el diseño de una interface debe ser cuidadoso. Observe el siguiente ejemplo: public interface ColoresBase { int ROJO = 1, VERDE = 2, AZUL = 4; void ajustar(); } public class Figura implements ColoresBase { void ajustar(){ //código } public class Televisor implements ColoresBase { void ajustar(){ //código }

30 Interfaces Programación I Modificación de Interfaces Si ud. necesita agregar ó eliminar métodos de la interface ColoresBase, debe modificar todas las clases que implementen a esa interface. public interface ColoresBase { int ROJO = 1, VERDE = 2, AZUL = 4; void ajustar(); void mostrar(); } public class Figura implements ColoresBase { void ajustar(){ } void mostrar(){ } } public class Televisor implements ColoresBase { void ajustar(){ } void mostrar(){ } }

31 Interfaces Programación I Modificación de Interfaces Si la modificación de la interface, se trata de que necesita incluir nuevos métodos, el problema anterior se soluciona creando una interface con el o los nuevos métodos y se establece como hija de la interface original, esto hace que la nueva interface tenga los métodos anteriores mas los nuevos métodos. Las nuevas clases que necesiten del nuevo método de la interface, deberán implementar la interface hija y las clases anteriores no sufren modificación.

32 Interfaces Programación I Modificación de Interfaces public interface ColoresBase { int ROJO = 1, VERDE = 2, AZUL = 4; void ajustar( ); } public interface HijaColoresBase extends ColoresBase { void mostrar( ); } public class OtraFigura implements HijaColoresBase { void ajustar( ){ //código } void mostrar( ){ //código } }

33 Palabra clave static Programación I Es usada como modificador de atributos y métodos. Los miembros estáticos son llamados “miembros clases”, tal como, “atributos de clase” y ”métodos de clase”. En el momento de la declaración asocia los atributos o métodos con la clase y no con una instancia en particular.

34 Atributos de clase Programación I Algunas veces es deseable tener una variable compartida con todas las instancias de una clase. Por ejemplo, conocer el número de instancias de una clase que han sido creadas. public class Afiliado { private int numeroSerial; private static int contador=0; public Afiliado() { contador++; numeroSerial=contador; }

35 Atributos de Clase Programación I En este ejemplo, cada vez que se crea un objeto de la clase Afiliado, se le asigna un único número de serial, que comienza en 1 y se va incrementando. La variable contador es compartida por todas las instancias y mantiene su valor durante la ejecución del programa.. Afiliado A=new Afiliado(); Afiliado B=new Afiliado();. contador=1 y A.numeroSerial=1 contador=2 y B.numeroSerial=2

36 Programación I Un atributo static, puede ser accedido desde la misma clase sin la presencia de un objeto para referirse a él. Atributos de Clase public class Afiliado { private int numeroSerial; private static int contador=0; public Afiliado() { contador++; numeroSerial=contador; } public static void main(String [] args){ System.out.println(“contador=”+contador); System.out.println(“numero de serial=”+numeroSerial); //Error Afiliado obj = new Afiliado(); System.out.println(“numero de serial = ”+obj.numeroSerial); }

37 Programación I Si una variable static no es privada, podrá ser accedida desde fuera de la clase. De tal modo, no se necesitará de un objeto para referirse a ella, bastará usar el nombre de la clase. public class OtraClase { public void incrementarNumero() { Afiliado.contador++; } Atributos de Clase

38 Métodos de clase Programación I Algunas veces se necesita acceder a métodos cuando no se tiene un objeto de una clase. Un método que es marcado static puede ser usado con este propósito. public class Afiliado { private int numeroSerial; private static int contador=0; public Afiliado() { contador++; numeroSerial=contador; } public static int ObtenerContador(){ return contador; }

39 Métodos de clase Programación I Se debe acceder a esos métodos usando el nombre de la clase en vez de usar un objeto referencia. public class OtraClase { public static void main (String [] args){ System.out.println(“contador = ”+Afiliado.ObtenerContador()); Afiliado c1=new Afiliado(); System.out.println(“contador = ”+Afiliado.ObtenerContador()); } La salida del programa será: Contador = 0 Contador = 1 Nombre de la clase

40 Métodos de clase Programación I La consecuencia de los métodos estáticos, es que no pueden acceder cualquier variable que esté fuera de su ámbito local, es decir, solo pueden acceder, variables locales, argumentos recibidos y atributos estáticos. public class Afiliado{ private int numeroSerial; private static int contador=0; public static int ObtenerContador(){ return numeroSerial; //Error }

41 Palabra clave final Programación I Esta palabra clave puede ser usada para clases, métodos y atributos. No puede existir una subclase de una clase final. No se puede sobreescribir un método final. Una variable final es una constante.

42 Clases final Programación I Java permite aplicar esta palabra clave a las clases, pero al hacer esto, las éstas clases no podrán ser derivadas. Por ejemplo: Empleado EjecutivoSecretaria public class Empleado{.... } final class Ejecutivo extends Empleado{.... } final class Secretaria extends Empleado{.... }

43 Métodos final Programación I Por razones de seguridad, se debe colocar un método como final, si el método tiene una implementación que no debe cambiar y es crítico para el estado consistente del objeto. Los métodos declarados como final no pueden ser sobreescritos.

44 Atributos final Programación I Un atributo final es una constante. Se le coloca el valor a un atributo final solo una vez, pero puede ser independientemente de la declaración. Preferiblemente, se inicializan en el constructor, para asegurarse que ocurra solo una vez, lo importante es fijar algún valor antes de ser usados.

45 Atributos final Programación I Si un atributo es declarado como final, el efecto es hacer de él una constante. Cualquier intento de cambiar el valor a un atributo final causa un error de compilación. public class Banco{ private final double TASA_INTERES=3.2;.... //mas declaraciones }

46 Atributos final Programación I Típicamente, el valor de inicialización de un atributo final se asigna en el constructor, aunque puede hacerse en el cuerpo de algún método, pero solo debe hacerse una vez. public class Cliente{ private final long ID_Cliente; public Cliente(){ ID_Cliente=CrearID(); } public long ObtenerID(){ return ID_Cliente; } private long CrearID(){ return...//Generar un nuevo ID }....//mas declaraciones }

47 Variable final estática Programación I public class Cliente{ private final long ID_Cliente; private static final float TasaInteres=3.2F; public Cliente(){ ID_Cliente=CrearID(); } public long ObtenerID(){ return ID_Cliente; } private long CrearID(){ return...//Generar un nuevo ID }....//mas declaraciones }

48 :: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Finalización


Descargar ppt ":: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación."

Presentaciones similares


Anuncios Google