Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 Fundamentos de programacin 1
2 Introduccin 2
3 Algoritmos y programas 4
3.1 Qu es un algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2 Modelos computacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3 Programas: Algoritmos para ser ejecutados por un ordenador . . . . . . . . . . . . . . . . . . . . . . 5
3.4 Qu instrucciones ejecuta un ordenador? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.4.1 Lenguaje de mquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.4.2 Lenguaje ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5 Programacin para seres humanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5.1 Lenguajes de alto nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5.2 Traductores e intrpretes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5.3 Lenguajes interpretados vs. lenguajes compilados . . . . . . . . . . . . . . . . . . . . . . . . 6
i
ii NDICE GENERAL
8 Archivos 16
9 Herramientas de desarrollo 17
9.1 Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
9.2 Ensambladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
9.3 Enlazadores (Linkers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
9.4 Depuradores (Debuggers) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
9.5 Editores de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
9.6 Otras herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
10 Hola mundo 19
10.1 ABAP/IV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
10.2 ABC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
10.3 ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
10.4 ADA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
10.5 ASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
10.6 ASSEMBLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
10.7 AWK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.8 Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.9 Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.10C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.11C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.12C++/CLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.13C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.14COBOL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.15ColdFusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
10.16MS-DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.17Eiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.18Erlang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.19Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.20Haskell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.21HTML/JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.22INTERCAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.23Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.24Programacin en Lexico (POO en castellano) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.25LISP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.26Liberty BASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.27MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.28NATURAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
NDICE GENERAL iii
10.29Object REXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.30Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
10.31NetREXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.32OpenInventor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.33Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.34PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.35Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.36QBasic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.37REXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.38Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.39SAPScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
10.40Seed7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.41Smalltalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.42SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.43Unlambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.44Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.45X3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.46xBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
11 La Abstraccin y el Encapsulamiento 25
11.1 Abstraccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
11.1.1 Ejemplos de abstraccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
11.1.2 Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
11.1.3 Modulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
11.1.4 Tipo abstracto de dato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
11.2 Encapsulamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
11.2.1 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Fundamentos de programacin
1
Captulo 2
Introduccin
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 programacin de ordenadores. En este libro se estudiarn los fundamentos de la
algoritmia: la ciencia y arte de disear algoritmos para la resolucin sistemtica de problemas de cualquier ndole.
Aun cuando el lector no tenga una experiencia previa en la programacin de ordenadores, es seguro que a lo largo de su vida
ha ejecutado muchos algoritmos. Un algoritmo es la especicacin detallada de los pasos necesarios para llevar a cabo una
tarea especca. 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 matemtico musulmn Muhammad ibn Musa
al-Jwarizmi). Una receta de cocina es uno de los ejemplos ms claros de algoritmo. El conjunto de trmites que debe
realizar en cualquier institucin pblica para la expedicin de un documento, como por ejemplo, la licencia de conducir,
tambin es un algoritmo. En este libro, vamos a ensear los fundamentos bsicos 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 matemticos. Existen una cantidad de tcnicas que
han sido ampliamente estudiadas por los cientcos de la computacin para resolver problemas que aparecen en diversas
reas de la ciencia. Por ejemplo, la traduccin de lenguajes, la clasicacin y ordenacin de datos, los algoritmos para
cifrado y el clculo numrico, son algunas de las reas donde an en la actualidad, se mantiene muy activa la investigacin
de nuevas tcnicas y el desarrollo de algoritmos y programas ms ecientes.
La algoritmia tambin es un arte, pues la creacin de un algoritmo requiere de grandes dosis de heurstica y creatividad.
La creacin de un programa va a estar muy inuida por factores externos al modelo matemtico, como por ejemplo, el
lenguaje de programacin que se va a usar, las limitaciones fsicas que imponen los ordenadores o incluso los plazos para
la nalizacin de un proyecto. Por otro lado, muchos programadores buscan un aspecto esttico en la realizacin 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 presentarn tcnicas que ya son clsicas en la programacin, y por otro lado, se intentar mostrar los problemas que
pueden surgir al convertir la especicacin del algoritmo en un programa que se ejecute satisfactoriamente. Una analoga
muy ilustrativa es la de comparar un algoritmo con una receta de cocina, mientras que el programa sera anlogo al plato
preparado siguiendo dicha receta. Si usted es un cocinero novato, aun cuando tenga la receta de cocina en su mano y
siga metdicamente todos sus pasos, puede encontrar que al nal el plato no es todo lo apetitoso que usted desea, es ah
donde entra en juego el arte, la capacidad de innovar y renar la receta con un toque personal. As como esa capacidad de
integrar la parte cientca y tcnica con la parte artstica hace la diferencia entre el cocinero novel y el chef ms avezado;
tambin 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 enseanza de la programacin. El lector debe complementar el estudio de la algoritmia, con el estudio de uno o varios
lenguajes de programacin. Le recomendamos encarecidamente que realice todos los algoritmos presentados en este
libro, usando su lenguaje de programacin favorito. Para el aprendizaje de los lenguajes de programacin ms populares,
le sugerimos consultar (y por qu no, tambin colaborar con) los otros wikilibros de programacin.
2
3
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 nal de cada seccin. Al nal de cada captulo se sugerirn algunos proyectos
de programacin que puede realizar. La realizacin de estos proyectos es beneciosa por varios motivos: primero, ayudar
a aanzar los conocimientos adquiridos en cada seccin; segundo permitir aplicar las tcnicas estudiadas en problemas
prcticos, y tercero: la programacin puede convertirse en un hobbie que brinda muchas satisfacciones.
En sus inicios, la programacin de computadoras se bas exclusivamente en el modelo imperativo (tambin denominado
procedimental), que semeja ms la forma en que la mquina maneja las instrucciones u rdenes.
Conforme la programacin de computadoras fue utilizndose para resolver nuevos tipos de problemas, se requiri la
creacin de nuevos modelos o paradigmas para el desarrollo de las aplicaciones.
La programacin 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 pequeos programas
que responden a eventos especcos indicados por la entrada del usuario.
La programacin 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 Administracin de Objetos, una agrupacin
no lucrativa) para establecer las normas que rigen el desarrollo de software orientado a objetos.
En el resto de este libro se estudiarn los conceptos en que se basa el modelo orientado a objetos, as como las principales
razones para utilizarlo en el desarrollo de software.
Captulo 3
Algoritmos y programas
3.1 Qu es un algoritmo?
Por algoritmo, se entiende a un conjunto nito de instrucciones que se deben seguir para resolver un problema. No
obstante, desde el punto de vista de la programacin de ordenadores, la denicin del algoritmo como la especicacin
de una serie de pasos, es incompleta. Debe observarse que los ordenadores son equipos que tienen limitaciones fsicas en
cuanto a capacidad de almacenamiento y procesamiento. Por consiguiente debemos renar un poco ms nuestra denicin
de algoritmo para hacerla aplicable de manera efectiva en el mbito de la informtica.
El algoritmo es un conjunto de pasos, instrucciones o acciones que se deben seguir para resolver un problema. Existen
una gran cantidad de algoritmos, hay que escoger el ms efectivo. Hay dos tipos de algoritmos que son los cualitativos y
cuantitativos, cualitativos son todos aquellos pasos o instrucciones descritos por medio de palabras que sirven para llegar
a la obtencion de una respuesta o solucion de un problema, y cuantitativos son todos aquellos pasos o instrucciones que
involucran calculos numricos para llegar a un resultado satisfactorio.
Caractersticas:
Denicin: Un algoritmo se entiende como una sucesin nita de pasos que debe cumplir las siguientes especicaciones:
Cada paso del algoritmo debe estar bien denido: Esto signica que la denicin de un paso debe ser suciente-
mente clara, para que una persona pueda entenderla y realizarla. Si bien no se puede dar un criterio determinstico
para decidir si un paso est bien denido, debemos apelar al sentido comn para decidir que un paso est especi-
cado sin ambigedades.
4
3.2. MODELOS COMPUTACIONALES 5
Un algoritmo debe tener un principio y un n: Un programa es un algoritmo escrito con un objetivo: conseguir
un resultado. No tiene sentido crear un programa que espere ~ segundos (innitos segundos) y luego escriba en
pantalla Hola Mundo!", del mismo modo que un algoritmo debe tener un principio bien denido (tampoco tiene
sentido el algoritmo haz nada, y luego escribe Hola Mundo!")
las instrucciones eran difciles de recordar, ya que no guardaban relacin con la operacin que se est realizando.
puede haber, y de hecho hay, diferencias entre las instrucciones de un procesador a otro.
Todo esto ha llevado a poner nombre a las instrucciones de cdigo mquina de manera que a una secuencia concreta de
bits que realiza una operacin se le pone un nombre sencillo que identique la operacin. Esta traduccin a un lenguaje
ms sencillo para las personas resulta en una mayor comodidad para el programador, adems el proceso de traduccin
inverso de lenguaje ensamblador a cdigo mquina puede ser realizado por un sencillo programa.
Todo eso no es gran derroche de recursos para un ordenador medio actualmente, pero dura sus 10 o 15 segundos. En
cambio, con un lenguaje interpretado, el programa intrprete analiza el chero de cdigo y lo va ejecutando en tiempo
real, sin compilarlo ni ensamblarlo. Otra de las ventajas de los lenguajes interpretados es que son multiplataforma: un
programa en Perl, por ejemplo, no debe ser compilado dos veces (una para Unix y otra para Windows). Con que haya
diferentes versiones del intrprete en cada uno de esos ordenadores, especcamente compilados para ellos, basta.
Sus desventajas:
3.5. PROGRAMACIN PARA SERES HUMANOS 7
Se depende del intrprete: si no tienes instalado el intrprete que corresponda, no podrs ejecutar el programa.
Ejemplos de lenguajes interpretados son PHP, Perl, Python, Tcl/Tk, BASIC, LISP (en algunas de sus versiones)...
Captulo 4
La programacin estructurada sigue tres reglas: la secuencia, la iteracin y la decisin. La primera de ellas indica que
las instrucciones del cdigo se leern de principio a n; la segunda indica que, segn cierta condicin, un nmero de
instrucciones podran repetirse un numero determinado de veces, y la tercera indica que segn unas ciertas condiciones
se ejecutarn o no un conjunto de instrucciones. En el siguiente algoritmo para limpiar platos se aprecian estas tres
caractersticas. La indentacin de las instrucciones indican cules son englobadas y cules no por sus predecesoras.
mientras haya platos
coger plato mientras haya suciedad echar jabon pasar el estropajo por el plato si plato es azulado ponerlo con los azules
En cdigo no estructurado, quedara algo ms complejo.
1 coger plato 2 echar jabon 3 pasar el estropajo por el plato 4 si hay suciedad ir a la instruccin 2 5 si el plato no es azul
ir a la instruccin 7 6 ponerlo con los azules 7 si hay ms platos ir a la instruccin 1
En programas ms grandes, esto es muchsimo ms complicado.
Ahora conocemos la ejecucin de los algoritmos. Sin embargo, un programa se compone tanto de algoritmos como de
una estructura de datos sobre los que operar.
En la programacin estructurada hay un inicio y un n perfectamente bien denido de acuerdo al diagrama de ujo que
se plante al concebir la idea del programa.
Un programa bien estructurado debera tener algn subprograma que capture cualquier error dentro del programa principal
o de cualquier subprograma dentro de la aplicacin de tal modo que el subprograma que captura los errores genere un
registro de datos que describa el error generado y/o en qu subprograma se gener el error para posteriormente corregirlo.
Para facilitar la correccin de estos errores se hace uso de los comentarios agregados en el cdigo fuente.
Como hemos visto, el ordenador sigue una serie de instrucciones. Pero esas instrucciones tienen que operar sobre una
serie de datos. El ordenador tpico slo procesa una instruccin a la vez, por lo que necesita 'espacios de memoria' donde
guardar o depositar, a modo de cajones, por usar un smil conocido, los diversos datos con los que trabaja. Aqu es donde
entran en juego las variables y constantes.
En los inicios, con el ensamblador, se poda decir al ordenador, por ejemplo: 'Ejecuta la instruccin de esa posicin de
8
4.2. ESTRUCTURAS DE DATOS Y DE CONTROL 9
memoria' o tambin 'En esa posicin de memoria est guardada mi edad, imprmela por pantalla'. Todo esto se deriva
del hecho de que los programas tambin son datos. Esta ambigedad presenta numerosos inconvenientes cuando se pro-
ducen errores, como el lector se imaginar fcilmente: de ah que, a medida que los lenguajes evolucionan hacia niveles
superiores, se impida el tratamiento indistinto de los datos. A partir de entonces, un programa tiene que decirle al sistema
operativo los cajones que necesita y ste se los proporciona independientemente de cules sean.
Quizs suene ms complicado de lo que es. Un ejemplo: Queremos sumar dos nmeros. Nuestro programa tendr que
tener tres cajones: Uno para cada nmero y otro para el resultado. Cada cajn tiene un nombre en vez de una posicin de
memoria, de manera que slo hay que nombrarlo:
Necesito cajones A, B y Resultado Lee un nmero y gurdalo en A Lee un nmero y gurdalo en B Suma A y B y gurdalo
en Resultado Imprime el contenido de Resultado
He aqu nuestro programa. Como cabe pensar, un procesador no tiene la instruccin Imprime por pantalla"; esto es una
llamada a otra porcin de cdigo que, gracias a la abstraccin, nosotros no hemos escrito, o hemos escrito una sola vez;
a partir de lo cual podemos imprimir todo el texto que queramos en la pantalla.
Las posiciones de memoria A y B son Variables. Si queremos leerlas o escribirlas, podemos hacerlo. Tpicamente, existi-
rn datos que no pensamos modicar; no querremos que el usuario tenga que introducirlos cada vez, pues son de naturaleza
ms constante que otros (como puede ser el valor Pi para calcular el permetro o rea de un crculo). Para evitar modi-
carlos por error, podemos pedir al sistema variables especiales, que no puedan ser reescritas. Son las Constantes. Un
ejemplo:
Comentario: Este programa calcula el rea de un crculo Constante PI = 3'14159265 Variable R Variable Resultado; Leer
nmero y guardar en R Calcular PI * (R * R) y guardar en Resultado Imprimir Resultado;
El uso de variables y constantes se asemeja al uso que se les da en el lgebra o en otras ramas matemticas.
Ntese tambin la clara separacin entre estructuras de datos y algoritmos. Segn los lenguajes, esto puede ser o no
obligatorio, pero es recomendable en aras de una mayor claridad del trabajo.
4.1.3 Comentarios
El til concepto del comentario: son lneas de texto que el compilador o el intrprete no consideran como parte del cdigo,
con lo cual no estn sujetas a restricciones de sintaxis y sirven para aclarar partes de cdigo en posteriores lecturas y, en
general, para anotar cualquier cosa que el programador considere oportuno.
Uno como programador debe tener como prioridad documentar nuestro cdigo fuente ya que al momento de depurar nos
ahorrar mucho tiempo de analisis para su correccin o estudio.
Los programadores profesionales tienen la buena costumbre de documentar sus programas con encabezados de texto
(encabezados de comentarios) en donde describen la funcin que va a realizar dicho programa, la fecha de creacin, el
nombre del autor y en algunos casos las fechas de revisin y el nombre del revisor.
Por lo general algunos programas requieren hacer uso de llamadas a subprogramas dentro de una misma aplicacin por lo
que cada subprograma debera estar documentado, describiendo la funcin que realizan cada uno de estos subprogramas
dentro de la aplicacin.
Otra sentencia de control son las de tipo SWITCH CASE. En este tipo de sentencias se especica la variable a comparar
y una lista de valores con los que comparar. Aquel que sea el verdadero, se ejecutar:
SWITCH A CASE 0: PRINT A vale 0 CASE 1: PRINT A vale 1
Otras herramientas imprescindibles del control de la ejecucin de nuestro cdigo son los BUCLES o CICLOS. Consisten
en un mtodo que permite repetir un trozo de cdigo varias veces.
Hay bsicamente dos tipos:
- Bucle FOR:
El bucle FOR consiste en una sentencia que engloba un grupo de instrucciones y tiene una variable cuyo valor se va
modicando en cada vuelta. En general se utiliza cuando sabemos cuntas veces tenemos que repetir el cdigo.
FOR A=0 TO 9 Especicamos en este caso que A variar desde 0 hasta 9, con lo que repetiremos el bucle 10 veces. PRINT
Estamos en el bucle NEXT A Con esto cerramos el bucle e indicamos el nal del bloque de instrucciones que se repiten
- Bucle WHILE:
El bucle WHILE consiste en un bucle en el que el cdigo se repite mientras se cumpla alguna condicin booleana (es decir,
una expresin que d como resultado verdadero o falso). Hay variaciones, como el REPEAT...UNTIL, que se diferencia
en el momento de comprobar si se hace verdadera o no la condicin.
WHILE A<>(B*2) DO Aqu especicamos la expresin que evaluamos y aqu se comprueba A=A+1 Incrementamos el
valor de A mientras sea distinto a B*2 DONE Como en el FOR, necesitamos especicar donde acaba el bucle y el cdigo.
por un lado, y:
Ejemplos de Pseudocdigos
Captulo 5
Introduccin a la programacin
estructurada
5.1 Introduccin
La programacin estructurada naci como solucin a los problemas que presentaba la programacin no estructurada, la
cual se emple durante mucho tiempo antes de la invencin de la programacin estructurada.
Un programa no estructurado es un programa procedimental: las instrucciones se ejecutan en el mismo orden en que
han sido escritas. Sin embargo, este tipo de programacin emplea la instruccin goto. Una instruccin goto permite
pasar el control a cualquier otra parte del programa. Cuando se ejecuta una instruccin goto la secuencia de ejecucin
del programa contina a partir de la instruccin indicada por goto. De esta forma, para comprender como funciona un
programa es necesario simular su ejecucin. Esto quiere decir que en la mayora de los casos es muy difcil comprender la
lgica de un programa de este tipo. Algunos compiladores crean referencias cruzadas a las instrucciones apuntadas por los
goto, posibilitando una navegacin rpida a travs del cdigo fuente. Sin embargo, es algo comn en muchos lenguajes
de programacin el empleo de una variable en asociacin con el destino del goto, no permitiendo la creacin automtica
de tablas de referencias cruzadas. Existen problemas similares en algunos lenguajes de programacin estructurada, por
ejemplo cmo implementar las vistas en diferentes idiomas, de forma que varias personas puedan visualizar la misma
informacin, pero cada una en su idioma.
Esto se opone a la idea de utilizar algn tipo de abstraccin que permita comprender cmo funciona realmente un pro-
grama, que es lo que hace la programacin estructurada.
Por este motivo, Dijkstra propuso la eliminacin de la sentencia goto.
12
Captulo 6
La estructura y tipos de datos varia con cada lenguaje de programacion. Estos se pueden denir como la forma y modo
de programar que corresponde a una accin y le dene una funcion especica.
La estructura no es mas que la forma que sigue ese lenguaje, por ejemplo:
abrir
ejecutar accin 1.
ejecutar accin 2.
cerrar.
(esta puede ser una estructura simple, pero cada lenguaje dice cuales y como se usaran esas estructuras).
Por ejemplo:
En C, para poder crear una variable se necesita especicar el tipo de ella. (la estructura quedaria mas o menos asi)
<abrir>
<cerrar> Esta claro que cada lenguaje usa sus propios terminos para denir sus tipos de datos. (En C quedaria as)
#include <stdio.h> //cabezera estandar de entrada y salida (aqui estan los cheros necesarios). void main() //parte de la
estructura de C, en dependencia del compilador se debe usar int main() { Char a[12] = Hola Mundo.; int b = 123; oat c
= 1.25; printf ("%s %d %f,a,b,c); } // dene el n del programa.(n de la estructura)
Pueden ver estas secciones para observar la estructura y tipo de datos en C: puedes consultar en el Wikibook de C enlace
a Wikipedia: Tipos de datos enlace a busqueda de google tipo+dato+programacion
13
Captulo 7
Los tipos de datos se utilizan para asignar una variable o una constante con un nombre jo que tome una porcin de
memoria y que almacene una informacin en memoria, si el tipo de dato es numrico solo almacenar datos numricos y
si el tipo de dato es una cadena de caracteres almacenar texto.
Y dependiendo el tipo de datos numrico se podr almacenar una cantidad de dato dependiendo la precisin que tenga la
variable.
En programacion los tipos de datos son (o pueden ser) distintos entre si, cada tipo corresponde a como se va a jugar con la
memoria, es decir un dato numerico puede usar entre 2 y 4 byte (depende del compilador), mientras que un dato carcter
usara un byte por cada carcter, es por eso que se especica que es lo que se necesita.
En C, algunos tipos de datos son:
INT : Para numero enteros.
Ej:
Int a=5;
CHAR : Para caracteres. Se usa [] con un valor para hacer una cadena de caracteres, por ejemplo una palabra.
Ej:
Ej:
Float a=1.25;
En Visual Basic / Visual.Net, algunos tipos de datos son (cabe resaltar que en este lenguaje de programacin se anticipa
la instruccin DIM que declara y asigna espacio para almacenar una o ms variables).
Integer : Para nmeros enteros
Ej:
14
15
Dim a as integer
a= 4
Ej:
Dim cadena as string
cadena="Visual Basic
Ej:
Dim b as doubl
b=4.12
-
Hay muchos mas, pero estos son mas comunes y son usados en otros lenguajes (son como un estandar, pero no son regla).
Captulo 8
Archivos
Un archivo es un chero (dato) almacenado en algun recurso de memoria, generalmente en Disco Duro, pero dependiendo
del uso (en ciertos casos) son almacenados en RAM.
Un Fichero tiene muchas funciones, en programacin, estos almacenan cdigos o parte de ellos (en ocasiones se divide el
cdigo en varios archivos). Tambin es posible que se necesita almacenar datos que el usuario introduce (Como sus datos,
nombre de usuario y contrasea, etc.), estos se empaquetan en un archivo y podrn ser usados luego por el programa por
ejemplo, cuando el usuario desee loguearse de nuevo.
En el lenguaje C++ y otros lenguajes orientados a objetos, se suele decir, Todo es un archivo, debido a como trabajan
estos.
Archivos, en ocasiones puede referirse a las librerias, pero creo prudente hacer diferencias, una librera es una utilidad
para el lenguaje en que programamos, mientras que un archivo es una utilidad mas cercana a nosotros (en lo posible,
desarrollado por nosotros).
16
Captulo 9
Herramientas de desarrollo
Las herramientas de desarrollo son aquellos programas o aplicaciones que tengan cierta importancia en el desarrollo de
un programa (programacin). Pueden ser de importancia vital (como un ensamblador, un compilador o un editor) o de
importancia secundaria, como una IDE (Integrated Development Environment - Entorno de Desarrollo Integrado).
9.1 Compiladores
Los compiladores son programas que traducen un chero de cdigo fuente de cualquier lenguaje al lenguaje ensam-
blador y lo llama, cuando sea necesario, igual que al enlazador (o linker). Los ms importantes son GCC (GNU Compiler
Colector) para C, G++ para C++, G77 para Fortran 77 y Microsoft Visual C++, entre otros
9.2 Ensambladores
Los ensambladores son aquellos programas que se encargan de desestructurar el cdigo en lenguaje ensamblador y tra-
ducirlo a lenguaje binario. Los archivos en lenguaje binario se enlazan posteriormente en un nico chero, el ejecutable.
Los ms importantes son tas, gas, nasm...
Son los programas que enlazan varios cheros objeto en lenguaje binario para crear un nico chero, el ejecutable del
programa.
El ms importante es ld. y tambin es una de las mas usadas
Como su nombre lo indica, sirven para corregir los errores o fallas de la programacin (bugs). Se encargan de ejecutar, paso
a paso un programa, alertando sobre los errores presentados y los valores de las variables, entre otros. Son particularmente
tiles cuando el programa parece estar bien, pero no se obtiene el resultado esperado (se cuelga, da resultados errneos...).
El ms importante es GDB. Actualmente casi todas las IDEs incluyen uno, o deberan.
17
18 CAPTULO 9. HERRAMIENTAS DE DESARROLLO
IDEs (Interfaz de Desarrollo Estructurada): juntan en un slo programa editor de texto, compilador, enlazador,
ensamblador, depurador... Ejemplos de ellas son Anjuta, Dev-Cpp, Codeblocks...
Programas de indentacin: sirven para aclarar el cdigo escrito confusamente. El nico que conozco es indent. De
todas formas, un editor de texto medianamente decente suele incluir sus propias funciones de indentado.
Captulo 10
Hola mundo
10.1 ABAP/IV
10.2 ABC
10.3 ActionScript
trace("Hola, mundo!");
10.4 ADA
10.5 ASP
10.6 ASSEMBLY
.model small .stack .data saludo db Hola mundo!!!", "$" .code main proc ;Init process mov ax,seg saludo mov ds,ax ;ds
= ax = saludo mov ah,09 ;Function(print string) lea dx,saludo ;DX = String terminated by "$" int 21h ;Interruptions DOS
Functions mov ax,4c00h ;Function (Quit with exit code (EXIT)) int 21h ;Interruption DOS Functions main endp ;End
process end main
19
20 CAPTULO 10. HOLA MUNDO
10.7 AWK
#!/bin/awk -f BEGIN{ print "Hola, mundo!"; }
10.8 Bash
#!/bin/bash echo Hola mundo
10.9 Basic
PRINT Hola Mundo
10.10 C
#include <stdio.h> int main(void) { printf(Hola, mundo!\n); return 0; }
10.11 C++
#include <iostream> using namespace std; int main() { cout << "Hola, mundo!" << endl; }
10.12 C++/CLI
int main() { System::Console::WriteLine(Hola, mundo!"); return 0; }
10.13 C#
using System; class MainClass { public static void Main() { Console.WriteLine("Hola Mundo!"); } }
10.14 COBOL
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. DATA DIVISION. PRO-
CEDURE DIVISION. MAIN SECTION. DISPLAY Hola mundo STOP RUN.
10.15 ColdFusion
<cfset variable="Hola Mundo"> <cfoutput>#variable#</cfoutput>
10.16. MS-DOS 21
10.16 MS-DOS
En sistemas operativos de la familia DOS como MS-DOS o PC-DOS que usan el Intrprete de comandos COMMAND.COM
o sistemas que usan como intrprete de comandos CMD.EXE (OS/2 y Windows de la rama NT) se pueden crear archivos
de proceso por lotes con extensiones BAT y CMD respectivamente con el siguiente contenido:
@echo Hola, Mundo!
10.17 Eiel
class HOLA_MUNDO create make feature make is do io.put_string("%nHola mundo%N) end end -- HOLA_MUNDO
10.18 Erlang
-module(hola). -export([hola_mundo/0]). hola_mundo() -> io:fwrite(Hola mundo!\n).
10.19 Fortran
PROGRAM HOLA PRINT *, 'Hola, mundo!' END
10.20 Haskell
holaMundo :: IO () holaMundo = do putStrLn (Hola mundo!")
10.21 HTML/JavaScript
<html> <head> <title>Hola Mundo</title> <script type="text/javascript"> alert("Hola mundo!"); </script> </head>
<body>
</body>
</html>
10.22 INTERCAL
PLEASE DO ,1 <- #13 DO ,1 SUB #1 <- #238 DO ,1 SUB #2 <- #112 DO ,1 SUB #3 <- #112 DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64 DO ,1 SUB #6 <- #238 DO ,1 SUB #7 <- #26 PLEASE DO ,1 SUB #8 <- #22 DO ,1 SUB #8 <-
#248 DO ,1 SUB #9 <- #168 DO ,1 SUB #10 <- #24 DO ,1 SUB #11 <- #16 DO ,1 SUB #12 <- #158 DO ,1 SUB #13
<- #52 PLEASE READ OUT ,1 PLEASE GIVE UP
10.23 Java
public class HolaMundo { public static void main(String[] args) { System.out.println("Hola, mundo!"); } }
22 CAPTULO 10. HOLA MUNDO
10.25 LISP
(format t "Hola, mundo!")
10.27 MATLAB
close all; % cierra todas las ventanas que pueda haber clear all; % borra todas las variables clc; % limpia la pantalla
disp('hola mundo'); % muestra el mensaje
10.28 NATURAL
WRITE 'Hola, mundo!'.
10.30 Pascal
Program HolaMundo; begin Writeln('Hola, mundo!'); end.
10.31. NETREXX 23
10.31 NetREXX
Utilizando la instruccin say que proviene de REXX clsico:
say Hola Mundo
o directamente utilizando clases y mtodos Java:
System.out.println("Hola mundo!");
10.32 OpenInventor
#Inventor V2.1 ascii Text3 { string Hola mundo }
10.33 Perl
#!/usr/bin/perl print Hola, mundo.\n";
10.34 PHP
<?php echo Hola Mundo"; ?>
10.35 Python
print Hola mundo
10.36 QBasic
PRINT Hola mundo
10.37 REXX
say Hola Mundo
10.38 Ruby
puts Hola Mundo
10.39 SAPScript
MAIN P1 Hola Mundo /
24 CAPTULO 10. HOLA MUNDO
10.40 Seed7
$ include seed7_05.s7i"; const proc: main is func begin writeln(Hola Mundo); end func;
10.41 Smalltalk
Transcript show: 'Hola, mundo!'
10.42 SQL
Variante de Oracle:
SELECT 'HOLA MUNDO' FROM DUAL;
10.43 Unlambda
```s``sii`ki ``s``s`ks ``s``s`ks``s`k`s`kr ``s`k`si``s`k`s`k `d````````````.H.o.l.a. .m.u.n.d.o k k `k``s``s`ksk`k.*
10.45 X3
SubProg HOLAMUNDO() Infbox Hola Mundo End
10.46 xBase
? Hola Mundo
Captulo 11
La Abstraccin y el Encapsulamiento
11.1 Abstraccin
La abstraccin, un principio por el cual se asla toda aquella informacin que no resulta relevante a un determinado nivel
de conocimiento.
Abstraccin: Es una descripcin de especicacin que enfatiza algunos de los detalles o propiedades de algo. La abs-
traccin consiste en captar las caractersticas esenciales de un objeto, as como su comportamiento. Es un mtodo por
el cual abstraemos valga la redundancia, una determinada entidad de la realidad de sus caractersticas y funciones que
desempean, estos son representados en clases por medio de atributos y mtodos de dicha clase.
Ejemplo 1: Qu caractersticas podemos abstraer de los automviles? o Qu caractersticas semejantes tienen todos los
automviles?
Caractersticas: Marca, Modelo, Nmero de chasis, Peso llantas o cauchos, Puertas, Ventanas... Comportamiento: Ace-
lerar, Frenar, Retroceder...
Ejemplo 2: La gerencia de un taller mecnico necesita un sistema para controlar los vehculos que ingresan a sus ins-
talaciones. En este caso, las caractersticas esenciales de la clase vehculo son: Marca, Modelo, Color, Falla detectada,
Nombre del Propietario, Direccin del Propietario, Telfono del Propietario...
A esto se le llama abstraccin. En general un programa no es ms que una descripcin abstracta de un procedimiento o
fenmeno que existe o sucede en el mundo real.
La abstraccin es esencial para el funcionamiento de una mente humana normal y es una herramienta muy potente
para tratar la complejidad.
11.1.2 Procedimientos
25
26 CAPTULO 11. LA ABSTRACCIN Y EL ENCAPSULAMIENTO
11.1.3 Modulos
Es una tcnica que proporciona la posibilidad de dividir sus datos y procedimientos en una parte privada y una parte
pblica. Proporcionan un mtodo efectivo de ocultacin de la informacin, pero no permiten realizar instanciacin, que
es la capacidad de hacer mltiples copias de las zonas de datos.
11.2 Encapsulamiento
Consiste en unir en la Clase las caractersticas y comportamientos, esto es, las variables y mtodos. Es tener todo esto en
una sola entidad.
En los lenguajes estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstraccin. La
utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como cajas
negras donde slo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque nos interesar
conocer que hace la Clase pero no ser necesario saber cmo lo hace.
11.2.1 Ejemplos
Ejemplo 1: De un televisor, el usuario conoce su apariencia y parte de su funcionamiento. Slo le importa que funcionen
el selector de canales, el video y el audio; no le interesa saber cmo funciona cada una de las partes internas del aparato,
ese detalle slo le interesan al fabricante y al tcnico de servicio.
Ejemplo 2: De un animal no slo es necesario conocer su apariencia; tambin se requiere conocer qu sabe hacer y cmo
reacciona ante determinadas situaciones.
Caja Negra: Un objeto en el que su comportamiento y atributos son conocidos pero no as su trabajo interno, el cual
continua siendo un misterio.
Captulo 12
27
28 CAPTULO 12. RECONOCIMIENTO DE OBJETOS Y CLASES
13.1 Objetos
En Java, un objeto se dene como una estructura que encapsula atributos (caractersticas) y comportamientos (procedi-
mientos) de una entidad con un papel bien denido en una aplicacin.
13.3 Ejemplos
En un aula de clases observamos los siguientes objetos:
Alumno
Profesor
Mesa
Silla
Mesa banco
Pizarrn
Interaccin entre objetos: Los objetos no slo tienen atributos relacionados con su forma fsica sino que, adems, exhiben
comportamientos especcos de su clase.
29
30 CAPTULO 13. RECONOCIMIENTO DE OBJETOS Y CLASES EN EL MUNDO REAL
13.4 Clases:
Es la denicin de un objeto. Cuando se programa un objeto y se denen sus caractersticas y funcionalidades, realmente
se programa una clase. Una clase es la descripcin de un conjunto de objetos; consta de datos que resumen caractersticas
comunes de un conjunto de objetos. Se pueden denir muchos objetos de la misma clase. Dicho de otro modo, una clase
es la declaracin de un tipo objeto. Las clases son similares a los tipos de datos y equivalen a mtodos y plantillas que
describen como se construyen ciertos tipos de objetos. Cada vez que se construye un objeto a partir de una clase estamos
creando lo que se llama una instancia de esa clase. Por consiguiente, los objetos no son ms que instancias de una clase,
una instancia es una variable de tipo objeto. En general instancia de una clase y objeto son trminos intercambiables.
13.5. ORIGEN DEL TEXTO Y LAS IMGENES, COLABORADORES Y LICENCIAS 31
13.5.2 Imgenes
Archivo:Conditional_flowchart.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/7/7a/Conditional_flowchart.svg Licencia: CC
BY-SA 3.0 Colaboradores: Trabajo propio Artista original: Ambigraphe