Lenguajes de Programación: Herencia, Polimorfismo Y UML

LuisFerAguas 4,406 views 23 slides Oct 31, 2016
Slide 1
Slide 1 of 23
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23

About This Presentation

Lenguajes de Programación: Herencia, Polimorfismo Y UML


Slide Content

Lenguajes de Programación: Herencia, Polimorfismo, Uml Autor(es): Mtr. Luis Fernando Aguas

Concepto y justificación de la herencia La clase que hereda se denomina subclase o clase derivada . La clase de la cual se hereda se denomina superclase o clase base .

Concepto y justificación de la herencia Todo objeto de una subclase es un objeto de la superclase de la cual deriva.

Concepto y justificación de la herencia Las subclases pueden redefinir los métodos y atributos de la clase padre y añadir otros nuevos.

JERARQUIA DE CALSES Las subclases de una clase pueden ser a su vez superclases de otras clases. Esto da lugar a jerarquías de clases.   → Jerarquías de Generalización/Especialización que son relaciones conceptuales ‘ EJEMPLOS: Libros y Revistas tienen propiedades comunes. Una Pila puede definirse a partir de una Cola o viceversa . Un Rectángulo es una especialización de Polígono Puede haber distintos tipos de Cuentas.

JERARQUIA DE CALSES GENERALIZACION ESPECIALIZACION Se detectan clases con un comportamiento común. Ejemplo : Triangulo y polígono son figuras. Se detecta que una clase es un caso especial de otra Ejemplo : Triangulo es un tipo de Polígono. No hay receta mágica para crear buenas jerarquías

Tipos de herencia Herencia simple Una clase puede heredar de una única clase . Ejemplo : Java, C # Herencia múltiple Una clase puede heredar de varias clases . Clases forman un grafo dirigido acíclico . Ejemplos : Eiffel, C++

La sintaxis que indica la herencia en JAVA Para indicar que una clase hereda sus atributos y métodos de otra, en Java se utiliza la palabra clave extends. Herencia Simple class subclase extends superclase : public class Vocal extends Letra

Clase persona public class Persona { String nombre = ""; int edad ;   public Persona(String nom, int ed ) { nombre = nom; edad = ed ; }   public void mostrar () { System.out.println (" Nombre : "+ nombre ); System.out.println (" Edad : "+ edad ); } public static void main(String args []) { Persona yo = new Persona(" Balta ", 99); yo.mostrar (); } } La sintaxis que indica la herencia en JAVA

Clase trabajador public class Trabajador extends Persona { float sueldoHora ; int numHoras ; public Trabajador( String nom , int ed , float suel , int num ) { super ( nom , ed ); // llamada al constructor de Persona sueldoHora = suel ; numHoras = num ;} public double sueldo() { return sueldoHora * numHoras ; } Trabajador yo= new Trabajador("Balta", 99, 200.5f, 45); yo.mostrar (); // se invoca al método heredado mostrar double pelas = yo.sueldo (); System.out.println ("Cobra: " + pelas); } } La sintaxis que indica la herencia en JAVA

Herencia y Reglas de Acceso     Existen cuatro posibles visibilidades de atributos y métodos : De más restrictivo a menos: private visible sólo en la clase donde se define. Sin modificador (por defecto) visible a las clases del paquete. protected visible a las subclases y al resto de clases del paquete. public visible a todas las clases.

Herencia y Reglas de Acceso class Vuelo {   char nombre [30];    // private ( por defecto )   int capacidad ;      // private ( por defecto ) private:   float peso;         // private protected:   void carga (& operacion };    // protected public:   void despegue (& operacion }; // public   void crucero (& operacion );  // public   char* getName ();           // obtener el nombre del vuelo };

Evitando la herencia S e puede evitar que una clase sea heredada : public final class Clase

Paquetes Los paquetes son contenedores de clases que permite delimitar el espacio en el cual una clase existe . Los paquetes permiten que exista más de una clase con el mismo nombre. Para indicar que una clase pertenece a un cierto paquete, se utiliza la palabra clave package La forma de esta sentencia es : package nombrePaquete ;

Constructores y destructores Constructor es un: Método que inicializa el objeto en su creación. Se llama automáticamente cuando se crea un objeto. Su nombre es igual que el de la clase y no tiene tipo de retorno. Java proporciona un constructor sin parámetros por defecto que deja de estar disponible cuando se añade algún constructor.

Constructores y destructores D estructor es un: Es un método perteneciente a una clase que es ejecutado de forma automática cuando un objeto es destruido. Java no soporta los destructores.

Constructores y destructores en herencia En principio se hereda todo menos: Constructor y destructor Aunque no se heredan ni el constructor ni el destructor de la clase base, cuando se crea o se destruye un objeto de la clase derivada se invocan automáticamente los de la clase base . Se usa el constructor por defecto ( es decir sin parámetros ).

Constructores y destructores en herencia Antes ejecutarse el cuerpo de un constructor se debe llamar a su constructor base . En Java se utiliza la palabra reservada super . public Rectangulo ( int x,int y,int ancho,int alto) { super ( x,y ); this.ancho = ancho ; this.alto =alto; }

Constructores y destructores en herencia Al contrario que con los constructores, una funcion destructor de una clase derivada se ejecuta antes que el destructor de la clase base. (los destructores no se heredan). Ejemplo :

Constructores y destructores en herencia class Punto { private int x; private int y; public Punto () { x=0; y=0; } public Punto ( int x, int y){ this.x =x; this.y =y; } public int darX (){return x;} public int darY (){return y;} public void cambiarX ( int val ) {x= val ;} public void cambiarY ( int val ) {y= val ;} } class Tripleta extends Punto { int z; public Tripleta () { cambiarX (0); cambiarY (0); z = 0 ; } int darZ () { return z; } void cambiarZ ( int val ) { z = val ; } } Cuando creamos un objeto con: Tripleta t = new Tripleta (1, 2, 3 ); Se llama al constructor con parámetros, con parámetros de Tripleta . Una mejora a este método sería: public Tripleta ( int vx , int vy , int vz ) { super ( vx,vy ); z = vz ; } public Tripleta ( int vx , int vy , int vz ) { cambiarX ( vx ); cambiarY ( vy ); z = vz ; }

HERENCIA MULTIPLE En el language Java no existe la herencia multiple , si no que se puede simular con las interfaces. En c# no se permite la herencia múltiple, lo que quiere decir que no se puede heredar de mas de una clase a la vez; si lo vemos de una forma sencilla la herencia no es mas que la facultad de un objeto de heredar características de otro. ¿por que se hereda?; si lo vemos del lado de programación es para poder utilizar métodos, propiedades (campos) y variables de la clase padre en el la clase hijo.

HERENCIA

Ejemplo de herencia en C#