Clases Abstractas e Interfaces
Clases Abstractas e Interfaces
Clases Abstractas e Interfaces
NET
CAPÍTULO 5
H E R E N C I A
(Clases abstractas e interfaces)
Preguntas detonadoras
Parece paradójico que una clase no pueda crear objetos a partir
de ella, ¿realmente lo es?
Si una clase abstracta no puede generar instancias, ¿entonces
para qué sirve?
Si un miembro abstracto no tiene implementación, ¿entonces
para qué sirve?
En una clase abstracta, ¿todos sus miembros son abstractos?
¿En qué se parece una interfase a una clase abstracta? ¿En qué
difieren?
¿Se puede definir un miembro abstracto dentro de una clase no
abstracta?
3
Clases abstractas
Son mecanismos que obligan la herencia
Continuación…
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());
System.Console.ReadLine();
}
}
10
Miembros abstractos
Una clase abstracta puede tener datos (atributos) e
implementar métodos y propiedades como una clase
normal y además puede tener miembros abstractos
(métodos o propiedades).
13
14
15
Miembros abstractos
17
Diseño de la forma
18
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 métodos, pero
no su implementación.
Al igual que las clases abstractas, son plantillas de
comportamiento que deben ser implementados
por otras clases.
19
20
+
Declaración de los métodos
+
abstractos de la interfase
Los métodos abstractos se + (no contiene la
representan con itálicas + implementación)
+ Dia() : int
+ Mes() : int Implementación de los
métodos declarados en la
+ MesConLetra() : string interfase IFecha
+ Año() : int
24
Declaración de la interfase
interface IFecha
{
int Dia();
int Mes();
string MesConLetra();
int Año();
}
25
27
28
29
30
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();
}
}
31
Interfaces en C#
IComparable
IEquatable
IEnumerator
IEnumerable
INotifyPropertyChanged
Y otras …
32
La interfase IComparable
Contiene la declaración del método CompareTo()
interface IComparable
{
int CompareTo(object obj);
}
33
La función CompareTo()
34
Uso de IComparable
35
Implementación de IComparable
class Estudiante : IComparable<Estudiante>
{
// Atributos privados
private int _intClave;
private string _strNombre;
private double _dlbPromedio;
// Propiedades públicas
public int Clave
{
get { return _intClave; }
set { _intClave = value; }
}
{
// Atributos privados
private int _intClave;
private string _strNombre;
private double _dlbPromedio;
// Propiedades públicas
public int Clave
{
get { return _intClave; }
set { _intClave = value; }
}
. . .
. . .
. . .
La interfase IEquatable
Contiene la declaración del método Equals()
interface IEquatable<T>
{
bool Equals(T obj);
}
Uso de IEquatable
40
Implementación de IEquatable
class Estudiante : IEquatable<Estudiante>
{
// Atributos privados
private int _intClave;
private string _strNombre;
private double _dlbPromedio;
// Propiedades públicas
public int Clave
{
get { return _intClave; }
set { _intClave = value; }
}
NOTA IMPORTANTE
Las interfaces IEquatable e IComparable
solamente comparan objetos del mismo
tipo.
Implementación
class ClaseEmpleado: IComparable<ClaseEmpleado>, IEquatable<ClaseEmpleado>
{
public int Numero { get; set; }
public string Nombre { get; set; } La ClaseEmpleado
Implementa
public int CompareTo(ClaseEmpleado otroEmpleado) las interfaces
{
IComparable e
return(this.Nombre.CompareTo(otroEmpleado.Nombre);
IEquatable
}
Ejemplo de uso
Declaración e inicialización de los objetos:
ClaseEmpleado miSecretaria = new ClaseEmpleado();
ClaseEmpleado miIntendente = new ClaseEmpleado();
miSecretaria.Numero = 2;
miSecretaria.Nombre = "Rosa";
miIntendente.Numero = 3;
miIntendente.Nombre = "Luis";
45
if (miSecretaria.Equals(miIntendente))
MessageBox.Show("El número de la Secretaria es igual que el número del
Intendente");
else
MessageBox.Show("El número de la Secretaria es diferente que el número del
Intendente");
46
Restricciones de tipos de
parámetros
Se usan al diseñar clases genéricas
Se utilizan para “obligar” a enviar ciertos
tipos como parámetros a las clases genéricas
Se implementan usando la sentencia where
47
Restricciones de tipos de
parámetros (cont.)
48
La restricción where
Obliga a que una clase genérica utilice
alguna restricción particular. P. ejem:
Una estructura
Una clase
Un constructor default
La implementación de una interfase
Una clase base o derivada
Si no la contiene… ERROR !!!
49
52
+ miPizza
miHamburguesa
miTaco
miPapasFritas
miTorta
TipoAlimento
La clase TipoAlimento DEBE
- _strNombre: string tener el constructor debido
a que lo requiere la
- _dblPrecio: double
restricción de las clases de
- _strDomicilio: string la composición
- _intDistanciaMts: int [ where Alimento : new() ]
+ TipoAlimento()
+ Nombre { get; set; } : string
La clase TipoAlimento DEBE
+ Precio { get; set; } : double
implementar el método
+ Domicilio { get; set; } : string CompareTo() para ordenar
+ DistanciaMts { get; set; } : int los alimentos de acuerdo a
+ CompareTo(otroAlimento: TipoAlimento) : int la distancia en metros
53
La clase CajaAlimento
public class CajaAlimento<Alimento> where Alimento:new()
{
private Alimento miAlimento;
public CajaAlimento() {
miAlimento = new Alimento();
}
~CajaAlimento() {
// Elimina el objeto miAlimento
miAlimento = default(Alimento);
}
}
54
La clase MotocicletaRepartidora
class MotocicletaRepartidora<Alimento> where Alimento :
IComparable<Alimento>, new()
{
private List<CajaAlimento<Alimento>> miListaCajas;
public MotocicletaRepartidora() {
miListaCajas = new List<CajaAlimento<Alimento>>();
}
~MotocicletaRepartidora() {
miListaCajas.Clear();
}
}
55
Implementación de la sentencia
where
Cada alimento DEBE implementar el método
CompareTo() de la interfase IComparable
El método CompareTo() compara los
alimentos y los ordena de acuerdo a la
distancia de la entrega
La sentencia where de la clase
MotocicletaRepartidora OBLIGA a que
todos los objetos de su composición
implementen el método CompareTo()
56