Introduksjon til programmering og programmeringsspråk Henrik Lieng Høgskolen i Oslo og Akershus
Kategorisering av programmeringsspråk? Deklarativ vs. imperativ Lav nivå vs. høy nivå Kompilert vs. tolket Generell vs. spesifikk
Veldig høy-nivå programmering med Scratch
Hva er et språk? Hvert språk har en formell beskrivelse av grammatikken til språket. To kategorier: 1. Systaks: beskriver strukturen til teksten if(true) System.out.println(); er lov, mens if true, System->println() ikke er lov 2. Semantikk: beskriver meningen med ulike tegn og symboler Hva er effekten? if(false) domethod1(); else domethod2();
Deklarativ vs. Imperativ programmering Deklarativ Beskriver hva som skal gjøres, men ikke hvordan Programmer ofte delt inn i matematiske funksjoner (funksjonell programmering) Dette semesteret: HTML Imperativ Beskriver både hva og hvordan Programmer delt inn i en sekvens av instruksjoner «Oppskrifter» på løsninger Dette semesteret: Java
Deklarativ programmering - HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hello</title> </head> <body> <p>hello, world!</p> </body></html>
Spesifikke språk Mainstream språk har generell programutvikling som hovedmål. Spesifikke språk har spesifikke domener som målgruppe. Eksempler: HTML for nettsideformatering Mathematica for matematikk SQL for databasekommunikasjon Bash for Linux skallprogrammering UnrealScript for dataspillutvikling GLSL for dataprosessering på grafikkprosessor
Hvor mange språk finnes det? Det blir oppfunnet tusenvis av språk hvert tiår. De fleste dør ut Et nytt språk dekker et nytt behov Java: skriv kode en gang, kjør på hvilken som helst maskin C: muliggjør utvikling av store systemer uten Assembly kode (UNIX) C++: C med klasser (språket het først C with Classes ) Behov i dag: Rapid agile development Sikkerhet Web og mobil
Hvilket språk er best? Ingen språk dekker alle behov Ikke bruk C/C++ fordi de er usikre Ikke bruk Java fordi du får dårlig ytelse Ikke bruk Python fordi det er for light-weight MEN, noen språk kan være bedre på spesifikke ting: C for operativsystemer Java for web- og apputvikling Matlab for matematikk Javascript for dynamiske websider
PYPL- PopularitY of Programming Language Index
Ikke-kompilerte (tolkede) språk Java er et kompilert språk: kildekoden kompileres slik at maskinen kan utføre instruksjonene til programmet. Det finnes imidlertid språk som ikke trenger kompilering. Her blir kildekoden istedenfor tolket av en tolk. Eksempler: JavaScript: tolkes av nettleser (som Google Chrome) PHP: tolkes av en PHP tolk (eget program typisk installert på en server) Python: tolkes av en Python tolk (kan konvertere til maskinkode) De fleste «deklarative» språk (eks. HTML, XML)
Python Lett å lære Lett/simpel syntaks, ikke C-syntaks (som Java) Prosedyre-basert, med svekket støtte for objekter Støtter ikke objekt-orientert programmering 100 %, som Java
Raspberry Pi Raspberry Pi ble laget for å få barn mer interessert i programmering. Systemet tilbyr et enkelt programmeringsmiljø, med Python, der kommunikasjon til enheter, som I/O, er rett-frem. PS: ikke bare for barn Eksempel: https://youtu.be/qwrklyc2kdm
Java Høy-nivå kompilert språk Kjører på en «virtuell maskin» Fordel: samme kode fungerer på alle typer maskiner (så lenge den støtter Java). Dette er ikke tilfellet med C/C++. Ulempe: Java vil alltid ha dårligere ytelse enn tilsvarende C/C++ programmer på grunn av prosessering av den virtuelle maskinen. Hovedprinsipper: sikkert (stol ikke på programmerer) enkelt (tilby abstraksjoner over C) objekt-orientert («alt» i Java er klasser)
C++ C++ er en utvidelse av C. C++ støtter objekt-orientert programmering. Ligger veldig nærme maskinvaren. C++ støtter all funksjonalitet tilgjengelig i C (men ikke motsatt).
C C er et høynivå-språk som ligger «nærme» maskinvaren. Å konvertere fra C til maskinkode/assembly er relativt «lett». C er verdens mest distribuerte språk. Så å si alle datamaskinarkitekturer støtter språket. C er prosedyre-basert, dvs. at programmet er delt inn i mindre prosedyrer. C programmer er ofte skrevet i en stor fil (med mange prosedyrer). Java er hovedsakelig implementert i C. C brukes i flere teoretiske eksempler i dett faget, der Java ikke «strekker til».
Lav-nivå språk: maskin- og assemblykode
Oppsummering Veldig-høy-nivå språk: Scratch (visuelt) Høy-nivå, tolket: Python, JavaScript, PHP, HTML Høy-nivå, kompilert: Java, C++, C Imperativt: Python, JavaScript, PHP, Java, C++, C Deklarativt: HTML, Scala Felles: semantikk, variabelt: syntaks Spesifikke språk: HTML, Matlab Generell: Python, Java, C