Bindings and scope
27 belangrijke vragen over Bindings and scope
Waarom zou men de scope van declaraties willen kunnen beperken?
Als een eenmaal ingevoerde naam in het hele programma naar dezelfde entiteit verwijst, is het niet mogelijk delen van een programma onafhankelijk van elkaar te schrijven. Bovendien moeten alle declaraties verschillende namen hebben.
[C3.Introductie]
Wat is het verschil tussen statische scoping en dynamische scoping?
Bij statische scoping kunnen we van elke naam op grond van de programmatekst vaststellen wat de corresponderende declaratie is. Een procedure wordt uitgevoerd in de omgeving waarin de procedure is gedefinieerd.
Bij dynamische scoping hangt het van de verwerking van het programma af welke declaratie van toepassing is. Een procedure wordt uitgevoerd in de omgeving waarin de procedure wordt aangeroepen.
[T4.2]
Wat wordt (in relatie tot bindingen) verstaan onder een omgeving?
Een omgeving is een (partiële) afbeelding van namen naar entiteiten.
[T4.1]
- Hogere cijfers + sneller leren
- Niets twee keer studeren
- 100% zeker alles onthouden
Wat is een bindable entity?
Een binding entity is elke entiteit die geassocieerd kan worden met een naam.
Voor welke entiteiten dit geldt is afhankelijk van de programmeertaal.
[T4.1]
Kent Haskell een geneste blokstructuur?
In Haskell ontstaat een geneste blokstructuur bijvoorbeeld door gebruik te maken van een where-constructie.
[C3.2]
Noem zeven soorten declaraties in Java en geef per declaratie aan welke entiteit(en) in de betreffende declaratie gebonden worden.
- Packagedefinitie: package
- Klassedeclaratie: klassetype
- Interfacedeclaratie: interfacetype
- Constantedefinitie: primitieve waarde of referentie
- Variabeledeclaratie: variabelereferentie
- Methodedefinitie: methode
- Parameterdeclaratie: formele parameter
Wat wordt verstaan onder de scope van een declaratie?
De scope van een declaratie is dat deel van de programmatekst waarvoor de declaratie effectief is.
[T4.2]
Noem drie soorten blokstructuren.
- Monolithische blokstructuur: het hele programma bestaat uit één blok.
- Platte blokstructuur: in het programma komen diverse blokken voor, maar uitsluitend naast elkaar.
- Geneste blokstructuur: blokken komen binnen andere blokken voor.
[T4.2]
Noem twee nadelen van een platte blokstructuur.
- Elke procedure en elke globale variabele moet een unieke naam hebben;
- Een variabele die niet lokaal gedeclareerd kan worden moet noodzakelijkerwijs globaal gedeclareerd worden, met als scope het hele programma.
[T4.2]
Wat is een belangrijk voordeel van een geneste blokstructuur?
Op elke plaats waar een naam gedeclareerd moet worden kan een blok geplaatst worden.
[T4.2]
Waarom conflicteert dynamische scoping met static typing?
Dynamische scoping maakt het voor de compiler onmogelijk om op grond van de programmatekst typecontrole uit te voeren. Of een bepaalde functieaanroep kan leiden tot een type error is bij dynamische scoping afhankelijk van de control flow van het programma.
[T4,2]
Noem drie nadelen van dynamische scoping ten opzichte van statische scoping
- Functieabstracties (methodeabstracties) zijn moeilijker te begrijpen;
- Scoping vindt plaats tijdens de verwerking van het programma, wat nadelig is voor de verwerkingssnelheid.
- Statische typecontrole is in het algemeen moeilijker
Wat wordt bedoeld met 'naam I is vrij in X'?
Dit betekent dat in programmafragment X géén binding occurrence van I voorkomt.
[T4.2]
Met welk doel worden worden closures toegepast?
[C3.2.4]
Wat is het verschil tussen een declaratie en een definitie?
In de cursus wordt het woord declaratie gebruikt bij een (nieuwe) variabeledeclaratie en bij een (nieuwe) typedeclaratie. In andere gevallen, zoals bij de declaratie van een functie, wordt het woord definitie gebruikt.
[C3.3]
Noem vier soorten primitieve declaraties (simple declarations)
- declaraties van typen
- declaraties van constanten
- declaraties van variabelen
- definities van procedures
Noem drie soorten samengestelde declaraties
- collaterale declaraties
- sequentiële declaraties
- recursieve declaraties
Er worden twee soorten typedeclaraties onderscheiden: type definitions en new-type declarations. Wat is het verschil?
Een new-type declaratie creëert een binding tussen een naam en een nieuw type, dat niet equivalent is met een bestaand type.
Type definities sluiten aan bij structurele equivalentie van typen en new-type declarations sluiten aan bij naamequivalentie van typen.
[T4.3]
Welke declaraties kunnen in Java in een blok voorkomen?
- klassedeclaraties
- constantedefinities
- variabeledeclaraties
[C3.3]
In welke drie vormen kan een blok in Java voorkomen?
- als methodebody
- als opdracht
- als initialisatieblok in een klassebody
Geef een voorbeeld van een new-type declaration in C.
Wat is de functie van een variabele renaming definition (in ADA)?
[T4.3]
Wat is de scope van een declaratie binnen een sequentiële declaratie?
[T4.3]
Wat wordt bedoeld met de uitspraak dat twee functies wederzijds recursief zijn?
Dit is alleen mogelijk als functies gebruik kunnen maken van functies die pas later (volledig) gedeclareerd worden.
[T4.3]
Wat wordt verstaan onder een blokdeclaratie en wat is het nut ervan?
Door gebruik te maken van een blokdeclaratie kan het aantal zichtbare bindings buiten de blokdeclaratie beperkt blijven.
[T4.4]
Wat is in Haskell het verschil tussen een where-constructie en een let-expressie?
Een let-expressie is een declaratie die lokaal is voor een expressie.
In het ene geval is dus sprake van een blokdeclaratie en in het andere geval van een blokexpressie.
[C3.4]
Noem een voordeel van dynamische scoping ten opzichte van statische scoping.
[C3.zelftoets]
De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:
- Een unieke studie- en oefentool
- Nooit meer iets twee keer studeren
- Haal de cijfers waar je op hoopt
- 100% zeker alles onthouden