ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

FUNDAMENTOS DE PROGRAMACION


Enviado por   •  13 de Enero de 2014  •  7.933 Palabras (32 Páginas)  •  296 Visitas

Página 1 de 32

Fundamentos de programación

INTRODUCCION

¡Bienvenido! 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 nóvel 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

Contenido

1 ¿Qué es un algoritmo? 2 Modelos computacionales 3 Programas: Algoritmos para ser ejecutados por un ordenador 4 ¿Qué instrucciones ejecuta un ordenador? 4.1 Lenguaje de máquina 4.2 Lenguaje ensamblador 5 Programación para seres humanos 5.1 Lenguajes de alto nivel 5.2 Traductores e intérpretes 5.3 Lenguajes interpretados vs. lenguajes compilados

¿Qué es un algoritmo?

Si se consulta en la Wikipedia la definición de algoritmo, se entiende que éste es 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 coger 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 obtencion de una respuesta o solucion de un problema, y cuantitativos son todos aquellos pasos o instrucciones que involucran calculos numericos para llegar a un resultado sastifactorio.

Características: Tiene que ser preciso. Tiene que estar bien definido. Tiene que ser finito. La programación es adaptar el algoritmo al ordenador. El algoritmo es independiente según donde lo implemente.

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 de el 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).

Programas: Algoritmos para ser ejecutados por un ordenador

Un ordenador o computadora está, desde que se enciende hasta que se apaga totalmente, ejecutando un algoritmo. Por lo general, estos algoritmos, escritos para que los entienda una máquina, terminan siendo vagos y confusos para la mayoría de quienes no han estudiado programación. Una máquina no puede entender "escribe Hola Mundo!" porque no sabe lo que es "escribe" ni lo que es una letra o un espacio, ni lo que es una pantalla. En cambio, puede entender "mov eax, 0x23afb31" (escribir en el registro eax el número 0x23afb31), aunque nosotros no. Un ordenador es solo un circuito electrónico, no funciona a base de magia ni nada por el estilo. Debido a lo dificil 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 facil entender el lenguaje de alto nivel en comparacion al lenguaje maquina pero de la evolucion surgieron.

¿Qué instrucciones ejecuta un ordenador? 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 memoté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

El código máquina tenía dos grandes inconvenientes para los programadores: 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.

Programación para seres humanos

Lenguajes de alto nivel 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.

Lenguajes interpretados vs. lenguajes compilados

Los lenguajes interpretados son como respuesta a la dificultad de manejo de los compilados. Un lenguaje compilado es sólo apto para un sistema operativo o formato de ejecutable (en GNU/Linux y Unix System V es ELF, en Windows o incluso en BSD es muy diferente), y es tedioso de manejar: para comprobar bugs o errores el computador debe: Compilar cada uno de los ficheros de código. Ensamblarlos en ficheros objeto. Enlazar los ficheros objeto. Volverlos a ensamblar.

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: Consume muchos recursos de memoria, sobre todo RAM. Se depende del intérprete: si no tienes instalado el intérprete que corresponda, no podrás ejecutar el programa. Ejemplos de lenguajes interpretados son PHP, Perl, Python, Tcl/Tk, BASIC, LISP (en algunas de sus versiones)...

Técnicas básicas de programación

La programación estructurada sigue tres reglas: la secuencia, la iteración y la decisión. La primera de ellas indica que las instrucciones del código se leerán de principio a fin; la segunda indica que, según cierta condición, un número de instrucciones podrían repetirse un numero determinado de veces, y la tercera indica que según unas ciertas condiciones se ejecutarán o no un conjunto de instrucciones. En el siguiente algoritmo para limpiar platos se aprecian estas tres características. La indentación de las instrucciones indican cuáles son englobadas y cuáles no por sus predecesoras.

mientras haya platos

coger plato

mientras haya suciedad

echar jabon

pasar el estropajo por el plato

si plato es azul

ponerlo con los azules

En código no estructurado, quedaría algo más complejo.

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

En programas más grandes, esto es muchísimo más complicado. Ahora conocemos la ejecución de los algoritmos. Sin embargo, un programa se compone tanto de algoritmos como de una estructura de datos sobre los que operar.

Contenido 1 Antes de empezar un programa 1.1 Estructura de un programa 1.2 Variables y constantes 1.3 Comentarios 2 Estructuras de datos y de control 2.1 Estructuras de control 2.2 Estructuras de datos 3 Enlaces externos 4 Enlaces externos

