Capitulo 4 herencia
Sponsored Links
This presentation is the property of its rightful owner.
1 / 23

Capitulo # 4 herencia PowerPoint PPT Presentation


  • 134 Views
  • Uploaded on
  • Presentation posted in: General

Capitulo # 4 herencia. PROGRAMACION III. UNIVERSIDAD SALESIANA DE BOLIVIA. 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.

Download Presentation

Capitulo # 4 herencia

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Capitulo # 4herencia

PROGRAMACION III

UNIVERSIDAD

SALESIANA DE BOLIVIA


Concepto y justificación de la herencia

  • La clase que hereda se denominasubclaseoclasederivada.

  • La clase de la cual se hereda se denominasuperclaseoclasebase.


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.

  • UnaPilapuededefinirse 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

No hay receta mágica para crear buenas

jerarquías

Se detecta que una clase es un caso especial de otra

Ejemplo: Triangulo es un tipo de Polígono.

Se detectan clases con un comportamiento común.

Ejemplo: Triangulo y polígono son figuras.


Tipos de herencia

  • HerenciasimpleUna clase puede heredar de una única clase.

    Ejemplo: Java, C#

  • HerenciamúltipleUna clase puede heredar de varias clases. Clasesforman un grafodirigidoacíclico.

    Ejemplos: Eiffel, C++


La sintaxis que indica la herencia en JAVA

  • Para indicar que una clase heredasus atributos y métodos de otra, en Java se utiliza la palabra clave extends.HerenciaSimple class subclaseextendssuperclase:

public class VocalextendsLetra


La sintaxis que indica la herencia en JAVA

  • Clase persona

public class Persona {

String nombre= "";

intedad;

public Persona(String nom, inted) {

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

publicclassTrabajadorextendsPersona{

floatsueldoHora;

intnumHoras;

public Trabajador(Stringnom, inted, floatsuel, intnum) { super(nom, ed); // llamada al constructor de Persona

sueldoHora= suel;

numHoras = num;}

publicdouble sueldo() {

returnsueldoHora * numHoras; }

Trabajador yo= new Trabajador("Balta", 99, 200.5f, 45); yo.mostrar(); // se invoca al método heredado mostrar

doublepelas = yo.sueldo();

System.out.println("Cobra: " + pelas); }

}


Herencia y Reglas de Acceso

  • Existen cuatro posibles visibilidades deatributosymé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 (pordefecto)

intcapacidad;      // private (pordefecto)

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

  • Se puede evitar que una clasesea heredada:

public final class Clase


Paquetes

  • Los paquetes son contenedores de clases que permite delimitar el espacio en el cual una claseexiste.

  • 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:

packagenombrePaquete;


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.

  • Javaproporciona un constructor sin parámetros por defecto que deja de estar disponible cuando se añade algún constructor.


Constructores y destructores

  • Destructor es un:

  • Es un método perteneciente a una clase que es ejecutado de forma automática cuando un objeto es destruido. Javano soporta los destructores.


Constructores y destructores en herencia

  • En principio se hereda todo menos:

  • Constructory 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 decirsin 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(intx,inty,intancho,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

  • Cuando creamos un objeto con:

  • Tripletat = 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(intvx, intvy, intvz) {

  • super (vx,vy);

  • z = vz;

  • }

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 intdarX(){return x;}

public intdarY(){return y;}

public void cambiarX (intval) {x=val;}

public void cambiarY (intval) {y=val;}

}

class TripletaextendsPunto{

int z;

public Tripleta() {

cambiarX(0);

cambiarY(0);

z = 0;

}

intdarZ() { return z; }

void cambiarZ(intval)

{ z = val; }

}

public Tripleta(intvx, intvy, intvz) {

cambiarX(vx);

cambiarY(vy);

z = vz; }


HERENCIA MULTIPLE

  • Algunos lenguajes orientados a objetos, como C++ permiten herencias múltiples, lo que significa que una clase puede heredar los atributos de otras dos superclases. Este método puede utilizarse para agrupar atributos y métodos desde varias clases dentro de una sola.

  • En el language Java no existe la herencia multiple, si no que se puede simular con lasinterfacesque se vera en proximos capitulos.


Ejemplo de herencia multiple en C++

#include <cstdio>

#include <cstdlib>

#include <iostream>   

using namespace std;   

class Cama

{

public:   

Cama() // constructor

    {    cout << "CreandounaCama" << endl;     }

~Cama() // destructor en C++

    {    cout << "Destruyendo la Cama" << endl;     }

};

class Sofa

{

public:

    Sofa()

    {

cout << "Creando un Sofa" << endl;

    }

    ~Sofa()

    {

cout << "Destruyendo el Sofa" << endl;

    }

};


Ejemplo de herencia multiple en C++

class Sofacama : public Cama, public Sofa

{

public:

Sofacama()

    {

cout << "Ahoratenemos un Sofacama" << endl;

    }

    ~Sofacama()

    {

cout << "Destruyendo el Sofacama" << endl;

    }

};

int main()

{

Sofacamass;

    return 0;

}


  • Login