Clases y Herencia java

download Clases y Herencia java

of 51

Transcript of Clases y Herencia java

  • 7/24/2019 Clases y Herencia java

    1/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    I UNIDAD

    SEMANAS

    13, 14, 15

    Carrera Profesional: Computacin e InformticaSemestre: IIISeccin: nica

    Docente: Ing. JUAN J. ARAUJO ROMOAsignatura: ESTRUCTURA DE LA INFORMACIONSemestre Acadmico: 2010 - I

    OBJETOS Y CLASES

    1. DEFINICION DE CLASE:

    Una clase es como una plantilla de la cual se pueden crear varios objetos

    con las mismas caractersticas y funciones.

    o Una clase es un modelo (diseo) de objeto

    o Define los atributos y operaciones del objeto

    o La clase usan el encapsulamiento para forzar la abstraccin

    Una clase es una representacin de un objeto en particular, y define un

    nuevo tipo de dato. Las clases de utilizan para crear objetos de ese tipo de

    clase en particular

    Ejemplo de una clase en notacin UML

    o El nombre de toda clase debe comenzar con maysculas

    o El nombre de los objetos con minsculas

  • 7/24/2019 Clases y Herencia java

    2/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    2. UNA CLASE EN JAVA

    Para crear una clase se utiliza la palabra reservada class y a

    continuacin el nombre de la clase. La definicin de la clase se pone entre

    las llaves de apertura y cierre. El nombre de la clase empieza con una letra

    mayscula.

    Sintaxis:

    class NombreClase

    {

    //miembros dato o datos miembro

    //funciones miembro

    }

    Ejemplo 1:

    public class Empleado

    {

    Cuerpo de la clase

    }

    3. DEFINICIN DE OBJETO:

    Objeto es una instancia de la clase, los objetos tienen las siguientes

    cualidades (identidad los objetos se distinguen del uno del otro,

    comportamiento pueden realizar tareas, estado almacena informacin

    que vara a travs del tiempo).

    4. DECLARACION DE OBJETOS:

    Para crear un objeto o una instancia de esta clase tenemos dos

    alternativas, la primera en la misma lnea de declaracin, tal como se ilustra

    a continuacin.

    Sintaxis 1:

    NombreClase NombreVariable;

    NombreVariable = new NombreClase ( )

  • 7/24/2019 Clases y Herencia java

    3/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Sintaxis 2:

    NombreClase NombreVariable = new NombreClase ( )

    Ejemplo 2:

    Empleado A1 = new Empleado ();

    5. ASIGNACION DE OBJETOS

    Cuando creamos un objeto internamente existe un puntero, al que no

    tenemos acceso, pero cuando asignamos objetos lo que realmente estamos

    asignando son las direcciones de memoria donde estn definidos los

    objetos.

    Ejemplo 3:

    Empleado A1 = new Empleado ();

    Empleado A2 = A1;

  • 7/24/2019 Clases y Herencia java

    4/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    6. ATRIBUTOS

    Los atributos son las caractersticas individuales que diferencian un

    objeto de otro y determinan su apariencia, estado u otras cualidades. Los

    atributos se guardan en variables denominadas de instancia, y cada objeto

    particular puede tener valores distintos para estas variables.

    Las variables de instancia tambin denominados miembros dato,

    son declaradas en la clase pero sus valores son fijados y cambiados en el

    objeto.

    Sintaxis:

    [TipoAcceso] TipoNombre

    Ejemplo 4: Como ejemplo definiremos la clase Artculo que tiene definido

    3 atributos

    Clase Articulo

    La implementacin de esta clase seria:

    public class Articulo

    {

    public int codigo;

    public String nombre;

    public double precio;

    }

  • 7/24/2019 Clases y Herencia java

    5/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    El siguiente programa ilustra cmo debe usarse la clase Articulo:

    public class Articulo

    {

    public static void main(String[ ] args)

    {

    // Creacin de dos objetos

    Articulo art1 = new Articulo();

    Articulo art2 = new Articulo();

    Articulo art3;

    // Asignacin de datos

    art1.codigo = 100;

    art1.nombre = "Televisor";

    art1.precio = 500; art2.codigo = 200;

    art2.nombre = "Plancha";

    art2.precio = 80;

    art3 = art1;

    // Imprimir artculos

    System.out.println(art1.codigo + "-" + art1.nombre + "-" + art1.precio);System.out.println(art2.codigo + "-" + art2.nombre + "-" + art2.precio);

    System.out.println(art3.codigo + "-" + art3.nombre + "-" + art3.precio);

    }

    }

    Analice ahora Ud. cada lnea del programa anterior y modifique para 5

    artculos.

  • 7/24/2019 Clases y Herencia java

    6/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    7. COMPORTAMIENTO METODOS

    El comportamiento de los objetos de una clase se implementa

    mediante funciones miembro o mtodos. Un mtodo es un conjunto de

    instrucciones que realizan una determinada tarea y son similares a las

    funciones de los lenguajes estructurados. Del mismo modo que hay

    variables de instancia y de clase, tambin hay mtodos de instancia y de

    clase. En el primer caso, un objeto llama a un mtodo para realizar una

    determinada tarea, en el segundo, el mtodo se llama desde la propia clase.

    Sintaxis

    [modificador] tipo NombreMetodo(tipo parm1, tipo parm2, tipo parm3, . . .)

    {

    declaraciones de variables locales;

    //...sentencias

    [return[ (]expresin[ )]];

    }

    Ejemplo 5: En el siguiente ejemplo se ilustra el uso de mtodos, para

    eso se ha definido una clase de nombre Calculadora que tiene definidos

    atributos pblicos n1 y n2, dos operaciones suma() y producto().

    Clase Calculadora

    public class Calculadora

    {

    public int n1;

    public int n2;

  • 7/24/2019 Clases y Herencia java

    7/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    public int suma()

    {

    return (n1 + n2);

    }

    public int producto()

    {

    return (n1 * n2);

    }

    }

    Para ilustrar el uso de la clase Calculadora, se crea el programa aplicacal.

    public class aplicacal

    {

    public static void main(String[ ] args)

    {

    Calculadora obj = new Calculadora ();

    obj.n1 = 10;

    obj.n2 = 8;

    System.out.println("n1 = " + obj.n1);

    System.out.println("n2 = " + obj.n2);

    System.out.println("Suma = " + obj.suma());System.out.println("Producto = " + obj.producto());

    }

    }

    Ejemplo 6: En el siguiente ejemplo tenemos una segunda versin

    de la clase Calculadora donde las operaciones tienen parmetros.

  • 7/24/2019 Clases y Herencia java

    8/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Calculadora

    public class Calculadora

    {

    public int suma (int n1, int n2)

    {

    return (n1 + n2);

    }

    public int producto (int n1, int n2)

    {

    return (n1 * n2);

    }

    }

    Para ilustrar el uso de la clase Calculadora, se crea el programa

    aplicacalcu.

    public class aplicacalcu

    {

    public static void main(String[ ] args)

    {

    int a = 15;

    int b = 8;Calculadora obj = new Calculadora();

    System.out.println("n1 = " + a);

    System.out.println("n2 = " + b);

    System.out.println("Suma = " + obj.suma(a,b));

    System.out.println("Producto = " + obj.producto(a,b));

    }

    }

  • 7/24/2019 Clases y Herencia java

    9/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Ejemplo 7: Disee una clase Empleado; cuyos atributos sean

    nombre, apellido y edad, con Mtodo u operaciones de registrar y mostrar.

    Empleado

    Notacin UML:

    El nombre de toda clase debe comenzar con maysculas

    El nombre de los objetos con minsculas

  • 7/24/2019 Clases y Herencia java

    10/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    CLASE EMPLEADO

    public class Empleado

    {

    private String Nombre;

    private String Apellido;

    private int Edad;

    public void Registrar(String Nombre, String Apellido, int Edad)

    {

    this.Nombre = Nombre;

    this.Apellido= Apellido;

    this.Edad = Edad;

    }

    public void Mostrar()

    {

    System.out.println("Nombre "+ Nombre);

    System.out.println("Apellido"+ Apellido);

    System.out.println("Edad"+ Edad);

    }

    }

    CLASE PRINCIPAL

    public class principal

    {

    public static void main(String[ ] args)

    {

    Empleado A1= new Empleado();

    A1.Registrar("Juan","Hurtado", 22);

    A1.Mostrar();

    }

    }

  • 7/24/2019 Clases y Herencia java

    11/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    8. MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

    Una faceta importante de los lenguajes de Programacin Orientada

    a Objetos se denomina encapsulacin. El acceso a los miembros de una

    clase est controlado. Para usar una clase, solamente necesitamos saber

    que funciones miembro se pueden llamar y a qu datos podemos acceder,

    no necesitamos saber cmo est hecha la clase, como son sus detalles

    internos. Una vez que la clase est depurada y probada, la clase es como

    una caja negra. Los objetos de dicha clase guardan unos datos, y estn

    caracterizados por una determinada conducta.

    Este ocultamiento de la informacin niega a las entidades exteriores

    el acceso a los miembros privados (private) de un objeto. De este modo, las

    entidades exteriores acceden a los datos de una manera controlada a travs

    de alguna funcin miembro. Para acceder a un miembro pblico (public), sea

    dato o funcin basta escribir:

    objeto_de_la_clase.miembro_pblico_no_estticoclase.miembro_pblico_esttico

    La segunda representacin se ampliar cuando veamos

    miembros dato esttico y mtodos estticos.

    8.1. MIEMBROS PBLICOS:

    Los miembros pblicos son aquellos que tienen delante lapalabra public, y se puede acceder a ellos sin ninguna restriccin.

    8.2. MIEMBROS PRIVADOS:

    Los miembros privados son aquellos que tienen delante la

    palabra private, y se puede acceder a ellos solamente dentro del

    mbito de la clase.

  • 7/24/2019 Clases y Herencia java

    12/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    8.3. POR DEFECTO (A NIVEL DE PAQUETE)

    Cuando no se pone ningn modificador de acceso

    delante de los miembros, se dice que son accesibles dentro del

    mismo paquete (package).

    Esto es lo que hemos utilizado en algunos de los ejemplos

    estudiados antes. package es la primera sentencia que se pone en

    un archivo .java. El nombre del paquete es el mismo que el nombre

    del subdirectorio que contiene los archivos .java. Cada archivo .java

    contiene habitualmente una clase. Si tiene ms de una solamente

    una de ellas es pblica. El nombre de dicha clase coincide con el

    nombre del archivo. El uso de paquetes se estudiar ms adelante.

    Como se habr dado cuenta hay una correspondencia

    entre archivos y clases, entre paquetes y subdirectorios. El

    Entorno Integrado de Desarrollo (IDE) en el que creamos los

    programas facilita esta tarea sin que el usuario se aperciba de

    ello.

    EJEMPLO 8:Uso de los modificadores de acceso package

    //archivo: Linea.java

    import java.io.*;

    class Linea

    {

    //coordenada 1er punto, modificador de acceso:package

    int x1,y1;

    //coordenada 2do punto, modificador de acceso:package

    int x2,y2;

  • 7/24/2019 Clases y Herencia java

    13/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    void leer() //modificador de acceso:package

    {

    try

    {

    // Definir un flujo de caracteres de entrada: flujoE

    InputStreamReader isr = new InputStreamReader(System.in);

    BufferedReader flujoE = new BufferedReader(isr);

    String sdato; // variable para almacenar una lnea de texto

    //lectura

    System.out.println("Introduzca 1er punto: ");

    System.out.print("x1: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    x1=Integer.parseInt(sdato);//convierte cadena

    System.out.print("y1: ");

    sdato = flujoE.readLine(); // leer una lnea de textoy1=Integer.parseInt(sdato);//convierte cadena

    System.out.println("Introduzca 2do punto: ");

    System.out.print("x2: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    x2=Integer.parseInt(sdato);//convierte cadena

    System.out.print("y2: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    y2=Integer.parseInt(sdato);//convierte cadena

    }

    catch (IOException ignorada)

    { }

    }

  • 7/24/2019 Clases y Herencia java

    14/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    void escribir() //modificador de acceso:package

    {

    System.out.println("Puntos de la recta : ");

    System.out.println("x1="+x1+" y1="+y1);

    System.out.println("x2="+x2+" y2="+y2);

    }

    }

    // Archivo LineaAppl.java

    import java.io.*;

    class LineaAppl

    {

    public static void main (String[] args)

    {

    //Creacin de un objeto recta: r1

    Linea r1 = new Linea();

    // uso del objeto r1 como el modificador de acceso es package

    //y la clase Linea est en el mismo directorio entonces main()

    // puede utilizar los mtodos leer() y escribir()

    r1.leer();

    r1.escribir();

    }

    }

  • 7/24/2019 Clases y Herencia java

    15/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    EJEMPLO 9: Uso del modificador de acceso privado (private). El

    siguiente programa es similar al anterior salvo que los mtodos de la claseLinea son private.

    //archivo: Linea1.java

    import java.io.*;

    class Linea1

    {//coordenada 1er punto, modificador de acceso:package

    int x1,y1;

    //coordenada 2do punto, modificador de acceso:package

    int x2,y2;

    private void leer( ) //modificador de acceso:privado

    {try

    {

    // Definir un flujo de caracteres de entrada:

    flujoE InputStreamReader isr = new InputStreamReader(System.in);

    BufferedReader flujoE = new BufferedReader(isr);

    String sdato; // variable para almacenar una lnea de texto

    //lectura

    System.out.println("Introduzca 1er punto: ");

    System.out.print("x1: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

  • 7/24/2019 Clases y Herencia java

    16/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    x1=Integer.parseInt(sdato);//convierte cadena

    System.out.print("y1: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    y1=Integer.parseInt(sdato);//convierte cadena

    System.out.println("Introduzca 2do punto: ");

    System.out.print("x2: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    x2=Integer.parseInt(sdato);//convierte cadena

    System.out.print("y2: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    y2=Integer.parseInt(sdato);//convierte cadena

    }

    catch (IOException ignorada)

    { }

    }

    private void escribir( ) //modificador de acceso:privado

    {

    System.out.println("Puntos de la recta : ");

    System.out.println("x1="+x1+" y1="+y1);

    System.out.println("x2="+x2+" y2="+y2);

    }

    }

    // Archivo Linea1Appl.java

    import java.io.*;

    class Linea1Appl

    {

    public static void main (String[] args)

  • 7/24/2019 Clases y Herencia java

    17/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    {

    //Creacin de un objeto recta: r1

    Linea1 r1=new Linea1();

    // uso del objeto r1

    //como el modificador de acceso de los metodos de la clase Linea es privado

    //entonces main() no puede utilizar los mtodos leer() y escribir()

    r1.leer();

    r1.escribir();

    }

    }

    NOTA: Este programa no ejecuta porque el compilador protesta

    mostrando el siguiente mensaje:

    EJEMPLO 10: Uso del modificador private y public. Ntese comola funcin main(), puede acceder a los mtodos pblicos de la clase

    Linea2.

    //archivo: Linea2.java

    import java.io.*;

    class Linea2

    {

    //coordenada 1er punto, modificador de acceso:privado

    private int x1,y1;

    //coordenada 2do punto, modificador de acceso:privado

    private int x2,y2;

    //los datos miembro solo sern accedidos por sus mtodos por ser privados

  • 7/24/2019 Clases y Herencia java

    18/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    public void leer() //modificador de acceso:pblico

    {

    try

    {

    // Definir un flujo de caracteres de entrada:

    flujoE InputStreamReader isr = new InputStreamReader(System.in);

    BufferedReader flujoE = new BufferedReader(isr);

    String sdato; // variable para almacenar una lnea de texto

    //lectura

    System.out.println("Introduzca 1er punto: ");

    System.out.print("x1: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    x1=Integer.parseInt(sdato);//convierte cadena

    System.out.print("y1: ");

    sdato = flujoE.readLine(); // leer una lnea de textoy1=Integer.parseInt(sdato);//convierte cadena

    System.out.println("Introduzca 2do punto: ");

    System.out.print("x2: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    x2=Integer.parseInt(sdato);//convierte cadena

    System.out.print("y2: ");

    sdato = flujoE.readLine(); // leer una lnea de texto

    y2=Integer.parseInt(sdato);//convierte cadena

    }

    catch (IOException ignorada)

    { }

    }

  • 7/24/2019 Clases y Herencia java

    19/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    public void escribir() //modificador de acceso:pblico

    {

    System.out.println("Puntos de la recta : ");

    System.out.println("x1="+x1+" y1="+y1);

    System.out.println("x2="+x2+" y2="+y2);

    }

    // Archivo Linea2Appl.java

    import java.io.*;

    class Linea2Appl

    {

    public static void main (String[] args)

    {

    //Creacin de un objeto recta: r1

    Linea2 r1=new Linea2();

    // uso del objeto r1 como el modificador de acceso de los mtodos//de la clase Linea

    // es public entonces main() puede utilizar los mtodos leer() y

    //escribir()

    r1.leer();

    r1.escribir();

    }

    }

    9. OCULTANDO DATOS

    Uno de los fundamentos de la programacin orientada a objetos es

    que el usuario solo debe tener acceso a los datos que son de su inters y

    del modo que le corresponde, por ejemplo solo lectura, solo escritura o

    ambos.

  • 7/24/2019 Clases y Herencia java

    20/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Para conseguir esto se debe implementar los atributos como

    privados y se debe implementar mtodos para acceso a ellos, existe un

    estndar para definir este mtodo.

    Por ejemplo; si el atributo es apellido los mtodos serian:

    setapellido : este mtodo permite asignar un valor al atributo.

    getapellido : este mtodo permite leer el valor del atributo.

    Como puede apreciar existen dos prefijos, el prefijo set que se utiliza

    para asignar un valor al atributo y el prefijo get para leer el valor del atributo,

    de esta manera podemos seleccionar si se implementa el mtodo set, get, o

    ambos, y restringir el novel de acceso nivel de acceso a los datos.

    Otra posibilidad que nos da la implementacin de estos mtodos es

    agregar funcionalidad que puede servir para verificar por ejemplo si el -2 se

    esta signando es correcto o no.

    EJEMPLO 11: Realizar un programa que ilustra el uso de mtodos para

    acceder a los campos de un objeto.

    Clase Artculo en notacin UML:

  • 7/24/2019 Clases y Herencia java

    21/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Articulo

    public class Articulo

    {

    private int codigo;

    private String nombre;

    private double preCosto;

    private double preVenta;

    public void setCodigo(int nCodigo)

    {

    codigo = nCodigo;

    }

    public void setNombre(String sNombre)

    {

    nombre = sNombre;

    }

    public void setPreCosto(double nPreCosto )

    {

    preCosto = nPreCosto;

    preVenta = preCosto * 1.4;

    }

    public int getCodigo()

    {

    return codigo;

    }

    public String getNombre()

    {

    return nombre;

    }

    public double getPreCosto()

    {

    return preCosto;

    }

  • 7/24/2019 Clases y Herencia java

    22/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    public double getPreVenta()

    {

    return preVenta;

    }

    }

    Clase progprincipal

    public class progprincipal

    {

    public static void main(String[ ] args)

    {

    Articulo art1 = new Articulo();

    art1.setCodigo( 1000 );

    art1.setNombre( "Auto" );

    art1.setPreCosto( 15000 );

    System.out.println("Codigo = " + art1.getCodigo() );

    System.out.println("Nombre = " + art1.getNombre() );

    System.out.println("Precio Costo = " + art1.getPreCosto() );

    System.out.println("Precio Venta = " + art1.getPreVenta() );

    }

    }

    Como se puede apreciar el precio de venta se calcula de manera

    automtica cuando establecemos el precio de costo, esto debido a que

    utilizamos un mtodo para asignar el precio de costo, por otro lado el precio

    de venta slo puede ser ledo (slo lectura), ms no existe manera algunade cambiar su valor, a menos que cambiemos el precio de costo.

    10. SOBRECARGA

    La sobrecarga permite definir dos ms mtodos que comparten el

    nombre, pero la declaracin de sus parmetros debe ser diferente. Esta una

    de las caractersticas muy importante de la POO, y por lo tanto tambin de

    Java.

  • 7/24/2019 Clases y Herencia java

    23/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Cuando se invoca a un mtodo sobrecargado, Java utiliza el tipo

    y/o nmero parmetros como gua para determinar a qu versin del

    mtodo sobrecargado debe llamar. Por lo tanto, los mtodos sobrecargados

    deben ser diferente tipo y/o nmero de parmetros.

    EJEMPLO 12: En este ejemplo ilustraremos el uso de la sobrecarga,

    para lo cual implementamos una clase que permita convertir a String un

    nmero, dependiendo el nmero se ejecutar el mtodo que le corresponde.

    Clase miconvertidor con una funcin sobrecargada

    La clase que se utilizara para esta demostracin es miconvertidor, tal

    como se aprecia en la figura, tenemos el mtodo convert sobrecargado.

    Clase miconvertidor

    public class miconvertidor

    {

    public String convert(int n)

    {

    return (Integer.toString(n));

    }

    public String conver(long n)

    {

    return (Long.toString(n));

    }

  • 7/24/2019 Clases y Herencia java

    24/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    public String convert(float n)

    {

    return (Float.toString(n));

    }

    public String convert(double n)

    {

    return (Double.toString(n));

    }

    }

    El programa que ilustra el uso de esta clase es el siguiente:

    Clase aplicaconvert

    public class aplicaconvert

    {

    public static void main(String[] args)

    {

    miconvertidor obj = new miconvertidor();

    int n1 = 500;

    long n2 = 100000;

    float n3 = 456.459834f;

    double n4 = 8934.42573485720;

    System.out.println("n1 = " + obj.convert(n1));

    System.out.println("n2 = " + obj.convert(n2));

    System.out.println("n3 = " + obj.convert(n3));

    System.out.println("n4 = " + obj.convert(n4));

    }

    }

  • 7/24/2019 Clases y Herencia java

    25/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    11. CONSTRUCTORES

    Los constructores permiten inicializar un objeto

    inmediatamente despus de su creacin, tienen el mismo nombre

    que la clase donde se encuentra y sintcticamente son similares de los

    mtodos.

    Sintaxis

    public nombre_clase (lista_de_parmetros )

    {

    // instrucciones

    }

    El constructor se invoca cuando creamos el objeto, junto con el operador

    new.

    Sintaxis

    nombre_clase nombre_variable;

    nombre_variable = new nombre_clase( lista_de_argumentos );

    Los constructores tienen el mismo nombre de la clase, y no tienen

    tipo, esto debido a que retornan el mismo tipo de la clase, el objetivo

    principal de un constructor es inicializar el estado interno del objeto.

    EJEMPLO 13: En este ejemplo crearemos una clase de nombre

    empleado, que tiene un constructor que inicializa sus atributos

    Clase Empleado con un Constructor

  • 7/24/2019 Clases y Herencia java

    26/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Empleado

    public class Empleado

    {

    // Atributos:

    private String nombre;

    private double sueldo;

    private int edad;

    // Constructor:

    public Empleado()

    {

    nombre = "Claudia";

    sueldo = 5000.00;

    edad = 22;

    }

    // Operaciones:

    public String getNombre()

    {

    return this.nombre;

    }

    public double getSueldo()

    {

    return this.sueldo;

    }

    public int getEdad()

    {

    return this.edad;

    }

    }

  • 7/24/2019 Clases y Herencia java

    27/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    El programa que ilustra el uso de esta clase es el siguiente, puede notar

    que el constructor se invoca junto con el operador new.

    Clase aplicaempleado

    public class aplicaempleado

    {

    public static void main(String[] args)

    {

    Empleado obj = new Empleado( );

    System.out.println( "Nombre = " + obj.getNombre() );

    System.out.println( "Sueldo = " + obj.getSueldo() );

    System.out.println( "Edad = " + obj.getEdad() );

    }

    }

    12. CONSTRUCTORES CON PARMETROS

    Los constructores pueden resultar ms tiles si tienen

    parmetros, en nuestro ejemplo de la clase Empleado, resulta que notodos los empleados se llaman claudia, el ejemplo siguiente ilustra el uso de

    constructores con parmetros.

    EJEMPLO 14: El siguiente ejemplo ilustra el uso de constructores

    con parmetros la clase utilizada es Empleado1.

    Clase Empleado1 con un constructor con parmetros

  • 7/24/2019 Clases y Herencia java

    28/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Empleado1

    public class Empleado1

    {

    // Atributos:

    private String nombre;

    private double sueldo;

    private int edad;

    // Constructor:

    public Empleado1(String nombre, double sueldo, int edad)

    {

    this.nombre = nombre; this.sueldo = sueldo; this.edad = edad;

    }

    // Operaciones:

    public String getNombre()

    {

    return this.nombre;

    }

    public double getSueldo()

    {

    return this.sueldo;

    }

    public int getEdad()

    {

    return this.edad;

    }

    }

    El constructor de esta clase permite inicializar los objetos con

    diferentes datos, as podemos tener un objeto para empleado.

  • 7/24/2019 Clases y Herencia java

    29/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    El programa que ilustra el uso de esta clase es el siguiente:

    Clase aplicaempleado1

    public class aplicaempleado1

    {

    public static void main(String[] args)

    {

    Empleado1 obj = new Empleado1( "Angelica", 4000, 23 );

    System.out.println( "Nombre = " + obj.getNombre() );

    System.out.println( "Sueldo = " + obj.getSueldo() );

    System.out.println( "Edad = " + obj.getEdad() );

    }

    }

    Puede notar que el constructor se invoca junto con el operador new y

    es en esa instruccin que se le pasa los datos para que inicialice los

    objetos.

    13. SOBRECARGA DE CONSTRUCTORES

    Al igual que los mtodos, los constructores tambin pueden ser

    sobrecargados, esto quiere decir, que podemos tener diferentes

    constructores dependiendo de los datos de los que disponemos.

    EJEMPLO 15:

    En este ejemplo se ilustra cmo construir clases con constructores

    sobrecargados la clase que se utiliza es Empleado2, en esta clase

    tenemos cuatro versiones del constructor, tal como se aprecia en la

    Figura.

  • 7/24/2019 Clases y Herencia java

    30/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Empleado2 con constructor sobrecargado

    Los datos de un empleado son: nombre, sueldo y edad, cunado falta el

    sueldo se asume un sueldo base que est definido en SUELDO_BASE

    y cuando falta la edad se asume cero.

    Clase Empleado2

    public class Empleado2{

    // Atributos:

    private String nombre;

    private double sueldo;

    private int edad;

    private static final double SUELDO_BASE = 5000.00;

    // Constructores:

    public Empleado2(String nombre, double sueldo, int edad)

    {

    this.nombre = nombre;

    this.sueldo = sueldo;

    this.edad = edad;

    }

  • 7/24/2019 Clases y Herencia java

    31/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    public Empleado2(String nombre, double sueldo)

    {

    this( nombre, sueldo, 0 );

    }

    public Empleado2(String nombre, int edad)

    {

    this( nombre, SUELDO_BASE, edad );

    }

    public Empleado2(String nombre)

    {

    this( nombre, SUELDO_BASE );

    }

    // Operaciones:

    public String getNombre()

    {return nombre;

    }

    public double getSueldo()

    {

    return sueldo;

    }

    public int getEdad()

    {

    return edad;

    }

    }

  • 7/24/2019 Clases y Herencia java

    32/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    El programa que ilustra el uso de esta clase es el siguiente:

    Clase aplicaempleado2

    public class aplicaempleado2

    {

    public static void main(String[] args)

    {

    Empleado2 emp1 = new Empleado2 ( "Gustavo", 15000.0, 30 );

    Empleado2 emp2 = new Empleado2 ( "Ricardo", 27 );

    Empleado2 emp3 = new Empleado2 ( "Sergio" );

    System.out.println( "Empleado 1" );

    System.out.println( "Nombre = " + emp1.getNombre() );

    System.out.println( "Sueldo = " + emp1.getSueldo() );

    System.out.println( "Edad = " + emp1.getEdad() );

    System.out.println();

    System.out.println( "Empleado 2" );

    System.out.println( "Nombre = " + emp2.getNombre() );

    System.out.println( "Sueldo = " + emp2.getSueldo() );

    System.out.println( "Edad = " + emp2.getEdad() );

    System.out.println();

    System.out.println( "Empleado 3" );

    System.out.println( "Nombre = " + emp3.getNombre() );

    System.out.println( "Sueldo = " + emp3.getSueldo() );

    System.out.println( "Edad = " + emp3.getEdad() );

    System.out.println();

    }

    }

    Del resultado obtenido podemos deducir que a Ricardo se le asign el

    sueldo base debido que no se le especifico su sueldo al momento

    de crear el objeto, en el caso de Sergio solo se especific su

    nombre, por lo tanto se le asign el sueldo base y edad cero.

  • 7/24/2019 Clases y Herencia java

    33/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    I UNIDAD

    SEMANA

    16

    Carrera Profesional: Computacin e InformticaSemestre: IIISeccin: nica

    Docente: Ing. JUAN J. ARAUJO ROMOAsignatura: ESTRUCTURA DE LA INFORMACIONSemestre Acadmico: 2010 - I

    HERENCIA

    1. DEFINICION DE HERENCIA:

    La herencia es la caracterstica ms sobresaliente de laprogramacin orientada a objetos, porque permite definir una jerarqua de

    clases, y de esta manera reutilizar sus definiciones.

    Mediante la herencia el programador puede crear una clase

    genrica que defina los rasgos comunes de un conjunto de objetos, luego

    esta clase puede ser heredada por otras clases ms especficas, cada

    una de las cuales aadir aquellos rasgos que la hacen nica.

    2. FUNDAMENTOS

    Por si misma, la idea de objeto es una herramienta ms que buena.

    Permite empaquetar datos y funcionalidad, de manera que es posible

    representar cualquier idea del universo del problema mediante clases.

    Es posible utilizar clases ya definidas para crear a partir de estas

    nuevas clases (clase heredada), y luego agregarle funcionalidad adicional

    segn necesidades de esta nueva clase.

    En terminologa de la POO, una clase heredada se llama

    superclase, y la clase que hereda se denomina subclase. Por lo tanto, una

    subclase es una versin especializada de la superclase, que hereda todas

    las definiciones de la superclase (atributo y mtodos) ya aade su propia

    funcionalidad.

  • 7/24/2019 Clases y Herencia java

    34/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Notacin UML para representar la herencia.

    La Figura nos representa la herencia utilizando notacin UML, la

    flecha apunta a la superclase, y es posible que existan muchas

    subclases que hereden una superclase.

    A la superclase tambin se le conoce como clase base, clase

    super, o clase padre; y a la subclase tambin se le conoce como clase

    derivada, heredada, o clase hija.

    Ejemplo 16: En este ejemplo veremos un caso bsico, pero ilustrativode aplicacin de herencia, tenemos una clase base de nombre

    CalculadoraBase, y una subclase de nombre Calculadora1 que hereda de

    CalculadoraBase.

    Ejemplo bsico de aplicacin de herencia.

  • 7/24/2019 Clases y Herencia java

    35/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    En la Figura se puede apreciar que la subclase hereda los mtodos

    suma y resta, he implementa los mtodos factorial y esPrimo.

    Una instancia de la clase CalculadoraBase solo tendr los

    mtodos suma y resta, mientras que una instancia de la clase

    Calculadora1 tendr los mtodos heredados suma y resta, y adems sus

    mtodos propios factorial y esPrimo.

    A continuacin tenemos la implementacin de la clase

    alculadoraBase, usted puede apreciar claramente la implementacin de

    los mtodos suma y resta.

    Clase CalculadoraBase.java

    public class CalculadoraBase

    {

    public int suma(int n1, int n2)

    {

    return (n1+n2);

    }

    public int resta(int n1, int n2)

    {

    return (n1 - n2);

    }

    }

    A continuacin tenemos la implementacin de la clase

    Calculadora1, la palabra extends en !a definicin de la clase indica

    que est heredando de la clase CalculadoraBase, y puede usted

    apreciar que solo se est implementando los nuevos mtodos.

  • 7/24/2019 Clases y Herencia java

    36/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Calculadora1.java

    public class Calculadora1 extends CalculadoraBase

    {

    public int factorial(int n)

    {

    int f = 1;

    while(n>1)

    {

    f = f *

    n--;

    }

    return f;

    }

    public Boolean esPrimo(int n)

    {Boolean primo = true;

    int k = 1;

    while(++k

  • 7/24/2019 Clases y Herencia java

    37/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    A continuacin tenemos el programa ilustrativo del uso de la clase

    Calculadora1 solo se est creando una instancia de esta clase (cal), y

    debido a la herencia tenemos acceso a los mtodos suma y resta, que

    son los mtodos heredados, y los mtodos propios factorial y esPrimo.

    Clase prog14

    public class prog14

    {

    public static void main(String[] args)

    {

    int n1 = 17, n2 = 6;

    Calculadora1 cal = new Calculadora1();

    System.out.println( "n1 = " + n1 );

    System.out.println( "n2 = " + n2 );

    System.out.println( "Suma: " + cal.suma(n1,n2) );

    System.out.println( "Resta: " + cal.resta(n1,n2) );

    System.out.println( "Factorial de " + n2 + " es " + cal.factorial(n2) );

    System.out.println( n1 + " es primo: " + cal.esPrimo(n1) );

    }

    }

    3. IMPLEMENTANDO LA HERENCIA

    Palabra Clave: extends

    La palabra clave extends permite implementar la herencia de clases.

    En Java solo se puede heredar desde una clase, en otras palabras no

    existe la herencia mltiple.

  • 7/24/2019 Clases y Herencia java

    38/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Sintaxis

    class nombre_subclase extends nombre_superclase

    {

    // implementacin

    }

    Ejemplo de herencia.

    Por ejemplo, en la Figura tenemos una clase base

    CuentaBancaria que define las caractersticas comunes a todas las

    cuentas, y a partir de esta se obtiene dos subclases CuentaAhorro y

    CuentaCorriente.

    A continuacin tenemos cdigo bsico para la implementacin de

    estas clases:

    public class CuentaBancaria

    {

    //Implementacin

    }public class CuentaAhorro extends CuentaBancaria

    {

    //Implementacin

    }

    public class CuentaCorriente extends CuentaBancaria

    {

    //Implementacin

    }

  • 7/24/2019 Clases y Herencia java

    39/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    4. PALABRAS CLAVES this y super

    4.1. Palabra Clave: this:

    Esta palabra clave hace referencia al objeto actual, y puede

    utilizarse dentro de cualquier mtodo.

    Por ejemplo, si tenemos la clase Demo:

    class Demo

    {

    private int n;

    public void setN( int n )

    {

    this.n = n;

    }

    }

    En esta clase tenemos una variable privada n, y un mtodo

    setN para asignar un valor a la variable, pero resulta que el

    parmetro del mtodo tiene el mismo nombre que la variable de

    la clase, por lo tanto, la nica manera de hacer referencia a la

    variable de la clase es mediante la palabra clave this, tal como se

    ilustra en el script.

    La palabra clave this por si sola hace referencia al constructor

    de la misma clase.

  • 7/24/2019 Clases y Herencia java

    40/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Ejemplo 17: En este ejemplo veremos la aplicacin de la palabra

    clave this, la clase que utilizaremos es Empleado.

    Clase Empleado.java

    public class Empleado

    {

    // Atributos:

    private int codigo;

    private String nombre;

    private Double sueldo;

    // Constructores:public Empleado(int codigo, String nombre, Double sueldo)

    {

    this.codigo = codigo;

    this.nombre = nombre;

    this.sueldo = sueldo;

    }

    public Empleado(String nombre)

    {

    this( 1000, nombre, 3500.00 );

    }

    // operaciones

    public String toString()

    {

    return codigo + " " + nombre + " " + sueldo;

    }

    }

  • 7/24/2019 Clases y Herencia java

    41/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Esta clase tiene tres campos privados: cdigo, nombre y sueldo;

    tiene tambin dos constructores, el primero recibe tres datos (cdigo,

    nombre y sueldo), mientras que el segundo recibe solo el nombre y

    asume los otros dos datos, tal como se puede apreciar en el script, pero

    invoca al primer constructor mediante la palabra clave this; el otro mtodo

    (toString) retorna una cadena con los tres datos del empleado.

    Programa ilustrativo para el uso de la clase Empleado.

    Clase prog15.java

    public class prog15

    {

    public static void main(String[ ] args)

    {

    Empleado emp1 = new Empleado ( 500, "Claudia",

    4000.00 );

    Empleado emp2 = new Empleado ( "Laura" );

    System.out.println( "Empleado 1: " + emp1.toString() );

    System.out.println( "Empleado 2: " + emp2.toString() );

    }

    }

    En el programa anterior podemos observar que la segunda instancia

    (emp2) se crea solo con el nombre del empleado (Laura), pero

    internamente se le asigna cdigo 1000 y sueldo 3500.00, si revisamos la

    clase Empleado, esto se realiza a travs del segundo constructor que

    invoca al primer constructor utilizando la palabra clase this.

  • 7/24/2019 Clases y Herencia java

    42/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    4.2. PALABRA CLAVE: super

    Permite a una subclase hacer referencia a la superclase

    inmediata superior. Esta palabra clave tiene dos formas generales:

    la primera es para llamar al constructor de la superclase y la

    segunda es para acceder a un miembro de la superclase que se ha

    ocultado por un miembro de la subclase.

    Invocar Constructores de la Superclase

    Para invocar constructores de la superclase, se deben

    realizar desde el constructor de la subclase.

    Sintaxis:

    super(lista_de_parametros );

    En este caso, lista_de_parametros especifica cualquier

    parmetro que necesite el constructor en la superclase. super

    (lista_de_parametros) debe ser la primera sentencia que se ejecute

    dentro del constructor de la subclase.

    Acceder a Miembros de la Superclase

    La palabra clave super acta de manera similar a this, pero

    en este caso se hace referencia a la superclase.

    Sintaxis:

    super, miembro

    En este caso el miembro puede ser un mtodo o una variable

    de instancia.

    Esta forma de usar la palabra clave super tiene mayor

    aplicacin, sobre todo cuando miembros de la subclase ocultan

    miembros de igual nombre en la superclase.

  • 7/24/2019 Clases y Herencia java

    43/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Ejemplo 18: En este ejemplo veremos la aplicacin de la palabra

    clase super para invocar al constructor de la superclase.

    Se trata de una superclase Persona y dos subclases Trabajador y

    Docente, desde estas subclases se invocar al constructor de la

    superclase.

    Clase Persona.java

    public class Persona

    {

    // Atributos:

    private int codigo;

    private String nombre;

    private Double sueldo;

    // Constructores:

    public Persona(int codigo, String nombre, Double sueldo)

    {

    this.codigo = codigo;

    this.nombre = nombre;

    this.sueldo = sueldo;

    }

    // Operaciones:

    public String toString()

    {

    return ( codigo + " - " + nombre + " - " + sueldo );

    }

    }

    Esta clase tiene un constructor a travs del cual se asigna los datos,

    y un mtodo (toString) que retorna los datos de la persona concatenados

    y separados por un guin.

  • 7/24/2019 Clases y Herencia java

    44/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Trabajador.java

    public class Trabajador extends Persona

    {

    // Operaciones:

    public Trabajador(int codigo, String nombre, Double sueldo, Double bonificacion)

    {

    super( codigo, nombre, sueldo + bonificacion );

    }

    public String toString()

    {

    return ( "Trabajador: " + super.toString() );

    }

    }

    El constructor de esta clase invoca al constructor de la clase Persona a

    travs de la palabra super, se est pasando la suma del sueldo y la

    bonificacin como sueldo del trabajador.

    Tambin se est redefiniendo el mtodo toString, peor est invocando almtodo toString de la clase Persona a travs de la palabra clave super,

    y a su resultado se le est concatenando la palabra Trabajador.

    Clase Docente.java

    public class Docente extends Persona

    {

    // Operaciones:

    public Docente(int codigo, String nombre, int horas, Double importePorHora)

    {

    super( codigo, nombre, horas * importePorHora );

    }

    public String toString()

    {

    return ( "Docente: " + super.toString() );

    }

    }

  • 7/24/2019 Clases y Herencia java

    45/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    En el constructor de esta clase tambin se est invocando al

    constructor de la clase Persona, el sueldo se est calculado como el

    producto de la cantidad de horas (horas) por el importe por hora

    (importePorHora).

    De igual forma se est redefiniendo el mtodo toString y se est

    accediendo al mtodo toString de la clase Persona a travs de la

    palabra super, y a su resultado se le est concatenando la palabra

    Docente.

    A continuacin tenemos el programa ilustrativo:

    Clase prog16.java

    public class prog16

    {

    public static void main(String[ ] args)

    {

    Trabajador tra = new Trabajador ( 500, "Julio Flores", 2000.00,

    500.00 );

    Docente doc = new Docente ( 501, "Gustavo Coronel", 150, 50.00 );

    System.out.println();

    System.out.println( tra.toString() + "\n" );

    System.out.println( doc.toString() );

    }

    }

    En este programa estamos creando dos instancias, una de la clase

    trabajador y otra de la clase Empleado, luego estamos imprimiendo la

    cadena que retorna el mtodo toString de cada una de ellas

    respectivamente.

  • 7/24/2019 Clases y Herencia java

    46/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Ejemplo 19: La clase base es Figura, y de ella van a heredar las

    clases Polgono y Circulo. A su vez, de Polgono heredarn las clases

    Cuadrado y Triangulo. El diagrama esquemtico de clases es elsiguiente:

    La clase base Figura solo tiene dos atributos: nombre de la figura y

    permetro (longitud total de su borde exterior) y, aparte del constructor,

    un nico mtodo llamado imprimirInformacion que imprime por pantalla

    la informacin de la figura.

    Aqu est la clase Figura programada:

    public class Figura

    {

    String nombre;

    double perimetro;

    public Figura(String nombre, double perimetro)

    {

    this.nombre = nombre;

    this.perimetro = perimetro;

    }

    public void imprimirInformacion()

    {

    System.out.println("Soy un "+nombre+" y mi permetro es

    "+perimetro+" m");

    }

    public static void main(String[] args){

    Figura cuad= new Figura("cuadrado", 2*4);

    Figura circ= new Circulo(2);

    Figura tria= new Figura("triangulo", (3*3));

    cuad.imprimirInformacion();

    circ.imprimirInformacion();

    tria.imprimirInformacion();

    }

    }

  • 7/24/2019 Clases y Herencia java

    47/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    En el mtodo main, crea tres objetos y luego imprime la

    informacin de cada uno de ellos: un cuadrado de lado 2 metros, un

    crculo de radio 2 metros y un tringulo de lado 3 metros.

    Compila y ejecuta el programa. La salida por pantalla debera ser la

    siguiente:

    Clase Crculo.java

    Ahora vas a programar la clase Circulo, que hereda de la clase

    anterior Figura. Esta nueva clase tiene un atributo ms (aparte de los

    heredados), de tipo double, que almacena el radio del crculo, que se le

    pasa en el constructor. El radio nos sirve para calcular el permetro del

    crculo (2*pi*radio).

    Adems esta clase sobrescribe el mtodo anterior

    imprimirInformacion para aadir un mensaje ms explicativo con el valor

    del radio.

    El cdigo de la clase Circulo es el siguiente:

    public class Circulo extends Figura

    {

    double radio;

    public Circulo(double radio)

    {

    super("Circulo", 2*Math.PI*radio);

    this.radio = radio;

    }

  • 7/24/2019 Clases y Herencia java

    48/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    public void imprimirInformacion()

    {

    System.out.println("Soy un circulo y mi radio es "+radio+

    " m, con lo que mi perimetro es "+perimetro+" m");

    }

    public static void main(String[] args)

    {

    Figura c1= new Circulo(2);

    Figura c2= new Circulo(3);

    c1.imprimirInformacion();

    c2.imprimirInformacion();

    }

    }

    El mtodo main, se crea dos objetos de la clase Circulo, uno de

    radio 2 metros y otro de radio 3 metros, e imprime su informacin.

    Tras compilar y ejecutar el programa, la salida por pantalla debera ser la

    siguiente:

    Clase Polgono.java

    Ahora toca la clase Polgono, muy parecida a la clase Circulo

    anterior. La diferencia es que en vez de radio los atributos del polgono

    son el nmero de lados y la longitud de cada lado, con los que podemos

    calcular el valor del permetro.

    Este ejercicio consiste en programar la clase Polgono. En el

    mtodo main crea dos polgonos, uno de 3 lados con longitud 3

    (tringulo) y otro de 4 lados con longitud 4 (cuadrado).

  • 7/24/2019 Clases y Herencia java

    49/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    El cdigo de la clase Poligono es el siguiente:

    public class Poligono extends Figura

    {

    int numeroLados;

    double longitudLado;

    public Poligono(String nombre, int numeroLados, double longitudLado)

    {

    super(nombre,(numeroLados*longitudLado));

    this.numeroLados=numeroLados;

    this.longitudLado=longitudLado;

    }

    public void imprimirInformacion()

    {

    System.out.println("Soy un polgono "+nombre+", tengo

    "+numeroLados+ "lados de longitud "+longitudLado+

    " m, por lo que mi permetro es "+perimetro+ " m");

    }

    public static void main(String[ ] args)

    {

    Figura c= new Poligono("Cuadrado",4,2);Figura t= new Poligono("Tringulo",3,2);

    c.imprimirInformacion();

    t.imprimirInformacion();

    }

    }

  • 7/24/2019 Clases y Herencia java

    50/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clases Cuadrado.java y Tringulo.java

    Slo quedan las clases Cuadrado y Triangulo, que derivan de la clase

    Poligono. Estas dos clases no tienen atributos nuevos y ni siquiera

    sobreescriben el mtodo imprimirInformacion.

    Programa las dos clases. En cada una de ellas, aade un main que cree

    dos objetos.

    Las clases son los siguientes:

    Clase Cuadrado.java

    public class Cuadrado extends Poligono

    {

    public Cuadrado(double longitudLado)

    {

    super("Cuadrado",4,longitudLado);

    }

    public static void main(String[ ] args)

    {

    Figura c1= new Cuadrado(2.0);

    Figura c2= new Cuadrado(5.0);

    c1.imprimirInformacion();

    c2.imprimirInformacion();

    }

    }

  • 7/24/2019 Clases y Herencia java

    51/51

    I N ST I TU T O S U PE R IO R TE C NO L G I CO P B L IC O P A M P A S - T A Y A C A J A

    FFOORRMMAA CC II NN PPRROO FF EE SS II OONNAA LL TT EE CC NNOOLL GG II CCAA

    Clase Triangulo.java

    public class Triangulo extends Poligono

    {

    public Triangulo(double longitudLado)

    {

    super("Triangulo",3,longitudLado);

    }

    public static void main(String[ ] args)

    {

    Figura t1= new Triangulo(2.0);

    Figura t2= new Triangulo(5.0);

    t1.imprimirInformacion();

    t2.imprimirInformacion();

    }

    }