Download Fundamentos de la programación

Document related concepts

Little man computer wikipedia , lookup

MIX (lenguaje de programación) wikipedia , lookup

J (lenguaje de programación) wikipedia , lookup

Programación funcional wikipedia , lookup

Alice (lenguaje de programación) wikipedia , lookup

Transcript
Fundamentos de la programación
1
GradoenIngenieríaInformática
GradoenIngenieríadelSoftware
GradoenIngenieríadeComputadores
LuisHernándezYáñez
FacultaddeInformática
UniversidadComplutense
Luis Hernández Yáñez
Informática, computadoras y programación
Lenguaje máquina y ensamblador
Lenguajes de programación de alto nivel
Un poco de historia
Programación e Ingeniería del Software
El lenguaje de programación C++
Sintaxis de los lenguajes de programación Un primer programa en C++
Herramientas de desarrollo
C++: Un mejor C
Fundamentos de la programación: Computadoras y programación
3
12
15
19
24
27
30
35
39
45
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación
Página 3
Informática(Cienciadelacomputación)
Conjuntodeconocimientoscientíficosytécnicas
quehacenposibleeltratamientoautomático
delainformaciónpormediodeordenadores
Luis Hernández Yáñez
Computadora
Máquinaelectrónica,analógicaodigital,
dotadadeunamemoria degrancapacidad
ydemétodosdetratamiento delainformación,
capazderesolverproblemas matemáticosylógicos
mediantelaejecución deprogramas informáticos
Fundamentos de la programación: Computadoras y programación
Página 4
Luis Hernández Yáñez
Entodaspartesyconmuchasformas
Fundamentos de la programación: Computadoras y programación
Página 5
Hardware
Componentesqueintegran
lapartematerial
deunacomputadora
Luis Hernández Yáñez
Software
Programas,instrucciones
yreglasinformáticas
paraejecutartareas
enunacomputadora
Fundamentos de la programación: Computadoras y programación
Página 6
Programar
Indicaralacomputadoraquéesloquetienequehacer
Programa
Luis Hernández Yáñez
 Secuenciadeinstrucciones
 Instruccionesqueentiendelacomputadora
 Yquepersiguenunobjetivo:¡resolverunproblema!
Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Parque Jurásico
Fundamentos de la programación: Computadoras y programación
Página 7
Trabajoenequipo
Múltiplesroles...
 Gestores
 Analistas
 Diseñadores
 Programadores
 Probadores
 Administradoresde
sistemas
...
Página 8
Esquemageneral
Memoria
temporal
Unidad Central de Proceso
Central Processor Unit
Luis Hernández Yáñez
Dispositivos
deentrada
Teclado
Ratón
Escáner
Táctil
…
Dispositivos
desalida
C.P.U.
Almacenamiento
permanente
Fundamentos de la programación: Computadoras y programación
Monitor
Impresora
Altavoz
…
Página 9
LaarquitecturadeVonNeumann
DispositivosdeE/S
Una ALU de 2 bits (Wikipedia)
C.P.U.(Procesador)
Luis Hernández Yáñez
A.L.U.
UnidadAritmético‐Lógica
Memoria
UnidaddeControl
Fundamentos de la programación: Computadoras y programación
Página 10
Lamemoria
Memoria
Cadaceldaenunadirección
01
Celdasde8/16/32/64bits
02
Informaciónvolátil
03
04
Bus de datos
05
06
07
08
Dirección
210 = 1024  1000
Fundamentos de la programación: Computadoras y programación
Página 11
Fundamentos de la programación: Computadoras y programación
Página 12
Luis Hernández Yáñez
Luis Hernández Yáñez
. . .
1Bit=0/1
1Byte=8bits=1carácter
1Kilobyte(KB)=1024Bytes
1Megabyte(MB)=1024KB
1Gigabyte(GB)=1024MB
1Terabyte(TB)=1024GB
1Petabyte(PB)=1024TB
Losprocesadorestrabajanconcerosyunos(bits)
Unidaddememoriabásica:Byte (8bits)
(2dígitoshexadecimales:01011011 01011011 5B)
Lenguajemáquina
Códigoshexadecimalesquerepresentaninstrucciones,
registrosdelaCPU,direccionesdememoriaodatos
Lenguaje de bajo nivel
Luis Hernández Yáñez
Instrucción Significado
A0 2F
3E 01
A0 30
3E 02
1D
B3 31
Accederalaceldadememoria2F Dependiente de la máquina
Programación difícil
Copiarloelregistro1delaALU
Accederalaceldadememoria30
Copiarloenelregistro2delaALU
Sumar
Guardarelresultadoenlaceldadememoria31
Fundamentos de la programación: Computadoras y programación
Página 13
Nemotécnicosparaloscódigoshexadecimales:
A0  READ 3E  REG 1D  ADD …
Mayorlegibilidad:
READ 2F
REG 01 READ 30
REG 02 ADD WRITE 31
Luis Hernández Yáñez
Lenguajedenivelmedio
Códigofuente
(lenguajeensamblador)
Programa
ensamblador
Códigoobjeto
(lenguajemáquina)
Fundamentos de la programación: Computadoras y programación
Página 14
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación
Página 15
Luis Hernández Yáñez
 Máscercanosaloslenguajesnaturalymatemático
