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 156 — #194<br />

✐<br />

Capítulo 4. Abstracción de Datos<br />

4.4. ¿Qué es un objeto<br />

Ahora que ya se ha visto y discutido un ejemplo incial es hora de retroceder para<br />

definir la terminología. El acto de introducir funciones <strong>en</strong> las estructuras es el eje<br />

c<strong>en</strong>tral del cambio que <strong>C++</strong> propone sobre C, e eso introduce una nueva forma de<br />

ver las estructuras: como conceptos. En C, una estructura (struct) es tan sólo una<br />

agrupación de datos: una manera de empaquetar datos para que se puedan tratar<br />

como un grupo. De esta forma, cuesta hacerse a la idea de que repres<strong>en</strong>tan algo más<br />

que una mera conv<strong>en</strong>i<strong>en</strong>cia de programación. Las funciones que operan sobre esas<br />

estructuras están sueltas por ahí. Sin embargo, con las funciones d<strong>en</strong>tro del mismo<br />

paquete que los datos, la estructura se convierte <strong>en</strong> una nueva criatura, capaz de repres<strong>en</strong>tar<br />

las características (como hac<strong>en</strong> las structs de C) y los comportami<strong>en</strong>tos.<br />

El concepto de objeto, una <strong>en</strong>tidad indep<strong>en</strong>di<strong>en</strong>te y bi<strong>en</strong> limitada que puede recordar<br />

y actuar, se sugiere a si mismo como definición.<br />

En <strong>C++</strong>, un objeto es simplem<strong>en</strong>te una variable, y la definición más purista es<br />

«una región de almac<strong>en</strong>ami<strong>en</strong>to» (que es una forma más específica para decir «un<br />

objeto debe t<strong>en</strong>er un único id<strong>en</strong>tificador» el cual, <strong>en</strong> el caso de <strong>C++</strong>, es una dirección<br />

única de memoria). Es un lugar <strong>en</strong> el cual se pued<strong>en</strong> almac<strong>en</strong>ar datos y eso implica<br />

también operaciones que pued<strong>en</strong> actuar sobre esos datos.<br />

Desafortunadam<strong>en</strong>te no existe una consist<strong>en</strong>cia completa <strong>en</strong>tre los distintos l<strong>en</strong>guajes<br />

cuando se habla de estos términos, aunque son aceptados bastante bi<strong>en</strong>. También<br />

se podrán <strong>en</strong>contrar discrepancias sobre lo que es un l<strong>en</strong>guaje ori<strong>en</strong>tado a objetos,<br />

aunque parece haber un cons<strong>en</strong>so razonable hoy <strong>en</strong> día. Hay l<strong>en</strong>guajes basados<br />

<strong>en</strong> objetos, que cu<strong>en</strong>tan con estructuras-con-funciones como las que ha visto aquí de<br />

<strong>C++</strong>. Sin embargo, esto es tan sólo una parte de lo que d<strong>en</strong>omina un l<strong>en</strong>guaje ori<strong>en</strong>tado<br />

a objetos, y los l<strong>en</strong>guajes que solam<strong>en</strong>te llegan a empaquetar las funciones d<strong>en</strong>tro<br />

de las estructuras son l<strong>en</strong>guajes basados <strong>en</strong> objetos y no ori<strong>en</strong>tados a objetos.<br />

4.5. Tipos abstractos de datos<br />

La habilidad para empaquetar datos junto con funciones permite la creación de<br />

nuevos tipos de datos. Esto se llama a m<strong>en</strong>udo <strong>en</strong>capsulación 3 Un tipo de dato exist<strong>en</strong>te<br />

puede cont<strong>en</strong>er varias piezas de datos empaquetadas juntas. Por ejemplo, un<br />

float ti<strong>en</strong>e un expon<strong>en</strong>te, una mantissa y un bit de signo. Le podemos pedir que<br />

haga varias cosas: sumarse a otro float o a un int, etc. Ti<strong>en</strong>e características y comportami<strong>en</strong>to.<br />

La definición de Stash crea un nuevo tipo de dato. Se le pued<strong>en</strong> agregar nuevos<br />

elem<strong>en</strong>tos (add()), sacar (fetch()) y agrandarlo (inflate()). Se puede crear uno<br />

escribi<strong>en</strong>do Stash s; igual que cuando se crea un float dici<strong>en</strong>do float x;. Un<br />

Stash también ti<strong>en</strong>e características y un comportami<strong>en</strong>to bi<strong>en</strong> determinado. Aunque<br />

actúe igual que un tipo de dato predefinido como float se dice que Stash es un tipo<br />

abstracto de dato tal vez porque permite abstraer un concepto desde el espacio de<br />

los problemas al espacio de la solución. Además, el compilador de <strong>C++</strong> lo tratará<br />

exactam<strong>en</strong>te como a un nuevo tipo de dato y si, por ejemplo, declara una función que<br />

acepta un Stash como argum<strong>en</strong>to, el compilador se asegurará de que no se le pase<br />

otra cosa a la función. De modo que se realiza el mismo nivel de comprobación de<br />

tipos tanto para los tipos abstractos de datos (a veces también llamados tipos definidos<br />

por el usuario) como para los tipos predefinidos.<br />

3 Este término puede causar debates. Algunas personas lo utilizan tal y como está definido aquí,<br />

aunque otras lo usan para describir el control de acceso, término que se discutirá <strong>en</strong> el sigui<strong>en</strong>te capítulo.<br />

156<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!