Deze samenvatting
+380.000 andere samenvattingen
Een unieke studietool
Een oefentool voor deze samenvatting
Studiecoaching met filmpjes
Onthoud sneller, leer beter. Wetenschappelijk bewezen.

Samenvatting - Programming language design concepts
-
1 Programming languages
-
Welke zijn de leerdoelen voor deze cursus?
- een goed inzicht hebt in de basisconcepten van programmeertalen, zoals waarden, typen, expressies, variabelen, opdrachten, bindingen en
abstractiemechanismen - kunt aangeven in hoeverre een concrete programmeertaal voldoet aan de vier in deze cursus geformuleerde
kwaliteitscriteria voor programmeertalen:
- hettype-volledigheidsprincipe
- hetkwalificatieprincipe
- hetabstractieprincipe
- hetcorrespondentieprincipe - een goed inzicht hebt in
inkapselingstechnieken , typesystemen en manieren om deprogrammaverwerking te onderbreken - een goed inzicht hebt in de concepten van parallel en gedistribueerd programmeren
- met eigen woorden kunt beschrijven welke taalconcepten kenmerkend zijn voor respectievelijk
-de imperatieve
- deobjectgeoriënteerde
- de functionele
- de parallelle
- de logische
- de scripting programmeertalen.
- een goed inzicht hebt in de basisconcepten van programmeertalen, zoals waarden, typen, expressies, variabelen, opdrachten, bindingen en
-
2 Values and types
-
Door welke twee zaken wordt een type gekarakteriseerd?
- Een verzameling waarden
- Een of meer operaties die uniform op alle waarden kunnen worden toegepast
[T2.1]
-
Typen kunnen onderverdeeld worden in drie groepen. Welke zijn dit?
- Primitieve typen
- Samengestelde typen
- Recursieve typen
[T2.1]
-
De verzameling waarden van een type kan implementation-defined of language-defined zijn. Wat is het verschil?
Bij implementation-defined typen wordt de verzameling waarden bepaald door de compiler.
Bij language-definied typen wordt de verzameling waarden bepaald door de programmeertaal.
Als derde mogelijkheid kan de verzameling waarden van een type bepaald worden door de programmeur.
-
Wat is het nadeel van implementation-defined typen ten opzichte van language-defined typen?
Bij implementation-defined typen kan het gedrag van het programma van computer tot computer verschillen. Dit vormt een beperking voor de portabiliteit van het programma.
-
Wat wordt bedoeld met een enumerand?
Een enumerand is een waarde van een enumeratietype.
-
Noem vier categorieën ('structuring concepts') van samengestelde waarden
- Cartesian products (tuples, records)
- Mappings (arrays)
- Disjoint unions (algebraic types, discriminated records, objects)
- Recursive types (lists, trees)
[T2.3]
-
Wat wordt bedoeld met een deelintervaltype (subrange type)?
Een deelintervaltype is een type waarvan de waarden een deelverzameling vormen van een ander type.
-
Noem twee manieren om een mapping van n-tuples te implementeren.
- Via een n-dimensional array
- Via een n-parameter function
[T2.3]
-
Wat zijn twee essentiële verschillen tussen een functieprocedure en een wiskundige functie?
- Een functieprocedure wordt geïmplementeerd met behulp van een algoritme en heeft dus eigenschappen (bijv. efficiëntie) die wiskundige functies niet hebben.
- Een functieprocedure kan, in tegenstelling tot een wiskundige functie, globale variabelen inspecteren of wijzigen.
[T2.3]
-
Elke waarde van een disjoint union (disjuncte vereniging) bestaat uit een tag en een variant. Wat is de betekenis van beide componenten?
De variant geeft de waarde aan en de tag geeft aan uit welke verzameling de waarde afkomstig is.
[T2.3]
-
Noem drie verschijningsvormen van een disjoint union.
- Algebraic types (Haskell)
- Discriminated records (Ada)
- Objects (Java)
[T2.3]
-
Wat houdt de projectie-operatie bij een disjoint union in?
Het afleiden van de variant uit een waarde van een disjoint union.
-
Wat is de functie van de tag, in het geval een disjoint union de vorm van een object heeft?
De tag geeft de klasse van het object aan.
[T2.3]
-
Twee verschijningsvormen van een disjoint union zijn discrimated records en objecten. Noem een belangrijk verschil tussen discriminated records en objecten.
Een verzameling objecten is 'open-ended'; de verzameling kan met een willekeurige nieuwe klasse worden uitgebreid.
[T2.3]
-
Leg uit waarom lijsten en strings als recursieve typen kunnen worden beschouwd.
Een lijst bestaat uit een head en de rest van de lijst (de tail). De tail is op zichzelf ook weer een lijst.
Eenzelfde redenering kan gemaakt worden voor strings, wanneer we een string zien als lijst van karakters.
-
Noem vijf verschillende benaderingen voor de classificatie van strings.
Een string kan gezien worden als:
- Een primitieve waarde (ML)
- Een array van karakters (Ada)
- Een pointer naar een array van karakters (C., C++)
- Een lijst van karakters (Haskell, Prolog)
- Een object (Java)
[T2.4]
-
Wat is de belangrijkste functie van een typesysteem?
Met een typesysteem wordt voorkomen dat onzinnige operaties, zoals het vermenigvuldigen van een string en een boolean, worden uitgevoerd.
[T2.5]
-
Wat is het verschil tussen static typing en dynamic typing?
Bij static typing ligt het type van alle variabelen vast. Typecontrole vindt tijdens de vertaalfase (at compile-time) plaats.
Bij dynamic typing hebben de variabelen geen vast type. Typecontrole vindt tijdens de verwerking van het programma (at run-time) plaats.
-
Noem drie overwegingen die een rol spelen bij de afweging tussen static typing en dynamic typing.
- Static typing is efficiënter
- Static typing is veiliger
- Dynamic typing is flexibeler
[T2.5]
-
Waarom is static typing efficiënter dan dynamic typing?
- Er hoeft tijdens de verwerking van het programma geen typecontrole uitgevoerd te worden
- Waarden hoeven niet gelabeld te worden om typecontrole mogelijk te maken. Er is dus minder opslagruimte nodig.
[T2.5]
-
Wat is het Type Completeness Principle?No operation should be arbitrarily restricted in the types of its operands.
Wat met waarden van één type kan, moet - voor zover zinvol - ook met waarden van een ander type kunnen. -
Welke twee vormen van type-equivalentie worden onderscheiden?
- Structurele equivalentie: twee typen zijn equivalent dan en slechts dan als ze dezelfde waardenverzameling hebben. Dit wordt bepaald door de structuur van twee typen te vergelijken.
- Naamequivalentie: twee typen zijn alleen equivalent als ze op dezelfde plaats gedefinieerd zijn, ofwel dezelfde (gekwalificeerde) naam hebben.
[T2.5]
-
Noem twee overwegingen die een rol spelen bij de afweging tussen structurele equivalentie en naamequivalentie.
- Naamequivalentie dwingt af dat elk afzonderlijk type maar op één plaats gedefinieerd wordt. Dit kan onpraktisch zijn, maar komt uiteindelijk de onderhoudbaarheid van het programma ten goede.
- Structurele equivalentie kan tot verwarring leiden als twee typen toevallig dezelfde structuur hebben.
[T2.5]
-
Het typevolledigheidsprincipe kan als volgt gedefinieerd worden:
No operation should be arbitrarily restricted in the types of its operands.
Wat impliceert het woord arbitrarily in deze definitie?
Eventuele beperkingen ten aanzien van de toe te passen operaties dienen inherent te zijn aan de structuur van de operanden of anderszins gerechtvaardigd te kunnen worden.
[T2.5]
-
Waarom spelen expressies in functionele talen een veel belangrijkere rol dan in imperatieve talen?
Dit komt doordat besturingsstructuren zoals die in imperatieve talen voorkomen, in functionele talen gerealiseerd worden met expressies.
[C1.6]
-
Noem zes fundamentele vormen van een expressie.
- Literals
- Constructions
- Function calls
- Conditional expressions
- Iterative expressions
- Constant and variable accesses
[T2.6]
-
Waarom zijn methoden in Java tweede-klaswaarden?
In Java kunnen methoden niet aan een variabele worden toegekend of als argument worden meegegeven aan een methodeaanroep.
[T2.5.3]
-
Wat is het verschil tussen een expressie en een opdracht?
Een expressie is een programmafragment dat geëvalueerd kan worden en daarbij een waarde oplevert.
Een opdracht is een syntactische constructie die bij uitvoering waarden van variabelen verandert.
Een opdrachtexpressie (command expression) is een expressie die opdrachten kan bevatten.
-
Noem een voorbeeld van een programmeertaal die dynamisch getypeerd is.De meeste scripttalen, waaronder Python, zijn dynamisch getypeerd.
[T16.2] -
Welke primitieve typen kent Java?
- Gehele getallen
- Drijvende puntgetallen
- Waarheidswaarden
- Characters
-
Wat is een expressie?An expression is a construct that will be evaluated to yield a value.
Eentaalconstructie die uitgerekend kan worden en een waardeoplevert . -
Welke samengestelde typen kent Java?
- Klassen (waaronder String)
- Interfaces
- Arrays
-
Welke primitieve typen kent Haskell?
- gehele getallen
- drijvende-puntgetallen
- characters
-
Welke samengestelde typen kent Haskell?
- Tupels
- Lijsten (waaronder String)
- Datatypen (waaronder Bool)
- Functies
-
Hoe kan in Java het structureringsconcept functieruimte worden gerealiseerd?Met behulp van een array
[C1.zelftoets] -
Hoe kan in Haskell het structureringsconcept functieruimte worden gerealiseerd?Met behulp van een functie
[C1.zelftoets] -
Hoe kan in Java het structureringsconcept recursief type worden gerealiseerd?Met behulp van referenties naar objecten
[C1.zelftoets] -
Hoe kan in Haskell het structureringsconcept recursief type worden gerealiseerd?
- In de vorm van een lijst
- Met behulp van een datatype
-
Op welke vier punten voldoet Java niet aan het typevolledigheidsprincipe?
- Constanten kunnen alleen van een primitief type of van het type String zijn.
- Methoden of samengestelde typen kunnen niet worden meegegeven als argument aan een methodeaanroep
- Het resultaat van een methodeaanroep kan geen methode of samengesteld type zijn
- Methoden en variabelereferenties kunnen wel component zijn van een object, maar niet van een array.
-
Welke vormen van constructies kent Java?
- Array-initializers
- Constructoraanroepen
-
Welke vormen van constructies kent Haskell?
- Tupelconstructie
- Lijstconstructie
- Constructorfuncties
Laatst toegevoegde flashcards
Een
Wat met waarden van één type kan, moet - voor zover zinvol - ook met waarden van een ander type kunnen.
- een goed inzicht hebt in de basisconcepten van programmeertalen, zoals waarden, typen, expressies, variabelen, opdrachten, bindingen en
abstractiemechanismen - kunt aangeven in hoeverre een concrete programmeertaal voldoet aan de vier in deze cursus geformuleerde
kwaliteitscriteria voor programmeertalen:
- hettype-volledigheidsprincipe
- hetkwalificatieprincipe
- hetabstractieprincipe
- hetcorrespondentieprincipe - een goed inzicht hebt in
inkapselingstechnieken , typesystemen en manieren om deprogrammaverwerking te onderbreken - een goed inzicht hebt in de concepten van parallel en gedistribueerd programmeren
- met eigen woorden kunt beschrijven welke taalconcepten kenmerkend zijn voor respectievelijk
-de imperatieve
- deobjectgeoriënteerde
- de functionele
- de parallelle
- de logische
- de scripting programmeertalen.
- start: om een actor te starten
- act: wordt binnen start aangeroepen
- receive: lezen en afhandelen bericht door een thread-based actor
- react: lezen en afhandelen bericht door een event-based actor
Met het sleutelwoord val in combinatie met de naam van de functie kunnen we een onveranderbare variabele declareren die een functieobject is.
[C17.2.2]
[C17.2.1]
- Logging van wijzigingen in de personeelsadministratie
- Controle op autorisatie
[T15.1]
- Tagged structures (vergelijkbaar met tagged tuples)
- Numbers
- Atoms (parameterloze contructors)