PDF de programación - 05a.- Herencia - Programación Orientada a Objetos en C#

Imágen de pdf 05a.- Herencia - Programación Orientada a Objetos en C#

05a.- Herencia - Programación Orientada a Objetos en C#gráfica de visualizaciones

Publicado el 17 de Febrero del 2019
383 visualizaciones desde el 17 de Febrero del 2019
1,2 MB
22 paginas
Creado hace 1a (15/08/2018)
Programación Orientada a Objetos en C# .NET

CAPÍTULO 5

H E R E N C I A

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

¿Qué ventajas ofrece la herencia a un programador?
¿Cuál es la diferencia entre herencia simple y herencia múltiple?
Si una clase recibe herencia de una clase y varias interfaces, ¿se considera

herencia múltiple?

Si una clase transmite (hereda) sus componentes a dos o más clases, ¿se

considera herencia múltiple?

¿Se pueden diseñar aplicaciones con herencia múltiple en C# .NET?
Si una clase abstracta no puede generar objetos, ¿entonces para qué sirve?
¿Se puede modificar la implementación de un método heredado?
Si un miembro abstracto no tiene implementación, ¿entonces para qué sirve?
En una clase abstracta, ¿todos sus miembros son abstractos?
¿Cuál es la ventaja de sobrescribir el método ToString()?
¿Para qué sirve una clase sellada (sealed)?
¿En qué se parece una interfase a una clase abstracta? ¿En qué difieren?

Relaciones entre clases:

Herencia, Composición y
Agregación

3

4

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

2

Programación Orientada a Objetos en C# .NET

Herencia

Característica de la POO que permite
definir nuevas clases a partir de otras ya
existentes.

Las clases existentes “transmiten” sus

características.

5

6

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

3

Programación Orientada a Objetos en C# .NET

Herencia (cont.)

Puede usarse para:

Relaciones del tipo “es un”
Ejemplo: Un Gerente
Empleado
propias adicionales.

con

“es un”
características

Objetivo: Reutilización de código.

Ejercicio

Se deben modelar dos clases con las

siguientes características:

Automovil

PalaMecanica

CaballosDeFuerza: int
CantidadDePuertas: int

Arrancar() : void
Detener() : void
Acelerar(int cuanto): void

CaballosDeFuerza: int
PesoMaximoDeLevante: int

Arrancar() : void
Detener() : void
MoverPala(string direccion) : void

7

8

8

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

4

Programación Orientada a Objetos en C# .NET

Mal diseño (no recomendable)
Modelarlas de manera independiente.

class Automovil
{

class PalaMecanica
{

private int cf, cp;
public int CaballosDeFuerza
{

get { return cf; }
set { cf = value; }

Iguales

}
public int CantidadDePuertas
{

get { return cp; }
set { cp = value; }

private int cf, pml;
public int CaballosDeFuerza
{

get { return cf; }
set { cf = value; }

}
public int PesoMaximoDeLevante
{

get { return pml; }
set { pml = value; }

}
public void Arrancar()
{
}
public void Detener()
{
}
public void Acelerar(int cuanto)
{
}

Iguales

Iguales

}

}

}
public void Arrancar()
{
}
public void Detener()
{
}
public void MoverPala(string direccion)
{
}

9

9

Diseño usando herencia
(recomendado)

Vehiculo

CaballosDeFuerza : int

Arrancar() : void
Detener() : void

Superclase
(Clase base)
(Clase padre)
(Clase madre)

Herencia

Automovil

CantidadDePuertas : int

Acelerar(int cuanto) : void

Subclases
(Clases derivadas)
(Clases Hijas)

PalaMecanica

PesoMaximoDeLevante : int

MoverPala(string direccion) : void

10

10

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

5

Programación Orientada a Objetos en C# .NET

Definición de las clases usando herencia en
C#

class Vehiculo
{

private int cf;
public int CaballosDeFuerza
{

get { return cf; }
set { cf = value; }

}
public void Arrancar()
{
}
public void Detener()
{
}

}

class Automovil : Vehiculo
{ private int cp;

public int CantidadDePuertas
{ get { return cp; }
set { cp = value; }

}
public void Acelerar(int cuanto)
{
}

}

class PalaMecanica : Vehiculo
{

private int pml;
public int PesoMaximoDeLevante
{

get { return pml; }
set { pml = value; }

}
public void MoverPala(string direccion)
{
}

}

11

11

Ejemplo de herencia

12

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

6

Programación Orientada a Objetos en C# .NET

Ejemplo de herencia con varios
niveles

Tipos de herencia

Herencia

Simple

Múltiple

13

14

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

7

Programación Orientada a Objetos en C# .NET

Herencia

(Propiedades:
Interruptor,
CableElectrico

Métodos:

Encender, Apagar)

Aparato_Electrodomestico

Herendan características de
Aparato_Electrodomestico

e incorporan las suyas propias.

Lavadora

• Propiedades:

(Interruptor, CableElectrico,
PerillaDeCiclosDeLavado,

CapacidadDeCarga)

• Métodos:

