OBJETIVOS
• Consolidar los conceptos de la Herencia y
la Composición en las clases.
• Diseñar una jerarquía básica de clases
base, derivadas y compuestas.
Forma general de Declaración de una clase:
• Encabezado
• Cuerpo de la clase
Encabezado:
[modificadores] class identificador [:base]
CLASES
Los Campos de una clase pueden ser de cualquier tipo de dato definido.
Un tipo de dato puede ser primitivo, o
CLASES
Cuando se define una clase, también se define un tipo de dato.
Un tipo de dato puede ser definido por el
programador, como por ejemplo: Punto, Linea, Circulo, Rectangulo, Carro,
Diseño de la clase base llamada “Punto”:
Sea la clase base “Punto” declarada para representar un punto en un plano Cartesiano conformada por:
• Dos valores correspondientes a las coordenadas x e y. • El método constructor con varias formas.
• Métodos para mover el punto en las 4 direcciones: Arriba, abajo, izquierda y derecha.
• Propiedades para manejar sus campos x e y.
Diseño de la clase base llamada “Punto”:
public class Punto
{ // declaración de campos de la clase
int x; // declara campo x
int y; // declara campo y
LA COMPOSICIÓN EN LAS CLASES
Declaración de campos de
Diseño de la clase base llamada “Punto”:
// declaración de métodos de la clase //
// CONSTRUCTOR SIN PARÁMETROS //
public Punto ( ) {
x = 320; // se asigna 320 a la coordenada en x
y = 240; // se asigna 240 a la coordenada en y
}
LA COMPOSICIÓN EN LAS CLASES
Constructor sin
Diseño de la clase base llamada “Punto”:
//
// CONSTRUCTOR CON UN PARÁMETRO //
public Punto (int xInicial) {
x = xInicial; // x toma valor del parámetro
y = 240; // asigna 240 a la coordenada en y
}
LA COMPOSICIÓN EN LAS CLASES
Constructor con un
parámetro.
Diseño de la clase base llamada “Punto”:
//
// CONSTRUCTOR CON DOS PARÁMETROS //
public Punto (int xInicial, int yInicial) {
x = xInicial; // x toma valor de un parámetro
y = yInicial; // y toma valor del otro parámetro
}
LA COMPOSICIÓN EN LAS CLASES
Constructor con 2
Diseño de la clase base llamada “Punto”:
//
// Declaración de métodos para mover un objeto de Punto //
public virtual void MoverDerecha ( )
{x = x + 1; } // mueve el punto una unidad a la derecha
public virtual void MoverDerecha (int nroUnidades )
{x = x + nroUnidades ; } // mueve el punto a la derecha
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Punto”:
//
// Declaración de métodos para mover un objeto de Punto //
public virtual void MoverIzquierda ( )
{x = x - 1; } // mueve el punto una unidad a la izquierda
public virtual void MoverIzquierda (int nroUnidades )
{x = x - nroUnidades ; } // mueve el punto a la izquierda
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Punto”:
//
// Declaración de métodos para mover un objeto de Punto //
public virtual void MoverArriba ( )
{y = y - 1; } // mueve el punto una unidad hacia arriba
public virtual void MoverArriba (int nroUnidades )
{y = y - nroUnidades ; } // mueve el punto hacia arriba
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Punto”:
//
// Declaración de métodos para mover un objeto de Punto //
public virtual void MoverAbajo ( )
{y = y + 1; } // mueve el punto una unidad hacia abajo
public virtual void MoverAbajo (int nroUnidades )
{y = y + nroUnidades ; } // mueve el punto hacia abajo
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Punto”:
//
// Declaración de Propiedades de la clase Punto //
public int X {
get
{
return (x); }
set
{
x = value; }
LA COMPOSICIÓN EN LAS CLASES
Propiedad
Diseño de la clase base llamada “Punto”:
//
// Declaración de Propiedades de la clase Punto //
public int Y { get { return (y); } set {
y = value; }
}
} // fin de la declaración de la clase "Punto"
LA COMPOSICIÓN EN LAS CLASES
Propiedad
Diseño de la clase derivada llamada “Círculo”:
Sea la clase derivada “Círculo” declarada para representar un Círculo en un plano Cartesiano conformada por:
• Dos valores correspondientes a las coordenadas x e y. • Un valor para el radio del círculo representado.
• Un campo para representar el color del círculo.
• Propiedades para manejar sus campos radio y color.
Diseño de la clase base llamada “Círculo”:
public class Círculo : Punto
{ // declaración de campos de la clase
int radio; // declara campo radio
Color colorFigura;// declara campo para el
//color de la figura
LA COMPOSICIÓN EN LAS CLASES
Declaración de campos de
Diseño de la clase base llamada “Círculo”:
// declaración de métodos de la clase //
// CONSTRUCTOR SIN PARÁMETROS //
public Círculo ( ) {
radio = 50; // se asigna 50 al radio
colorFigura = Color.Blue; // se asigna azul al // color del círculo
}
LA COMPOSICIÓN EN LAS CLASES
Constructor sin
Diseño de la clase base llamada “Círculo”:
//
// CONSTRUCTOR CON UN PARÁMETRO //
public Círculo (int radioInicial) {
radio = radioInicial;
colorFigura = Color.Blue;
}
LA COMPOSICIÓN EN LAS CLASES
Constructor con un
parámetro.
El otro campo, “colorFigura ”,
Diseño de la clase base llamada “Círculo”:
//
// CONSTRUCTOR CON DOS PARÁMETROS //
public Círculo (int radioInicial, Color colorInicial) {
radio = radioInicial;
colorFigura = colorInicial; }
LA COMPOSICIÓN EN LAS CLASES
Constructor con 2
Diseño de la clase base llamada “Círculo”:
//
// CONSTRUCTOR CON 2 PARAMETROS //
public Circulo (int r, Punto p) {
radio = r; X = p.X; Y = p.Y; }
Diseño de la clase base llamada “Círculo”:
//
// Declaración de métodos para mover un objeto de Círculo //
public override void MoverDerecha ( ) {base.X = base.X + 1; }
public override virtual void MoverDerecha (int nroUnidades ) {base.X = base.X + nroUnidades ; }
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Círculo”:
//
// Declaración de métodos para mover un objeto de Círculo //
public override void MoverIzquierda ( ) {base.X = base.X - 1; }
public override virtual void MoverIzquierda (int nroUnidades ) {base.X = base.X - nroUnidades ; }
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Círculo”:
//
// Declaración de métodos para mover un objeto de Círculo //
public override virtual void MoverArriba ( ) {base.Y = base.Y - 1; }
public override virtual void MoverArriba (int nroUnidades ) {base.Y = base.Y - nroUnidades ; }
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Círculo”:
//
// Declaración de métodos para mover un objeto de Círculo //
public override virtual void MoverAbajo ( ) {base.Y = base.Y + 1; }
public override virtual void MoverAbajo (int nroUnidades ) {base.Y = base.Y + nroUnidades ; }
LA COMPOSICIÓN EN LAS CLASES
Métodos para mover un punto en el
Diseño de la clase base llamada “Círculo”:
//
// Expandir el Circulo, incrementa radio 1 unidad //
public void Expandir ( ) {
Radio ++; }
Diseño de la clase base llamada “Círculo”:
//
// Expandir el Circulo, incrementa radio n unids //
public void Expandir (int n) {
Radio += n; }
Diseño de la clase base llamada “Círculo”:
//
// Contraer el Circulo, reduce el radio 1 unidad //
public void Contraer ( ) {
Radio --; }
Diseño de la clase base llamada “Círculo”:
//
// Contraer el Circulo, reduce el radio n unidades //
public void Contraer (int n) {
Radio -= n; }
Diseño de la clase base llamada “Círculo”:
// Método de la clase círculo, para Pintar un objeto
public void Pintar (Graphics pintor) {
int x1, y1, ancho, alto; x1 = X - Radio;
y1 = Y - Radio;
ancho = Radio + Radio; alto = ancho;
SolidBrush miPincel = new SolidBrush (colorFigura); pintor.FillEllipse (miPincel, x1, y1, ancho, alto);
APLICACIÓN EJEMPLO
Se crea un pincel con el color de la
Diseño de la clase base llamada “Círculo”:
// Método de la clase círculo, para Borrar un objeto
public void Borrar (Graphics pintor) {
Color colorPrevio = colorFigura;
colorFigura = Form.ActiveForm.BackColor; Pintar (pintor);
colorFigura = colorPrevio; }
APLICACIÓN EJEMPLO
Se usa el color del fondo del
Diseño de la clase base llamada “Círculo”:
//
// Declaración de Propiedades de la clase Círculo //
public int Radio {
get
{
return (radio); }
set
{
radio = value; }
LA COMPOSICIÓN EN LAS CLASES
Propiedad para acceder al
Diseño de la clase base llamada “Círculo”:
//
// Declaración de Propiedades de la clase Círculo //
public Color ColorFigura { get { return (colorFigura); } set {
colorFigura = value; }
}
} // fin de la declaración de la clase “Círculo"
LA COMPOSICIÓN EN LAS CLASES
Propiedad para acceder al campo
Ejemplo del uso de la Composición en una clase:
La clase compuesta “Linea” se compone de dos
campos de la clase “Punto”, y agrega:
• Método constructor con varias formas.
• Una Propiedad para contener el valor de la
longitud de la línea, calculada como la distancia
entre los dos puntos, o extremos de la línea.
Ejemplo del uso de la Composición en una clase:
Cada uno de los campos de tipo “Punto” de la clase compuesta “Linea” puede usar los campos, métodos y propiedades de la clase “Punto”.
Ejemplo del uso de la Composición en una clase:
public class Linea {
// Declaracion de Linea, compuesta de dos Puntos //
// Declaracion de campos de la clase Linea //
Punto p1; Punto p2;
Color colorFigura; // declara campo para el
LA COMPOSICIÓN EN LAS CLASES
Los campos de la clase son de tipo de dato de
Ejemplo del uso de la Composición en una clase:
// Declaracion de Metodos de la clase Linea //
public Linea ( ) {
p1 = new Punto ( ); p2 = new Punto ( ); }
public Linea (Punto izq, Punto der) {
// CONSTRUCTOR CON 2 PARAMETROS de la clase Punto
p1 = new Punto (izq.X, izq.Y); p2 = new Punto (der.X, der.Y); }
LA COMPOSICIÓN EN LAS CLASES
Ejemplo del uso de la Composición en una clase:
//
// Declarcion de Propiedades de la clase Linea //
public double Longitud {
get
{
double distX, distY, distX2, distY2, distancia; distX = p2.X - p1.X;
distY = p2.Y - p1.Y;
distX2 = Math.Pow(distX, 2.0); distY2 = Math.Pow(distY, 2.0);
distancia = Math.Sqrt (distX2 + distY2);
return (distancia); }
LA COMPOSICIÓN EN LAS CLASES Propiedad de la clase Linea. Sólo
Ejemplo del uso de la Composición en una clase:
public void Pintar (Graphics pintor) {
int x1, y1, x2, y2; x1 = p1.X;
x2 = p2.X; y1 = p1.Y; y2 = p2.Y;
SolidBrush miPincel = new SolidBrush (colorFigura); pintor.FillEllipse (miPincel, x1, y1, x2, y2);
}
APLICACIÓN EJEMPLO
Se crea un pincel con el color de la
Ejemplo del uso de la Composición en una clase:
public void Borrar (Graphics pintor) {
Color colorPrevio = colorFigura;
colorFigura = Form.ActiveForm.BackColor; Pintar (pintor);
colorFigura = colorPrevio; }
} // fin de la declaración de la clase “Línea"
APLICACIÓN EJEMPLO
Otro ejemplo del uso de la Composición en una clase (Rectángulo):
public class Rectangulo
{
// clase Rectangulo, compuesta de dos Puntos //
// Declaracion de campos de la clase Rectangulo //
Punto verticeSupIzq; Punto verticeInfDer ;
LA COMPOSICIÓN EN LAS CLASES La clase
“Rectangulo” se compone de 2 objetos de la clase
Otro ejemplo del uso de la Composición en una clase (Rectángulo):
public classRectangulo {
// …
Punto verticeSupIzq; Punto verticeInfDer;
//
// Declaracion de Metodos de la clase Rectangulo //
public Rectangulo ( ) {
verticeSupIzq = new Punto (); verticeInfDer = new Punto (); }
public Rectangulo (Punto izq, Punto der) {
verticeSupIzq = new Punto (izq.X, izq.Y); verticeInfDer = new Punto (der.X, der.Y); }
LA COMPOSICIÓN EN LAS CLASES La clase
“Rectangulo” se compone de 2 objetos de la clase
Punto.
El constructor usa las
Otro ejemplo del uso de la Composición en una clase: (Rectángulo):
//
// Declarcion de Propiedades de la clase Rectangulo //
public double Area {
get
{
double distX, distY, area;
distX = Math.Abs (verticeInfDer.X - verticeSupIzq.X); distY = Math.Abs (verticeInfDer.Y - verticeSupIzq.Y); area = distX * distY;
return (area); }
}
LA COMPOSICIÓN EN LAS CLASES La clase “Rectangulo”
declara una Propiedad para obtener el valor
A la clase “Rectangulo” se le ha adicionado un método para dibujar un objeto, así:
public void Pintar (Graphics pintor) {
int x1, y1, ancho, alto; x1 = verticeSupIzq .X; y1 = verticeSupIzq .Y;
ancho = verticeInfDer.X - verticeSupIzq .X; alto = verticeInfDer.Y - verticeSupIzq .Y;
SolidBrush miPincel = new SolidBrush (colorFigura); pintor.FillRectangle (miPincel, x1, y1, ancho, alto); }
A la clase “Rectangulo” se le ha adicionado otro método para borrar de la pantalla un objeto, así:
public void Borrar (Graphics pintor) {
Color colorPrevio = colorFigura;
colorFigura = Form.ActiveForm.BackColor; Pintar (pintor);
colorFigura = colorPrevio; }
APLICACIÓN EJEMPLO
Se usa el color del fondo del
Otro ejemplo del uso de la Composición en una clase (Carro):
public class Carro
{
Circulo ruedaIzq = new Circulo ( );
Circulo ruedaDer = new Circulo ( );
Rectangulo carroceria = new Rectangulo ( );
LA COMPOSICIÓN EN LAS CLASES La clase Carro se
compone de 2 círculos y un
Otro ejemplo del uso de la Composición en una clase (Carro):
public Carro ( ) {
// crea dos puntos con las coordenadas de los // vertices superior izquierdo e inferior derecho // de la ubicacion de la carroceria
// Los puntos son arbitrarios: (100,200) y (250,300) //
Punto vsi = new Punto (100, 200); Punto vid = new Punto (250, 300);
// asigna los puntos de referencia a la carroceria
carroceria.VerticeSuperior = vsi; carroceria.VerticeInferior = vid;
// asigna las coordenadas a la rueda izquierda
ruedaIzq.X = vsi.X; ruedaIzq.Y = vid.Y;
// asigna las coordenadas a la rueda derecha
ruedaDer.X = vid.X;
LA COMPOSICIÓN EN LAS CLASES
El método constructor de la clase “Carro” define las relaciones entre los campos de la
1. Desarrollar una aplicación de ventanas en la cual se especifiquen las clases “Punto” y
“Circulo”. Luego crear y dibujar un circulo.
2. Desarrollar una aplicación de ventanas en la cual se especifiquen las clases “Punto” y
“Línea”. Luego crear y dibujar una línea.
3. Desarrollar una aplicación de ventanas en la cual se especifiquen las clases “Punto” y
“Rectángulo”. Luego crear y dibujar un rectángulo.
4. Desarrollar una aplicación de ventanas en la cual se especifiquen las clases “Punto”, “Circulo” y “Rectángulo”. Luego crear y dibujar un carro.