You are on page 1of 4

Contabilidad (Programación de Computadoras II) UNIDAD 3 POLIMORFISMO 3.

1 Polimorfismo

TIC

La palabra polimorfismo significa “múltiples formas”, por lo tanto, podríamos definir en el ámbito de programación que el polimorfismo es “la capacidad de poder enviar un mismo mensaje a objetos totalmente diferentes, y que cada uno de estos objetos responda de manera diferente”. Pongamos por ejemplo las clases hombre, vaca y perro, si a todos les damos la orden Come, cada uno de ellos sabe cómo hacerlo y realizará este comportamiento a su modo. Veamos otro ejemplo. Tomemos las clases barco, avión y coche, todas ellas derivadas de la clase padre vehículo; si les enviamos el mensaje Desplázate, cada una de ellas sabe cómo hacerlo. Realmente, y para ser exactos, los mensaje no se envían a las clases, sino a todos o algunos de los objetos instanciados de las clases. En programación tradicional, debemos crear un nombre distinto para la acción de pintarse, si se trata de un texto o de un marco; en OOP el mismo nombre nos sirve para todas las clases creadas si así lo queremos, lo que suele ser habitual. El mismo nombre suele usarse para realizar acciones similares en clases diferentes. Si enviamos el mensaje Imprímete a objetos de distintas clases, cada uno se imprimirá como le corresponda, ya que todos saben cómo hacerlo. El polimorfismo nos facilita el trabajo, ya que gracias a él, el número de nombres de métodos que tenemos que recordar disminuye considerablemente. La mayor ventaja la obtendremos en métodos con igual nombre aplicados a las clases que se encuentran próximas a la raíz del árbol de clases, ya que estos métodos afectarán a todas las clases que de ellas se deriven. A continuación se muestra un ejemplo en el que se define una clase polígono; se crean dos clases derivadas cuadrilatero y triangulo. Para cada clase derivada se define un método area() con el cual se aprecia el polimorfismo. //clase base class poligon { private string nombre; private int numeroDeLados; public poligon(string name, int nlados) { nombre = name; numeroDeLados = nlados; } public virtual double area() {

return a. int nlados. } public string Nombre { get { return nombre. } } } TIC La propuesta de la interfase es la siguiente: . bas = b. nlados) { lado = l.Contabilidad (Programación de Computadoras II) return 0. double h. } public override double area() { double a. public triangulo(string name. a = lado * lado. int nlados. return a. } } } //clase derivada class triangulo: poligon { private double alt. a = (bas * alt) / 2. public cuadrilatero(string name. double b) : base(name. } public override double area() { double a. double l) : base(name. } } //clase derivada class cuadrilatero: poligon { private double lado. bas. nlados) { alt = h.

EventArgs e) { string nam. al.ToDouble(textBox2. } private void button1_Click(object sender. if (n == 3) { nam = textBox5.Contabilidad (Programación de Computadoras II) TIC Código del formulario: public partial class Form1 : Form { int n. lad. double bas. public Form1() { InitializeComponent().Text).Text. . bas = Convert.

EventArgs e) { panel1. comboBox1.ToDouble(textBox3. if (n == 4) panel2. al.Add(3). EventArgs e) { n =Convert. } } TIC .Enabled = true.Nombre. label1.Enabled = true. label2.Text = "Area: " + p.Enabled = false.Text). label1.Add(4). } private void comboBox1_SelectedIndexChanged(object sender.Nombre. lad).area().ToString()). comboBox1. } if (n == 4) { nam = textBox6.Items.SelectedItem.Enabled = false.Text. else panel2.Text = "Area: " + p.ToInt16(comboBox1. else panel1. } } private void Form1_Load(object sender. panel2. bas). poligon p = new triangulo(nam.Contabilidad (Programación de Computadoras II) al = Convert. panel3. label2.Enabled = false.Enabled = true. lad = Convert. panel3.Text = p. n.area(). poligon p = new cuadrilatero(nam.Items. n. if (n==3) panel1.Enabled = false.Text).ToDouble(textBox4.Enabled = false.Text = p.