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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

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

✐<br />

Capítulo 1. Introducción a los Objetos<br />

l<strong>en</strong>guajes supon<strong>en</strong> grandes mejoras con respecto al l<strong>en</strong>guaje <strong>en</strong>samblador, pero su<br />

abstracción primaria todavía requiere p<strong>en</strong>sar <strong>en</strong> términos de la estructura del ord<strong>en</strong>ador,<br />

<strong>en</strong> lugar de la estructura del problema que int<strong>en</strong>ta resolver. El programador<br />

debe establecer la asociación <strong>en</strong>tre el modelo de la máquina (<strong>en</strong> el «espacio de soluciones»,<br />

que es el lugar donde está modelando ese problema, como un ord<strong>en</strong>ador) y<br />

el modelo del problema que se está resolvi<strong>en</strong>do (<strong>en</strong> el «espacio de problemas», que<br />

es el lugar donde existe el problema). El esfuerzo requerido para realizar esta correspond<strong>en</strong>cia,<br />

y el hecho de que sea extrínseco al l<strong>en</strong>guaje de programación, produce<br />

programas difíciles de escribir y caros de mant<strong>en</strong>er y, como efecto secundario, creó<br />

toda la industria de «métodos de programación».<br />

La alternativa a modelar la máquina es modelar el problema que está int<strong>en</strong>tando<br />

resolver. Los primeros l<strong>en</strong>guajes como LISP y APL eligieron concepciones del mundo<br />

particulares («Todos los problemas son listas <strong>en</strong> última instancia», o «Todos los<br />

problemas son algorítmicos»). PROLOG reduce todos los problemas a cad<strong>en</strong>as de<br />

decisiones. Se han creado l<strong>en</strong>guajes para programación basados <strong>en</strong> restricciones y<br />

para programar manipulando exclusivam<strong>en</strong>te símbolos gráficos (lo último demostró<br />

ser demasiado restrictivo). Cada uno de estos métodos es una bu<strong>en</strong>a solución<br />

para el tipo particular de problema para el que fueron diseñados, pero cuando uno<br />

sale de ese dominio se hac<strong>en</strong> difíciles de usar.<br />

El método ori<strong>en</strong>tado a objetos va un paso más allá, proporcionando herrami<strong>en</strong>tas<br />

para que el programador repres<strong>en</strong>te los elem<strong>en</strong>tos <strong>en</strong> el espacio del problema.<br />

Esta repres<strong>en</strong>tación es lo sufici<strong>en</strong>tem<strong>en</strong>te g<strong>en</strong>eral como para que el programador no<br />

esté limitado a un tipo particular de problema. Nos referimos a los elem<strong>en</strong>tos <strong>en</strong> el<br />

espacio del problema, y a sus repres<strong>en</strong>taciones <strong>en</strong> el espacio de la solución, como<br />

«objetos» (por supuesto, necesitará otros objetos que no t<strong>en</strong>gan analogías <strong>en</strong> el espacio<br />

del problema). La idea es que permita al programa adaptarse al l<strong>en</strong>guaje del<br />

problema añadi<strong>en</strong>do nuevos tipos de objetos de modo que cuando lea el código que<br />

describe la solución, esté ley<strong>en</strong>do palabras que además expresan el problema. Es un<br />

l<strong>en</strong>guaje de abstracción más flexible y pot<strong>en</strong>te que los que haya usado antes. De esta<br />

manera, la POO permite describir el problema <strong>en</strong> términos del problema, <strong>en</strong> lugar<br />

de usar términos de la computadora <strong>en</strong> la que se ejecutará la solución. Sin embargo,<br />

todavía existe una conexión con la computadora. Cada objeto se parece un poco a<br />

una pequeña computadora; ti<strong>en</strong>e un estado y operaciones que se le puede pedir que<br />

haga. Sin embargo, no parece una mala analogía a los objetos <strong>en</strong> el mundo real; todos<br />

ellos ti<strong>en</strong><strong>en</strong> características y comportami<strong>en</strong>tos.<br />

Algunos diseñadores de l<strong>en</strong>guajes han decidido que la programación ori<strong>en</strong>tada<br />

a objetos <strong>en</strong> sí misma no es adecuada para resolver fácilm<strong>en</strong>te todos los problemas<br />

de programación, y abogan por una combinación de varias aproximaciones <strong>en</strong> l<strong>en</strong>guajes<br />

de programación multiparadigma. 1<br />

Alan Kay resumió las cinco características básicas de Smalltalk, el primer l<strong>en</strong>guaje<br />

ori<strong>en</strong>tado a objetos con éxito y uno de los l<strong>en</strong>guajes <strong>en</strong> los que está basado <strong>C++</strong>.<br />

Esas características repres<strong>en</strong>tan una aproximación a la programación ori<strong>en</strong>tada a objetos:<br />

1. Todo es un objeto. Pi<strong>en</strong>se <strong>en</strong> un objeto como una variable elaborada; almac<strong>en</strong>a<br />

datos, pero puede «hacer peticiones» a este objeto, solicitando que realice<br />

operaciones <strong>en</strong> sí mismo. En teoría, puede coger cualquier compon<strong>en</strong>te conceptual<br />

del problema que está int<strong>en</strong>tando resolver (perros, edificios, servicios,<br />

etc.) y repres<strong>en</strong>tarlos como un objeto <strong>en</strong> su programa.<br />

1 Ver Multiparadigm Programming in Leda de Timothy Budd (Addison-Wesley 1995).<br />

2<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!