15
Programación Orientada a Objetos con C# Dr. Ramón Roque Hernández M.C. Bruno López Takeyas 1 1 Programación Orientada a Objetos en C# Autor: Dr. Ramón Roque Hernández http://ramonroque.com/Materias/pooTec.htm [email protected] Colaborador: Ing. Bruno López Takeyas, M.C. www.itnuevolaredo.edu.mx/takeyas [email protected] Clases abstractas e Interfaces Clases abstractas e Interfaces Tanto las clases abstractas como las interfaces son mecanismos que obligan la herencia No se pueden instanciar, es decir, no se puede crear objetos de ellas 2

04.- Clases Abstractas e Interfaces

Embed Size (px)

DESCRIPTION

Programacion C#

Citation preview

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 1

    1

    Programacin Orientada

    a Objetos en C#

    Autor:Dr. Ramn Roque Hernndezhttp://ramonroque.com/Materias/[email protected]

    Colaborador:Ing. Bruno Lpez Takeyas, M.C.www.itnuevolaredo.edu.mx/[email protected]

    Clases abstractas e Interfaces

    Clases abstractas e

    Interfaces

    Tanto las clases abstractas como las interfaces son mecanismos que obligan la herencia

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

    2

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 2

    3

    Clases Abstractas

    Son clases que NO pueden serinstanciadas.

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

    Se antepone la palabra abstract a la clase.

    Clases abstractas

    4

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 3

    Ejemplo de clase abstracta

    5

    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}

    } 6

    Mtodo abstracto(debe ser

    implementado en las clases

    derivadas)

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 4

    7

    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; }

    }}

    8

    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 con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 5

    9

    Clases Abstractas con

    elementos abstractos

    Las clases abstractas pueden definir mtodos y propiedadesabstractos, con lo que su respectiva implementacin en lasubclase es obligatoria. (Los elementos abstractos DEBEN sersobreescritos en la subclase).

    - Se utiliza abstract para definir elementos abstractos (solodentro de clases abstractas).

    - Los elementos abstractos NO proporcionan implementacin;solo declaraciones.

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

    10

    Ejemplo: Clase Abstracta con

    elementos abstractosabstract 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.

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 6

    11

    Continuacin

    Clase Abstracta con elementos

    abstractosclass 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

    12

    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();

    }}

    Continuacin

    Clase Abstracta con

    elementos abstractos

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 7

    Interfaces

    Son mecanismos para que puedaninteractuar varios objetos no relacionadosentre s

    Son protocolos o contratos que obligan laherencia

    Contienen las declaraciones de los mtodos,pero no su implementacin.

    Al igual que las clases abstractas, sonplantillas de comportamiento que deben serimplementados por otras clases.

    13

    Interfaces

    14

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 8

    15

    Notas acerca de las

    Interfaces

    Una clase que herede de una interfaz debeimplementar todas las definiciones contenidas en ella.

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

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

    Ejemplo de una interfaz

    diseada por el programador

    16

    Obtiene la fecha delsistema medianteDateTime.Now

    Obliga a implementar losmtodos que contiene enlas clases derivadas de ella.

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

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 9

    Uso de una interfaz diseada

    por el programador

    17

    Declaracin de la interfaz

    interface IFecha{

    int Dia();int Mes();string MesConLetra();int Ao();

    }18

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 10

    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;}

    }} 19

    Implementacin

    de los mtodos

    de la interfaz

    IFecha

    La ClaseCheques

    hereda de

    la interfaz

    IFecha

    20

    Ejemplo de interfaz

    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");}

    }

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 11

    21

    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;}

    }

    22

    Ejemplo: Heredando de una clase

    e implementando dos interfaces[Continuacin]

    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();

    }}

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 12

    Interfaces en C#

    IComparable IEquatable IEnumerable Y otras

    23

    La interfaz 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

    24

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 13

    La interfaz IEquatable

    Contiene la declaracin del mtodo Equals()interface IEquatable {

    bool Equals(T obj); }

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

    25

    NOTA IMPORTANTE

    Las interfaces IEquatable e IComparable solamente comparan objetos del mismo tipo.

    No se pueden comparar objetos de diferentes tipos; es decir, creados a partir de clases diferentes.

    26

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 14

    Uso de las interfaces

    IComparable e IEquatable

    27

    Implementacin

    class 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);}

    }28

    Implementacin

    de los mtodos

    de las interfaces

    La ClaseEmpleado

    hereda de

    las interfaces

    IComparable e

    IEquatable

  • Programacin Orientada a Objetos con C#

    Dr. Ramn Roque HernndezM.C. Bruno Lpez Takeyas 15

    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";

    29

    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");

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

    30