4GL
(eller: fjerdegenerationssprog, fjerdegenerationsværktøj).
Fourth Generation Language. Der er ingen præcis definition af, hvad 4GL eller et 4GL-værktøj er, da betegnelsen i flæng bruges enten snævert om enkeltprodukter til programudvikling eller i bred forstand om databaser med mange tilhørende udviklingsværktøjer. Den oprindelige betydning er snæver og knyttet til den historiske udvikling inden for programmeringssprog. Binær maskinkode var således første generation (1GL), symbolsk maskinsprog eller assembler var anden generation (2GL), og de såkaldte højniveausprog som FORTRAN, COBOL, ALGOL, C m.fl. er nu døbt tredje generation (3GL).
Hver generation repræsenterer et spring i produktivitet, hvilket betyder, at programmører kan lave flere programmer og større systemer af bedre kvalitet på kortere tid. 4GL følger denne udvikling, og fællesnævneren for alle 4GL-produkter er da også højere produktivitet i systemudviklingsforløbet, end det var tilfældet med 3GL. At yderligere definition ikke er mulig eller relevant, hænger sammen med, at 4GL er blevet en markedsføringsbetegnelse. Dette har skabt begrebsforvirring i form af, at mange og meget forskellige produkter har været udbudt som 4GL.
Et 4GL består principielt af to hovedkomponenter: en række fjerdegenerationsværktøjer samt en forbindelse til et databasesystem. I figuren er illustreret den strukturelle opbygning.
De fleste 4GL indeholder et eget programmeringssprog, som på forskellige måder løser de største problemer i 3GL-programmering, hvor det er en byrde at skrive, vedligeholde og fejlrette lange programmer. Ved at repræsentere de mest brugte 3GL-procedurer ved korte kommandoer reduceres antallet af kodelinier betydeligt, men den væsentligste produktivitetsforøgelse hentes i den non-procedurale programmeringsteknik (se non-proceduralt sprog), som de bedste 4GL-sprog bygger på. Disse sprog er hændelsesorienterede og er derfor velegnede til udarbejdelse af skærmdialoger, hvor logikken netop er afhængig af hændelser (når brugeren ændrer skærmdata, trykker på en funktionstast osv.). De handlinger, en hændelse udløser, programmeres som kendt fra 3GL. Visse sprog er yderligere så gennemført menustyrede, at arbejdet med dem ikke minder om programmering. Se også Visuelle programmeringssprog.
Reduktionen af programmeringsarbejdet sker imidlertid ofte på bekostning af funktionaliteten i 4GL-sprogene, hvorfor det er nødvendigt at anvende 3GL-sprog sammen med 4GL, når programmeringen bliver vanskelig. 3GL spiller derfor stadig en væsentlig rolle i sameksistens med 4GL, og visse 4GL-værktøjer har da heller ikke noget programmeringssprog, men producerer automatisk 3GL-programkode ud fra givne specifikationer, f.eks. skærmbilleddefinitioner. Disse applikations- eller kodegeneratorer forener høj 4GL-produktivitet med fleksibiliteten fra 3GL, da programmerne kan ændres manuelt. Er rettelser imidlertid foretaget, er der ingen vej tilbage, og programmet må vedligeholdes som traditionel 3GL-kode.
Et vigtigt krav til 4GL-teknologi er, at der stilles et samlet, integreret udviklingsmiljø til rådighed for designere, programmører og slutbrugere. Ud over et non-proceduralt programmeringssprog skal der derfor tilbydes en række andre, indbyrdes sammenhængende 4GL-værktøjer til brug for skærmbilleddesign, rapportgenerering og ad hoc-forespørgsler. I forbindelse med planlægningen af opgaveprogrammel bruges en række systemudviklingsmetoder og designværktøjer, f.eks. CASE-værktøjer, som også skal have forbindelse til 4GL og database.
Et typisk skærmbilledsystem består af faciliteter til opbygning af menusystemer, billed- eller formulardesign i form af en screen painter, en skærmbilledgenerator samt forbindelse til et systemsprog. Screen painter'en tillader frihåndstegning af skærmblankettens udseende med dens placering af ledetekster og skærmfelter. De bedste systemer er i stand til at kæde menuer og skærmbilleder sammen i forløb, inden den bagvedliggende programlogik er kodet, så en "tom" skærmdialogskal på den måde kan udføres som prototype på det endelige program. Flere værktøjer har vindueteknik, som ofte kan implementeres i skærmdialogen uden brug af egentlig programmering. Dette gør det nemt at indføre hjælpemenuer. Visse skærmbilledsystemer har ingen systemsprog, men behandler alle aspekter som objekter, der manipuleres ved hjælp af systemfunktioner.
Rapportgeneratorer eller report writers er ofte rettet mod den professionelle programmør, men med en flydende overgang til slutbrugerværktøjer, anvendt til ad hoc-forespørgsler. Anvendelse af paint-teknik ved definition af rapporters udseende eller Query-by-form er eksempler på teknikker, der i mindre grad er programmering og i højere grad slutbrugerudvikling.
4GL betragtes ofte som rene brugerudviklingssystemer eller brugersprog, men det gælder kun for visse værktøjer i en samlet 4GL-palet og kun til en vis grad. Med de allerfleste værktøjer kan der således uden programmering let laves enkle skærmbilleder og rapporter, og de kan forbindes med et enkelt register i databasen. Drejer det sig om mere indviklede skærmbilleder, hvor flere poster fra flere registre skal inddrages, må mange værktøjer give op, og der må udføres sædvanlig programmering.
4GL-systemernes evne til at håndtere en række databasefunktioner uden programmørindgreb bidrager væsentligt til den samlede produktivitetsforbedring i systemudviklingen. Det gælder f.eks. recovery-funktioner som tilbagerulning af transaktioner (rollback), automatiske databaselåsninger i flerbrugersituationer samt access control til data. Selv om disse funktioner strengt taget ikke hører hjemme i 4GL-værktøjerne, men i virkeligheden i databasesystemerne, er de med til at pointere, at 4GL og databaser skal opfattes som et samlet, integreret system.
Den optimale integration er, at:
- Alle oplysninger om data, registre, programmer, systemer og autorisationsforhold lagres centralt i et data dictionary.
- Databasen og databasens opbygning trækker direkte på definitionerne i data dictionary.
- Data, som anvendes på skærmbilleder, i rapporter, i programmer og ved ad hoc-forespørgsler, refererer direkte databasens feltdefinitioner.
Herved undgås redundante definitioner (se redundans), som ellers medfører ekstra arbejde, fejl og inkonsistens. Det integrerede 4GL-miljø fokuserer således især på at opfylde kravene til attribut- og referenceintegritet. Attributintegritet har den virkning, at datas tilladte værdier kun defineres ét sted, i data dictionary, så regler for feltvalideringer ikke skal programmeres i hvert enkelt skærmbillede eller program. Referenceintegritet sikrer konsistensen i databasens relationer gennem kontrol af fremmednøgler i registrene.
Grænsefladen mellem 4GL-værktøjerne og selve databasen udføres af databasemanipulationssprog. SQL og den relationelle datamodel er her dominerende som internationale de-facto standarder. SQL understøtter non-procedural programmering ved at behandle mængder eller datasæt ad gangen i stedet for procedural record-ad-gangen. SQL er ikke i sig selv et programmeringssprog eller udviklingsværktøj, men benyttes tværtimod af 4GL-programmeringssprog og andre 4GL-værktøjer som bindeled mellem programlogik og database (fremfinding af data, genskrivning, oprettelse, sletning osv.). De fleste 3GL-sprog har på samme måde databaseadgang ved hjælp af Embedded SQL, hvor SQL-kommandoer indsættes (indlejres) i 3GL-kildeprogrammet.
Adskillelsen mellem opgaveprogram og database over en standardiseret grænseflade gør SQL og relationsdatabaser til strategiske teknologier, da programmerne i princippet vil være flytbare (se programportabilitet) såvel mellem databaser som mellem maskinelfabrikater. Dermed opnår programmer forlænget levetid, dvs. giver bedre økonomisk forrentning. Virksomheder udnytter ofte disse muligheder i forbindelse med databasemigrering, hvor ældre databaser udskiftes med nye relationsdatabaser. Markedet har tilpasset sig denne efterspørgsel, hvilket betyder, at stort set alle 4GL-produkter indeholder en mere eller mindre standardiseret version af SQL. En anden konsekvens er, at fabrikanterne adskiller 4GL fra databasesystemet, hvilket giver brugerne frihedsgrader til at blande produkterne, eksempelvis til at anvende et tredjeparts 4GL på en anden leverandørs relationsdatabase.
