Clases Abstractas e Interfaces
-
Upload
martina-navarro -
Category
Documents
-
view
12 -
download
0
description
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]