Clases Abstractas e Interfaces

22
 Programación Orientada a Objetos en C# .NET Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu.mx/Takeyas 1 CAPÍTULO 5 H E R E N C I A (Clases abstractas e interfaces) 2

description

poo

Transcript of Clases Abstractas e Interfaces

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 1

    CAPTULO 5H E R E N C I A

    (Clases abstractas e interfaces)

    2

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 2

    3

    Preguntas detonadoras

    Parece paradjico que una clase no pueda crear objetos a partirde ella, realmente lo es?

    Si una clase abstracta no puede generar instancias, entoncespara qu sirve?

    Si un miembro abstracto no tiene implementacin, entoncespara qu sirve?

    En una clase abstracta, todos sus miembros son abstractos?

    En qu se parece una interfase a una clase abstracta? En qudifieren?

    Se puede definir un miembro abstracto dentro de una clase noabstracta?

    Clases abstractas e interfaces

    Tanto las clases abstractas como lasinterfaces son mecanismos que obligan laherencia

    No se pueden instanciar, es decir, no sepuede crear objetos de ellas

    4

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 3

    Clases abstractas Son mecanismos que obligan la herencia

    No se pueden instanciar, es decir, no se puedecrear objetos de ellas

    Se utilizan solamente para heredar de ellas(Forzar u obligar la herencia).

    Se antepone la palabra abstract al nombrede la clase.

    5

    6

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 4

    Ejemplo de clase abstracta

    7

    Implementacin de una clase abstracta en C#

    public abstract class ClaseAbstractaPersona

    {

    string Nombre;

    DateTime FechaNacimiento;

    public abstract void Comer();

    public int CalcularEdad()

    {

    //Aqu se implementa este mtodo

    }

    }

    8

    Mtodo abstracto(debe ser

    implementado en las clases derivadas)

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 5

    9

    abstract class Persona{

    private string nombre;private string apellido;public string Nombre{

    get { return nombre; }set { nombre = value; }

    }public string Apellido{

    get { return apellido; }set { apellido = value; }

    }public string ObtenerNombreCompleto(){

    return this.Nombre + " " + this.Apellido;

    }}

    Ejemplo: Clase Abstracta

    class Empleado : Persona{

    private int claveEmpleado;public int Clave{

    get { return claveEmpleado; }set { claveEmpleado = value; }

    }}class Cliente : Persona{

    private string rfc;public string RFC{

    get { return rfc; }set { rfc = value; }

    }}

    10

    Continuacin Ejemplo de Clase Abstracta

    class Programa{

    static void Main(){

    Empleado unEmpleado = new Empleado();unEmpleado.Nombre = "Juan";unEmpleado.Apellido = "Gonzalez";unEmpleado.Clave = 1;System.Console.WriteLine(unEmpleado.ObtenerNombreCompleto());

    Cliente unCliente = new Cliente();unCliente.Nombre = "Pedro";unCliente.Apellido = "Ramirez";unCliente.RFC = "RAHP780212";System.Console.WriteLine(unCliente.ObtenerNombreCompleto());

    System.Console.ReadLine();}

    }

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 6

    11

    Clases abstractas con elementosabstractos Las clases abstractas pueden definir mtodos y propiedades

    abstractos, con lo que su respectiva implementacin en lasubclase es obligatoria. (Los elementos abstractos DEBENser sobreescritos en la subclase).

    Se utiliza abstract para definir elementos abstractos(solo dentro de clases abstractas).

    Los elementos abstractos NO proporcionanimplementacin; solo declaraciones.

    En la subclase, se utiliza override para realizar laimplementacin correspondiente.

    Miembros abstractos

    Una clase abstracta puede tener datos (atributos) eimplementar mtodos y propiedades como una clasenormal y adems puede tener miembros abstractos(mtodos o propiedades).

    Los miembros abstractos NO tienen implementacin(estn vacos).

    Para qu sirve un mtodo vaco o propiedad vaca yque no realiza acciones?

    12

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 7

    13

    Ejemplo: Clase abstracta con elementos abstractos

    abstract class Persona{

    private string nombre;private string apellido;public string Nombre{

    get { return nombre; }set { nombre = value; }

    }public string Apellido{

    get { return apellido; }set { apellido = value; }

    }public abstract int Clave{ get; set; }

    public abstract string ConsultarTodosLosDatos();

    public string ObtenerNombreCompleto(){

    return this.Nombre + " " + this.Apellido;

    }}

    Se DEBEN implementarestos elementosal heredar deesta clase.

    14

    Clase abstracta con elementosabstractos (cont.)

    class Empleado : Persona{

    private int claveEmpleado;public override int Clave{

    get { return claveEmpleado; }set { claveEmpleado = value; }

    }public override string ConsultarTodosLosDatos(){

    return "------Datos del Empleado: \n" + this.Clave + " " + this.Nombre + " " + this.Apellido;

    }}

    class Cliente : Persona{

    private int claveCliente;public override int Clave{

    get { return claveCliente; }set { claveCliente = value; }

    }public override string ConsultarTodosLosDatos(){

    return "******Datos del Cliente: \n" + this.Clave + " " + this.Nombre + " " + this.Apellido;

    }}

    Implementacin

    Implementacin

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 8

    15

    class Programa{

    static void Main(){

    Empleado unEmpleado = new Empleado();unEmpleado.Nombre = "Juan";unEmpleado.Apellido = "Gonzalez";unEmpleado.Clave = 1;System.Console.WriteLine( unEmpleado.ConsultarTodosLosDatos() );System.Console.WriteLine( unEmpleado.ObtenerNombreCompleto() );

    Cliente unCliente = new Cliente();unCliente.Nombre = "Pedro";unCliente.Apellido = "Ramirez";unCliente.Clave = 34;System.Console.WriteLine( unCliente.ConsultarTodosLosDatos() );System.Console.WriteLine( unCliente.ObtenerNombreCompleto());System.Console.ReadLine();

    }}

    Clase abstracta con elementosabstractos (cont.)

    Miembros abstractos

    16

    En UML las clases y sus miembros abstractos se escriben con itlicas y en C# .NET se codifican anteponiendo la palabra

    abstract

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 9

    17

    Prog. 5.5.- Clase abstracta con mtodos abstractos

    18

    Diseo de la forma

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 10

    Interfaces

    Son mecanismos para que puedan interactuarvarios objetos no relacionados entre s

    Son protocolos o contratos que obligan laherencia

    Contienen las declaraciones de los mtodos, perono su implementacin.

    Al igual que las clases abstractas, son plantillas decomportamiento que deben ser implementadospor otras clases.

    19

    20

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 11

    21

    Ejemplo de una interfase

    En UML una interfase se representa mediante un rectngulo con dos secciones (ya que no tiene datos)

    22

    Notas acerca de las interfaces

    Una clase que herede de una interfase debeimplementar todas las definiciones contenidas enella.

    Los elementos de la interfaz no llevan losmodificadores public, virtual o abstract.

    TODOS los elementos declarados dentro de unaintefaz se consideran pblicos y abstractos.

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 12

    Ejemplo de una interfaz diseada por el programador

    23

    Obtiene la fecha del sistemamediante DateTime.Now

    Obliga a implementar losmtodos que contiene en lasclases derivadas de ella.

    Se deben implementartodos sus mtodos, de locontrario nos indica un error.

    Los miembros de una interfase se consideran pblicos y virtuales por defecto (no hay necesidad de especificarlo)

    Uso de una interfaz diseada por el programador

    24

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 13

    Declaracin de la interfaz

    interface IFecha

    {

    int Dia();

    int Mes();

    string MesConLetra();

    int Ao();

    }

    25

    Uso de una interfaz en C#class ClaseCheques : IFecha

    {

    // Implementacin de los mtodos de la interfaz IFecha

    public int Dia( )

    {

    return DateTime.Now.Day;

    }

    public int Mes( )

    {

    return DateTime.Now.Month;

    }

    public int Ao( )

    {

    return DateTime.Now.Year;

    }

    public string MesConLetra( )

    {

    switch ( Mes( ) )

    {

    case 1: return ("Enero"); break;

    case 2: return ("Febrero"); break;

    case 12: return ("Diciembre"); break;

    }

    }

    }26

    Implementacin

    de los mtodos

    de la interfaz

    IFecha

    La ClaseCheques

    hereda de

    la interfaz

    IFecha

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 14

    27

    Otro ejemplo de uso de interfaces

    28

    Cmo agregar una interfase al proyecto?

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 15

    29

    Ejemplo de una interfase

    interface Vehiculo //Declaraciones solamente{

    string Marca{

    get;set;

    }void Arrancar();

    }class Carro: Vehiculo //Implementacion de toda la interfaz{

    private string _marca; public string Marca{

    get { return _marca; }set { _marca = value; }

    }public void Arrancar(){

    System.Console.WriteLine("Arrancar....Clase Carro");}

    }

    30

    Ejemplo: Heredando de una clase e implementando dos interfaces

    interface ICuadrado{

    double Lado{

    get;set;

    }}

    interface IFiguraOperaciones{

    double CalcularArea();double CalcularPerimetro();

    }

    public class Figura{

    public virtual string ConsultarDatos(){

    return "Datos de la Figura: ";}

    }

    class Cuadrado : Figura, ICuadrado,IFiguraOperaciones

    {private double lado;public double Lado{

    get { return lado; }set { lado = value; }

    }public double CalcularArea(){

    return Lado * Lado;}public double CalcularPerimetro(){

    return 4 * Lado;}public override string ConsultarDatos(){

    return " Datos : Lado = " + Lado;}

    }

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 16

    31

    Ejemplo: Heredando de una clasee implementando dos interfaces(cont.)

    class Program{

    static void Main(){

    Cuadrado c = new Cuadrado();c.Lado = 2;System.Console.WriteLine( c.ConsultarDatos() );System.Console.WriteLine("Area: " + c.CalcularArea());System.Console.WriteLine("Perimetro: " + c.CalcularPerimetro());System.Console.ReadLine();

    }}

    Interfaces en C#

    IComparable

    IEquatable

    Ienumerable

    INotifyPropertyChanged

    Y otras

    32

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 17

    La interfase IComparable

    Contiene la declaracin del mtodo CompareTo()

    interface IComparable

    {

    int CompareTo(object obj);

    }

    El mtodo CompareTo() devuelve un valor entero como resultado de la comparacin

    33

    34

    Uso de IComparable

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 18

    35

    Implementacin de IComparableclass Estudiante : IComparable

    {

    // Atributos privados

    private int _intClave;

    private string _strNombre;

    private double _dlbPromedio;

    // Propiedades pblicas

    public int Clave

    {

    get { return _intClave; }

    set { _intClave = value; }

    }

    public string Nombre

    {

    get { return _strNombre; }

    set { _strNombre = value; }

    }

    public double Promedio

    {

    get { return _dlbPromedio; }

    set { _dlbPromedio = value; }

    }

    // Implementacin del mtodo CompareTo de la interfase IComparable

    public int CompareTo(Estudiante otroEstudiante)

    {

    // Se utiliza el promedio de los estudiantes para determinar

    // el orden

    if (this.Promedio > otroEstudiante.Promedio)

    return (1);

    else

    if (this.Promedio < otroEstudiante.Promedio)

    return (-1);

    else

    return (0);

    }

    }

    La interfase IEquatable

    Contiene la declaracin del mtodo Equals()

    interface IEquatable

    {

    bool Equals(T obj);

    }

    El mtodo Equals() devuelve un valorbooleano como resultado de la comparacin

    36

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 19

    37

    Uso de IEquatable

    38

    Implementacin de IEquatableclass Estudiante : IEquatable

    {

    // Atributos privados

    private int _intClave;

    private string _strNombre;

    private double _dlbPromedio;

    // Propiedades pblicas

    public int Clave

    {

    get { return _intClave; }

    set { _intClave = value; }

    }

    public string Nombre

    {

    get { return _strNombre; }

    set { _strNombre = value; }

    }

    public double Promedio

    {

    get { return _dlbPromedio; }

    set { _dlbPromedio = value; }

    }

    // Implementacin del mtodo Equals de la interfase IEquatable

    public bool Equals(Estudiante otroEstudiante)

    {

    // Se utiliza la clave de los estudiantes para determinar

    // si dos objetos son iguales

    return (this.Clave == otroEstudiante.Clave);

    }

    }

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 20

    NOTA IMPORTANTE

    Las interfaces IEquatable e IComparablesolamente comparan objetos del mismotipo.

    No se pueden comparar objetos dediferentes tipos; es decir, creados a partir declases diferentes.

    39

    Puesto que los objetos pueden realizar acciones, entonces tienen la capacidad de compararse entre s para determinar si son iguales o para definir un orden

    especfico a travs de las interfaces IEquatable e IComparable

    Uso de las interfaces IComparablee IEquatable

    40

    Al invocar los mtodos Equals() y CompareTo() se hace una comparacin a nivel objeto y no es necesario especificar cul es el dato que se utiliza para hacer la comparacin. Es la implementacin

    de dichos mtodos en la clase la que determina el criterio de comparacin.

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 21

    Implementacinclass ClaseEmpleado: IComparable, IEquatable{

    public int Numero { get; set; }public string Nombre { get; set; }

    public int CompareTo(ClaseEmpleado x){

    if (this.Numero < x.Numero)return -1;

    elseif (this.Numero > x.Numero)

    return 1;else

    return 0;}

    public bool Equals(ClaseEmpleado x){

    return (this.Numero == x.Numero);}

    }

    41

    Implementacin

    de los mtodos

    de las interfaces

    La ClaseEmpleado

    hereda de

    las interfaces

    IComparable e

    IEquatable

    Ejemplo de uso

    Declaracin e inicializacin de los objetos:

    ClaseEmpleado Secretaria = new ClaseEmpleado();

    ClaseEmpleado Intendente = new ClaseEmpleado();

    Secretaria.Numero = 2;

    Secretaria.Nombre = "Rosa";

    Intendente.Numero = 3;

    Intendente.Nombre = "Luis";

    42

  • Programacin Orientada a Objetos en C# .NET

    Ing. Bruno Lpez Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 22

    Ejemplo de uso (cont.)int Resultado = Secretaria.CompareTo(Intendente);

    switch (Resultado)

    {

    case -1: MessageBox.Show("El nmero de la Secretaria es menor que el nmero del Intendente");

    break;

    case 0: MessageBox.Show("El nmero de la Secretaria es igual que el nmero del Intendente");

    break;

    case 1: MessageBox.Show("El nmero de la Secretaria es mayor que el nmero del Intendente");

    break;

    }

    if (Secretaria.Equals(Intendente))

    MessageBox.Show("El nmero de la Secretaria es igual que el nmero del Intendente");

    else

    MessageBox.Show("El nmero de la Secretaria es diferente que el nmero del Intendente");

    43

    Otros ttulos del autor

    http://www.itnuevolaredo.edu.mx/Takeyas/Libro

    Bruno Lpez [email protected]