Programmeringsspråk kan være høynivå eller lavnivå:
Med lavnivå mener vi assembler- og maskinkodeprogram. De er omstendelige å bruke og man må skrive mange instruksjoner for å få gjort ting.
En instruksjon i assemblerspråk kompileres til en instruksjon i maskinkode.
Med høynivå mener vi "vanlige" programmeringsspråk som Fortran, Cobol, Algol, Pascal, Basic, C, Java o.s.v..
Disse språkene er mer effektive, da en instruksjon i et høynivåspråk kompileres til mange (10-100) maskinkoder!
Høynivåspråk er derfor mer "uttrykksfulle" eller effektive.
År: | Språk: | Kommentarer: |
Før 1957 | Forskjellige lavnivå-språk. | |
1957 | Fortran | Regnes av mange som det første
"ordentlige" høynivåspråk. Mest matematikk: Formula Translation |
1960 | Cobol | Mye bruk av banker, brukes fremdeles. |
1960 | Algol | Første "strukturerte" språk: Blokkorientert. |
1967 | Simula 67 | Nygård og Dahl, første objektorienterte språk! Så forut for sin tid at det gikk 20 år før alle skjønte hvor genialt det var... |
1970 | Pascal | En milepel, godt språk, men mest brukt i utdanningsinstitusjoner. |
1972 | C | I utgangspunktet laget for å lage operativsystem. Raskt, men lite feilkontroll. Antagelig det mest brukte språket i dag? |
1975 | Basic | Et enkelt og lettlært språk, men regnes som "dårlig" av mange eksperter... |
1980 | Smalltalk | Første rene objektorienterte språk |
1980 | C++ | Objektorientert versjon av C |
1986 | Eiffel | Objektorientert språk |
1995 | Java | Objektorientert språk Pr. 2011 verdens mest brukte
programmeringsspråk; da det er det eneste som har lykkes i å bli utbredt på "alle" plattformer; Windows, Linux, Mac OS, pc, mobiltelefoner (hovedspråk i Android) og mikrokontrollere i TV, biler, alarmsystemer, måleutstyr, osv. osv. |
Lite struktur i programskriving, mye hopp-instruksjoner (GOTO). Algol-famillien la vekt på å strukturere programmer i blokker og delprogrammer, med veldefinerte kontrollstrukturer (IF, FOR, WHILE istedenfor GOTO) og mekanismer for prosedyrer og delprogrammer.
Mulig å lage egne og nye datatyper. (I tillegg til heltal (integer), flyttall (real), tegn (character) og tekst (string))
Mekanismene RECORD og såkalte pekere/referanser, POINTER, gjorde det mulig å også lage nye datastrukturer (utover enkelt-data og tabeller),
som trestrukturer, listestrukturer, køer og nettverksstrukturer.Separat kompilering av delprogrammer gjorde det i tillegg mulig å lage biblioteker som andre kunne bruke uten å kjenne til hvordan de var laget.
(Importere i egne program, ferdig kompilert.)
Programvarekrisen ble erkjent på 80-tallet: 99% av alle programmer er for ustabile og upålitelige, nødvendig å få bedre og sikrere språk!
Dette skyldes delvis at programmeringsspråkene er for dårlige, delvis at problemområdene man arbeidet med ble mer og mer komplekse og vanskelige.De objektorienterte språkene prøvde å få til dette med fire krav:
- Encapsulation (Information hiding) - Innkapsling
- Extension and Inheritance - Utvidbarhet og Arv
- Dynamic binding - Polymorfi
- Data abstraction - Data-abstraksjon
Språket må ha mulighet til å skjule "innsiden" av et delprogram/modul/bibliotek/datastruktur og gjøre den utilgjengelig.
Dette beskytter mot feil og hindrer brukere i å endre noe som allerede fungerer bra.
Mulighet til å dele opp programmet i moduler ("black box") og på denne måten pakke inn og skjule kompleksitet, slik at programmereren kan skifte mellom detaljperspektiv (i hver modul) og oversiktsperspektiv (sette sammen moduler).
Det nye er at man kan samle operasjoner og data i samme "boks", såkalte objekter/klasser.
Litt vanskelig å forklare hvordan dette gjøres, men prinsippet er greit.
Før de objektorienterte språkene kom kunne man f.eks. lage et bibliotek med en kø som kunne ta i mot kunder.
Problemet oppstår hvis man ønsker å bruke køen til noe annet enn kunder, f.eks. ventende telefonsamtaler.
Da kan man ikke bruke biblioteket og må lage hele kø-systemet på nytt med den nye datatypen.Objektorienterte språk skal ha muligheten til å lage datastrukturer som kan ta i mot hva som helst, selv om man ikke vet helt hva på det tidspunkt datastrukturen ble laget.
I tillegg til å kunne anvende en ferdig datastruktur fra et bibliotek, krever objektorientering at man i tillegg skal kunne utvide biblioteket, og gi det tilleggsfunksjonalitet uten å endre på originalen.
Dessuten har objektorienterte språk ofte automatisk minnehåndtering og gjør en del ting som andre språk krever at programmereren gjør selv. Fordelen med dette er at programmerere gjør for mange feil, automatisk feilsjekking og kodegenerering er tryggere.
Dagens grafiske brukergrensesnitt gjør at alle
objektorienterte språk også er hendelsesdrevne
(event-driven),
det vil si at ma setter opp lyttere som
venter på at de får melding om at noe har skjedd.