Sei sulla pagina 1di 24

Fundamentosdelaprogramacin

1
Grado en Ingeniera Informtica
Grado en Ingeniera del Software
Grado en Ingeniera de Computadores

Luis Hernndez Yez


Facultad de Informtica
Universidad Complutense

Informtica,computadorasyprogramacin 3
Lenguajemquinayensamblador 12
Lenguajesdeprogramacindealtonivel 15
Unpocodehistoria 19
ProgramacineIngenieradelSoftware 24
EllenguajedeprogramacinC++ 27
Sintaxisdeloslenguajesdeprogramacin 30
UnprimerprogramaenC++ 35
Herramientasdedesarrollo 39
C++:UnmejorC 45
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 3

Informtica (Ciencia de la computacin)


Conjunto de conocimientos cientficos y tcnicas
que hacen posible el tratamiento automtico
de la informacin por medio de ordenadores

Computadora
Mquina electrnica, analgica o digital,
dotada de una memoria de gran capacidad
y de mtodos de tratamiento de la informacin,
capaz de resolver problemas matemticos y lgicos
LuisHernndezYez

mediante la ejecucin de programas informticos

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 4
En todas partes y con muchas formas
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 5

Hardware
Componentes que integran
la parte material
de una computadora

Software
Programas, instrucciones
y reglas informticas
para ejecutar tareas
en una computadora
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 6
Programar
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!
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 7

Trabajo en equipo
Mltiples roles...
Gestores
Analistas
ParqueJursico Diseadores
Programadores
Probadores
Administradores de
sistemas
...
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 8
Esquema general

Memoria
temporal

UnidadCentraldeProceso
CentralProcessorUnit

Dispositivos Dispositivos
C.P.U.
de entrada de salida

Teclado Monitor
Ratn Impresora
Escner Altavoz
LuisHernndezYez

Tctil Almacenamiento
permanente

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 9

La arquitectura de Von Neumann

Dispositivos de E/S

UnaALUde2bits(Wikipedia)
C.P.U. (Procesador)

A.L.U.
Unidad AritmticoLgica
Memoria
LuisHernndezYez

Unidad de Control

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 10
La memoria
Memoria Cada celda en una direccin
01 Celdas de 8 / 16 / 32 / 64 bits
02
03
Informacin voltil
04

Bus 05 1 Bit = 0 / 1
de 06 1 Byte = 8 bits = 1 carcter
datos 07
1 Kilobyte (KB) = 1024 Bytes
08
1 Megabyte (MB) = 1024 KB
...
1 Gigabyte (GB) = 1024 MB
1 Terabyte (TB) = 1024 GB
1 Petabyte (PB) = 1024 TB
LuisHernndezYez

Direccin
210 =1024 1000

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 11
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 12
Los procesadores trabajan con ceros y unos (bits)
Unidad de memoria bsica: Byte (8 bits)
(2 dgitos hexadecimales: 01011011 0101 1011 5B)

Lenguaje mquina
Cdigos hexadecimales que representan instrucciones,
registros de la CPU, direcciones de memoria o datos
Instruccin Significado Lenguajedebajonivel
A02F Acceder a la celda de memoria 2F Dependientedelamquina
3E01 Copiarlo el registro 1 de la ALU Programacindifcil
A030 Acceder a la celda de memoria 30
LuisHernndezYez

3E02 Copiarlo en el registro 2 de la ALU


1D Sumar
B331 Guardar el resultado en la celda de memoria 31

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 13

Nemotcnicos para los cdigos hexadecimales:


A0 READ3E REG1D ADD

Mayor legibilidad:
READ2F Cdigo fuente
REG01 (lenguaje ensamblador)
READ30
REG02
ADD Programa
WRITE31 ensamblador

Lenguaje de nivel medio


Cdigo objeto
LuisHernndezYez

(lenguaje mquina)

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 14
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 15

Ms cercanos a los lenguajes natural y matemtico


resultado=dato1+dato2;
Mayor legibilidad, mayor facilidad de codificacin
Estructuracin de datos / abstraccin procedimental
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 16
Traduccin #include<iostream>
usingnamespacestd;
Cdigo fuente intmain()
{
cout<<"HolaMundo!"<<endl;
Compiladores: }
return0;

Compilan y enlazan Compilador


programas completos

Intrpretes: Cdigo objeto 0100010100111010011100


Compilan, enlazan
y ejecutan instruccin Cdigo
Enlazador objeto de
a instruccin
biblioteca
LuisHernndezYez

Programa Paraunaarquitecturaconcreta
ejecutable yunsistemaoperativo

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 17

Genealoga de lenguajes Versiones/Estndares


