Anda di halaman 1dari 20

Programacin net II

"Unidad 2. Herencia y polimorfismo en el lenguaje de


programacin
C Sharp"

Actividad 1. Herencia

Jorge Bruno Cano Meneses

5to. Semestre

Ingeniera en Desarrollo de Software

Docente: L.I. Rosa Teresa Urvicio Ramrez

Pachuca de Soto, Hidalgo; 30 de abril de 2015.

NDICE
Instrucciones....................................................................................................................... 3
Cuadro comparativo de tipo de clases................................................................................4
Ejemplificacin de herencia mltiple, simple y simple mltiple............................................6
Ejemplo en C# clase........................................................................................................... 9
Ejemplo en C# clase interface...........................................................................................10
Ejemplo en C# clase abstract............................................................................................11
Ejemplo en C# clase sealed..............................................................................................12
Conclusiones..................................................................................................................... 14
Fuentes de Consulta.........................................................................................................15

Instrucciones
1. Elabora un cuadro comparativo de las caractersticas de las siguientes clases:
normales, interfaces, abstractas y selladas.
2. Explica en tu cuadro la definicin, uso, alcance y caractersticas de cada uno de
los tipos clase, que permiten tener una jerarqua de acuerdo a la realidad de los
objetos en el mundo. Agrega ejemplos de cada uno, as como tus propias
conclusiones sobre semejanzas y diferencias entre ellos.
3. Identifica el uso en la vida real de herencia simple, mltiple y simple-mltiple.

Cuadro comparativo de tipo de clases

de dar una implementacin de todos los miembros que hereda de esta, y no como ocurre con las clases abstractas donde es posible no darla si se define como abstracta tambin l

eriven de ms de una interfaz.

z.

Ejemplificacin de herencia mltiple, simple y simple mltiple

La herencia es un mecanismo mediante el cual se implementa una jerarqua de clases. Una clase antecesora (clase base) hereda atributos y
comportamientos a una clase sucesora (clase derivada), a la que se pueden agregar nuevos atributos y comportamientos. A su vez, la clase
derivada puede heredar sus atributos y comportamientos a otra nueva clase, de manera tal que se puede establecer una jerarqua similar a la
que se utiliza en la clasificacin taxonmica de las especies biolgicas.

