name: portada class: portada-slide, middle, right # Llenguatges de programació ## __UD1:__ Desenvolupament de programari .footnote[Joan Puigcerver Ibáñez ([j.puigcerveribanez@edu.gva.es](mailto:j.puigcerveribanez@edu.gva.es))] --- layout: true class: regular-slide .right[.logo[]] --- # Què és un programa? Un __programa__ és una llista d'instruccions que l'ordinador realitzarà de manera seqüencial. __Programar__ és desenvolupar un programa. --- # Tipus de llenguatges - __Llenguatge natural__: És el llenguatge que utilitzem els humans per comunicar-nos. - Valencià, Anglès, Xinès, ... - Complexos - Matisos - Ambigüetats Es el millor per una màquina? -- .red[__NO__] .center[.large[__Llenguatge de programació__]] --- # Tipus de llenguatges - __Llenguatge de programació__: - Artificial, dissenyat expressament per controlar el comportament d'una màquina. - Regles clares. - Només té una interpretació. Existeixen diferents llenguatges de programació, cadascun amb diferents característiques i propòsits: - __Java__, C, Python, Ruby, Kotlin, Php, Javascript, Go, Rust, Matlab, R --- # Llenguatges de programació: Abstracció Classificació segons el nivell d'abstracció: - __Llenguatge màquina__: És el sistema de còdigs que són directament interpetrables per un processador. Aquest conjunt d'instruccions és diferent per cada processador. - __Llenguatge de baix nivell o assemblador__: Consisteix en un conjunt de còdigs que representen instruccions bàsiques del processador. - __Llenguatge de alt nivell__: Llenguatge amb alta abstracció dels detalls de maquinari de l'ordinador. Més fàcils de utilitzar i s'assemblen més al llenguatge natural. .center[[Llenguatge màquina](https://ca.wikipedia.org/wiki/Llenguatge_de_m%C3%A0quina)] .center[[Llenguatge de baix nivell o assemblador](https://ca.wikipedia.org/wiki/Llenguatge_d%27assemblador)] .center[[Llenguatge d'alt nivell](https://ca.wikipedia.org/wiki/Llenguatge_de_programaci%C3%B3_d%27alt_nivell)] --- # Tipus de llenguatges de programació   --- # Llenguatges de programació: Traducció Les persones ens agradaria poder programar amb llenguatges de alt nivell, però els processadors sols entenen llenguatge màquina. Cal traduir el llenguatge de alt nivell a llenguatge màquina. Segons els tipus de traducció, podem classificar els llenguatges de alt nivell segons: - __Interpretats__: El codi font va traduint-se a mesura que executem el codi. El __intèrpret__ tradueix una instrucció i el processador l'executa. - __Compilats__: El __compilador__ tradueix tot el codi font codi a codi màquina en un __executable__. Després, tot el codi màquina és executat. .center[[Llenguatge interpretat](https://ca.wikipedia.org/wiki/Llenguatge_interpretat)] .center[[Llenguatge compilat](https://ca.wikipedia.org/wiki/Compilador)] --- # Llenguatges compilats .columns[ .column[ ## Avantatges - Com es tradueixen d'avant mà, són més ràpids en temps d'execució. - Son capaços de trobar errors en tot el codi mentres es compilen. - Es poden aplicar optimitzacions en el codi. ] .column[ ## Desavantatges - El procés de compilació és lent i es necessita més temps per provar els programes. - El codi generat sols es pot executar en l'arquitectura del nostre entorn. ] ] .center[[Compiled vs. Interpreted](https://stackoverflow.com/questions/3265357/compiled-vs-interpreted-languages)] .center[[Compiled vs. Interpreted Guru99](https://www.guru99.com/difference-compiler-vs-interpreter.html)] __Exemples__: C ,C++, Rust, Pascal, Swift, ... --- # Llenguatges interpretats .columns[ .column[ ## Avantatges - El codi font és independent de la plataforma. És portable. ] .column[ ## Desavantatges - És més lent en temps d'execució, ja que ha de traduir i executar a la vegada. ] ] .center[[Compiled vs. Interpreted](https://stackoverflow.com/questions/3265357/compiled-vs-interpreted-languages)] .center[[Compiled vs. Interpreted Guru99](https://www.guru99.com/difference-compiler-vs-interpreter.html)] __Exemples__: Python, Javascript, Ruby, Perl, Bash, PHP, ... --- # Llenguatges bytecode El __bytecode__ és un codi intermedi més abstracte que el codi màquina, que ha segut generat mitjançant el procés de compilació, però no ha segut traduït a codi màquina. El bytecode és executat a la màquina mitjançant un intérpret, per tant aprofita tots els avantatges dels dos tipus de llenguatges. .center[[Bytecode](https://ca.wikipedia.org/wiki/Bytecode)] __Exemples__: Java, Kotlin, C#, ... ## Avantatges - El codi font és compilat, i per tant, està optimitzat i es poden trobar errors. - És ràpid d'executar. - El bytecode és portable i no depén de cap arquitectura. --- # Java  --- # Java El llenguatge __Java__ realitza els següents passos: - __Codi font__: Conté el programa a executar en llenguatge __Java__ (alt nivell). S'utilitza l'extensió __.java__. - __Compilador__: Es compila el codi font a bytecode amb el compilador de Java, que s'instal·la mitjançant el __Java Development Kit (JDK)__. - __Bytecode__: Conté el programa en llenguatge intermig en binari. S'utilitza l'extensió __.class__. - __JVM__: La __Java Virtual Machine__ interpreta el bytecode i el tradueix a llenguatge màquina, entès per el nostre sistema operatiu. La __JVM__ s'instal·la mitjançant el __Java Runtime Enviorment (JRE)__ (ve inclòs en el JDK). --- # Java __Codi font:__  __Compilar:__  __Executar:__  --- # Hello World! http://helloworldcollection.de/ --- # Els més populars