Prolog
1970 Java
COBOL PL/I C++
1959 1995
1964 1983
FORTRAN C#
1954 CPL C
2000
1963 1971
Python
ALGOL Pascal Modula 1991
1958 1970 1975
BASIC
1964
Ada Eiffel
1979 1986
Simula
Fuente: 1964 Smalltalk
http://www.levenez.com/lang/ Ruby
1971 1993
LuisHernndezYez

Haskell
Lisp Scheme 1987
1958 1975
Logo
1968

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 18
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 19

La prehistoria
El baco

Siglo XIX (Wikipedia)


Mquina analtica de Charles Babbage

Lady Ada Lovelace


es considerada
la primera
programadora
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 20
Siglo XX
1936 Mquina de Turing
1946 ENIAC: Primera computadora digital
de propsito general
1947 El transistor
ENIAC(Wikipedia)
1953 IBM 650: Primera
computadora a gran escala
1966 ARPANET: Origen de Internet
1967 El disquete
1970 Sistema operativo UNIX
1972 Primer virus informtico (Creeper)
LuisHernndezYez

Lenguaje de programacin C
1974 Protocolo TCP. Primera red local

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 21

1975 Se funda Microsoft


1976 Se funda Apple
1979 Juego Pacman
1981 IBM PC
Sistema operativo MSDOS AppleII(Wikipedia)

1983 Lenguaje de programacin C++


1984 CDROM
1985 Windows 1.0
1990 Lenguaje HTML
World Wide Web Linux
LuisHernndezYez

IBMPC(Wikipedia)
1991 Sistema operativo Linux

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 22
1992 Windows 3.1
1995 Lenguaje de programacin Java
DVD
1998 Se funda Google
1999 MSN Messenger

Siglo XXI
2001 Windows XP
Mac OS X
2002 Mozilla Firefox
2007 iPhone
LuisHernndezYez

2008 Android ...

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 23
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 24
Qu es programar?
Decirle a un tonto muy rpido 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

Programa: Transforma entrada en salida

Entrada Programa Salida

Algoritmo: Secuencia de pasos y operaciones que debe realizar


LuisHernndezYez

el programa para resolver el problema


El programa implementa el algoritmo en un lenguaje concreto

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 25

La programacin es slo una etapa del proceso de desarrollo

Modelo de desarrollo en cascada:

Planificacin Recursos necesarios, presupuesto, plan,

Anlisis Qu?

Diseo Cmo?

Programacin Implementacin

Prueba y depuracin
LuisHernndezYez

Mantenimiento

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 26
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 27

Bjarne Stroustrup (1983)


HolaMundo!

#include<iostream>
usingnamespacestd;

int main()
{
cout<<"HolaMundo!"<<endl;
//MuestraHolaMundo!
LuisHernndezYez

return 0;
}

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 28
Instrucciones
Datos: literales, variables, tipos
Subprogramas (funciones)
Comentarios
Directivas Directiva
#include<iostream>
...
usingnamespacestd;

Subprograma int main()


{ Dato
Instruccin cout<<"HolaMundo!"<<endl;
//MuestraHolaMundo!
LuisHernndezYez

Comentario
Dato
Instruccin return 0;
}

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina29
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 30
Sintaxis y semntica de los lenguajes
Sintaxis
Reglas que determinan cmo se pueden construir
y secuenciar los elementos del lenguaje

Semntica
Significado de cada elemento del lenguaje
Para qu sirve?
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 31

Especificacin
Lenguajes (BNF)
Diagramas
Ejemplo: Nmeros enteros (sin decimales)
BNF
<numeroentero>::=<signoopcional><secuenciadedgitos>
<signoopcional>::=+||<nada>
<secuenciadedgitos>::=<dgito>|<dgito><secuenciadedgitos>
<dgito>::=0|1|2|3|4|5|6|7|8|9 +23
<nada>::= |significa
159
1374
134
+
3.4
LuisHernndezYez

0..9 002

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 32
<numeroentero>::=<signoopcional><secuenciadedgitos>
<signoopcional>::=+||<nada>
<secuenciadedgitos>::=<dgito>|<dgito><secuenciadedgitos>
<dgito>::=0|1|2|3|4|5|6|7|8|9
<nada>::=
+23
<numeroentero>::=<signoopcional><secuenciadedgitos>
::=+<secuenciadedgitos>::=+<dgito><secuenciadedgitos>
::=+2<secuenciadedgitos>::=+2<dgito> ::=+23
1374