Antes de empezar un programa

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 promocionan 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:

Necesito cajones A, B y Resultado

Lee un número y guárdalo en A

Lee un número y guárdalo en B

Suma A y B y guárdalo en Resultado

Imprime el contenido de Resultado

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 sóla 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:

Comentario: Este programa calcula el área de un círculo

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 datos y de control 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á un trozo 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 lo 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. Hay básicamente 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 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.

WHILE A<>(B*2) DO Aquí especificamos la expresión 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 especificar donde acaba el bucle y el código.

Estructuras de datos

creo a como entero creo b como entero creo suma como entero 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);

}

} Mientras que el algoritmo o pseudocódigo quedaría así: función frotar (cuantas veces lo hago)

variable veces que llevo = 0

repetir (desde que vecesquellevo = 0 mientras la suciedad < 0 ó vecesquellevo < cuantasveceslohago; aumentar vecesquellevo de una en una)

suciedad = suciedad - (agua + jabón)

fin repetir

fin funció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: Matrícula del coche Marca del coche Modelo del coche Color del coche Estado del coche (si está alquilado, en reparación o disponible) Situación del coche (en qué lugar del garaje o en qué localidad está) Kilometraje del coche Precio por hora del coche por un lado, y: Nombre del cliente Apellidos del cliente Dirección del cliente DNI del cliente Permiso de conducir del cliente Número de cuenta del cliente ... etc. por otro.

Fundamentos de programación Introducción a la programación estructurada

Introducción La programación estructurada nació como solución a los problemas que presentaba la programación no estructurada, la cual se empleó durante mucho tiempo antes de la invención de la programación 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 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".

Aplicaciones de los tipos de datos estructurados

Los tipos de datos se utilizan para asignar una variable o una constante con un nombre fijo que tome una porción de memoria y que almacene una información en memoria si el tipo de dato es numérico solo almacenara datos numéricos si el tipo de dato es una cadena de caracteres almacenara texto. 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. 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: Char [4] a=Hola; FLOAT: Para numeros decimales. 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). Integer: Para números enteros Ej: Dim a as integer a= 4 String: Para cadena de caracteres Ej: Dim cadena as string cadena="Visual Basci" Double: Para número decimales. 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 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 programacion, estos almacenan codigos o parte de ellos (en ocasiones se divide el codigo en varios archivos). Tambien 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 podran 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 libreria es mas una utilidad para el lenguaje en que programamos, 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).

Contenido 1 Compiladores 2 Ensambladores 3 Enlazadores (Linkers) 4 Depuradores (Debuggers) 5 Editores de texto 6 Otras herramientas

Compiladores

Los compiladores son programas que "traducen" un fichero de código fuente de cualquier lenguaje interpretado al lenguaje ensamblador, y llama cuando sea necesario al ensamblador y al linker (enlazador). Los más importantes son GCC (para C), G++ (para C++), G77 (para Fortran 77), Microsoft Visual C++, etc.

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 serán posteriormente enlazados en un único fichero, el ejecutable. Los más importantes son tas, gas, nasm...

Enlazadores (Linkers)

Son los programas que enlazan varios ficheros objeto en lenguaje binario para crear un único fichero, el ejecutable del programa. El más importante es ld.

Depuradores (Debuggers)

Como su nombre indica, sirve para corregir bugs. Se encargan de ejecutar, paso a paso y advirtiendo de errores, valores de variables, etc. un programa. Son particularmente útiles cuando el programa parece estar bien, pero no da 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 (imaginate como programar sin editores), y actualmente suelen incluir funciones específicamente dedicadas a la programación, como resaltado de sintaxis, autoindentación, etc. Grandes editores de texto son GNU Emacs, Vim, Scite, Notepad++...

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

Contenido 1ABAP/IV 2 ABC 3 ActionScript 4 ADA 5 ASP 6 AWK 7 Bash 8 Basic 9 C 10 C++ 11 C++/CLI 12 C# 13 COBOL 14 ColdFusion 15 MS-DOS 16 Eiffel 17 Erlang 18 Fortran 19 Haskell 20 HTML/JavaScript 21 INTERCAL 22 Java 23 Programación en Lexico (POO en castellano) 24 LISP 25 Liberty BASIC 26 MATLAB 27 NATURAL 28 Object REXX 29 Pascal 30 NetREXX 31 OpenInventor 32 Perl 33 PHP 34 Python 35 QBasic 36 REXX 37 Ruby 38 SAPScript 39 Seed7 40 Smalltalk 41 SQL 42 Unlambda 43 Visual Basic 44 X3

