Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos de Programación Texto Completo
Fundamentos de Programación Texto Completo
Fundamentos de programación
por es.wikibooks.org
Introducción
¡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.
Algoritmos y programas
¿Qué es un algoritmo?
Por algoritmo, se entiende a un conjunto finito de instrucciones que se deben seguir para resolver un problema. No
obstante, desde el punto de vista de la programación de ordenadores, la definición del algoritmo como la especificación
de una serie de pasos, es incompleta. Debe observarse que los ordenadores son equipos que tienen limitaciones físicas en
cuanto a capacidad de almacenamiento y procesamiento. Por consiguiente debemos refinar un poco más nuestra
definición de algoritmo para hacerla aplicable de manera efectiva en el ámbito de la informática.
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 más 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 obtención de una respuesta o solución de un problema, y cuantitativos son todos aquellos pasos o instrucciones que
involucran cálculos numéricos para llegar a un resultado satisfactorio.
Características:
Definición: Un algoritmo se entiende como una sucesión finita de pasos que debe cumplir las siguientes
especificaciones:
Cada paso del algoritmo debe estar bien definido: Esto significa que la definición de un paso debe
ser suficientemente clara, para que una persona pueda entenderla y realizarla. Si bien no se puede dar
un criterio determinístico para decidir si un paso está bien definido, debemos apelar al sentido común
para decidir que un paso está especificado sin ambigüedades.
Un algoritmo debe tener un principio y un fin: Un programa es un algoritmo escrito con un objetivo:
conseguir un resultado. No tiene sentido crear un programa que espere ~ segundos (infinitos segundos)
y luego escriba en pantalla "Hola Mundo!", del mismo modo que un algoritmo debe tener un principio
bien definido (tampoco tiene sentido el algoritmo "haz nada, y luego escribe Hola Mundo!")
Modelos computacionales
Un modelo computacional es un modelo matemático en las ciencias de la computación que requiere extensos recursos
computacionales para estudiar el comportamiento de un sistema complejo por medio de la simulación por computadora.
El sistema bajo estudio es a menudo un sistema complejo no lineal para el cual las soluciones analíticas simples e
intuitivas no están fácilmente disponibles. En lugar de derivar una solución analítica matemática para el problema, la
experimentación es hecha con el modelo cambiando los parámetros del sistema en la computadora, y se estudian las
diferencias en el resultado de los experimentos. Las teorías de la operación del modelo se pueden derivar/deducir de estos
experimentos de computacionales.
Ejemplos de modelos de computacionales comunes son modelos del pronóstico del tiempo, modelos del Earth Simulator,
modelos de simulador de vuelo, modelos de plegamiento molecular de proteínas, y modelos de red neuronal.
Se considera a los algoritmos al conjunto de pasos ordenados, que permiten resolver un problema bajo una secuencia
lógica, es decir, que tenga inicio y fin (sentido concreto).
Debido a lo difícil que es escribir en lenguaje máquina, e incluso en ensamblador, se crearon diferentes lenguajes de
programación, más o menos parecidos al inglés actual y a cómo se redacta un algoritmo. Estos lenguajes proveen de
cosas tan complejas para una máquina como los bucles for. Los compiladores se encargan de traducir esos ficheros al
lenguaje ensamblador que corresponda, el ensamblador de traducirlos a lenguaje máquina y el enlazador de juntar todo
ese código máquina en un solo archivo, el programa. Y el microprocesador, se encarga de ir encendiendo o apagando
transistores según lo que le diga el código máquina.
Es fácil entender el lenguaje de alto nivel en comparación al lenguaje máquina pero de la evolución surgieron.
Lenguaje de máquina
Cada tipo de microprocesador contiene un conjunto de instrucciones que realizan ciertas operaciones sobre una o más
palabras de bits; las instrucciones van también codificadas en bits. No queremos hacer aquí una discusión sobre
arquitectura de ordenadores, por lo que con esto debe valer por ahora.
Se entiende que escribir sólo con dos teclas, el 0 y el 1, es incómodo. Históricamente, a la hora de diseñar un algoritmo
para que el ordenador ejecutara, se escribía mediante unas etiquetas mnemotécnicas; éste fue el origen del lenguaje
ensamblador.
Por ejemplo quizás en una cierta arquitectura la instrucción de borrado de memoria (Memory Clear, en inglés)
corresponda al código 010. Pronto surgieron programas que leían, siguiendo el ejemplo, MC, y lo sustituían por 010.
Lenguaje ensamblador
las instrucciones eran difíciles de recordar, ya que no guardaban relación con la operación 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 código máquina de manera que a una secuencia concreta
de bits que realiza una operación se le pone un nombre sencillo que identifique la operación. Esta traducción a un
lenguaje más sencillo para las personas resulta en una mayor comodidad para el programador, además el proceso de
traducción inverso de lenguaje ensamblador a código máquina puede ser realizado por un sencillo programa.
Sobre este lenguaje ensamblador inicial se fueron construyendo otros lenguajes de programación de más alto nivel; esto
significa que ocultan ciertos aspectos de manera que el programador no se ha de preocupar sobre si en la máquina que
quiere que se ejecute el algoritmo el MC corresponde a la instrucción 101 o 010. Se produce, por tanto, una abstracción
de datos, muy deseable para poder utilizar el trabajo de otros para avanzar un paso más en vez de tener que "reinventar la
rueda", como se suele decir. Estos textos en los que se codifican los algoritmos son los códigos fuente; siguen las reglas
sintácticas de un determinado lenguaje de programación. Existen numerosos lenguajes de programación, y se utiliza uno
u otro según sus características se adecúen más o menos a la resolución de nuestro problema.
Traductores e intérpretes
Tras la escritura del algoritmo, un compilador o un intérprete (otros programas) transformarán el texto en código máquina
que el procesador es capaz de ejecutar.
Toda esta abstracción permite resolver problemas alejados de sumar números binarios, como pueden ser la consulta de
esta misma enciclopedia o jugar a un videojuego en 3D.
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 intérprete analiza el fichero de código 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 intérprete en cada uno de esos ordenadores, específicamente compilados para ellos, basta.
Sus desventajas:
Ejemplos de lenguajes interpretados son PHP, Perl, Python, Tcl/Tk, BASIC, LISP (en algunas de sus versiones)...
coger plato
mientras haya suciedad
echar jabon
pasar el estropajo por el plato
si plato es azulado
1 coger plato
2 echar jabon
3 pasar el estropajo por el plato
4 si hay suciedad ir a la instrucción 2
5 si el plato no es azul ir a la instrucción 7
6 ponerlo con los azules
7 si hay más platos ir a la instrucción 1
Estructura de un programa
En la programación estructurada hay un inicio y un fin perfectamente bien definido de acuerdo al diagrama de flujo que
se planteó al concebir la idea del programa.
Un programa bien estructurado debería tener algún subprograma que capture cualquier error dentro del programa
principal o de cualquier subprograma dentro de la aplicación 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 corrección de estos errores se hace uso de los comentarios agregados en el código fuente.
Variables y constantes
Como hemos visto, el ordenador sigue una serie de instrucciones. Pero esas instrucciones tienen que operar sobre una
serie de datos. El ordenador típico sólo procesa una instrucción a la vez, por lo que necesita 'espacios de memoria' donde
guardar o depositar, a modo de cajones, por usar un símil 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 podía decir al ordenador, por ejemplo: 'Ejecuta la instrucción de esa posición de
memoria' o también 'En esa posición de memoria está guardada mi edad, imprímela por pantalla'. Todo esto se deriva del
hecho de que los programas también son datos. Esta ambigüedad presenta numerosos inconvenientes cuando se
producen errores, como el lector se imaginará fácilmente: 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 cuáles sean.
Quizás suene más complicado de lo que es. Un ejemplo: Queremos sumar dos números. Nuestro programa tendrá que
tener tres cajones: Uno para cada número y otro para el resultado. Cada cajón tiene un nombre en vez de una posición de
memoria, de manera que sólo hay que nombrarlo:
He aquí nuestro programa. Como cabe pensar, un procesador no tiene la instrucción "Imprime por pantalla"; esto es una
llamada a otra porción de código que, gracias a la abstracción, 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. Típicamente,
existirán datos que no pensamos modificar; no querremos que el usuario tenga que introducirlos cada vez, pues son de
naturaleza más constante que otros (como puede ser el valor Pi para calcular el perímetro o área de un círculo). Para
evitar modificarlos por error, podemos pedir al sistema variables especiales, que no puedan ser reescritas. Son las
Constantes. Un ejemplo:
Constante PI = 3'14159265
Variable R
Variable Resultado;
Leer número 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 matemáticas.
Nótese también la clara separación entre estructuras de datos y algoritmos. Según los lenguajes, esto puede ser o no
obligatorio, pero es recomendable en aras de una mayor claridad del trabajo.
Comentarios
El útil concepto del comentario: son líneas de texto que el compilador o el intérprete no consideran como parte del
código, con lo cual no están sujetas a restricciones de sintaxis y sirven para aclarar partes de código en posteriores
lecturas y, en general, para anotar cualquier cosa que el programador considere oportuno.
Uno como programador debe tener como prioridad documentar nuestro código fuente ya que al momento de depurar nos
ahorrará mucho tiempo de analisis para su corrección o estudio.
Los programadores profesionales tienen la buena costumbre de documentar sus programas con encabezados de texto
(encabezados de comentarios) en donde describen la función que va a realizar dicho programa, la fecha de creación, el
nombre del autor y en algunos casos las fechas de revisión y el nombre del revisor.
Por lo general algunos programas requieren hacer uso de llamadas a subprogramas dentro de una misma aplicación por lo
que cada subprograma debería estar documentado, describiendo la función que realizan cada uno de estos subprogramas
dentro de la aplicación.
Estructuras de control
Las estructuras de control pueden dividirse en dos: Estructuras de control Condicional y Estructuras de control
Repetitivo.
Las estructuras de control condicional son las que incluyen alternativas de seleccion con base al resultado de una
operación booleana, como por ejemplo, una comparación (A==B). Según la expresión sea cierta o falsa, se ejecutará una
sección de código u otro. Es el caso de la sentencia IF THEN ELSE de Pascal o Basic:
IF A==0 THEN
PRINT "A vale 0"
ELSE
PRINT "A no vale 0"
Otra sentencia de control son las de tipo SWITCH CASE. En este tipo de sentencias se especifica 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 ejecución de nuestro código son los BUCLES o CICLOS.
Consisten en un método que permite repetir un trozo de código varias veces.
- Bucle FOR:
El bucle FOR consiste en una sentencia que engloba un grupo de instrucciones y tiene una variable cuyo valor se va
modificando en cada vuelta. En general se utiliza cuando sabemos cuántas veces tenemos que repetir el código.
FOR A=0 TO 9 Especificamos 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 final del bloque de instrucciones que se
repiten
- Bucle WHILE:
El bucle WHILE consiste en un bucle en el que el código se repite mientras se cumpla alguna condición booleana (es
decir, una expresión 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 condición.
Estructuras de datos
a=2
b=1
suma = a + b
imprimir suma
Estructura de una aplicación. Cualquier programa que se realice debe llevar una estructura para disminuir la tarea de
depuración ya que esta labor lleva más tiempo del estimado.
Si eres principiante en el área de programación debes definir el programa a realizar, documentar cada uno de los pasos
que realizas en tu programa, debes de considerar algún metodo de captura de errores, etc.
En este subcapítulo abarcaremos el cómo estructurar una aplicación para mejorar o disminuir el tiempo en depuración, así
como localizar más rápidamente los errores.
Puedes buscar en Internet el concepto "pseudocódigo", que no es más que la escritura de un algoritmo en un lenguaje
más cercano al natural. Es decir, la orden en lenguaje Javascript que repetiría el proceso de quitar suciedad añadiendo
agua y jabón mientras se frota sería la siguiente:
function frotar(cuanto){
var veces = 0;
for (veces = 0; suciedad < 0 || veces < cuanto ; veces++){
suciedad = suciedad - (agua + jabón);
}
}
En primer lugar, es muy recomendable hacer un esquema sobre el papel con toda clase de datos que se vayan a utilizar.
Por ejemplo, si queremos hacer un programa para controlar una empresa dedicada al alquiler de coches, podríamos
necesitar:
por un lado, y:
Enlaces externos
Pseudocódigo De Programación (http://www.juarbo.com/pseudocodigo-de-programacion/)
Ejemplos de Pseudocódigos (http://abcalgoritmos.com/)
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 programación emplea la instrucción "goto". Una instrucción "goto" permite pasar
el control a cualquier otra parte del programa. Cuando se ejecuta una instrucción "goto" la secuencia de ejecución del
programa continúa a partir de la instrucción indicada por "goto". De esta forma, para comprender como funciona un
programa es necesario simular su ejecución. Esto quiere decir que en la mayoría de los casos es muy difícil comprender
la lógica de un programa de este tipo. Algunos compiladores crean referencias cruzadas a las instrucciones apuntadas por
los "goto", posibilitando una navegación rápida a través del código fuente. Sin embargo, es algo común en muchos
lenguajes de programación el empleo de una variable en asociación con el destino del "goto", no permitiendo la creación
automática de tablas de referencias cruzadas. Existen problemas similares en algunos lenguajes de programación
estructurada, por ejemplo cómo implementar las vistas en diferentes idiomas, de forma que varias personas puedan
visualizar la misma información, pero cada una en su idioma.
Esto se opone a la idea de utilizar algún tipo de abstracción que permita comprender cómo funciona realmente un
programa, que es lo que hace la programación estructurada.
Por este motivo, Dijkstra propuso la eliminación de la sentencia "goto".
La estructura no es mas que la forma que sigue ese lenguaje, por ejemplo:
abrir
ejecutar acción 1.
ejecutar acción 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 especificar el tipo de ella. (la estructura quedaria mas o menos asi)
<abrir>
<cerrar> Esta claro que cada lenguaje usa sus propios terminos para definir sus tipos de datos. (En C quedaria así)
#include <stdio.h> //cabezera estandar de entrada y salida (aqui estan los ficheros 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;
float c = 1.25;
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" (http://www.google.es/search?hl=es
&q=tipo+dato+programacion&btnG=Buscar&meta=)
Y dependiendo el tipo de datos numérico se podrá almacenar una cantidad de dato dependiendo la precisión 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
carácter usara un byte por cada carácter, es por eso que se especifica que es lo que se necesita.
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 programación se anticipa
la instrucción "DIM" que declara y asigna espacio para almacenar una o más variables).
Ej:
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).
Archivos
Un archivo es un fichero (dato) almacenado en algún recurso de memoria, generalmente en Disco Duro, pero
dependiendo del uso (en ciertos casos) son almacenados en RAM.
Un Fichero tiene muchas funciones, en programación, estos almacenan códigos o parte de ellos (en ocasiones se divide el
código en varios archivos). También es posible que se necesita almacenar datos que el usuario introduce ("Como sus
datos, nombre de usuario y contraseña, etc.), estos se empaquetan en un archivo y podrán 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 librerías, pero creo prudente hacer diferencias, una librería 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).
Herramientas de desarrollo
Las herramientas de desarrollo son aquellos programas o aplicaciones que tengan cierta importancia en el desarrollo de
un programa (programación). 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).
Compiladores
Los compiladores son programas que «traducen» un fichero de código fuente de cualquier lenguaje al lenguaje
ensamblador y lo llama, cuando sea necesario, igual que al enlazador (o linker). Los más importantes son GCC (GNU
Compiler Colector) para C, G++ para C++, G77 para Fortran 77 y Microsoft Visual C++, entre otros
Ensambladores
Los ensambladores son aquellos programas que se encargan de desestructurar el código en lenguaje ensamblador y
traducirlo a lenguaje binario. Los archivos en lenguaje binario se enlazan posteriormente en un único fichero, el
ejecutable.
Enlazadores (Linkers)
Son los programas que enlazan varios ficheros objeto en lenguaje binario para crear un único fichero, el ejecutable del
programa.
Depuradores (Debuggers)
Como su nombre lo indica, sirven para corregir los errores o fallas de la programación (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 erróneos...).
El más importante es GDB. Actualmente casi todas las IDEs incluyen uno, o deberían.
Editores de texto
Son tan importantes como un compilador pues es el editor de la programación; actualmente incluyen funciones
específicamente dedicadas a la programación, como resaltado de sintaxis, y autoindentación, entre otras
Otras herramientas
No son tan importantes como las anteriores, pero también tienen su importancia:
IDEs (Interfaz de Desarrollo Estructurada): juntan en un sólo programa editor de texto, compilador,
enlazador, ensamblador, depurador... Ejemplos de ellas son Anjuta, Dev-Cpp, Codeblocks...
Programas de indentación: sirven para aclarar el código escrito confusamente. El único que conozco es
indent. De todas formas, un editor de texto medianamente decente suele incluir sus propias funciones
de indentado.
Hola mundo
ABAP/IV
REPORT HOLAMUNDO.
WRITE '¡Hola, mundo!'.
ABC
WRITE "¡Hola mundo!"
ActionScript
trace("¡Hola, mundo!");
ADA
with Ada.Text_IO;
procedure Hola_Mundo is
begin
Ada.Text_IO.Put_Line("¡Hola, mundo!");
end Hola_Mundo;
ASP
<%
Response.Write("Hola Mundo")
%>
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
AWK
#!/bin/awk -f
BEGIN{
print "¡Hola, mundo!";
}
Bash
#!/bin/bash
echo "Hola mundo"
Basic
PRINT "Hola Mundo"
C
#include <stdio.h>
int main(void)
{
printf("Hola, mundo!\n");
return 0;
}
C++
#include <iostream>
int main() {
C++/CLI
int main()
{
System::Console::WriteLine("Hola, mundo!");
return 0;
}
C#
using System;
class MainClass
{
public static void Main()
{
Console.WriteLine("¡Hola Mundo!");
}
}
COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN SECTION.
DISPLAY "Hola mundo"
STOP RUN.
ColdFusion
<cfset variable="Hola Mundo">
<cfoutput>#variable#</cfoutput>
MS-DOS
En sistemas operativos de la familia DOS como MS-DOS o PC-DOS que usan el Intérprete de comandos
COMMAND.COM o sistemas que usan como intérprete 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:
Eiffel
class HOLA_MUNDO
create
make
feature
make is
do
io.put_string("%nHola mundo%N")
end
end -- HOLA_MUNDO
Erlang
-module(hola).
-export([hola_mundo/0]).
hola_mundo() -> io:fwrite("Hola mundo!\n").
Fortran
PROGRAM HOLA
PRINT *, '¡Hola, mundo!'
END
Haskell
holaMundo :: IO ()
holaMundo = do putStrLn ("Hola mundo!")
HTML/JavaScript
<html>
<head>
<title>Hola Mundo</title>
<script type="text/javascript">
alert("¡Hola mundo!");
</script>
</head>
<body>
</body>
</html>
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
Java
public class HolaMundo
{
public static void main(String[] args)
{
System.out.println("¡Hola, mundo!");
}
}
clase tarea
publicos:
mensajes:
Principal muestre "Hola Mundo"
LISP
(format t "¡Hola, mundo!")
Liberty BASIC
print "¡Hola, mundo!"
MATLAB
close all; % cierra todas las ventanas que pueda haber
clear all; % borra todas las variables
clc; % limpia la pantalla
NATURAL
WRITE '¡Hola, mundo!'.
Object REXX
Utilizando los métodos de REXX clásico:
Utilizando objetos:
.output~say('Hola, mundo.')
.output~lineout('Hola, mundo.')
.output~charout('Hola, mundo.'||eol) -- eol definido previamente
Pascal
Program HolaMundo;
begin
Writeln('¡Hola, mundo!');
end.
NetREXX
Utilizando la instrucción say que proviene de REXX clásico:
System.out.println("¡Hola mundo!");
OpenInventor
#Inventor V2.1 ascii
Text3 {
string "Hola mundo"
}
Perl
#!/usr/bin/perl
print "Hola, mundo.\n";
PHP
<?php
echo "Hola Mundo";
?>
Python
print "Hola mundo"
QBasic
PRINT "Hola mundo"
REXX
say "Hola Mundo"
Ruby
puts "Hola Mundo"
SAPScript
MAIN
P1 Hola Mundo
/
Seed7
$ include "seed7_05.s7i";
Smalltalk
Transcript show: '¡Hola, mundo!'
SQL
Variante de Oracle:
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.*
Visual Basic
Sub Main()
MsgBox "¡Hola, mundo!"
End Sub
X3
SubProg HOLAMUNDO()
Infbox "Hola Mundo"
End
xBase
? "Hola Mundo"
La Abstracción y el Encapsulamiento
Sumario
Introducción
Algoritmos y programas
¿Qué es un algoritmo?
Modelos computacionales
Programas: Algoritmos para ser ejecutados por un ordenador
¿Qué instrucciones ejecuta un ordenador?
Lenguaje de máquina
Lenguaje ensamblador
Programación para seres humanos
Lenguajes de alto nivel
Traductores e intérpretes
Lenguajes interpretados vs. lenguajes compilados
Técnicas básicas de programación
Antes de empezar un programa
Estructura de un programa
Variables y constantes
Comentarios
Estructuras de datos y de control
Estructuras de control
Estructuras de datos
Enlaces externos
Introducción a la programación estructurada
Introducción
Introducción a las estructuras de datos y tipos de datos
Aplicaciones de los tipos de datos estructurados
Archivos
Herramientas de desarrollo
Compiladores
Ensambladores
Enlazadores (Linkers)
Depuradores (Debuggers)
Editores de texto
Otras herramientas
Hola mundo
ABAP/IV
ABC
ActionScript
ADA
ASP
ASSEMBLY
AWK
Bash
Basic
C
C++
C++/CLI
C#
COBOL
ColdFusion
MS-DOS
Eiffel
Erlang
Fortran
Haskell
HTML/JavaScript
INTERCAL
Java
Programación en Lexico (POO en castellano)
LISP
Liberty BASIC
MATLAB
NATURAL
Object REXX
Pascal
NetREXX
OpenInventor
Perl
PHP
Python
QBasic
REXX
Ruby
SAPScript
Seed7
Smalltalk
SQL
Unlambda
Visual Basic
X3
xBase
La Abstracción y el Encapsulamiento
Abstracción
Ejemplos de abstracción
Procedimientos
Modulos
Tipo abstracto de dato
Encapsulamiento
Ejemplos
Reconocimiento de Objetos y Clases
Reconocimiento de Objetos y Clases en el mundo real
Objetos
Características de los Objetos
Ejemplos
Clases:
Abstracción
La abstracción, un principio por el cual se aísla toda aquella información que no resulta relevante a un determinado nivel
de conocimiento.
Abstracción: Es una descripción de especificación que enfatiza algunos de los detalles o propiedades de algo. La
abstracción consiste en captar las características esenciales de un objeto, así como su comportamiento. Es un método por
el cual abstraemos valga la redundancia, una determinada entidad de la realidad de sus características y funciones que
desempeñan, estos son representados en clases por medio de atributos y métodos de dicha clase.
Ejemplos de abstracción
Ejemplo 1: ¿Qué características podemos abstraer de los automóviles? o ¿Qué características semejantes tienen todos los
automóviles?
Características: Marca, Modelo, Número de chasis, Peso llantas o cauchos, Puertas, Ventanas... Comportamiento:
Acelerar, Frenar, Retroceder...
Ejemplo 2: La gerencia de un taller mecánico necesita un sistema para controlar los vehículos que ingresan a sus
instalaciones. En este caso, las características esenciales de la clase vehículo son: Marca, Modelo, Color, Falla detectada,
Nombre del Propietario, Dirección del Propietario, Teléfono del Propietario...
A esto se le llama abstracción. En general un programa no es más que una descripción abstracta de un procedimiento o
fenómeno que existe o sucede en el mundo real.
Procedimientos
Modulos
Es una técnica que proporciona la posibilidad de dividir sus datos y procedimientos en una parte privada y una parte
pública. Proporcionan un método efectivo de ocultación de la información, pero no permiten realizar instanciación, que
es la capacidad de hacer múltiples copias de las zonas de datos.
Un tipo abstracto de dato (TAD) es un tipo de dato definido por el programador que se puede manipular similarmente a
los tipos de datos definidos por el sistema. Un tipo abstracto de dato corresponde a un conjunto (puede ser de tamaño
indefinido) de valores legales de datos y un número de operaciones primitivas que se pueden realizar sobre esos valores.
Para construir un tipo abstracto de dato se debe:
Encapsulamiento
Consiste en unir en la Clase las características y comportamientos, esto es, las variables y métodos. 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 abstracción.
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como
cajas rojas donde sólo 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 cómo lo hace.
Ejemplos
Ejemplo 1: De un televisor, el usuario conoce su apariencia y parte de su funcionamiento. Sólo le importa que funcionen
el selector de canales, el video y el audio; no le interesa saber cómo funciona cada una de las partes internas del aparato,
ese detalle sólo le interesan al fabricante y al técnico de servicio.
Ejemplo 2: De un animal no sólo es necesario conocer su apariencia; también se requiere conocer qué sabe hacer y cómo
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.
Objetos: Los principios de la definición de objetos ayudan a los programadores a hacer un código más robusto,
mantenible y seguro; porque se pueden aislar a cada uno de esos objetos y tratarlos como un ente único, con su propia
personalidad, sin que haya cientos de características que tengamos que tener presentes, tal como se hacía en la
programación orientada a procedimiento. Lo cual, desde el punto de vista económico, que nunca hay que dejar de tener
presente, si resulta viable, ya que los objetos bien diseñados pueden ser utilizados en diversas aplicaciones, con lo cual el
tiempo de desarrollo total se reduce.
En Java, un objeto se define como una estructura que encapsula atributos (datos de configuración, propiedades) y
comportamientos (procedimientos) de una entidad con un papel bien definido en una aplicación. Cada objeto tiene:
A continuación se muestran algunas de las propiedades que se pueden aplicar a los objetos, tal como se han definido:
Casi todo puede ser considerado un objeto. El dinero, el helicóptero, una bicicleta, los perros, el coche. Los objetos
representan cosas, simples o complejas, reales o imaginarias. Algunas cosas no son objetos, sino atributos, valores o
características de un objeto. Es decir, no todas las cosas son objetos, ni son consideradas normalmente como objetos.
Algunas de ellas son simplemente atributos de los objetos como el color, el tamaño y la velocidad. Los atributos reflejan
el estado de un objeto, la velocidad del objeto “avión”, o el tamaño de un objeto edificio.
Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos.
Los objetos pueden tener partes públicas y privadas, a menudo llamadas miembros.
1.- Miembros Públicos: Los miembros públicos (interfaz o métodos) de una clase describen qué es lo que pueden hacer
los objetos de esa clase.
- Interacciones entre Objetos: Los objetos contribuyen al comportamiento del sistema colaborando con otros objetos.
El modelado de objetos no sólo modela los objetos en un sistema, sino también sus interrelaciones. Para realizar su tarea,
un objeto puede delegar trabajos en otro. Este otro puede ser parte integrante de él o ser cualquier objeto del sistema.
- Intercambio de Mensajes: Los objetos interaccionan enviándose mensajes unos a otros. El método de envío de
mensajes depende de la naturaleza de los objetos modelados.
Los Objetos de Software, al igual que los objetos del mundo real, también tienen características y comportamientos. Un
objeto de Software mantiene sus características en una o más “variables”, e implementa su comportamiento con
“métodos”. Un método es una función o subrutina asociada a un objeto.
Clases: En el mundo real, normalmente se tiene muchos objetos del mismo tipo. Por ejemplo: Un teléfono celular es sólo
uno de los miles que hay en el mundo. Si se habla en términos de la programación orientada a objetos, se puede decir que
el objeto celular de cualquier tipo es una instancia de una clase conocida como “celular”. Los celulares tienen
características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas,
enviar mensajes multimedia, transmisión de datos, etc.). Cuando se fabrican los celulares, los fabricantes aprovechan el
hecho de que los celulares comparten características comunes y construyen modelos o plantillas comunes, para que a
partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla se le llama Clase, y
a los equipos que se sacan a partir de esta se le llaman objetos.
Esto mismo se aplica a los objetos de Software, se puede tener muchos objetos del mismo tipo y mismas características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. No existe diferencia entre un objeto y una
instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una
clase.
- Comportamiento: Relacionado con su funcionalidad y determina las operaciones que este puede realizar o a las que
puede responder ante mensajes enviados por otros objetos.
- Identidad: Es la propiedad que permite a un objeto diferenciarse de otros. Generalmente esta propiedad es tal, que da
nombre al objeto.
Los objetos, concretos y abstractos, están a nuestro alrededor, forman nuestro entorno. Podemos distinguir cada objeto en
base a sus características y comportamientos.
Ejemplos
En un aula de clases observamos los siguientes objetos:
• Alumno
• Profesor
• Mesa
• Silla
• Mesa banco
• Pizarrón
Interacción entre objetos: Los objetos no sólo tienen atributos relacionados con su forma física sino que, además,
exhiben comportamientos específicos de su clase.
Observamos que en el aula hay varios objetos alumno, por lo que pensamos en el grupo de alumnos, al que
denominaremos como la clase alumno. De igual manera, cada materia es impartida por un profesor; el conjunto de
profesores forman la clase Profesor. Pudiéramos extender nuestro análisis al pizarrón, la mesa, la silla,, al conjunto de
mesa bancos, etc.
Clases:
Es la definición de un objeto. Cuando se programa un objeto y se definen sus características y funcionalidades, realmente
se programa una clase. Una clase es la descripción de un conjunto de objetos; consta de datos que resumen características
comunes de un conjunto de objetos. Se pueden definir muchos objetos de la misma clase. Dicho de otro modo, una clase
es la declaración de un tipo objeto. Las clases son similares a los tipos de datos y equivalen a métodos 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 más que instancias de una clase,
una instancia es una variable de tipo objeto. En general instancia de una clase y objeto son términos intercambiables.
Obtenido de «https://es.wikibooks.org/w/index.php?title=Fundamentos_de_programación/Texto_completo&oldid=246504»
Esta página se editó por última vez el 9 mar 2015 a las 19:01.
El texto está disponible bajo la Licencia Creative Commons Atribución-CompartirIgual 4.0; pueden aplicarse términos adicionales.
Véanse los Términos de uso para más detalles.