13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 435 — #473<br />

✐<br />

15: Polimorfismo y Funciones virtuales<br />

El Polimorfismo (implem<strong>en</strong>tado <strong>en</strong> <strong>C++</strong> con funciones virtuales)<br />

es la tercera característica es<strong>en</strong>cial de un l<strong>en</strong>guaje ori<strong>en</strong>tado a<br />

objetos, después de la abstracción de datos y la her<strong>en</strong>cia.<br />

De hecho, nos provee de otra dim<strong>en</strong>sión para la separación <strong>en</strong>tre interfaz y la<br />

implem<strong>en</strong>tación, desacoplando el qué del cómo. El Polimorfismo permite mejorar la<br />

organización del código y su legibilidad así como la creación de programas ext<strong>en</strong>sibles<br />

que pued<strong>en</strong> "crecer" no sólo durante el desarrollo del proyecto, si no también<br />

cuando se dese<strong>en</strong> nuevas características.<br />

La <strong>en</strong>capsulación crea nuevos tipos de datos combinando características y comportami<strong>en</strong>tos.<br />

El control de acceso separa la interfaz de la implem<strong>en</strong>tación haci<strong>en</strong>do<br />

privados (private) los detalles. Estos tipos de organización son fácilm<strong>en</strong>te <strong>en</strong>t<strong>en</strong>dibles<br />

por cualquiera que v<strong>en</strong>ga de la programación procedim<strong>en</strong>tal. Pero las funciones<br />

virtuales tratan de desunir <strong>en</strong> términos de tipos. En el Capítulo 14, usted vió como la<br />

her<strong>en</strong>cia permitía tratar a un objeto como su propio tipo o como a su tipo base. Esta<br />

habilidad es básica debido a que permite a difer<strong>en</strong>tes tipos (derivados del mismo<br />

tipo base) ser tratados como si fueran un único tipo, y un único trozo de código es<br />

capaz de trabajar indistintam<strong>en</strong>te con todos. Las funciones virtuales permit<strong>en</strong> a un<br />

tipo expresar sus difer<strong>en</strong>cias con respecto a otro similar si ambos han sido derivados<br />

del mismo tipo base. Esta distinción se consigue modificando las conductas de las<br />

funciones a las que se puede llamar a través de la clase base.<br />

En este capítulo apr<strong>en</strong>derá sobre las funciones virtuales, empezando con ejemplos<br />

simples que le mostrará lo "desvirtual" del programa.<br />

15.1. Evolución de los programadores de <strong>C++</strong><br />

Los programadores de C parec<strong>en</strong> conseguir pasarse a <strong>C++</strong> <strong>en</strong> tres pasos. Al principio,<br />

como un "C mejorado", debido a que <strong>C++</strong> le fuerza a declarar todas las funciones<br />

antes de usarlas y a que es mucho más s<strong>en</strong>sible a la forma de usar las variables.<br />

A m<strong>en</strong>udo se pued<strong>en</strong> <strong>en</strong>contrar errores <strong>en</strong> un programa C simplem<strong>en</strong>te recompilándolo<br />

con un compilador de <strong>C++</strong>.<br />

El segundo paso es la "programación basada <strong>en</strong> objetos", que significa que se pued<strong>en</strong><br />

ver fácilm<strong>en</strong>te los b<strong>en</strong>eficios de la organización del código al agrupar estructuras<br />

de datos junto con las funciones que las manejan, la pot<strong>en</strong>cia de los constructores y<br />

los destructores, y quizás algo de her<strong>en</strong>cia simple. La mayoría de los programadores<br />

que han trabajado durante un tiempo con C v<strong>en</strong> la utilidad de esto porque es<br />

lo que int<strong>en</strong>tan hacer cuando crean una librería. Con <strong>C++</strong> usted recibe la ayuda del<br />

435<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!