resultado = dato1 + dato2;
 Mayorlegibilidad,mayorfacilidaddecodificación
 Estructuracióndedatos/abstracciónprocedimental
Fundamentos de la programación: Computadoras y programación
Página 16
Traducción
#include <iostream>
using namespace std;
Códigofuente
int main()
{
cout << "Hola Mundo!" << endl;
return 0;
}
Compiladores:
Compilanyenlazan
programascompletos
Compilador
Códigoobjeto
Intérpretes:
Compilan,enlazan
yejecutaninstrucción
ainstrucción
0100010100111010011100…
Código
objetode
biblioteca
Luis Hernández Yáñez
Enlazador
Programa
ejecutable
Para una arquitectura concreta
y un sistema operativo
Fundamentos de la programación: Computadoras y programación
Página 17
Genealogíadelenguajes
Versiones / Estándares
Prolog
COBOL
1959
PL/I
1970
1964
1995
1983
FORTRAN
1954
Java
C++
C#
C
CPL
2000
1971
1963
Python
ALGOL
Pascal
Modula
1958
1970
1975
BASIC
1964
Luis Hernández Yáñez
Fuente:
http://www.levenez.com/lang/
Simula
1964
1991
Ada
Eiffel
1979
1986
Smalltalk
Ruby
1971
1993
Haskell
Lisp
Scheme
1958
1975
1987
Logo
1968
Fundamentos de la programación: Computadoras y programación
Página 18
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación
Página 19
Laprehistoria
Elábaco
SigloXIX
MáquinaanalíticadeCharlesBabbage
(Wikipedia)
Luis Hernández Yáñez
LadyAdaLovelace
esconsiderada
laprimera
programadora
Fundamentos de la programación: Computadoras y programación
Página 20
Luis Hernández Yáñez
SigloXX
1936 MáquinadeTuring
1946 ENIAC:Primeracomputadoradigital
depropósitogeneral
1947 Eltransistor
1953 IBM650:Primera
computadoraagranescala
1966 ARPANET:OrigendeInternet
1967 Eldisquete
1970 SistemaoperativoUNIX
1972 Primervirus informático(Creeper)
LenguajedeprogramaciónC
1974 ProtocoloTCP.Primeraredlocal
ENIAC (Wikipedia)
Fundamentos de la programación: Computadoras y programación
1975
1976
1979
1981
Luis Hernández Yáñez
1983
1984
1985
1990
1991
SefundaMicrosoft
SefundaApple
JuegoPacman
IBMPC
SistemaoperativoMS‐DOS
LenguajedeprogramaciónC++
CD‐ROM
Windows 1.0
LenguajeHTML
World Wide Web
SistemaoperativoLinux
Fundamentos de la programación: Computadoras y programación
Página 21
Apple II (Wikipedia)
Linux
IBM PC (Wikipedia)
Página 22
1992 Windows3.1
1995 LenguajedeprogramaciónJava
DVD
1998 SefundaGoogle
1999 MSNMessenger
2001 WindowsXP
MacOS X
2002 Mozilla Firefox
2007 iPhone
2008 Android ...
Fundamentos de la programación: Computadoras y programación
Página 23
Fundamentos de la programación: Computadoras y programación
Página 24
Luis Hernández Yáñez
Luis Hernández Yáñez
SigloXXI
¿Quéesprogramar?
Decirleauntontomuy rápidoexactamente loquetienequehacer
Especificarlaestructura yelcomportamiento deunprograma,
asícomoprobar queelprogramarealizasutarea
adecuadamente yconunrendimiento aceptable
Programa:Transformaentradaensalida
Luis Hernández Yáñez
Entrada
Programa
Salida
Algoritmo:Secuenciadepasosyoperacionesquedeberealizar
elprogramapararesolverelproblema
Elprogramaimplementaelalgoritmoenunlenguajeconcreto
Fundamentos de la programación: Computadoras y programación
Página 25
Laprogramaciónessólounaetapadelprocesodedesarrollo
Modelodedesarrollo“encascada”:
Planificación
Recursosnecesarios,presupuesto,plan,…
¿Qué?
Análisis
Diseño
¿Cómo?
Luis Hernández Yáñez
Programación
Implementación
Pruebaydepuración
Mantenimiento
Fundamentos de la programación: Computadoras y programación
Página 26
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación
Página 27
Bjarne Stroustrup (1983)
Hola Mundo!
#include <iostream>
using namespace std;
int main()
{
cout << "Hola Mundo!" << endl;
Luis Hernández Yáñez
// Muestra Hola Mundo!
return 0;
}
Fundamentos de la programación: Computadoras y programación
Página 28
Instrucciones
Datos:literales,variables,tipos
Subprogramas(funciones)
Comentarios
Directivas
#include <iostream>
...
Directiva
using namespace std;
int main()
Dato
{
Instrucción
cout << "Hola Mundo!" << endl;
// Muestra Hola Mundo!
Comentario
return 0;
Instrucción
Dato
}
Fundamentos de la programación: Computadoras y programación
Página 29
Fundamentos de la programación: Computadoras y programación
Página 30
Luis Hernández Yáñez
Luis Hernández Yáñez
Subprograma
Sintaxisysemánticadeloslenguajes
Sintaxis
—
Reglasquedeterminancómosepuedenconstruir
ysecuenciarloselementosdellenguaje
Semántica
Significadodecadaelementodellenguaje
¿Paraquésirve?
Luis Hernández Yáñez
—
Fundamentos de la programación: Computadoras y programación
Página 31
Especificación
 Lenguajes(BNF)
 Diagramas
