ejemplo
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previa | |||
| ejemplo [2012/07/28 21:48] – lmateu | ejemplo [2012/07/28 22:07] (actual) – borrado lmateu | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ===== Programa de curso ===== | ||
| - | |||
| - | Programa de curso: | ||
| - | |||
| - | [[http:// | ||
| - | |||
| - | ===== Historia ===== | ||
| - | |||
| - | * En los 50's nace el primer lenguaje de programación: | ||
| - | * En los 60's surge el primer lenguaje con programación estructurada: | ||
| - | * En los 70's aparece Pascal (de Niklaus Wirth). | ||
| - | * También en los 70's aparece C (de Brian Kernighan). | ||
| - | * A fines de los 70's aparece el primer lenguaje orientado a objetos: Smalltalk. | ||
| - | * En los 80's Bjarne Stroustrup enriquece C con clases para facilitar la programación orienta a objetos en un lenguaje eficiente, dando así origen al lenguaje C++. Tampoco es robusto y es complejo. | ||
| - | * En los 90's James Gosling concibe Java como una forma de darle robustez a C++. Es menos complejo que C++. | ||
| - | |||
| - | ===== Ejemplo de pograma en C ===== | ||
| - | |||
| - | Ejemplo estudiado: [[http:// | ||
| - | |||
| - | <code C> | ||
| - | #include < | ||
| - | |||
| - | /* | ||
| - | * Copia la entrada en su salida sin modificaciones | ||
| - | */ | ||
| - | |||
| - | int main() { | ||
| - | |||
| - | int c; | ||
| - | |||
| - | while((c=getchar()) != EOF) | ||
| - | putchar(c); | ||
| - | |||
| - | return 1; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | * Un archivo fuente escrito en el lenguaje C lleva la extensión ' | ||
| - | * Los comentarios se inician con '/ | ||
| - | * C estándar no admite comentarios iniciados con %%'//' | ||
| - | * La función de inicio de un programa se llama main. | ||
| - | * getchar es una función estándar de C que lee un caracter de la entrada estándar. | ||
| - | * Entrega una constante caracterizada como EOF cuando llega al final del archivo. | ||
| - | * putchar es otra función estándar de C que escribe un caracter en la salida estándar. | ||
| - | * El include al inicio del archivo es una directiva para el procesador. | ||
| - | * Observe que una asignación puede aparecer en cualquier lugar en donde es válido colocar una expresión porque = es un operador como +, *, etc. No es usual que en Java un argumento de una expresión sea una asignación, | ||
| - | |||
| - | Pueden probar compilando este programa: | ||
| - | < | ||
| - | % gcc copy.c -o copy | ||
| - | </ | ||
| - | |||
| - | * El comando gcc es el compilador de C de la GNU. | ||
| - | * Recibe como argumento el archivo fuente (copy.c) y produce un archivo binario con instrucciones de máquina ejecutables directamente (copy). | ||
| - | |||
| - | Y jugando a manejar su entrada y salida: | ||
| - | |||
| - | < | ||
| - | % ./copy >out | ||
| - | hola | ||
| - | ^D | ||
| - | % ./copy <out | ||
| - | hola | ||
| - | % ./copy <out >out2 | ||
| - | % ./copy <out2 | ./copy >out3 | ||
| - | % | ||
| - | </ | ||
| - | |||
| - | * Todo programa en Unix tiene una entrada estandar y una salida estandar. | ||
| - | * Además existe una salida estándar de errores. | ||
| - | * La entrada estándar se especifica con '<' | ||
| - | * La salida estándar se especifica con '>' | ||
| - | * Si no se especifica entrada o salida estándar se usa la del shell que corresponde usualmente a teclado y consola respectivamente. | ||
| - | * Entonces los archivos out, out2 y out3 todos son iguales. | ||
| - | |||
| - | Ejecute ahora: | ||
| - | |||
| - | < | ||
| - | % ./copy < out > out4 | ||
| - | % echo $status | ||
| - | 1 | ||
| - | % | ||
| - | </ | ||
| - | |||
| - | * El 1 es el código de retorno y es el valor retornado por main. Cambie ' | ||
| - | * El shell almacena en la variable $status el código de retorno del último programa ejecutado. | ||
| - | |||
| - | ===== Comparación entre C y Java ===== | ||
| - | |||
| - | ==== Generalidades ==== | ||
| - | |||
| - | * Los archivos en C llevan las extensión ' | ||
| - | * El compilador de C (comandos gcc o cc) produce archivos con instrucciones de máquina en binario que son directamente ejecutables por la máquina. | ||
| - | * El compilador de Java (comando javac) produce archivos ' | ||
| - | |||
| - | ==== Programación orientada a objetos ==== | ||
| - | |||
| - | * C no es un lenguaje orientado a objetos: no posee clases. | ||
| - | * En C se definen los tipos compuestos mediante la declaración **struct**. | ||
| - | * La abstracción que describe como se procesan los datos es la // | ||
| - | * En Java un archivo contiene 1 clase (opcionalmente más de 1). No hay funciones aisladas. | ||
| - | * En un archivo en C, las abstracciones declaradas se conocen a partir del punto en donde se declaran. No se pueden referenciar antes. Típicamente se declaran prototipos de las abstracciones (especialmente las funciones) en archivos de encabezado (extensión .h). | ||
| - | * En Java las abstracciones declaradas en un archivo o clase son globalmente conocidas. | ||
| - | |||
| - | ==== Tipos primitivos ==== | ||
| - | |||
| - | * Usan casi los mismos tipos primitivos: char, short, int, long, float, double. | ||
| - | * Pero en C, char es en realidad un entero de 1 byte, mientras que en Java ocupa 2 bytes y solo almacena caracteres. | ||
| - | * En C se puede agregar el atributo unsigned a los enteros. | ||
| - | |||
| - | ==== Strings ==== | ||
| - | |||
| - | * C no posee el tipo String. | ||
| - | * En Java existe la clase predefinida String con métodos bien definidos. | ||
| - | |||
| - | ==== Punteros ==== | ||
| - | |||
| - | La siguiente tabla compara la sintaxis usada para las distintas operaciones con punteros: | ||
| - | |||
| - | ^ ^ Java ^ C ^ | ||
| - | | declaración | < | ||
| - | | asignación de memoria | < | ||
| - | | acceso | < | ||
| - | | destrucción | | < | ||
| - | | puntero nulo | < | ||
| - | |||
| - | * En C se usa el ' | ||
| - | * En C la memoria se pide con malloc, mientras que en Java con new. | ||
| - | * malloc necesita el tamaño de la memoria a asignar. | ||
| - | * En C se accede a los campos de la esctructura con el operador %%' | ||
| - | * En Java nunca se libera el área de memoria ocupada por p. Hay un recolector de basuras que recicla esa memoria cuando deja ser referenciada. | ||
| - | * C //no posee recolector de basuras// | ||
| - | * Un error frecuente en C es el puntero loco o colgante (dangling reference). | ||
| - | * Otro error frecuente en C es la gotera de memoria: cuando un trozo de memoria pedido con malloc nunca se libera. | ||
| - | * En Java el recolector de basura evita por completo los punteros locos. | ||
| - | * En C el puntero nulo es NULL en mayúscula. | ||
| - | |||
| - | ==== Variables locales de tipo compuesto ==== | ||
| - | |||
| - | * En C se pueden declarar variables de tipo compuesto (structs) que son locales a una función. | ||
| - | * No se debe llamar a malloc. | ||
| - | * Se accede a los campos con el operador ' | ||
| - | * La variable se destruye automáticamente al retornar de la función. | ||
| - | * Se puede asignar la dirección de la variable a un puntero: < | ||
| - | * Un error típico es acceder al contenido de p después del retorno de la función en donde se declaró node. | ||
| - | * Como Java es un lenguaje robusto, para evitar este error simplemente en Java no se pueden declarar variables de tipos compuestos locales a una función. | ||
ejemplo.1343512114.txt.gz · Última modificación: por lmateu
