230 likes | 583 Views
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.
E N D
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; }