Ejemplo:Númerosenteros(sindecimales)
BNF
Luis Hernández Yáñez
<numero entero> ::= <signo opcional><secuencia de dígitos>
<signo opcional> ::= +|‐|<nada>
<secuencia de dígitos> ::= <dígito>|<dígito><secuencia de dígitos>
<dígito> ::= 0|1|2|3|4|5|6|7|8|9
| significa ó
<nada> ::= +
0 .. 9
‐
Fundamentos de la programación: Computadoras y programación
+23 
‐159 
1374 
1‐34 
3.4 
002 
Página 32
<numero entero> ::= <signo opcional><secuencia de dígitos>
<signo opcional> ::= +|‐|<nada>
<secuencia de dígitos> ::= <dígito>|<dígito><secuencia de dígitos>
<dígito> ::= 0|1|2|3|4|5|6|7|8|9
<nada> ::= Luis Hernández Yáñez
+23
<numero entero> ::= <signo opcional><secuencia de dígitos>
::= +<secuencia de dígitos> ::= +<dígito><secuencia de dígitos> ::= +2<secuencia de dígitos> ::= +2<dígito> ::= +23
1374
<numero entero> ::= <signo opcional><secuencia de dígitos> ::= <secuencia de dígitos> ::= <dígito><secuencia de dígitos> ::= 1<secuencia de dígitos> ::= 1<dígito><secuencia de dígitos> ::= 13<secuencia de dígitos> ::= 13<dígito><secuencia de dígitos> ::= 137<secuencia de dígitos> ::= 137<dígito> ::= 1374
1‐34
<numero entero> ::= <signo opcional><secuencia de dígitos>
::= <secuencia de dígitos> ::= <dígito><secuencia de dígitos> ::= 1<secuencia de dígitos> ::= ERROR (‐ no es <dígito>)
Fundamentos de la programación: Computadoras y programación
+23
+
Luis Hernández Yáñez
1‐34

Página 33
+23 
0 .. 9
1374 
+
‐

0 .. 9
‐
1374

+
0 .. 9
?
‐
Fundamentos de la programación: Computadoras y programación
1‐

