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