<numeroentero>::=<signoopcional><secuenciadedgitos>
::=<secuenciadedgitos>::=<dgito><secuenciadedgitos>
::=1<secuenciadedgitos>::=1<dgito><secuenciadedgitos>
::=13<secuenciadedgitos>::=13<dgito><secuenciadedgitos>
::=137<secuenciadedgitos>::=137<dgito> ::=1374
LuisHernndezYez

134
<numeroentero>::=<signoopcional><secuenciadedgitos>
::=<secuenciadedgitos>::=<dgito><secuenciadedgitos>
::=1<secuenciadedgitos>::=ERROR ( noes<dgito>)

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 33

+23 +


0..9 +23

1374 +


0..9 1374

134 + ?
0..9 1
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 34
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 35

Hola Mundo!
Un programa que muestra un saludo en la pantalla:
#include<iostream>
usingnamespacestd;

int main()
//main()esdondeempiezalaejecucin
{
cout<<"HolaMundo!"<<endl;//MuestraHolaMundo!
LuisHernndezYez

return 0;
}

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 36
Anlisis del programa
Biblioteca

Directiva #include<iostream> Espaciodenombres

Instruccin usingnamespacestd;
Coloreado sintctico
Tipo Palabrasreservadas

Declaracin int main() Cabeceradelafuncin

{
Bloquedecdigo

Variable Cadenadecaracteres Constante


Instruccin cout<<"HolaMundo!" <<endl;
Operador Operador
Datosliterales
return0;
LuisHernndezYez

Instruccin
Nmero
} Cuerpodelafuncin

Lasinstruccionesterminanen;

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 37

Hola Mundo!
Casi todo es infraestructura
Slo
cout<<"HolaMundo!"<<endl
hace algo palpable

La infraestructura (notacin, bibliotecas y otro soporte)


hace nuestro cdigo simple, completo, confiable y eficiente

El estilo importa!
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 38
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 39

Editor
Bloc de notas, Wordpad, Word, Writer, Gedit, Kwrite,
(texto simple, sin formatos)
Editores especficos: coloreado sintctico
Recomendacin: Notepad++

Instalacin y uso:
Seccin
Herramientasdedesarrollo
en el Campus Virtual
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 40
hola.cpp Compilador hola.obj
(cdigofuente) (cdigoobjeto)

Cdigo objeto de
Enlazador
la biblioteca iostream

HolaMundo!

Cargador hola.exe
LuisHernndezYez

(ejecutable)

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 41

Compilador
Importante: C++ estndar
Recomendacin: GNU G++ (MinGW en Windows)

Instalacin y uso:
Seccin
Herramientasdedesarrollo
en el Campus Virtual
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 42
Entornos de desarrollo
Para editar, compilar y probar el cdigo del programa
Recomendaciones:
Windows: MS Visual Studio / C++ Express o Eclipse
Linux: Netbeans o Eclipse

Instalacin y uso:
Seccin
Herramientasdedesarrollo
en el Campus Virtual
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 43

Qu hace el programa?
La ejecucin del programa siempre empieza en main()
Se ejecutan las instrucciones en secuencia de principio a fin

Inicio
Pantalla(cout)
_ HolaMundo!
cout<<"HolaMundo!" <<endl; _
Muestra HolaMundo!
en la pantalla y salta de lnea
return0;
Devuelve 0 como cdigo
LuisHernndezYez

de terminacin del programa


Fin

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 44
LuisHernndezYez

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 45

El lenguaje C
Lenguaje creado por Dennis M. Ritchie en 1972
Lenguaje de nivel medio:
Estructuras tpicas de los lenguajes de alto nivel

Construcciones para control a nivel de mquina

Lenguaje sencillo (pocas palabras reservadas)


Lenguaje estructurado (no estrictamente estructurado en bloques)
Compartimentalizacin de cdigo (funciones) y datos (mbitos)
Componente estructural bsico: la funcin (subprograma)
Programacin modular
LuisHernndezYez

Distingue entre maysculas y minsculas


Palabras reservadas (o clave): en minsculas

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 46
Licencia CC (Creative Commons)
Este tipo de licencias ofrecen algunos derechos a terceras personas
bajo ciertas condiciones.
Este documento tiene establecidas las siguientes:

Reconocimiento (Attribution):
En cualquier explotacin de la obra autorizada por la licencia
har falta reconocer la autora.
No comercial (Non commercial):
La explotacin de la obra queda limitada a usos no comerciales.
Compartir igual (Share alike):
La explotacin autorizada incluye la creacin de obras derivadas
siempre que mantengan la misma licencia al ser divulgadas.
LuisHernndezYez

Pulsa en la imagen de arriba a la derecha para saber ms.

Fundamentosdelaprogramacin:Computadorasyprogramacin Pgina 47

Potrebbero piacerti anche