Publicado el 17 de Febrero del 2019
1.472 visualizaciones desde el 17 de Febrero del 2019
1,4 MB
29 paginas
Creado hace 5a (15/08/2018)
Programación Orientada a Objetos en C# .NET
CAPÍTULO 5
H E R E N C I A
(Clases abstractas e interfaces)
2
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
1
Programación Orientada a Objetos en C# .NET
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?
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
3
4
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
2
Programación Orientada a Objetos en C# .NET
Clases abstractas
Son mecanismos que obligan la herencia
No se pueden instanciar, es decir, no se puede
crear objetos de ellas
Se utilizan solamente para heredar de ellas
(Forzar u obligar la herencia).
Se antepone la palabra “abstract” al nombre
de la clase.
5
6
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
3
Programación Orientada a Objetos en C# .NET
Ejemplo de clase abstracta
7
Implementación 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 método
}
}
Método abstracto
(debe ser
implementado
en las clases
derivadas)
8
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
4
Programación Orientada a Objetos en C# .NET
abstract class Persona
{
private string _strNombre;
private string _strApellido;
public string Nombre
{
get { return _strNombre; }
set { _strNombre = value; }
}
public string Apellido
{
get { return _strApellido; }
set { _strApellido = value; }
}
public string ObtenerNombreCompleto()
{
return
this.Nombre + " " + this.Apellido;
}
}
Ejemplo:
Clase Abstracta
class Empleado : Persona
{
private int _intClaveEmpleado;
public int Clave
{
get { return _intClaveEmpleado; }
set { _intClaveEmpleado = value; }
}
}
class Cliente : Persona
{
private string _strRfc;
public string RFC
{
get { return _strRfc; }
set { _strRfc = value; }
}
}
9
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());
Cliente unCliente = new Cliente();
unCliente.Nombre = "Pedro";
unCliente.Apellido = "Ramirez";
unCliente.RFC = "RAHP780212";
System.Console.WriteLine(unCliente.ObtenerNombreCompleto());
System.Console.ReadLine();
}
}
10
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
5
Programación Orientada a Objetos en C# .NET
Clases abstractas con elementos
abstractos
Las clases abstractas pueden definir métodos y propiedades
abstractos, con lo que su respectiva implementación 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
implementación; solo declaraciones.
En la subclase, se utiliza “override” para realizar la
implementación correspondiente.
11
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).
Los miembros abstractos NO tienen implementación
(están vacíos).
¿Para qué sirve un método vacío o propiedad vacía y
que no realiza acciones?
12
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
6
Programación Orientada a Objetos en C# .NET
Ejemplo: Clase abstracta con
elementos abstractos
abstract class Persona
{
private string _strNombre;
private string _strApellido;
public string Nombre
{
get { return _strNombre; }
set { _strNombre = value; }
}
public string Apellido
{
get { return _strApellido; }
set { _strApellido = 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.
Clase abstracta con elementos
abstractos (cont.)
class Empleado : Persona
{
private int _intClaveEmpleado;
public override int Clave
{
Implementación
get { return _intClaveEmpleado; }
set { _intClaveEmpleado = value; }
}
public override string ConsultarTodosLosDatos()
{
return "------Datos del Empleado: \n" + this.Clave + " " +
this.Nombre + " " + this.Apellido;
}
}
class Cliente : Persona
{
private int _intClaveCliente;
public override int Clave
{
Implementación
get { return _intClaveCliente; }
set { _intClaveCliente = value; }
}
public override string ConsultarTodosLosDatos()
{
return "******Datos del Cliente: \n" + this.Clave + " " +
this.Nombre + " " + this.Apellido;
}
}
13
14
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
7
Programación Orientada a Objetos en C# .NET
Clase abstracta con elementos
abstractos (cont.)
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();
}
}
Miembros abstractos
En UML las clases y sus miembros abstractos se escriben
con itálicas y en C# .NET se codifican anteponiendo la
palabra “abstract”
15
16
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
8
Programación Orientada a Objetos en C# .NET
Prog. 5.5.- Clase abstracta con
métodos abstractos
Diseño de la forma
17
18
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
9
Programación Orientada a Objetos en C# .NET
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
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
10
Programación Orientada a Objetos en C# .NET
Ejemplo de una interfase
En UML una interfase se representa mediante
un rectángulo con dos secciones (ya que no
tiene datos)
21
Notas acerca de las interfaces
Una clase que herede de una interfase debe
implementar todas las definiciones contenidas en
ella.
Los elementos de la interfase no llevan los
modificadores “public” o “abstract”.
TODOS los elementos declarados dentro de una
intefase se consideran públicos y abstractos.
22
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
11
Programación Orientada a Objetos en C# .NET
Ejemplo de una interfase diseñada
por el programador
•Obtiene la fecha del sistema
mediante DateTime.Now
•Obliga a implementar los
métodos que contiene en las
clases derivadas de ella.
deben
•Se
implementar
todos sus métodos, de lo
contrario nos indica un error.
Los miembros de una interfase se consideran públicos y
virtuales por defecto (no hay necesidad de especificarlo)
23
Uso de una interfase diseñada por
el programador
Interfase definida por el
programador
«interface»
IFecha
Los métodos abstractos se
representan con itálicas
+
+
+
+
Declaración de los métodos
abstractos de la interfase
(no contiene la
implementación)
Esta clase hereda de la
interfase IFecha (por lo
tanto debe implementar sus
métodos)
ClaseCheques
+ Dia() : int
+ Mes() : int
+ MesConLetra() : string
+ Año() : int
Implementación de los
métodos declarados en la
interfase IFecha
24
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
12
Programación Orientada a Objetos en C# .NET
Declaración de la interfase
interface IFecha
{
}
int Dia();
int Mes();
string MesConLetra();
int Año();
25
26
Uso de una interfase en C#
class ClaseCheques : IFecha
{
// Implementación de los métodos de la interfaz IFecha
public int Dia( )
{
}
return DateTime.Now.Day;
public int Mes( )
{
}
return DateTime.Now.Month;
public int Año( )
{
}
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 interfase
IFecha
Implementación
de los métodos
de la interfase
IFecha
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
13
Programación Orientada a Objetos en C# .NET
Otro ejemplo de uso de interfaces
¿Cómo agregar una interfase al
proyecto?
27
28
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
14
Programación Orientada a Objetos en C# .NET
Ejemplo de una interfase
interface IVehiculo
{
string Marca
{
get;
set;
}
void Ar
Comentarios de: 07b.- Herencia (Clases Abstractas E Interfaces) - Programación Orientada a Objetos en C# (0)
No hay comentarios