0% encontró este documento útil (1 voto)
298 vistas22 páginas

Herencia en Java: Conceptos y Ejemplos

Este documento explica el concepto de herencia en programación orientada a objetos. Define la herencia como un mecanismo que permite compartir atributos y métodos entre clases tomando como base una relación jerárquica entre una clase padre y una clase hija. Explica los tipos de herencia, generalización y especialización, y provee un ejemplo de implementación de herencia en Java con sobreescritura de métodos.

Cargado por

Victor Garcia
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (1 voto)
298 vistas22 páginas

Herencia en Java: Conceptos y Ejemplos

Este documento explica el concepto de herencia en programación orientada a objetos. Define la herencia como un mecanismo que permite compartir atributos y métodos entre clases tomando como base una relación jerárquica entre una clase padre y una clase hija. Explica los tipos de herencia, generalización y especialización, y provee un ejemplo de implementación de herencia en Java con sobreescritura de métodos.

Cargado por

Victor Garcia
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

HERENCIA

POO

GENERALIZACIÓN - ESPECIALIZACIÓN
FECHA AGOSTO, 2018 REALIZADO POR PROF. SABRNA LIZBETH VEGA MALDONADO
GUADALAJARA, JALISCO. MÉXICO
Definición
La definición de herencia para la programación orientada a objetos
se basa en la definición que se usa en la vida cotidiana que es
trasmitir valores, bienes materiales o características físicas de una
persona a otra persona

En la programación en lugar de ser valores, bienes materiales o


características físicas lo que se trasmite son atributos y objetos y
en lugar de ser de una persona a otra persona es de una clase a
otra clase

Por lo tanto podemos definir formalmente a la herencia como un


mecanismo que permite compartir atributos y métodos entre clases
tomando como base una relación jerárquica

Una clase denominada “clase padre” o “superclase” trasmite o


hereda sus características a otra clase denominada “clase hija” o
“subclase”
Su simbología en el diseño es un triángulo vacío que apunta a la
clase padre o superclase y de su base sale una línea a las
clases hijos o subclases

La palabra reservada en el lenguaje de java para la herencia


es “extends”

y su sintaxis en el lenguaje de java es:

[<tipoAcceso>] class <SuperClase> {

[<tipoAcceso>] class <SubClase> extends <SuperClase> {

}
Tipos de
Herencia
- Herencia Simple
- Herencia Multiple
Herencia Simple
Es cuando una o varias clases
sólo pueden tener una clase
padre
Herencia Multiple

Es cuando una o varias clases pueden tener más


de dos clase padre

Ave

En el lenguaje de java no
existe la herencia múltiple
Generalización
-
Especialización

La generalización-especialización es la forma en
cómo se va a analizar y diseñar la herencia. Es
importante remarcar que NO es un tipo de herencia.
Generalización

La generalización consiste en identificar las características iguales


de los distintos objetos que quedaron en las subclases para formar
y así generalizar a la superclase.
Especialización

La especialización hace alusión al hecho consistente en que las


subclases especializan a la superclase, se parte de tener las
superclases para ir formando las subclases y que éstas especialicen
a la superclase.
Ejemplo de
Herencia
//de$inición clase padre o superclase
class Empleado{

//declaración atributos
protected String nombre;
protected int numEmpl;
protected double sueldo;
private static int cont=0; //variable global estática
//de$inición constructor
protected Empleado(string n, double sueldo){
nombre=n;
this.sueldo=sueldo;
numEmpl=++cont;
}
//de$inición métodos
protected void aumentaSueldo(int porcent){
sueldo+=(int)(sueldo*porcent/100);
}
protected void imprimirDatos( ){
System.out.println(“Num Empleado: ”+numEmpl);
System.out.println(“Nombre: ”+nombre);
System.out.println(“Sueldo: ”+sueldo);
}

}
//definición clase hijo o sublcase
class Ejecutivo extends Empleado{
private double presupuesto; //declaración atributo
//de$inición constructor
public Ejecutivo (String n, double s, double presupuesto)
super(n,s); //llamada del constructor de la superclase
this.presupuesto=presupuesto;
}
//de$inición métodos
private boolean asignaPresup( ){
if (presupuesto>=50000)
return false;
else
return true;
}
public void imprimirPresup( ){
super.imprimirDatos( ); //llamada del método de la superclase
System.out.println(“Presupuesto:”+presupuesto);
if (asignaPresup( ))
System.out.println(“Presupuesto aprobado”);
else
System.out.println(“Presupuesto No aprobado”);
}
}
//implementación de la herencia

//de$inición de la clase que contiene a la función principal


class HerenciaApp{

//de$inición función principal


public static void main(String arg[]){
//declaración variable referencia y creación del objeto
Ejecutivo jefe=new Ejecutivo(“Oscar Lasca”, 10000, 25000); //instancia
jefe.aumentaSueldo(5); //llamada del método (ejecución comportamiento obj)
jefe.imprimirPresup( );
}
}
Sobre-escritura
de métodos
✤ Se declaran en diferente clase

✤ Se declaran con los mismos


parámetros

✤ Tienen el mismo identificador

✤ Tienen diferente código

La sobre-escritura se utiliza
en la herencia
Ejemplo de herencia con sobre-escritura
de métodos
Empleado
#numEmpleado: entero
#nombre: cadena
#antiguedad: entero
#sueldo: real

#aumentasSueldo(entero): void
#leerDatos( ): void
#imprimirDatos( ): void

Ejecutivo Subordinado

- cantPresupuesto: real - puesto: cadena

