fundamentos de la programación 1 - web.fdi.ucm.esweb.fdi.ucm.es/profesor/luis/fp/fp01.pdf · luis...
TRANSCRIPT
GradoenIngenieríaInformáticaGradoenIngenieríadelSoftware
GradoenIngenieríadeComputadores
LuisHernándezYáñez
FacultaddeInformáticaUniversidadComplutense
Fundamentos de la programación
1
Luis Hernández Yáñez
Informática, computadoras y programación 3Lenguaje máquina y ensamblador 12Lenguajes de programación de alto nivel 15Un poco de historia 19Programación e Ingeniería del Software 24El lenguaje de programación C++ 27Sintaxis de los lenguajes de programación 30Un primer programa en C++ 35Herramientas de desarrollo 39C++: Un mejor C 45
Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Página 3Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Informática(Cienciadelacomputación)Conjuntodeconocimientoscientíficosytécnicasquehacenposibleeltratamientoautomáticodelainformaciónpormediodeordenadores
ComputadoraMáquinaelectrónica,analógicaodigital,dotadadeunamemoria degrancapacidadydemétodosdetratamiento delainformación,capazderesolverproblemas matemáticosylógicosmediantelaejecución deprogramas informáticos
Página 4Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Entodaspartesyconmuchasformas
Página 5Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
HardwareComponentesqueintegranlapartematerialdeunacomputadora
SoftwareProgramas,instruccionesyreglasinformáticasparaejecutartareasenunacomputadora
Página 6Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
ProgramarIndicaralacomputadoraquéesloquetienequehacer
Programa Secuenciadeinstrucciones Instruccionesqueentiendelacomputadora Yquepersiguenunobjetivo:¡resolverunproblema!
Página 7Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
TrabajoenequipoMúltiplesroles... Gestores Analistas Diseñadores Programadores Probadores Administradoresdesistemas...
Página 8Fundamentos de la programación: Computadoras y programación
Parque Jurásico
Luis Hernández Yáñez
Esquemageneral
Página 9Fundamentos de la programación: Computadoras y programación
Memoriatemporal
Almacenamientopermanente
Almacenamientopermanente
Dispositivosdeentrada
TecladoRatónEscánerTáctil…
Dispositivosdesalida
MonitorImpresoraAltavoz
…
MonitorImpresoraAltavoz
…
Dispositivosdesalida
MonitorImpresoraAltavoz
…
Unidad Central de ProcesoCentral Processor Unit
C.P.U.
Luis Hernández Yáñez
LaarquitecturadeVonNeumann
Página 10Fundamentos de la programación: Computadoras y programación
C.P.U.(Procesador)
DispositivosdeE/S
Memoria
A.L.U.UnidadAritmético‐Lógica
UnidaddeControl
Una ALU de 2 bits (Wikipedia)
Luis Hernández Yáñez
Lamemoria
Página 11Fundamentos de la programación: Computadoras y programación
Memoria
Bus de
datos
01
02
03
04
05
06
07
08
. . .
Dirección
Cadaceldaenunadirección
Celdasde8/16/32/64bits
Informaciónvolátil
1Bit=0/11Byte=8bits=1carácter1Kilobyte(KB)=1024Bytes1Megabyte(MB)=1024KB1Gigabyte(GB)=1024MB1Terabyte(TB)=1024GB1Petabyte(PB)=1024TB
210 = 1024 1000
Luis Hernández Yáñez
Página 12Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Losprocesadorestrabajanconcerosyunos(bits)Unidaddememoriabásica:Byte (8bits)(2dígitoshexadecimales:01011011 01011011 5B)
LenguajemáquinaCódigoshexadecimalesquerepresentaninstrucciones,registrosdelaCPU,direccionesdememoriaodatos
Instrucción Significado
A0 2F Accederalaceldadememoria2F3E 01 Copiarloelregistro1delaALUA0 30 Accederalaceldadememoria303E 02 Copiarloenelregistro2delaALU1D SumarB3 31 Guardarelresultadoenlaceldadememoria31
Página 13Fundamentos de la programación: Computadoras y programación
Lenguaje de bajo nivel
Dependiente de la máquina
Programación difícil
Luis Hernández Yáñez
Nemotécnicosparaloscódigoshexadecimales:A0 READ 3E REG 1D ADD …
Mayorlegibilidad:READ 2FREG 01 READ 30REG 02 ADD WRITE 31
Lenguajedenivelmedio
Página 14Fundamentos de la programación: Computadoras y programación
Códigoobjeto(lenguajemáquina)
Programaensamblador
Códigofuente(lenguajeensamblador)
Luis Hernández Yáñez
Página 15Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Máscercanosaloslenguajesnaturalymatemáticoresultado = dato1 + dato2;
Mayorlegibilidad,mayorfacilidaddecodificación Estructuracióndedatos/abstracciónprocedimental
Página 16Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Traducción
Compiladores:Compilanyenlazanprogramascompletos
Intérpretes:Compilan,enlazanyejecutaninstrucciónainstrucción
Página 17Fundamentos de la programación: Computadoras y programación
Compilador
EnlazadorCódigoobjetodebiblioteca
Códigofuente
#include <iostream>using namespace std;
int main(){
cout << "Hola Mundo!" << endl;return 0;
}
Códigoobjeto 0100010100111010011100…
Programaejecutable
Para una arquitectura concretay un sistema operativo
Luis Hernández Yáñez
Genealogíadelenguajes
Página 18Fundamentos de la programación: Computadoras y programación
BASIC1964BASIC1964BASIC1964
Logo1968Logo1968Logo1968
Ruby1993Ruby1993Ruby1993
Python1991Python1991Python1991
Eiffel1986Eiffel1986Eiffel1986
Modula1975
Modula1975
Modula1975
Fuente:http://www.levenez.com/lang/Fuente:http://www.levenez.com/lang/
Versiones / Estándares
Prolog1970Prolog1970
Haskell1987Haskell1987
C#2000C#2000C#2000
Java1995Java1995Java1995C++
1983C++1983C++1983
Smalltalk1971
Smalltalk1971
Smalltalk1971
Scheme1975
Scheme1975
Scheme1975
PL/I1964PL/I1964PL/I1964
Simula1964Simula1964Simula1964
Ada1979Ada1979Ada1979
C1971C
1971C
1971
Pascal1970Pascal1970Pascal1970
CPL1963CPL1963CPL1963
COBOL1959COBOL1959
ALGOL1958ALGOL1958ALGOL1958
FORTRAN1954
FORTRAN1954
Lisp1958Lisp1958
Luis Hernández Yáñez
Página 19Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
LaprehistoriaElábaco
SigloXIXMáquinaanalíticadeCharlesBabbage
Página 20Fundamentos de la programación: Computadoras y programación
LadyAdaLovelaceesconsideradalaprimeraprogramadora
(Wikipedia)
Luis Hernández Yáñez
SigloXX
1936 MáquinadeTuring1946 ENIAC:Primeracomputadoradigital
depropósitogeneral1947 Eltransistor1953 IBM650:Primera
computadoraagranescala1966 ARPANET:OrigendeInternet1967 Eldisquete1970 SistemaoperativoUNIX1972 Primervirus informático(Creeper)
LenguajedeprogramaciónC1974 ProtocoloTCP.Primeraredlocal
Página 21Fundamentos de la programación: Computadoras y programación
ENIAC (Wikipedia)
Luis Hernández Yáñez
1975 SefundaMicrosoft
1976 SefundaApple
1979 JuegoPacman
1981 IBMPCSistemaoperativoMS‐DOS
1983 LenguajedeprogramaciónC++
1984 CD‐ROM
1985 Windows 1.0
1990 LenguajeHTMLWorld Wide Web
1991 SistemaoperativoLinux
Página 22Fundamentos de la programación: Computadoras y programación
Apple II (Wikipedia)
IBM PC (Wikipedia)Linux
Luis Hernández Yáñez
1992 Windows3.1
1995 LenguajedeprogramaciónJavaDVD
1998 SefundaGoogle
1999 MSNMessenger
SigloXXI2001 WindowsXP
MacOS X
2002 Mozilla Firefox
2007 iPhone
2008 Android ...
Página 23Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Página 24Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
¿Quéesprogramar?Decirleauntontomuy rápidoexactamente loquetienequehacer
Especificarlaestructura yelcomportamiento deunprograma,asícomoprobar queelprogramarealizasutareaadecuadamente yconunrendimiento aceptable
Programa:Transformaentradaensalida
Algoritmo:Secuenciadepasosyoperacionesquedeberealizarelprogramapararesolverelproblema
Elprogramaimplementaelalgoritmoenunlenguajeconcreto
SalidaPrograma
Página 25Fundamentos de la programación: Computadoras y programación
Entrada
Luis Hernández Yáñez
Laprogramaciónessólounaetapadelprocesodedesarrollo
Modelodedesarrollo“encascada”:
Página 26Fundamentos de la programación: Computadoras y programación
MantenimientoMantenimiento
PruebaydepuraciónPruebaydepuración
ProgramaciónProgramación
DiseñoDiseño
AnálisisAnálisis
Planificación Recursosnecesarios,presupuesto,plan,…
¿Qué?
¿Cómo?
Implementación
Luis Hernández Yáñez
Página 27Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Bjarne Stroustrup (1983)
#include <iostream>
using namespace std;
int main()
{
cout << "Hola Mundo!" << endl;
// Muestra Hola Mundo!
return 0;
}
Página 28Fundamentos de la programación: Computadoras y programación
Hola Mundo!
Luis Hernández Yáñez
Instrucciones
Datos:literales,variables,tipos
Subprogramas(funciones)
Comentarios
Directivas
...
Fundamentos de la programación: Computadoras y programación Página 29
#include <iostream>using namespace std;
int main(){
cout << "Hola Mundo!" << endl;// Muestra Hola Mundo!
return 0;}
#include <iostream>using namespace std;
int main(){
cout << "Hola Mundo!" << endl;// Muestra Hola Mundo!
return 0;}
DirectivaDirectiva
SubprogramaSubprograma
ComentarioComentario
InstrucciónInstrucción
InstrucciónInstrucción
Dato
Dato
Luis Hernández Yáñez
Página 30Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Sintaxisysemánticadeloslenguajes
Sintaxis— Reglasquedeterminancómosepuedenconstruir
ysecuenciarloselementosdellenguaje
Semántica— Significadodecadaelementodellenguaje
¿Paraquésirve?
Fundamentos de la programación: Computadoras y programación Página 31
Luis Hernández Yáñez
Especificación Lenguajes(BNF) Diagramas
Fundamentos de la programación: Computadoras y programación 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> ::=
BNF
| significa ó +23 ‐159 1374 1‐34 3.4 002
Ejemplo:Númerosenteros(sindecimales)
+
0 .. 9
‐
+
0 .. 9
‐
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación Página 33
<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> ::=
+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>)
Luis Hernández Yáñez
Fundamentos de la programación: Computadoras y programación Página 34
++2233
113377 44
11‐‐ ??
+23+23
13741374
1‐341‐34
+0 .. 90 .. 9
+
+
‐
‐
‐
0 .. 90 .. 9
0 .. 90 .. 9
Luis Hernández Yáñez
Página 35Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
HolaMundo!Unprogramaquemuestraunsaludoenlapantalla:
#include <iostream>
using namespace std;
int main()
// main() es donde empieza la ejecución
{
cout << "Hola Mundo!" << endl; // Muestra Hola Mundo!
return 0;
}
Página 36Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Análisisdelprograma
#include <iostream>
using namespace std;
int main()
{
cout << "Hola Mundo!" << endl;
return 0;
}
Página 37
Las instrucciones terminan en ;
Fundamentos de la programación: Computadoras y programación
Directiva
Instrucción
Declaración
Instrucción
Instrucción
Biblioteca
Espacio de nombres
Palabras reservadasTipo
Datos literales
Cuerpo de la función
Cabecera de la función
Bloque de código Cadena de caracteres Constante
OperadorOperador
Variable
Número
ColoreadosintácticoColoreadosintáctico
Luis Hernández Yáñez
HolaMundo!Casitodoesinfraestructura
Sólocout << "Hola Mundo!" << endl
hacealgopalpable
Lainfraestructura(notación,bibliotecasyotrosoporte)hacenuestrocódigosimple,completo,confiableyeficiente
¡Elestiloimporta!
Página 38Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Página 39Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Editor Blocdenotas,Wordpad,Word,Writer,Gedit,Kwrite,…
(textosimple,sinformatos)
Editoresespecíficos:coloreadosintáctico
Recomendación:Notepad++
Página 40
Instalaciónyuso:Sección
Herramientas de desarrolloenelCampusVirtual
Instalaciónyuso:Sección
Herramientas de desarrolloenelCampusVirtual
Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Página 41Fundamentos de la programación: Computadoras y programación
hola.cpp(código fuente)
hola.obj(código objeto)
Compilador
Códigoobjetodelabibliotecaiostream
hola.exe(ejecutable)
Enlazador
Hola Mundo!
CargadorCargador
Luis Hernández Yáñez
Compilador Importante:C++estándar
Recomendación:GNUG++(MinGW enWindows)
Página 42
Instalaciónyuso:Sección
Herramientas de desarrolloenelCampusVirtual
Instalaciónyuso:Sección
Herramientas de desarrolloenelCampusVirtual
Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Entornosdedesarrollo Paraeditar,compilaryprobarelcódigodelprograma
Recomendaciones:
— Windows:MSVisualStudio/C++ExpressoEclipse
— Linux:Netbeans oEclipse
Página 43
Instalaciónyuso:Sección
Herramientas de desarrolloenelCampusVirtual
Instalaciónyuso:Sección
Herramientas de desarrolloenelCampusVirtual
Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
¿Quéhaceelprograma? Laejecucióndelprogramasiempreempiezaenmain()
Seejecutanlasinstruccionesensecuenciadeprincipioafin
Página 44
_Hola Mundo!Hola Mundo!
Pantalla (cout)
_
MuestraHola Mundo!enlapantallaysaltadelínea
Devuelve0 comocódigodeterminacióndelprograma
FinFin
return 0;return 0;
cout << "Hola Mundo!" << endl;cout << "Hola Mundo!" << endl;
Inicio
Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
Página 45Fundamentos de la programación: Computadoras y programación
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
Página 46Fundamentos de la programación: Computadoras y programación
Luis Hernández Yáñez
LicenciaCC(Creative Commons)Estetipodelicenciasofrecenalgunosderechosaterceraspersonasbajociertascondiciones.
Estedocumentotieneestablecidaslassiguientes:
Pulsaenlaimagendearribaaladerechaparasabermás.
Fundamentos de la programación: Computadoras y programación Página 47
Reconocimiento(Attribution):Encualquierexplotacióndelaobraautorizadaporlalicenciaharáfaltareconocerlaautoría.
Nocomercial(Noncommercial):Laexplotacióndelaobraquedalimitadaausosnocomerciales.
Compartirigual(Sharealike):Laexplotaciónautorizadaincluyelacreacióndeobrasderivadassiemprequemantenganlamismalicenciaalserdivulgadas.