Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java Capitulo 7: Continuación Poo Profesor:
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
POLIMORFISMO UNIDAD 4.
Programación Interactiva Fundamentos de Java. 2 Ejecución de un programa Para Java una clase ejecutable es aquella que es pública y tiene un método main()
Herencia en C#.
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Herencia simple y multiple
Arquitectura CLARO-TECNOTREE
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Diseño y programación de
PROGRAMACION ORIENTADA A OBJETOS
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
HERENCIA.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
Medio de tele-comunicación
Modificadores.
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Introducción a Java II.
Lic. Rosemary Torrico Bascopé
Abstracción de los datos y Orientación a Objeto Clase 13.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Diplomado Desarrollo de Aplicaciones en Internet
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
Herramientas de polimorfismo y herencia en C++
Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005.
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Detalles Generales sobre Java
Programación orientada a objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación CLASES DE JAVA Diciembre de 2008.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
 En Java, como en otros lenguajes de programación orientados a objetos, las clases pueden derivar desde otras clases. La clase derivada (la clase que.
Modelado UML Diagrama de Clases
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

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

Programación I Herencia La idea básica consiste en que las clases nuevas se construyen a partir de las clases ya existentes. Es decir, las clases nuevas heredan la vida de las más antiguas. La herencia es la característica clave de los sistemas orientados a objetos para propiciar la reusabilidad. La herencia implementa las relaciones es-un (type-of) o es-una-clase-de (instanceof). Programación I

Herencia Ejemplo: Programación I

Programación I Herencia La clase Pelota es la clase padre (superclase) en la jerarquía. Programación I Fútbol es una clase de Pelota. Fútbol tiene todos los atributos y operaciones de Pelota. No obstante, la clase Fútbol ha ocultado (hecho privada) la operación desinflar (sacándola de la interfaz pública) y sobrecargó el método lanzar con una implementación apropiada para el Fútbol.

Programación I Herencia La herencia es una forma de especialización en donde las clases hijas son refinadas para tener el comportamiento y atributos adecuados para la aplicación de que se trate. Al poder las clases derivadas añadir, redefinir y ocultar miembros, la herencia se convierte en reusabilidad programable. Programación I Cuando se crea una clase es posible que sea útil para la creación de futuras clases. De modo que, cuando se esté haciendo un programa distinto y se necesite esa clase, ésta se pueda incluir en el código de ese nuevo programa.

Herencia por Composición También es posible, que se utilice una clase para crear instancias de la misma en nuevas clases. A eso se le llama Composición. Representa una relación “tiene un”, es decir, si tenemos una clase Rueda y una clase Auto, es de esperar que la clase Auto tenga cuatro instancias de Rueda ó un vector de 4 posiciones, por ejemplo: Programación I

Herencia por Composición public class Rueda{ private int tamanho; private String marca; public Rueda(){ } public class Auto{ private String Placa; private Rueda rueda1, rueda2, rueda3, rueda4; private Rueda [] ruedas=new Rueda[4]; public Auto(){ rueda1=new Rueda(); //A todos los obj ruedas for (int i=0; i<ruedas.length; i++) ruedas[i]=new Rueda(); Programación I

Herencia por Composición Es la técnica en la que una clase se compone o contiene instancias de otras clases. Es una técnica muy habitual cuando se diseñan clases. En el ejemplo diríamos que un Circulo tiene un punto (centro) y un radio. Ejemplo: Programación I public class Circulo{ Punto centro; int radio; public float superficie() { return 3.14*radio*radio; }

Herencia por Extensión Pero, además de ésta técnica de Composición es posible pensar en casos en los que una clase es una extensión de otra. Es decir, una clase es como otra y además tiene algún tipo de característica propia que la distingue. Programación I

Herencia por Extensión Aves Persona Insectos Mamíferos Hombre Mujer Animal Programación I

Herencia por Extensión Es el proceso por el cual un objeto puede adquirir las propiedades y métodos de otro objeto. La herencia supone una clase base y una jerarquía de clases que contiene las clases derivadas de la clase base. Además, es una forma de reutilización de software, en la cual se crean las clases nuevas a partir de las clases existentes, mediante la absorción de sus atributos y comportamientos. Programación I

Herencia por Extensión: Tipos La herencia simple es aquella donde las clases derivadas toman atributos y comportamientos de una sola clase base. La herencia múltiple es aquella donde las clases derivadas toman los atributos y comportamientos de varias clases base. Programación I

Herencia por Extensión: Tipos Clase Clase Base Clase Padre Sub-Clase Clase Derivada Clase Hija Herencia Simple Herencia Múltiple Programación I

Herencia por Extensión Ejemplo: class Empleado {     protected String nombre;     protected int sueldo;     Empleado(String nombre, int sueldo) {     this.nombre = nombre;         this.sueldo = sueldo; }     public void aumentarSueldo(int porcentaje) { sueldo += (int)(sueldo * porcentaje / 100); }     public void mostrar() { System.out.println (“nombre: ” + nombre); System.out.println (“Sueldo: ” + sueldo); } } nombre sueldo Empleado(String,int) aumentarSueldo(int) mostrar() ObjEmpleado Programación I nombre sueldo presupuesto aumentarSueldo(int) mostrar() asignarPresupuesto(int) ObjEjecutivo class Ejecutivo extends Empleado {     public int presupuesto;     void asignarPresupuesto(int p) {         presupuesto = p; } }

Herencia por Extensión Un Ejecutivo “ES UN” Empleado, pero lo contrario no es cierto. Por ejemplo, si escribimos: Se producirá un error de compilación, pués en la clase Empleado no existe ningún método llamado asignarPresupuesto. Empleado objEmp= new Empleado ("Esteban Comex Plota" , 100) ; objEmp.asignarPresupuesto(5000);  // error Programación I

Criterios de Accesibilidad Modificador Misma class Mismo package Subclases Universo private Si default protected public Programación I

SobreEscritura de Métodos Una subclase puede modificar las características heredadas de una clase padre. Una subclase puede crear un método con funcionalidad diferente al método de la clase padre pero con igual: - Nombre, - Tipo de dato de retorno, - Lista de argumentos. A este método se le dice que sobreescribe al método de la clase padre. Programación I

Ejemplo de SobreEscritura de Métodos public class Empleado { protected String nombre; protected int sueldo; public void mostrar() { System.out.println(“nombre: ” + nombre); System.out.println(“Sueldo: ” + sueldo); } public class Ejecutivo extends Empleado{ public int presupuesto; System.out.println(“Presupuesto: ” + presupuesto); Programación I

Palabra Reservada “super” super es usado en una subclase, para referirse a su clase padre, tanto atributos como a los métodos. Las características invocadas no tienen que ser solo las de la superclase inmediata, pueden ser las de una superclase en la cadena de jerarquía. Frecuentemente, es usado en la sobreescritura de métodos, debido a que por lo general no se reemplaza toda la funcionalidad del método heredado sino que se le añaden características. Programación I

Programación I Ejemplo de super public class Empleado { protected String nombre; protected float sueldo; public void mostrar() { System.out.println(“nombre: ” + nombre); System.out.println(“Sueldo: ” + sueldo); } public class Ejecutivo extends Empleado{ public int presupuesto; //Se invoca al método del padre super.mostrar(); System.out.println(“Presupuesto: ” + presupuesto); Programación I

Los Constructores no se heredan Una subclase hereda todos los atributos y métodos de la superclase (clase padre). Una subclase no hereda el constructor de la superclase. Hay dos formas de incluir el constructor: - Usar el constructor por defecto. (sin parámetros) - Escribir uno o mas constructores explícitos. El constructor de la clase padre es llamado en el constructor de la clase hija. Programación I

Invocar Constructores de la Clase Padre Para invocar al constructor del padre, se debe usar la llamada super en la primera línea del constructor de la clase hija. La especificación del constructor se específica en los argumentos que se usan en la llamada super. Si una clase hija, no incluye una llamada this o super, el compilador añade implícitamente una llamada super() que llama al constructor por defecto de la clase padre. Si la clase padre define constructores, pero no tiene un constructor por defecto, el compilador arrojará un mensaje de error. Programación I

Ejemplo de SobreEscritura de Métodos Observemos la clase Padre Empleado y los constructores que ella posee: public class Empleado { protected String nombre; protected int sueldo; public Empleado(String n, int s) { nombre = n; sueldo = s; } public Empleado(String n) { //Otras def. de métodos Programación I

Ejemplo de SobreEscritura de Métodos public class Ejecutivo extends Empleado { private int presupuesto; public Ejecutivo(String xnom, int xsueldo, int xpres) { super(xnom,xsueldo); presupuesto=xpres; } public Ejecutivo(String xnom, int xpres) { super(xnom); public Ejecutivo(int xpres) { presupuesto=xpres; //Como no hay llamada a un constructor de la clase Padre, el compilador incorpora una llamada super(); lo que genera ERROR porque en la clase Padre no hay constructor por defecto. //Otras def. de métodos Programación I

Programación I Herencia package Relacion_clases; public class Punto { protected int x,y; public Punto() {} public Punto(int a, int b){ this.SetPunto(a,b); } public void SetPunto(int a, int b){ this.x=a; this.y=b; } public int getX(){ return this.x;} public int getY(){ return this.y;} } package Relacion_clases; public class Circulo extends Punto{ public double radio; public Circulo () { super(0,0); this.setRadio (0); } public Circulo (int a, int b, double r ) { super(a,b); this.setRadio (r); } public void setRadio(double r) { this.radio=(r>=0.0?r:0.0);} public double GetRadio(){ return this.radio;} public double area() { return 3.1416*this.radio*this.radio; } } Programación I package Relacion_clases; public class Implementacion { public static void main(String[] args) { Punto p=new Punto(3,5); Circulo c=new Circulo(6,3,2.3); System.out.println(p.getX()+ "," + p.getY()); System.out.println(c.getX()+ "," + c.getY()); } }

Programación I Clases Abstractas Las clases abstractas se utilizan como superclases en situaciones de herencia, por eso son llamadas superclases abstractas. La finalidad de una clase abstracta es proveer una superclase apropiada de la cual otras clases puedan heredar una interfaz o una implementación. Programación I

Programación I Clases Abstractas Hacemos abstracta una clase declarándola con la palabra reservada abstract Para que una clase sea declarada abstracta debe contener al menos un método sin implementación relativa a la clase, esto es, un método sin código. Éstos son llamados métodos abstractos. La implementación de éstos métodos se realiza en las subclases. Programación I

Programación I Clases Abstractas Las clases abstractas pueden tener atributos, métodos concretos y constructores, además de métodos abstractos. Es recomendable declarar los atributos y métodos de estas clases protected o private en vez de public porque sólo podrán ser accedidos o invocados por las subclases de la clase abstracta. Programación I

Programación I Clases Abstractas public abstract class figura { protected double x; protected double y; public figura(double i, double j) { x = i; y = j; } public abstract void mostrar_area(); } public class triangulo extends figura { public void mostrar_area() { System.out.println(“Area de triangulo=”+(x*y*0.5)); } public class rectangulo extends figura { { System.out.println(“Area de rectangulo=”+(x*y)); } Programación I

Programación I Clases Abstractas No todos los métodos de una clase abstracta tienen que estar sin implementación, pero con que solamente exista un método abstracto, la clase debe declararse abstracta. public abstract class Figura { public Figura() { } public double area() { return 0.0; } public double volumen() { return 0.0; } public abstract String devolverNombre(); } Programación I

Programación I Clases Abstractas Las clases abstractas tienen una característica importante: No se permite instanciar objetos de una clase abstracta. Figura x = new Figura(); //Error La única forma de utilizar una clase abstracta es creando clases hijas que hereden de ella y éstas se encarguen de implementar sus métodos abstractos. Programación I

Programación I Clases Abstractas Las subclases de una clase abstracta deben: No se pueden definir constructores abstractos o métodos estáticos abstractos. Sobreescribir todos los métodos abstractos de la superclase, o bien Ser declaradas como clases abstractas Programación I

Programación I Interfaces 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. Programación I

Programación I Interfaces 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. Programación I

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

Programación I Interfaces 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. Programación I

Programación I Interfaces 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. Programación I

Programación I Interfaces [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); } Programación I

Programación I Interfaces 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( ); } Programación I

¿Cómo usar una interfaz? Interfaces ¿Cómo usar una interfaz? 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. Programación I

Programación I Interfaces 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); Programación I

<<interface>> Interfaces 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() Programación I Avion Despegar() Volar() Aterrizar() HacerManiobras()

Programación I Interfaces 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 Programación I

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

<<interface>> Interfaces 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 Programación I 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()

Programación I Interfaces Otro Ejemplo de Interface. 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; } } Programación I

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

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