- asignaPresup( ): boleano + leerDatos( ): void


+ leerDatos( ): void + imprimirDatos( ): void
+ imprimirDatos( ): void
//definición SuperClase en el archivo Empleado.java
class Empleado {
//declaración atributos
protected int numEmpl;
protected String nombre;
protected int antiguedad;
protected double sueldo;
protected static int cont=0;
//definición métodos
private void aumentaSueldo(int porcent) {
sueldo+=(int)(sueldo*porcent/100);
}
protected void leerDatos(){
//asignación de un valor al atributo desde teclado
System.out.print("Dame tu numero de empleado: “);
numEmpl=Leer.ent(); //método estático de clase Leer
System.out.print("Dame tu nombre: ");
nombre=Leer.cad(); //método estático de clase Leer
System.out.print("Dime que antiguedad tienes: ");
antiguedad=Leer.ent(); //método estático clase Leer
System.out.print("Dime cual es tu sueldo: ");
sueldo=Leer.real(); //método estático de clase Leer
}
protected void imprimirDatos(){
System.out.println("Numero de Empleado: "+numEmpl);
System.out.println("Nombre: "+nombre);
if(antiguedad>10)
aumentaSueldo(5);
System.out.println("Sueldo Total: $"+sueldo);
}
}
//definición de subclase en el archivo Ejecutivo.java
class Ejecutivo extends Empleado {
//declaración atributos
private double cantPresupuesto;
//definición métodos
private boolean asignaPresup(){
if(cantPresupuesto>=50000)
return false;
else
return true;
}
public void leerDatos(){
super.leeDatos();
System.out.print("Presupuesto requerido: ");
presupuesto=Leer.real();
}
public void imprimirDatos(){
super.imprimeDatos();
System.out.println("Presupuesto pedido: $"+cantPresupuesto);
if(asignaPresup())
System.out.println("Presupuesto Aprobado\n");
else
System.out.println("Presupuesto No Aprobado\n");
}
}
//definición de subclase en el archivo Subordinado.java
class Subordinado extends Empleado{
//declaración atributos
private String puesto;
public void leerDatos(){
super.leeDatos();
System.out.print("Dime tu puesto: ");
puesto=Leer.cad();
}
public void imprimirDatos(){
super.imprimeDatos();
System.out.println("Puesto del Empleado: "+puesto+"\n");
}
}

//definición de la clase que contiene al main en el archivo


SobreEscritura.java
public class SobreEscritura {
//definición de la función principal
public static void main(String[] args) {
// declaracion variable referencia y creación de objetos
Ejecutivo ej=new Ejecutivo();
Subordinado s=new Subordinado();
//llamada de los metodos sobreescritos
ej.leerDatos();
ej.imprimirDatos();
System.out.println();
s.leerDatos();
s.imprimirDatos();
}

}
Analicemos la clase Leer
Es la misma clase de DatosEntrada pero esta clase se llama Leer; recuerda que
es una clase que no se encuentra en el lenguaje de Java por lo que nosotros
mismos la creamos y le podemos poner el nombre que queramos a la clase y a
sus métodos estáticos
protected void leerDatos(){
//asignación de un valor al atributo desde teclado
System.out.print("Dame tu numero de empleado: “);
numEmpl=Leer.ent(); //método estático de clase Leer
System.out.print("Dame tu nombre: ");
nombre=Leer.cad(); //método estático de clase Leer
System.out.print("Dime que antiguedad tienes: ");
antiguedad=Leer.ent(); //método estático clase Leer
System.out.print("Dime cual es tu sueldo: ");
sueldo=Leer.real(); //método estático de clase Leer
}

En este ejemplo el método leerDatos( ) manda llamar al método estático ent( ) de


la clase Leer que debe estar guardada en la misma carpeta de nuestros archivos
Empleado.java, Ejecutivo.java, Subordinado.java y SobreEscritura.java

A continuación se escribe el código del archivo Leer.java que si lo comparas


con el archivo DatosEntrada.java es el mismo
Archivo: Leer.java
import java.io.*;

class Leer {

public static String cad(){


try{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
return br.readLine();
}catch(Exception e){ return " "; }
}
public static int ent(){
try{
return Integer.parseInt(cad());
}catch(Exception e){ return 0; }
}
public static double real(){
try{
return Double.parseDouble(cad());
}catch(Exception e){ return 0.0; }
}
public static char caracter(){
try{
return cad().charAt(0);
}catch(Exception e){ return ' '; }
}

}
Ejercicio para la actividad 2
Problemática

- Se quiere imprimir en pantalla el desglose de la venta de un producto. Se requiere que en


pantalla también se impriman los siguientes datos: código del producto, descripción del
producto, cantidad a comprar del producto, precio unitario (tomando en cuenta que el
precio unitario ya trae el iva incluido) así como los siguientes procesos: el subtotal, el iva
y total.

- Se debe considerar que si el producto vendido es perecedero, en la pantalla se imprimirá
(a parte de lo ya mencionado) la fecha de caducidad como dato y como proceso se tendrá
que determinar si ya está caduco o no a través de un mensaje en la pantalla.

- Por otro lado, si el producto es no perecedero, en la pantalla se imprimirá (a parte de lo ya


mencionado) el proceso de determinar un descuento del 7% en caso de que se hayan
vendido más de 5 del mismo producto.


- El programa debe preguntar a través de un menú si se va hacer la venta de un producto
perecedero o de un producto no perecedero. También se debe considerar que al final del
programa se pregunte si quiere salir del programa en caso de que la respuesta sea no el
programa debe regresar al menú.

También podría gustarte