1. Instituto de Educación Superior Pedagógico
Público
“Gamaniel Blanco Murillo”
Computación e Informática
Lenguaje de Programación I
Fundamentos de la programación
1
2. HéctorLópezSánchez
¿Es la Informática una ciencia? ¿Una disciplina de ingeniería?
¿O simplemente una tecnología, una invención, un proveedor
de dispositivos informáticos? ¿Cuál es el fundamento intelectual
de la disciplina? ¿Es algo pasajero o se diluirá en una generación?
Informe de 1989 del Task Force on the Core of Computer Science
Informática
Conjunto de conocimientos científicos y técnicas
que hacen posible el tratamiento automático de
la información por medio de ordenadores.
(Diccionario de la R.A.E.)
Ciencia de la computación.
Página 1Lenguaje de Programación I - Fundamentos de la Programación
3. HéctorLópezSánchez
¿Ordenador? ¿Computador? ¿Computadora?
Computadora (RAE)
Máquina electrónica, analógica o digital,
dotada de una memoria de gran capacidad
y de métodos de tratamiento de la información,
capaz de resolver problemas matemáticos y lógicos
mediante la ejecución de programas informáticos.
De propósito general o de propósito específico.
Las computadoras han transformado nuestra sociedad.
Página 2Lenguaje de Programación I - Fundamentos de la Programación
¡Miles de millones de cálculos por segundo!
4. HéctorLópezSánchez
Las computadoras hoy están en todas partes
Página 3Lenguaje de Programación I - Fundamentos de la Programación
¡Con múltiples formas distintas de un PC!
5. HéctorLópezSánchez
Programación de computadoras
Indicar a la computadora qué es lo que tiene que hacer.
Programa
Secuencia de instrucciones.
Instrucciones que entiende la computadora.
Y que persiguen un objetivo: ¡resolver un problema!
Hardware: Conjunto de los componentes que integran
la parte material de una computadora.
Software: Conjunto de programas, instrucciones y reglas
informáticas para ejecutar tareas en una computadora.
Página 4Lenguaje de Programación I - Fundamentos de la Programación
6. HéctorLópezSánchez
El hardware sin software no sirve para nada.
Los programadores escriben código para que el hardware haga algo útil.
Imagen distorsionada.
Trabajo en equipo: diversos roles...
Gestores
Analistas
Diseñadores
Programadores
Probadores
Administradores de sistemas
Etcétera
Página 5Lenguaje de Programación I - Fundamentos de la Programación
Parque Jurásico
7. HéctorLópezSánchez
Esquema general
Página 6Lenguaje de Programación I - Fundamentos de la Programación
Memoria
temporal
Almacenamiento
permanente
Dispositivos
de entrada
Teclado
Ratón
Escáner
Táctil
…
Dispositivos
de salida
Monitor
Impresora
Altavoz
…
Unidad Central de Proceso
Central Processor Unit
C.P.U.
8. HéctorLópezSánchez
La arquitectura de Von Neumann
Página 7Lenguaje de Programación I - Fundamentos de la Programación
C.P.U. (Procesador)
Dispositivos de E/S
Memoria
A.L.U.
Unidad Aritmético-Lógica
Unidad de Control
Una ALU de 2 bits (Wikipedia)
9. HéctorLópezSánchez
Unidad Central de Proceso (CPU)
Página 8Lenguaje de Programación I - Fundamentos de la Programación
CPU (Procesador)
ALU (Unidad Aritmético-Lógica) Unidad de Control
Contador de programa
Instrucción
Registro A
Registro B
Registro C
Registro D
Registro E
Bus de datos
Registro R
Registros de 8 / 16 / 32 / 64 bits
Registro 1 Registro 2
10. HéctorLópezSánchez
La memoria
Página 9Lenguaje de Programación I - Fundamentos de la Programación
Memoria
Bus
de
datos
01
02
03
04
05
06
07
08
. . .
Dirección
Cada celda tiene
una dirección asociada.
Celdas de 8 / 16 / 32 / 64 bits
Información volátil.
1 Bit = 0 / 1
1 Byte = 8 bits = 1 carácter / nº (0-255)
1 Kilobyte (KB) = 1024 Bytes
1 Megabyte (MB) = 1024 KB
1 Gigabyte (GB) = 1024 MB
1 Terabyte (TB) = 1024 GB
1 Petabyte (PB) = 1024 TB
210 = 1024
11. HéctorLópezSánchez
Los procesadores trabajan con ceros y unos
La unidad de memoria básica: Byte (8 bits).
2 dígitos hexadecimales: 01011011 0101 1011 5B
Lenguaje máquina:
Códigos hexadecimales que representan instrucciones,
registros de la CPU, direcciones de memoria o datos.
Programa: secuencia de códigos que instruyen a la CPU.
Instrucción Significado
A0 2F Acceder a la posición de memoria 2F
3E 01 Copiar el dato en el registro 1 de la ALU
A0 30 Acceder a la posición de memoria 30
3E 02 Copiar el dato en el registro 2 de la ALU
1D Sumar
B3 31 Guardar el resultado en memoria (31)
Página 10Lenguaje de Programación I - Fundamentos de la Programación
12. HéctorLópezSánchez
Página 11Lenguaje de Programación I - Fundamentos de la Programación
CPU (Procesador)
ALU UC
01
Bus de datos
C.P.
Inst.
Memoria
01 A0
02 2F
03 3E
04 01
05 A0
06 30
07 3E
08 02
09 1D
0A B3
0B 31
. . .
01
2D
2E
2F 03
30 05
31
32
33
34
. . .
Programa
en memoria
Dir.
Contador de programa
13. HéctorLópezSánchez
Lenguaje de programación de bajo nivel.
Nulo nivel de abstracción: los códigos contienen los ceros y unos
que gobiernan directamente los circuitos de la CPU.
Totalmente dependiente de la máquina.
Cada familia de procesadores usa sus propios códigos,
distintos de los de otras familias.
Programación: muy tediosa.
Página 12Lenguaje de Programación I - Fundamentos de la Programación
14. HéctorLópezSánchez
Nemotécnicos para los códigos hexadecimales que representan
instrucciones:
A0 READ 3E REG 1D ADD …
Mayor legibilidad:
READ 2F
REG 01
READ 30
REG 02
ADD
WRITE 31
Lenguaje de nivel medio.
Página 13Lenguaje de Programación I - Fundamentos de la Programación
Código objeto
(lenguaje máquina)
Programa ensamblador
Código fuente
(lenguaje ensamblador)
15. HéctorLópezSánchez
Más cercanos a los lenguajes natural y matemático.
resultado = dato1 + dato2;
Mayor legibilidad, mayor facilidad de codificación.
Estructuración de datos / abstracción procedimental
Página 14Lenguaje de Programación I - Fundamentos de la Programación
16. HéctorLópezSánchez
Traducción
Compiladores:
Compilan y enlazan
programas completos.
Intérpretes:
Compilan, enlazan
y ejecutan instrucción
a instrucción.
Página 15Lenguaje de Programación I - Fundamentos de la Programación
Compilador
Enlazador
Código
objeto de
biblioteca
Código fuente
#include <iostream>
using namespace std;
int main()
{
cout << "Hola Mundo!" << endl;
return 0;
}
Código objeto 0100010100111010011100…
Programa
ejecutable
Para una arquitectura concreta
y un Sistema Operativo concreto
17. HéctorLópezSánchez
Genealogía de lenguajes
Página 16Lenguaje de Programación I - Fundamentos de la Programación
BASIC
1964
Logo
1968
Ruby
1993
Python
1991
Eiffel
1986
Modula
1975
Fuente: http://www.levenez.com/lang/
Versiones / Estándares
Prolog
1970
Haskell
1987
C#
2000
Java
1995C++
1983
Smalltalk
1971
Scheme
1975
PL/I
1964
Simula
1964
Ada
1979
C
1971
Pascal
1970
CPL
1963
COBOL
1959
ALGOL
1958
FORTRAN
1954
Lisp
1958
18. HéctorLópezSánchez
Funcionalidad básica de la computadora
Software básico encargado de manejar el hardware y facilitar el
trabajo a los programas de aplicación, proporcionándoles un
conjunto de servicios genéricos.
— Asignación de tiempos de CPU.
— Control y asignación racional de los recursos de la computadora.
— Ejecución de programas.
— Control de la Entrada/Salida
(por ejemplo, almacenar/recuperar en/de memoria permanente).
— Control de errores y protección
(por ejemplo, monitorizar la ejecución de un programa).
— Interfaz con el usuario.
...
Página 17Lenguaje de Programación I - Fundamentos de la Programación
19. HéctorLópezSánchez
La prehistoria
Del ábaco a las máquinas de calcular
Siglo XIX
Máquina analítica de Charles Babbage
Página 18Lenguaje de Programación I - Fundamentos de la Programación
La Pascalina (Wikipedia)
Lady Ada Lovelace
es considerada
la primera
programadora.
Álgebra de Boole
20. HéctorLópezSánchez
Siglo XX
1946 ENIAC: Primera computadora digital
de propósito general
1945 Modelo de Von Neumann
1947 Se inventa el transistor
1953 IBM 650: Primera computadora
a escala industrial
1954 Lenguaje FORTRAN
1960 Lenguajes COBOL y ALGOL
1964 IBM 360 (tercera generación)
1966 ARPANET: Origen de Internet
Página 19Lenguaje de Programación I - Fundamentos de la Programación
ENIAC (Wikipedia)
IBM 360 (Wikipedia)
heedmane.files.wordpress.com
21. HéctorLópezSánchez
Siglo XX
1967 El disquete
1968 Nace la empresa Intel
1970 Sistema operativo UNIX.
Lenguaje de programación Pascal.
1972 Primer virus informático (Creeper).
Lenguaje de programación C.
1974 Nace el protocolo TCP.
Primera red local.
1975 Se funda Microsoft.
1976 Se funda Apple.
Página 20Lenguaje de Programación I - Fundamentos de la Programación
Intel Corp. (Wikipedia)
Appel II (Wikipedia)
22. HéctorLópezSánchez
Siglo XX
1979 Se crea el juego Pacman.
1981 Nace el IBM PC.
Sistema operativo MS-DOS.
1983 Microsoft Word 1.0.
Lenguaje de programación C++.
1984 CD-ROM.
1985 Windows 1.0.
Lenguaje de programación Eiffel.
1990 Nace el lenguaje HTML y la World Wide Web.
1991 Sistema operativo Linux.
1992 Windows 3.1.
Página 21Lenguaje de Programación I - Fundamentos de la Programación
IBM PC (Wikipedia)
Linux
23. HéctorLópezSánchez
Siglo XX
1993 Windows NT.
1994 Netscape Navigator.
1995 Windows 95.
Lenguaje de programación Java.
DVD.
1998 Windows 98.
Se funda Google.
1999 MSN Messenger.
2000 Windows 2000/Me.
Página 22Lenguaje de Programación I - Fundamentos de la Programación
24. HéctorLópezSánchez
Siglo XXI
2001 Lenguaje de programación C#.
Windows XP.
Mac OS X.
2002 Mozilla Firefox.
2005 Youtube.
2006 Windows Vista.
2007 iPhone.
2008 Android.
2009 Windows 7.
2010 iPad
. . .
Página 23Lenguaje de Programación I - Fundamentos de la Programación
25. HéctorLópezSánchez
¿Qué es programar?
Decirle a un tonto muy rápido exactamente lo que tiene que hacer.
Especificar la estructura y el comportamiento de un programa,
así como probar que el programa realiza su tarea adecuadamente
y con un rendimiento aceptable.
¡No hay que olvidarse de comprobar que funciona!
Programa: Transforma entrada en salida
Algoritmo: Secuencia de pasos y operaciones que debe realizar
el programa para resolver el problema.
El programa implementa el algoritmo en un lenguaje concreto.
Página 24Lenguaje de Programación I - Fundamentos de la Programación
ProgramaEntrada Salida
26. HéctorLópezSánchez
La programación es sólo una etapa del proceso de desarrollo.
El modelo de desarrollo “en cascada”:
Página 25Lenguaje de Programación I - Fundamentos de la Programación
Mantenimiento
Prueba y depuración
Programación
Diseño
Análisis
Planificación Recursos necesarios, presupuesto, plan, …
¿Qué?
¿Cómo?
Implementación
27. HéctorLópezSánchez
Análisis
Quiero 3 habitaciones,
2 baños, garaje, ...
¿Qué tiene que hacer
exactamente el software?
Página 26Lenguaje de Programación I - Fundamentos de la Programación
Casa Software
Diseño
Planos, diseño circuito
eléctrico y de agua, ...
¿Cómo vamos a
organizar el software?
¿Qué hará cada parte?
ProgramaciónSe construye la casa. Se construye el software.
Prueba
Se comprueba la solidez de la
estructura, el funcionamiento de
las instalaciones, el acabado, ...
Ponemos a prueba nuestro
software, incluso en
situaciones límite.
Mantenimiento
Algunas reformas: se cierra
la terraza, se instala aire
acondicionado, ...
Pequeñas modificaciones o
correcciones, actualizaciones,
etc...
28. HéctorLópezSánchez
Elementos de un lenguaje
Instrucciones.
Datos: literales, variables, tipos.
Subprogramas (funciones).
Comentarios.
Directivas.
Lenguaje de Programación I - Fundamentos de la Programación Página 27
#include <iostream>
using namespace std;
int main()
{
cout << "¡Hola Mundo!" << endl; // Muestra Hola Mundo!
return 0;
}
Directiva
Subprograma
Comentario
Instrucción
Instrucción
Dato
Dato