Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

Lenguaje de programación Java
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Programación Orientada a Objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
1 Clase 5: primeros programas (3ª parte) iic1102 – introducción a la programación.
Herencia y Clases Abstractas ELO329: Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos Unidad III – Programación Orientada a Objetos en Java Programación I
Archivos en Java Unidad III – Programación Orientada a Objetos en Java Programación I
PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento y constructores.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Programación orientada a objetos (p.o.o)
Unidad Didáctica 11 Reutilización Versión 1.0.0
Clases y Objetos.
Curso de introducción a Fundeweb
Programación Avanzada
PROGRAMACIÓN ORIENTADA A OBJETOS
Ingeniería Directa. Generar código a través de modelos se le conoce como ingeniería directa.
Diseño y Programación Orientada a Objetos
Herencia Implementación en Java.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Programación Avanzada
Métodos y parámetros.
Fundamentos de la programación orientada a objetos
Polimorfismo y Métodos Virtuales
Métodos en Java.
Algunas Características de C++ no presentes en C
Clases y Objetos en Java
Guía teórica de manejo de estructuras de datos
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Programación orientada a objetos
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Algunas Características de C++ no presentes en C
Sonia Rueda Herencia y Polimorfismo
Interfaces Gráficas de Usuario
Programación Orientada a Objetos I Unidad 4 Relaciones entre clases: herencia.
Herencia en C#.
Desarrollo de Software
Interfaces Gráficas de Usuario
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
ESTRUCTURA DE UN PROGRAMA SIMPLE EN JAVA
ESMERALDA LIMÓN ESCUTIA AURORA MENDOZA PASTRANA RUTH LÓPEZ muñoz I.S.C
Diagramas del modelo uml
Ingeniero en Computación José Alfredo Cobián Campos
INGENIERIA EN SISTEMAS COMPUTACIONALES
Programación Orientada a Objetos
Conceptos de Objetos, Clases y Otros Modelo Conceptual
Java – programación orientada a objetos programación ii – iee
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Herencia en C++ Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
ELO329: Diseño y Programación Orientados a Objetos
Unida III: Análisis y Diseño de Sistemas Orientado a Objetos
Polimorfismo en C++ y Métodos Virtuales
Tema 5 H erencia. La herencia es una forma de reutilización de software en la que las clases se crean incorporando los datos (atributos) y el comportamiento.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Clases abstractas e interfaces
FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
Transcripción de la presentación:

Programación Orientada a Objetos Unidad III – Programación Orientada a Objetos en Java Programación Orientada a Objetos Programación I - 0416202

Esta lección abarca los siguientes temas: Interfaces Sintaxis Herencia Contenido Esta lección abarca los siguientes temas: Interfaces Sintaxis Restricciones Declaración Uso de una interface Ejemplos Acerca de la implementación Herencia de interfaces

Interfaces ¿Qué es una Interface? 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. Una interface contiene una colección de métodos que se implementan en otro lugar y también puede incluir constantes.

Interfaces ¿Qué es una Interface? 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.

[public] interface NombredeInterface [extends listadeSuperInterfaces] Interfaces Sintaxis [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); }

Interfaces Restricciones 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.

Interfaces Restricciones 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.

Interfaces Declaración Ejemplo: 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( ); }

Interfaces Uso de una interface ¿Cómo usar una interface? 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.

Interfaces Uso de una Interface public class Televisor implements Control { private String marca; private float costo; void EncenderApagar( ){ //código } void CambiarCanal( ){ void AjustarVolumen( ){ public void mostrar(){ System.out.println(marca+” ”+costo); Ejemplo:

Interfaces Uso de una interface 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. <<interface>> Volar Despegar() Volar() Aterrizar() Avion Despegar() Volar() Aterrizar() HacerManiobras()

Interfaces Uso de una interface 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 Ejemplo:

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

<<interface>> Interfaces Ejemplos 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. <<interface>> Volar Despegar() Volar() Aterrizar() 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 { … } Avion Pajaro Superman Avion Despegar() Volar() Aterrizar() HecerManiobras() Pajaro Despegar() Volar() Aterrizar() HacerNido() PonerHuevos() Superman Despegar() Volar() Aterrizar() SaltarEdificios() PararBalas()

Interfaces Ejemplos 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() 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 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 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 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 Los métodos mostrar, graznar y volar son abstractos ya que cada especie de pato se muestra, vuela y grazna de forma diferente 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 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

Interfaces Ejemplos Otro Ejemplo, podría ser un programa para dibujar figuras geométricas (en este caso círculos y rectángulos) 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 Creamos las clases RectanguloGráfico y CirculoGráfico que agregan información sobre el color de línea Estás clases implementan la interfaz Dibujable que define el comportamiento gráfico de las clases Las Clases dentro de este círculo ya existen y debemos basarnos en ellas para resolver el problema 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

Interfaces Ejemplos 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

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

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

Interfaces Ejemplos 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; } }

Interfaces Acerca de la implementación Una clase puede implementar mas de una interface. interface1 interface2 superClase Clase public class Clase extends superClase implements interface1, interface2 {…}

Interfaces Herencia de interfaces 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. La primera forma es crear una nueva interfaz “Clonable” e implementarla en las clases DVD-RW y CD-RW 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. Las Clases DVD-RW y CD-RW al implementar la interfaz GrabClon, deberán implementar el comportamiento para grabar así como para clonar La segunda forma es crear una interface que herede de la interface Grabable y agregue el nuevo comportamiento

Interfaces Herencia de interfaces La nueva interface que queremos definir En este caso se usa para saber si el MedioOptico es un DVDR, ya que no se puede clonar un CDR en un DVDRW Hereda de la interface Grabable, no la implementa Interface de la cual queremos heredar La palabra reservada instanceof es usada para saber que tipo de referencia de las clases concretas se esta manipulando Implementamos todos los métodos de la interfaz GrabClon 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 Un programa que hace uso de las clases concretas CDRW y DVDRW El medio de origen es un MedioOptico y por el uso del polimorfismo puede ser tanto un CDR como un DVDR De igual manera La Clase CDRW implementa los métodos de la interface Las clases que implementen la interface GrabClon deberán implementar todos su métodos así como los métodos derivados de la clase Grabable El nuevo método que queremos incorporar

Interfaces Herencia de interfaces 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( ); } Observe que las interfaces ColoresArcoIris y MasColores no deben implementar los métodos de las superInterfaces.

Interfaces 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. public class Figura implements MasColores { void ajustarColoresBase( ){ //código } void ajustarColoresArcoIris( ){ void ajustarMasColores( ){

Interfaces Atributos o métodos ambigüos 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 {

Interfaces Atributos o métodos ambigüos 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();

Interfaces 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 }

Interfaces 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(){ } }

Interfaces Modificación de interfaces Si la modificación de la interface, tiene que ver con la inclusión de 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.

Interfaces 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 } }