En la herencia simple, una clase sucesora hereda de una sola clase antecesora directa (llamada clase base, en C#), como se muestra en la
siguiente Figura

Ejemplo de herencia simple

Las flechas en la Figura anterior representan la relacin "es un" o "es una" por lo que deben dirigirse desde la clase sucesora hacia la
antecesora.

La herencia es siempre transitiva: una clase puede heredar caractersticas de superclases que se encuentran muchos niveles ms arriba en la
jerarqua de herencia.

Ejemplo: Si la clase Perro es una subclase de la clase Mamfero, y la clase Mamfero es una subclase de la clase Animal, entonces el Perro
heredar atributos tanto de Mamfero como de Animal.

En C#, el operador que equivale a extends e implements en Java, define la herencia e implementacin de interfaces.

Como Java, C# no admite herencia mltiple, lo que significa que las clases no pueden heredar ms de una clase. Sin embargo, se pueden
utilizar interfaces para ese propsito, de la misma manera que en Java.

Las interfaces a travs de sus contratos pueden crear el efecto de herencia mltiple, por ejemplo:

Obsrvese cmo la clase Subclase hereda de la clase Superclase, tambin implementa las interfaces Interfaz1, e Interfaz2; por lo tanto,
podemos decir que hay una relacin de es-un en esta jerarqua de herencia. As:

Subclase es-un Interfaz1


Subclase es-un Interfaz2
Subclase es-un Superclase

La siguiente tabla muestra ejemplos de herencia de clases e implementacin de interfaces:

Ejemplo en C# clase

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ejem_Clase
{
class Persona //Declaracin de la clase.
{
string nombre; //Una variable que contendr el nombre.

public Persona(string nombre) //Constructor: como inicializar un objeto de clase Persona.


{
this.nombre = nombre; //this: una forma de acceder a este objeto.
}

public string Nombre //Propiedad: una forma de acceder al nombre de una persona.
{
get { return nombre; }
set { nombre = value; } //variable especial value
}

public static void Main()


{
Console.Title = "DPRN2_U2_A1_JOCM"; //Se le da un nombre a la ventana.

Console.SetCursorPosition(14, 1); //Se posiciona el cursor.


Console.WriteLine("Ejemplo clase \n"); //Se imprime mensaje.

Persona p = new Persona("Carlos");


Console.WriteLine("Nombre = {0}", p.Nombre);
p.Nombre = "Paco";
Console.WriteLine("Nombre = {0}", p.Nombre);
Console.ReadKey(); //Espera a que el usuario presione una tecla para continuar.
}
}

10

Ejemplo en C# clase interface

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ejem_Interface
{
internal class Program
{
public interface Imprimible //Se crea interface Imprimible.
{
void Imprimir();
}

public class Doumento : Imprimible //Se crea clase Documento y se implementa la interface Imprimible .
{
string contenido;

11

public Doumento(string frase)


{
contenido = frase;
}
public void Imprimir()
{
Console.WriteLine(contenido);
}
}

public static void Main(string[] args)


{
Console.Title = "DPRN2_U2_A1_JOCM"; //Se le da un nombre a la ventana.

Console.SetCursorPosition(14, 1); //Se posiciona el cursor.


Console.WriteLine("Ejemplo interface \n"); //Se imprime mensaje.

Doumento undocumento = new Doumento("Contenido 1"); //Se crea objeto.


undocumento.Imprimir();

12

Console.ReadKey(); //Espera a que el usuario presione una tecla para continuar.


}
}
}

Ejemplo en C# clase abstract

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ejem_Abstraccion
{
class Program
{
public abstract class Empleado //Se declara clase abstracta Empleado.

13

{
protected string nombre;

public Empleado(string nombre) //Se crea constructor.


{
this.nombre = nombre;
}

public abstract void Mostrar(); //se crea el mtodo abstract Mostrar.


}

public class Administrador: Empleado //Se crea una clase derivada denominada Administrador.
{
public Administrador(string nombre) : base(nombre) {} //Se crea constructor.

public override void Mostrar() //Reemplaza el mtodo abstracto Mostrar.


{
System.Console.WriteLine("Nombre: " + nombre);
}
}

14

class TestEmployeeAndManager
{
public static void Main(string[] args)
{
Console.Title = "DPRN2_U2_A1_JOCM"; //Se le da un nombre a la ventana.

Console.SetCursorPosition(14, 1); //Se posiciona el cursor.


Console.WriteLine("Ejemplo abstract \n"); //Se imprime mensaje.

Administrador a = new Administrador("Daniel Santos Gmez"); //Se crea un objeto de nombre a.


a.Mostrar();

Empleado e = new Administrador("Arturo Corona Luna"); //Se crea un segundo objeto de nombre e.
e.Mostrar(); //Invoca al mtodo Mostrar de la clase Administrador e imprime el nombre del empleado en pantalla..

Console.ReadKey(); //Espera a que el usuario presione una tecla para continuar.


}
}
}

15

Ejemplo en C# clase sealed

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ejem_sealed
{
sealed class Punto //Se crea la clase Punto y se define como clase sellada.
{
private int a; //Atributos.
private int b;

public Punto(int a, int b) //Se crea un constructor.


{
this.a = a;
this.b = b;

16

public int A //Nombre de la propiedad con el mismo nombre pero en maysculas.

{
get { return this.a; } //Valor de retorno.
set { this.a = value; } //La propiedad A, mediante el modificador set, inicializa el atributo a con el valor que llega del objeto.
}

public int B //Nombre de la propiedad con el mismo nombre pero en maysculas.


{
get { return this.b; } //Valor de retorno.
set { this.b = value; } //La propiedad B, mediante el modificador set, inicializa el atributo b con el valor que llega del objeto.
}
} //Fin clase Punto

class SealedApp //Se crea la clase SealedApp


{
public static void Main(string[] args)
{

17

Console.Title = "DPRN2_U2_A1_JOCM"; //Se le da un nombre a la ventana.

Console.SetCursorPosition(14, 1); //Se posiciona el cursor.


Console.WriteLine("Ejemplo sealed \n"); //Se imprime mensaje.

Punto p = new Punto(6,16); //Se crea objeto.


Console.WriteLine("a = {0}, b = {1}", p.A, p.B); //Se imprime las propiedades a travs del objeto.
Console.ReadKey(); //Espera a que el usuario presione una tecla para continuar.
} //Fin mtodo Main.
} //Fin clase SealedApp.
} //Fin proyecto.

Observe que se utiliza el modificador de acceso private en los miembros de clase interna a y b. Si utilizamos el modificador protected se
generara un aviso del compilador, debido a que los miembros protegidos son visibles desde las clases derivadas, y, como ya sabemos, las
clases selladas no tienen ninguna clase derivada.

18

Conclusiones
La herencia no es ms que la facultad de un objeto de heredar caractersticas de otro; es
decir, utilizar mtodos, propiedades (campos) y variables de la clase padre en el la clase
hijo.
La herencia presenta la clara ventaja de la reutilizacin de cdigo, adems nos permite
establecer relaciones y escribir menos lneas de cdigo, debido a que no es necesario,
por ejemplo, volver a declarar e implementar mtodos
Una clase puede implementar ms de un interfaz, lo que hemos visto que no es posible
con herencia, y ser heredera al mismo tiempo de otra clase, con lo que se consigue
simular herencia mltiple.

19

Fuentes de Consulta:
Groussard, T. (2011). C# 4: Los fundamentos del lenguaje - Desarrollar con Visual
Studio 2010. Barcelona: ENI.
Microsoft. (2015). 10.1.1.1 Clases abstractas. Recuperado el 22 de abril de 2015
de
https://msdn.microsoft.com/es-es/library/aa645615(v=vs.71).aspx
Microsoft. (2015). Clases (Gua de programacin de C#). Recuperado el 22 de
abril de 2015 de
https://msdn.microsoft.com/es-es/library/x9afc042.aspx
Microsoft. (2015). Clases y miembros de clase abstractos y sellados (Gua de
programacin de C#). Recuperado el 24 de abril de 2015 de
https://msdn.microsoft.com/es-es/library/ms173150.aspx
Microsoft. (2015). class (Referencia de C#). Recuperado el 25 de abril de 2015 de
https://msdn.microsoft.com/es-es/library/0b0thckt.aspx
Microsoft. (2015). Herencia y clases derivadas (C# y Java). Recuperado el 25 de
abril de 2015 de
https://msdn.microsoft.com/es-mx/library/ms228387(v=vs.90).aspx
Microsoft. (2015). Modificadores de acceso (Gua de programacin de C#).
Recuperado el 26 de abril de 2015 de
https://msdn.microsoft.com/es-es/library/ms173121.aspx
Microsoft. (2015). sealed (Referencia de C#). Recuperado el 26 de abril de 2015
de
https://msdn.microsoft.com/es-es/library/88c54tsw.aspx

20

Anda mungkin juga menyukai