Sei sulla pagina 1di 15

Programacin Orientada a Objetos con C#

Programacin Orientada a Objetos en C#


Clases abstractas e Interfaces
Autor: Dr. Ramn Roque Hernndez http://ramonroque.com/Materias/pooTec.htm ramonroque@yahoo.com Colaborador: Ing. Bruno Lpez Takeyas, M.C. www.itnuevolaredo.edu.mx/takeyas takeyas@itnuevolaredo.edu.mx
1

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Clases Abstractas
Son clases instanciadas. que NO pueden ser

Se utilizan solamente para heredar de ellas (Forzar u obligar la herencia). Se antepone la palabra abstract a la clase.
3

Clases abstractas

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Ejemplo de clase abstracta

Implementacin de una clase abstracta en C#


public abstract class ClaseAbstractaPersona { Mtodo abstracto string Nombre; (debe ser implementado DateTime FechaNacimiento;
en las clases derivadas)

public abstract void Comer(); public int CalcularEdad() { //Aqu se implementa este mtodo } }
6

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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; } class Empleado : Persona } { public string ObtenerNombreCompleto() private int claveEmpleado; { public int Clave return { this.Nombre + " " + this.Apellido; get { return claveEmpleado; } } set { claveEmpleado = value; } } } } class Cliente : Persona { private string rfc; public string RFC { get { return rfc; } set { rfc = value; } 7 } }

Ejemplo: Clase Abstracta

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Clases Abstractas con elementos abstractos


Las clases abstractas pueden definir mtodos y propiedades abstractos, con lo que su respectiva implementacin en la subclase es obligatoria. (Los elementos abstractos DEBEN ser sobreescritos en la subclase). Se utiliza abstract para definir elementos abstractos (solo dentro de clases abstractas). Los elementos abstractos NO proporcionan implementacin; solo declaraciones. En la subclase, se utiliza override implementacin correspondiente. para realizar la

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 implementar estos elementos al heredar de esta clase.

10

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Continuacin Clase Abstracta con elementos abstractos


class Empleado : Persona { Implementacin 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 { Implementacin 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; } }

11

Continuacin Clase Abstracta con elementos abstractos


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

12

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Interfaces
Son mecanismos para que puedan interactuar varios objetos no relacionados entre s Son protocolos o contratos que obligan la herencia Contienen las declaraciones de los mtodos, pero no su implementacin. Al igual que las clases abstractas, son plantillas de comportamiento que deben ser implementados por otras clases.
13

Interfaces

14

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Notas acerca de las Interfaces

Una clase que herede de una interfaz debe implementar todas las definiciones contenidas en ella. Los elementos de la interfaz no llevan los modificadores public o virtual. TODOS los elementos declarados dentro de una Intefaz se consideran pblicos y virtuales.

15

Ejemplo de una interfaz diseada por el programador


Obtiene la fecha del sistema mediante DateTime.Now Obliga a implementar los mtodos que contiene en las clases derivadas de ella. Se deben implementar todos sus mtodos, de lo contrario nos indica un error.
16

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Uso de una interfaz diseada por el programador

17

Declaracin de la interfaz
interface IFecha { int Dia(); int Mes(); string MesConLetra(); int Ao(); }
18

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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

La ClaseCheques hereda de la interfaz IFecha

Implementacin de los mtodos de la interfaz IFecha

19

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

10

Programacin Orientada a Objetos con C#

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 : { 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; } Figura, ICuadrado, IFiguraOperaciones

21

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

22

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

11

Programacin Orientada a Objetos con C#

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

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

12

Programacin Orientada a Objetos con C#

La interfaz IEquatable
Contiene la declaracin del mtodo Equals()
interface IEquatable<T> { bool Equals(T obj); }

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


25

Uso de las interfases IComparable e IEquatable

26

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

13

Programacin Orientada a Objetos con C#

Implementacin
class ClaseEmpleado: IComparable<ClaseEmpleado>, IEquatable<ClaseEmpleado> { public int Numero { get; set; } public string Nombre { get; set; } La ClaseEmpleado public int CompareTo(ClaseEmpleado x) { if (this.Numero < x.Numero) return -1; else if (this.Numero > x.Numero) return 1; else return 0; } public bool Equals(ClaseEmpleado x) { return (this.Numero == x.Numero); } }

hereda de las interfaces IComparable e IEquatable

Implementacin de los mtodos de las interfaces

27

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

28

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

14

Programacin Orientada a Objetos con C#

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

29

Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas

15

Potrebbero piacerti anche