(Encender, Apagar,

LlenarConAgua, TirarAgua)

Televisión

• Propiedades:

(Interruptor, CableElectrico,

BotonDeCanales,
BotonDeVolumen)

• Métodos:

(Encender, Apagar,
CambiarVolumen,

CambiarCanal)

15

Herencia múltiple

En C# .NET no se puede implementar

herencia múltiple

16

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

8

Programación Orientada a Objetos en C# .NET

Herencia en C#

En C# solo se permite Herencia simple.

Ejemplo de Herencia en C#

Indica que B “Hereda de” A

class A
{
}
class B : A
{
}

Todos los objetos heredan de System.Object

17

Otro ejemplo de herencia

class Empleado:Persona
{
….
}

class Administrador:Empleado
{
….
}

class Persona
{
….
}

class Estudiante:Persona
{
….
}

class Profesor:Empleado
{
….
}

18

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

9

Programación Orientada a Objetos en C# .NET

Uso de la Herencia
Beneficios:

Permite escribir menos código.
Mejora la reusabilidad de los componentes.
Facilita el mantenimiento del sistema completo.

Útil para un buen diseño del programa.

Un diseño pobre sin herencia implementaría
de manera

involucradas

clases

las
independiente.

19

20

Ejercicio

Una escuela desea modelar los datos y las actividades

de sus profesores y de sus estudiantes.

P R O F E S O R

Datos

Nombre (cadena)

Sueldo (numérico real)

Actividades

Asistir a la escuela

Enseñar

E S T U D I A N T E

Datos

Nombre (cadena)

Calificación (numérico

entero)

Actividades

Asistir a la escuela

Estudiar

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

10

Programación Orientada a Objetos en C# .NET

Mal diseño (no recomendable)

Diseño con herencia
Prog. 5.1.- HerenciaConsola

21

22

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

11

Programación Orientada a Objetos en C# .NET

Diseño con herencia
El Prog. 5.2.- HerenciaFormas utiliza el mismo diseño

de herencia del proyecto de consola

23

Salida del Prog. 5.2.- HerenciaFormas

24

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

12

Programación Orientada a Objetos en C# .NET

La herencia como estrategia de
clasificación

Una clase base hereda todos sus componentes no
privados y la clase derivada no puede elegir qué

elementos recibir

25

Invocando un método de la clase
base

Una subclase puede llamar los métodos de
su superclase con la palabra reservada
“base”.

Se usa la palabra reservada “base” para invocar un

método de una clase base desde una clase derivada, por
lo tanto esta palabra NO puede usarse como el nombre

de una variable

26

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

13

Programación Orientada a Objetos en C# .NET

Ejercicio para invocar un método de
una clase base desde una clase
derivada

Se desea determinar si un cliente es mayor de edad
tomando como referencia su fecha de nacimiento. Para
ello, se diseña un modelo orientado a objetos de una
clase base Persona que define los datos nombre y la
fecha de nacimiento de un individuo (con sus
respectivas propiedades) y un método para determinar
su edad (CalcularEdad()), que son heredados a una
clase derivada identificada como Cliente.

Prog. 5.3.-
InvocandoMetodoClaseBase

27

28

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

14

Programación Orientada a Objetos en C# .NET

Prog. 5.3.-
InvocandoMetodoClaseBase (cont.)

29

Prog. 5.3.-
InvocandoMetodoClaseBase (cont.)

30

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

15

Programación Orientada a Objetos en C# .NET

Codificación de la clase base

class Persona

{

// Atributos privados
private string _strNombre;
private DateTime _dtmFechaNacimiento;

// Propiedades públicas
public string Nombre
{

get { return _strNombre; }
set { _strNombre = value; }

}

public DateTime FechaNacimiento
{

get { return _dtmFechaNacimiento; }
set { _dtmFechaNacimiento = value; }

}

// Método público para calcular la edad
public int CalcularEdad()
{

int intEdad;
TimeSpan intervalo;
intervalo = DateTime.Now - this.FechaNacimiento;
intEdad = (int)(intervalo.Days / 365.25);
return (intEdad);

}

}

Codificación de la clase derivada

// La clase Cliente hereda de la clase Persona

class Cliente:Persona // Un cliente "es una" persona
{

// Método público para determinar si es mayor de edad
public bool EsMayorEdad()
{

// Variable local
int intEdad;

// Invoca el método CalcularEdad() de la clase base
intEdad = base.CalcularEdad();

if (intEdad >= 18)
return (true);

else

return (false);

}

}

31

32

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

16

Programación Orientada a Objetos en C# .NET

Secuencia de ejecución de los
constructores y destructores en la
herencia

33

Invocando los constructores de la
clase base
También se puede invocar un constructor de la
clase base desde el constructor de la clase derivada.

Basta con definir el constructor de la clase derivada
definición

final

de

su

colocar

y
:base(parámetros).

al

Se puede invocar el constructor default
so
  • Links de descarga
http://lwp-l.com/pdf15259

Comentarios de: 05a.- Herencia - Programación Orientada a Objetos en C# (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad