Sunteți pe pagina 1din 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
}
}

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Ejemplo:
Clase
Abstracta

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

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

Se DEBEN
implementar
estos elementos
al heredar de
esta clase.

public abstract string ConsultarTodosLosDatos();


public string ObtenerNombreCompleto()
{
return
this.Nombre + " " + this.Apellido;
}
}

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, virtual o abstract.
TODOS los elementos declarados dentro de una
intefaz se consideran pblicos y abstractos.

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

La ClaseCheques
hereda de
la interfaz
IFecha

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;


}
}

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

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

interface IFiguraOperaciones
{
double CalcularArea();
double CalcularPerimetro();
}
public class Figura
{
public virtual string ConsultarDatos()
{
return "Datos de la Figura: ";
}
}
}

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

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

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

13

Programacin Orientada a Objetos con C#

Uso de las interfaces


IComparable e IEquatable

27

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

28

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

14

Programacin Orientada a Objetos con C#

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");
else
MessageBox.Show("El nmero de la Secretaria es diferente que el nmero del Intendente");

30

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

15

S-ar putea să vă placă și