45 xBase

La Abstracción y el Encapsulamiento

Contenido 1 Abstracción 1.1 Ejemplos de abstracción 1.2 Procedimientos 1.3 Modulos 1.4 Tipo abstracto de dato 2 Encapsulamiento 2.1 Ejemplos

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")

%> AWK

1. !/bin/awk -f

BEGIN{

print "¡Hola, mundo!";

} Bash

1. !/bin/bash

echo "Hola mundo" Basic PRINT "Hola Mundo" C

1. include <stdio.h>

int main(void) {

printf("Hola, mundo!\n");

return 0;

} C++

1. include <iostream>

int main() {

std::cout << "¡Hola, mundo!" << std::endl;

return 0;

} 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/2y 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! 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!");

}

} Programación en Lexico (POO en castellano) Aplicación con un solo algoritmo: tarea muestre "Hola mundo" Aplicación con solo clases: clase tarea publicos: mensajes: Principal muestre "Hola Mundo" Aplicación con interfaz gráfica: clase ventana derivada_de "System.Windows.Forms.Form" publicos métodos ventana copie "Hola mundo" en ventana.Text 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

disp('hola mundo'); % muestra el mensaje

NATURAL WRITE '¡Hola, mundo!'. Object REXX Utilizando los métodos de REXX clásico: say "Hola Mundo" call lineout , 'Hola, mundo.' call charout , 'Hola, mundo.'||eol /* eol definido previamente */ 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: say "Hola Mundo" o directamente utilizando clases y métodos Java: System.out.println("¡Hola mundo!"); OpenInventor

#Inventor V2.1 ascii

Text3 {

string "Hola mundo"

}

Perl

1. !/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";

const proc: main is func

begin

writeln("Hola Mundo");

end func;

Smalltalk Transcript show: '¡Hola, mundo!' SQL Variante de Oracle: SELECT 'HOLA MUNDO' FROM DUAL; 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"

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. La abstracción es crucial para comprender este complejo mundo. La abstracción es esencial para el funcionamiento de una mente humana normal y es una herramienta muy potente para tratar la complejidad. La abstracción es clave para diseñar un buen software.

Procedimientos Proporcionó la primera posibilidad de ocultación de información.

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. Tipo abstracto de dato 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: 1. Exponer una definición del tipo. 1. Hacer disponible un conjunto de operaciones. 1. Proteger los datos asociados con el tipo. 1. Permitir instancias múltiples del tipo. 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 negras 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.

Fundamentos de programación Reconocimiento de Objetos y Clases

Reconocimiento de Objetos y Clases

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: - Estado: Se compone de atributos (propiedades estáticas) y valor actual (valores dinámicos) - Comportamiento: Representa cómo un objeto actúa y reacciona. - Identidad: Cada objeto es único, ningún objeto es igual a otro.

A continuación se muestran algunas de las propiedades que se pueden aplicar a los objetos, tal como se han definido: - Los objetos son cosas. - Los objetos pueden ser simples o complejos. - Los objetos pueden ser reales o imaginarios.

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. 2.- Miembros Privados: Describen la implementación, el cómo lo hace.

- 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. 1.- Los objetos interaccionan por paso de mensajes. 2.- Un objeto envía un mensaje a otro. 3.- El otro puede contestar, cambiar su estado, o reaccionar de la manera apropiada. 4.- Los objetos sólo pueden interaccionar a través de su interfaz público.

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.

Instancia: Es un objeto de una clase en particular.

Reconocimiento de Objetos y Clases en el mundo real

Contenido 1 Objetos 2 Características de los Objetos 3 Ejemplos 4 Clases:

Objetos En Java, un objeto se define como una estructura que encapsula atributos (características) y comportamientos (procedimientos) de una entidad con un papel bien definido en una aplicación.

Características de los Objetos - Estado: Conjunto de valores de los atributos en un instante de tiempo dado. El comportamiento de un objeto puede modificar el estado de este.

- 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. • Alumno: Estudia, aprende. • Profesor: Enseña, evalúa. • Mesa: Ordenada, desordenada. • Silla: Ocupada, desocupada. • Mesa banco: Ocupado, desocupado. • Pizarrón: Pintado, borrado

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 objetivos 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.

...

Descargar como  txt (48.9 Kb)  
Leer 31 páginas más »
txt