Página 34
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación
Página 35
HolaMundo!
Unprogramaquemuestraunsaludoenlapantalla:
#include <iostream>
using namespace std;
int main()
// main() es donde empieza la ejecución
{
Luis Hernández Yáñez
cout << "Hola Mundo!" << endl; // Muestra Hola Mundo!
return 0;
}
Fundamentos de la programación: Computadoras y programación
Página 36
Análisisdelprograma
Biblioteca
Directiva
Instrucción
Espacio de nombres
#include <iostream>
using namespace std;
Coloreadosintáctico
Tipo
Bloque de código
Luis Hernández Yáñez
Declaración
Palabras reservadas
Cabecera de la función
int main()
{
Variable
Cadena de caracteres
Constante
cout << "Hola Mundo!" << endl;
Instrucción
Operador
Operador
Datos literales
return 0;
Instrucción
}
Número
Cuerpo de la función
Las instrucciones terminan en ;
Fundamentos de la programación: Computadoras y programación
Página 37
HolaMundo!
Casitodoesinfraestructura
Sólo
cout << "Hola Mundo!" << endl
hacealgopalpable
Luis Hernández Yáñez
Lainfraestructura(notación,bibliotecasyotrosoporte)
hacenuestrocódigosimple,completo,confiableyeficiente
¡Elestiloimporta!
Fundamentos de la programación: Computadoras y programación
Página 38
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación
Página 39
Editor
 Blocdenotas,Wordpad,Word,Writer,Gedit,Kwrite,…
(textosimple,sinformatos)
 Editoresespecíficos:coloreadosintáctico
 Recomendación:Notepad++
Luis Hernández Yáñez
Instalaciónyuso:
Sección
Herramientas de desarrollo
enelCampusVirtual
Fundamentos de la programación: Computadoras y programación
Página 40
hola.cpp
(código fuente)
Compilador
Códigoobjetode
labibliotecaiostream
hola.obj
(código objeto)
Enlazador
Hola Mundo!
Luis Hernández Yáñez
Cargador
hola.exe
(ejecutable)
Fundamentos de la programación: Computadoras y programación
Página 41
Compilador
 Importante:C++estándar
 Recomendación:GNUG++(MinGW enWindows)
Luis Hernández Yáñez
Instalaciónyuso:
Sección
Herramientas de desarrollo
enelCampusVirtual
Fundamentos de la programación: Computadoras y programación
Página 42
Entornosdedesarrollo
 Paraeditar,compilaryprobarelcódigodelprograma
 Recomendaciones:
— Windows:MSVisualStudio/C++ExpressoEclipse
— Linux:Netbeans oEclipse
Luis Hernández Yáñez
Instalaciónyuso:
Sección
Herramientas de desarrollo
enelCampusVirtual
Fundamentos de la programación: Computadoras y programación
Página 43
¿Quéhaceelprograma?
 Laejecucióndelprogramasiempreempiezaenmain()
 Seejecutanlasinstruccionesensecuenciadeprincipioafin
Luis Hernández Yáñez
Inicio
cout << "Hola Mundo!" << endl;
MuestraHola Mundo!
enlapantallaysaltadelínea
return 0;
Devuelve0 comocódigo
determinacióndelprograma
Pantalla (cout)
_ Hola Mundo!
_
Fin
Fundamentos de la programación: Computadoras y programación
Página 44
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación
Página 45
Luis Hernández Yáñez
EllenguajeC
 LenguajecreadoporDennisM.Ritchie en1972
 Lenguajedenivelmedio:
— Estructurastípicasdeloslenguajesdealtonivel
— Construccionesparacontrolaniveldemáquina
 Lenguajesencillo(pocaspalabrasreservadas)
 Lenguajeestructurado(noestrictamenteestructuradoenbloques)
 Compartimentalizacióndecódigo (funciones) ydatos(ámbitos)
 Componenteestructuralbásico:lafunción(subprograma)
 Programaciónmodular
 Distingue entremayúsculasyminúsculas
 Palabrasreservadas(oclave):enminúsculas
Fundamentos de la programación: Computadoras y programación
Página 46
LicenciaCC(Creative Commons)
Estetipodelicenciasofrecenalgunosderechosaterceraspersonas
bajociertascondiciones.
Estedocumentotieneestablecidaslassiguientes:
Reconocimiento(Attribution):
Encualquierexplotacióndelaobraautorizadaporlalicencia
haráfaltareconocerlaautoría.
Luis Hernández Yáñez
Nocomercial(Noncommercial):
Laexplotacióndelaobraquedalimitadaausosnocomerciales.
Compartirigual(Sharealike):
Laexplotaciónautorizadaincluyelacreacióndeobrasderivadas
siemprequemantenganlamismalicenciaalserdivulgadas.
Pulsaenlaimagendearribaaladerechaparasabermás.
Fundamentos de la programación: Computadoras y programación
Página 47