Mer om mekanismer i programmeringsspråk


Alle språk må ha disse elementene og mekansimene:

Da kan man stort sett få gjort det meste, men det kan fort bli tungvindt, mye skriving og uoversiktlig.

Andre språk-elementer og konstruksjoner har derfor kommet etterhvert, ut fra et ønske/behov for:

Prosedyrer og funksjoner

Mange ting gjøres likt flere steder i et program. Derfor hensiktsmessig å samle mye brukt kode i såkalte prosedyrer eller funksjoner.

Eksempelvis:

sum=summerTabell(tabell) 

Funksjon fordi den er som i matematikken, du putter noe inn (en tabell) og får noe annet ut (sum)

sorter(tabell)

Prosedyre/delprogram, fordi det ikke returnerer noen verdi, det bare utfører en operasjon (sortering) på noe (tabell)

Kom med Algol-familien.

Record /Struct

Mulighet for å lage nye og sammensatte datatyper (utover heltall, flyttall og tekststrenger!)

Eksempel fra programmeringsspråket Pascal:

Person=RECORD

Navn: STRING;
Alder: INTEGER;
Gift: BOOLEAN;

END;

I dagens mer eller mindre objektorienterte språk legge sammensatte datatyper i objekter.

Pekere og separat kompilering

Med såkalte pekere eller referanser/henvisninger, kunne man lage såkalte abstrakte datatyper, for eksempel sammenlenkede lister og trestrukturer med sammensatte datatyper.

Sammen med tilpassede prosedyrer og funksjoner kunne man da lage en modul (som kunne kompileres for seg til et bibliotek) med f.eks. en

Kø med operasjoner som:

add(ko,person)   Legg inn en person i slutten av køen
person=remove(ko)   Ta en person ut fra starten av køen
clear(ko)   Tøm køen helt

Poenget her er at brukeren av biblioteket ikke trenger å kjenne detaljene om hvordan køen er programmert,
han bare bruker køen v.h.a. de få operasjonene som er nødvendige.

Kom også med Pascal.

Objektorientering

Kom på 80-tallet som en følge av den såkalte "programvarekrisen", som må sies å eksistere fremdeles.

Mest kjente språk: Smalltalk, Eiffel, C++, Java.

Objektorientering (OO) prøver å få til fire ting:

Oppnåes v.h.a. begrepene klasse og objekt, der både data og prosedyrer kapsles inn i samme modul.

Oppnåes ved å angi hva skal være tilgjengelig eller ikke fra utsiden, typisk: "public" eller "private".

Oppnåes ved såkalt dynamisk binding (eller sen binding), d.v.s. at prosedyrer og funksjoner ikke bestemmes før programmet kjøres.

Oppnåes ved at klasser kan utvides og kobles sammen i "familietrær" med såkalt arv.
(Her oppnår man i tillegg at nye underklasser kunne arve allerede skrevet kode!)

Alle disse mekanismene bidrar til at det er lettere å lage stabil og feilfri kode, noe som er den helt overordnede målsettingen.

Pr. i dag kan man vel si at alle nye teorier om hvordan man skal planlegge og lage større programvareprosjekter er basert på objektorientert tenkning.

Likevel skrives mange programmer i ikke-objektorienterte språk eller i objektorienterte språk uten å utnytte objektorienterte prinsipper.

Dette skyldes antageligvis:

Oberon - total objektorientering

Foreløpig er det stort sett programmererne som har hatt nytte av objektorientering når de skriver programmer. Viktig å få frem at også brukeren kan få nytte av dette!

Ikke bare programkoden, men også operativsystemet og brukergrensesnittett kan gjøres objektorientert, med det resultat at det kunne vært lettere, mer intuitivt og mer fleksibelt å være bruker av en pc enn det er i dag!

Et prosjekt ved høyskolen i Zürich som heter Oberon har eksistert i over 20 år. Der har man laget både et programmeringsspråk som heter Oberon og et operativsystem som heter Oberon.

Det interessante med Oberon er at ikke bare programmerere nyter godt av OOP, også operativsystem og brukergrensesnitt er objektorientert, slik at brukeren kan arbeide med objekter istedenfor programmer og filer. Oberon kjennetegnes av:

Se http://www.oberon.ethz.ch/

Hvorfor er da et slikt system så dårlig kjent? Og hvorfor lages det ikke slike systemer?

Systemet er basert på at det er en felles åpen standard for tekst, grafikk, filformater osv. i bunnen av operativsystemet og at alle programmer må ha kjennskap til hverandre og samarbeide med hverandre. (Akkurat som alle elektriske apparater bruker samme stikk-kontakt-type, noe som er selvsagt i dagliglivet og i andre produkter, men tydeligvis vanskelig å få til i IT-verdenen ....).

Dette medfører at M$ og alle de andre måtte forholde seg til felles og åpne standarder for kommunikasjon mellom programmer, noe de av før nevnte grunner er lite interesserte i, så dermed sitter vi her med antikverte, overlessede, trege og teknisk primitive operativsystemer og programmer, selv om det i flere tiår har vært mulig å lage langt mer avanserte systemer...

(Tre forsøk har vært gjort på å få til slike ting tidligere: operativsystemet OS/2, operativsystemet Next og dokumentstandarden OpenDoc. Onde tunger påstår at M$ alene klarte å stoppe både OS/2 og OpenDoc...). For at Steve Jobs skulle få laget Next måtte han først bli sparket fra Apple...

Det er til å bli deprimert av ... :-(