Professional Documents
Culture Documents
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Sobrecarga
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Esto también se aplica a los constructores (de hecho, es la aplicación más habitual
de la sobrecarga).
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Sobreescritura
Por ejemplo, en la relación de herencia del ejemplo de las figuras aunque la clase
base “Figura” tiene los métodos “calcularArea” y “calcularPerimetro”, las subclases
“Circulo”, “Cuadrado”, “Triangulo” y “Rectangulo” redefinen estos métodos ya que el
calculo del área y el perímetro de cada uno de ellos es diferente.
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
class Figura {
public Figura() {
this.area=0;
this.perimetro=0;
}
public double getArea() {
return area;
}
public double getPerimetro() {
return perimetro;
}
public void calcularArea(){}
public void calcularPerimetro(){}
}
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
using System;
public Circulo() {
}
public double getRadio() {
return radio;
}
public void setRadio(double radio) {
this.radio = radio;
}
public void calcularArea() {
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Enlace dinámico
Esto permite invocar operaciones en objetos obviando el tipo actual de éstos hasta el
momento de ejecutar el código. O sea, nos permite definir elementos como un tipo e
instanciarlos como un tipo heredado. Pero ¿qué utilidad tiene obviar el tipo de un
objeto para luego tomar esta decisión?.
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Es decir, si requiero un entero lo declaro como entero, para que declarar un elemento
como un tipo y luego usarlo como otro?.
Se debe tener por lo menos una relación de herencia que permita determinar un tipo
base para la declaración, sea cual sea el subtipo que se instancie.
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
using System;
using System.Text;
class Mamifero
{
public void mover() {
Console.WriteLine("Ahora es un mamifero el que se mueve");
}
}
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
using System;
using System.Text;
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
orquesta[i]=generarInstrumento( FixRandom.Next());
}
for(int i=0;i<10;i++){
afinarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i],notas[i%7]);
}
}
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
12.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Clases Abstractas
Las clases abstractas son aquellas que se utilizan en la herencia y sólo las
utilizaremos para que definan el interfaz (qué hacen) y/o la implementación (cómo
lo hacen) de las clases heredadas
No se podrá crear ocurrencias de ellas. Se utilizan para que las características de esta
clase estén disponibles para sus clases heredadas.
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
using System;
using System.Collections.Generic;
using System.Text;
}
using System;
using System.Collections.Generic;
using System.Text;
}
} Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
using System;
using System.Collections.Generic;
using System.Text;
}
}
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
La palabra clave abstract permite crear clases y miembros de clase únicamente con
propósitos de herencia: para definir características de clases derivadas, no
abstractas. La palabra clave sealed permite impedir la herencia de una clase o de
ciertos miembros de clase marcados previamente como virtuales.
Las clases se pueden declarar como abstractas. Esto se logra colocando la palabra
clave abstract antes de la palabra clave class en la definición de clase. Por ejemplo:
public abstract class A {
// Class members here.
}
No se pueden crear instancias de una clase abstracta. El propósito de una clase
abstracta es proporcionar una definición común de una clase base que múltiples
clases derivadas pueden compartir. Por ejemplo, una biblioteca de clase puede
definir una clase abstracta que se utiliza como parámetro para muchas de sus
funciones y solicitar a los programadores que utilizan esa biblioteca que
proporcionen su propia implementación de la clase mediante la creación de una
clase derivada.
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Las clases abstractas también pueden definir métodos abstractos. Esto se consigue
agregando la palabra clave abstract antes del tipo de valor que devuelve el método.
Por ejemplo:
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
public class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
}
public class F : E
{
public override void DoWork(int i)
{
// New implementation.
}
}
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Las clases pueden declararse como selladas. Esto se logra colocando la palabra clave
sealed antes de la palabra clave class en la definición de clase. Por ejemplo:
Una clase sellada no se puede utilizar como clase base. Por esta razón, tampoco
puede ser una clase abstracta. Las clases selladas se utilizan principalmente para
impedir la derivación. Puesto que nunca se pueden utilizar como una clase base,
algunas optimizaciones en tiempo de ejecución pueden hacer que sea un poco más
rápido llamar a miembros de clase sellada.
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
public class D : C
{
public sealed override void DoWork() { }
}
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Interfaces
interface IComparable
{
int CompareTo(object obj);
}
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Al igual que las clases se pueden heredar de una clase base o estructura, las
clases y estructuras se pueden heredar de interfaces, con dos excepciones:
• Una clase o estructura puede heredar más de una interfaz.
• Cuando una clase o la estructura hereda una interfaz, hereda sólo los
nombres de método y las firmas, ya que la propia interfaz no contiene
ninguna implementación. Por ejemplo:
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Las interfaces pueden heredar otras interfaces. Es posible que una clase herede una
interfaz varias veces, a través de las clases base o interfaces que hereda. En ese caso,
la clase sólo puede implementar la interfaz una vez, siempre que ésta se declare
como parte de la nueva clase. Si la interfaz heredada no está declarada como parte
de la nueva clase, la clase base que la declaró proporcionará su implementación. Es
posible que una clase base implemente miembros de interfaz a través de miembros
virtuales. En ese caso, la clase que hereda la interfaz puede cambiar el
comportamiento de la interfaz reemplazando los miembros virtuales.
Programación de aplicaciones
13.05.11
PROGRAMACIÓN DE APLICACIONES
Conceptos avanzados de la programación orientada a objetos
Programación de aplicaciones
13.05.11
Programación de aplicaciones
13.05.11
Si una clase implementa dos interfaces que contienen un miembro con la misma
firma, la implementación de ese miembro en la clase hará que ambas interfaces usen
ese miembro como implementación. Por ejemplo:
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
class SampleClass : IControl, ISurface
{
public void Paint()
{
}
}
Programación de aplicaciones
13.05.11
Sin embargo, sI los miembros de dos interfaces no realizan la misma función, esto puede llevar a
una implementación incorrecta de una o ambas interfaces. Es posible implementar un miembro
de interfaz explícitamente, creando un miembro de clase que sólo se llama a través de la interfaz
y es específico de ésta. Esto se puede llevar a cabo asignando al miembro de clase el nombre de
la interfaz y un punto. Por ejemplo:
Programación de aplicaciones
14.05.11
IControl c = (IControl)obj;
c.Paint();
ISurface s = (ISurface)obj;
s.Paint();
Programación de aplicaciones
14.05.11
La implementación explícita también se usa para resolver casos donde cada una de
las dos interfaces declara miembros diferentes del mismo nombre como propiedad
y método: interface ILeft
{
int P { get; }
}
interface IRight
{
int P();
}
Programación de aplicaciones
14.05.11
Para implementar ambas interfaces, una clase tiene que utilizar implementación
explícita, ya sea para la propiedad P, el método P o ambos, con el fin de evitar un error
del compilador. Por ejemplo:
Programación de aplicaciones