Fundamentos de programación/Introducción

De Wikilibros, la colección de libros de texto de contenido libre.
Versión para imprimir esta pagina

¡Bienvenido a este libro!. Nuestro objetivo fundamental es proveer a los lectores de un manual que cubra los aspectos esenciales del maravilloso mundo de la programación de ordenadores. En este libro se estudiarán los fundamentos de la algoritmia: la ciencia y arte de diseñar algoritmos para la resolución sistemática de problemas de cualquier índole.

Aun cuando el lector no tenga una experiencia previa en la programación de ordenadores, es seguro que a lo largo de su vida ha ejecutado muchos algoritmos. Un algoritmo es la especificación detallada de los pasos necesarios para llevar a cabo una tarea específica. En la escuela, por ejemplo, aprendimos una serie de pasos para realizar sumas, restas, multiplicaciones y divisiones, estos son algoritmos (de hecho debemos la palabra 'algoritmo' al matemático musulmán Muhammad ibn Musa al-Jwarizmi). Una receta de cocina es uno de los ejemplos más claros de algoritmo. El conjunto de trámites que debe realizar en cualquier institución pública para la expedición de un documento, como por ejemplo, la licencia de conducir, también es un algoritmo. En este libro, vamos a enseñar los fundamentos básicos para crear programas. Un programa es un algoritmo hecho para ser ejecutado por un ordenador.

La algoritmia es una ciencia: está sustentada en un conjunto de modelos matemáticos. Existen una cantidad de técnicas que han sido ampliamente estudiadas por los científicos de la computación para resolver problemas que aparecen en diversas áreas de la ciencia. Por ejemplo, la traducción de lenguajes, la clasificación y ordenación de datos, los algoritmos para cifrado y el cálculo numérico, son algunas de las áreas donde aún en la actualidad, se mantiene muy activa la investigación de nuevas técnicas y el desarrollo de algoritmos y programas más eficientes.

La algoritmia también es un arte, pues la creación de un algoritmo requiere de grandes dosis de heurística y creatividad. La creación de un programa va a estar muy influida por factores externos al modelo matemático, como por ejemplo, el lenguaje de programación que se va a usar, las limitaciones físicas que imponen los ordenadores o incluso los plazos para la finalización de un proyecto. Por otro lado, muchos programadores buscan un aspecto estético en la realización de sus programas; para esas personas, escribir programas es un ejercicio semejante a hacer literatura.

Por los motivos expuestos anteriormente, pretendemos en este libro mostrar ambos aspectos de la algoritmia: por un lado, se presentarán técnicas que ya son clásicas en la programación, y por otro lado, se intentará mostrar los problemas que pueden surgir al convertir la especificación del algoritmo en un programa que se ejecute satisfactoriamente. Una analogía muy ilustrativa es la de comparar un algoritmo con una receta de cocina, mientras que el programa sería análogo al plato preparado siguiendo dicha receta. Si usted es un cocinero novato, aun cuando tenga la receta de cocina en su mano y siga metódicamente todos sus pasos, puede encontrar que al final el plato no es todo lo apetitoso que usted desea, es ahí donde entra en juego el arte, la capacidad de innovar y refinar la receta con un toque personal. Así como esa capacidad de integrar la parte científica y técnica con la parte artística hace la diferencia entre el cocinero novel y el chef más avezado; también la hace entre un programador principiante y un experto. Esperamos que las recetas que usted consiga en este libro le sean muy útiles como base para crear las suyas propias.

Hay que hacer una advertencia inicial al lector: este libro por sí solo no pretende, ni puede ser una obra completa para la enseñanza de la programación. El lector debe complementar el estudio de la algoritmia, con el estudio de uno o varios lenguajes de programación. Le recomendamos encarecidamente que realice todos los algoritmos presentados en este libro, usando su lenguaje de programación favorito. Para el aprendizaje de los lenguajes de programación más populares, le sugerimos consultar (y por qué no, también colaborar con) los otros wikilibros de programación.

Finalmente, invitamos al lector a practicar: la única forma de aprender a nadar, es lanzarse al agua y nadar. Se tratará de incluir, en medida de lo posible, ejercicios al final de cada sección. Al final de cada capítulo se sugerirán algunos proyectos de programación que puede realizar. La realización de estos proyectos es beneficiosa por varios motivos: primero, ayudará a afianzar los conocimientos adquiridos en cada sección; segundo permitirá aplicar las técnicas estudiadas en problemas prácticos, y tercero: la programación puede convertirse en un hobbie que brinda muchas satisfacciones.

En sus inicios, la programación de computadoras se basó exclusivamente en el modelo imperativo (también denominado procedimental), que semeja más la forma en que la máquina maneja las instrucciones u órdenes.

Conforme la programación de computadoras fue utilizándose para resolver nuevos tipos de problemas, se requirió la creación de nuevos modelos o paradigmas para el desarrollo de las aplicaciones.

La programación orientada a objetos es una forma de concebir un programa de computadora. Se puede pensar en un programa como una lista de instrucciones que le indica a la computadora qué hacer, o un paquete de pequeños programas que responden a eventos específicos indicados por la entrada del usuario.

La programación orientada a objetos ve a un programa como un conjunto de objetos que cooperan entre sí para resolver un problema.

El modelo orientado a objetos sirve para desarrollar sistemas de software con un alto grado de complejidad. Este modelo es tan importante que se creó el OMG (Object Management Group, Grupo de Administración de Objetos, una agrupación no lucrativa) para establecer las normas que rigen el desarrollo de software orientado a objetos.

En el resto de este libro se estudiarán los conceptos en que se basa el modelo orientado a objetos, así como las principales razones para utilizarlo en el desarrollo de software.