Variables and storage

30 belangrijke vragen over Variables and storage

Wat is het verschil tussen een variabele zoals we die in imperatieve en objectgeoriënteerde programmeertalen tegenkomen, en een wiskundige variabele?

Als de waarde van een wiskundige variabele eenmaal is ingevuld kan deze tijdens het programma niet meer veranderen.

De waarde van een variabele uit een imperatieve of objectgeoriënteerde programmeertaal kan wel veranderd worden.

[C2.1]

Het abstracte geheugenmodel ziet het geheugen als een verzameling adresseerbare geheugencellen (storage cells). Neemt elke geheugencel evenveel geheugenruimte in?

Neen. Een cel kan per definitie één primitieve waarde bevatten, ongeacht de hoeveelheid geheugenruimte die daarmee gemoeid is.

Wat is het verschil tussen een unallocated storage cell en een undefined storage cell?

Zolang een cel niet is toegewezen aan een variabele heeft de cel de status unallocated. Als een cel wel is toegewezen aan een variabele, maar die variabele is nog niet geïnitialiseerd, dan is de inhoud van de cel undefined.

[T3.2]

  • Hogere cijfers + sneller leren
  • Niets twee keer studeren
  • 100% zeker alles onthouden
Ontdek Study Smart

Noem een voorbeeld van een programmeertaal die geen storables kent.

Dit geldt voor alle (zuiver) functionele programmeertalen, waaronder Haskell.

In functionele talen correspondeert het begrip variabele met het begrip zoals we dat uit de wiskunde kennen. De waarde van zo'n variabele kan niet veranderd worden.

[C2.2]

Wat is het verschil tussen een totale update en een selectieve update van een samengestelde variabele ?

Bij een totale update worden alle componenten van de variabele in één keer gewijzigd. Bij een selectieve update worden de componenten van  een variabele afzonderlijk gewijzigd.

Wat is het verschil tussen een statische array, een dynamische array en een flexibele array?

Bij een statische array wordt de verzameling indexwaarden (index range) tijdens het compileren (at compile time) vastgelegd.

Bij een dynamische array wordt de verzameling indexwaarden tijdens de verwerking van het programma (at run time) vastgelegd.

Bij een flexibele array kan de verzameling indexwaarden gedurende de levensduur van de variabele veranderen. In Java bijvoorbeeld kan aan dezelfde variabele eerst een array met lengte x en vervolgens een array met lengte y wordt toegewezen.

[T3.3]

Voor het toewijzen van een waarde aan een variabele wordt onderscheid gemaakt tussen copy semantics en reference semantics. Wat is het verschil?

Bij copy semantics worden alle componenten van een waarde gekopieerd naar de betreffende componenten van de variabele. Als de oorspronkelijke waarde vervolgens wordt gewijzigd heeft dit geen gevolgen voor de gekopieerde waarde.

Bij reference semantics wordt aan de variabele een pointer naar de betreffende waarde meegegeven.

[T3.4]

Java past bij de toewijzing van een object aan een variabele standaard reference semantics toe. Op welke wijze kan bij objecten in Java het effect van copy semantics worden bereikt?

Via de methode clone.

[T3.4]

Wat houdt de equality test in bij respectievelijk copy semantics en reference semantics?

Bij copy semantics wordt getest of de componenten van de te vergelijken waarden gelijk zijn.

Bij reference semantics wordt getest of de pointers naar de te vergelijken waarden gelijk zijn.

[T3.4]

Wat is de levensduur van respectievelijk een globale variabele, een lokale variabele, een heap-variabele en een persistente variabele?

  • Globale variabele: de duur van het programma
  • Lokale variabele: de duur van het blok waarin de variabele is gedeclareerd
  • Heap-variabele: hooguit de duur van het programma. Een heap-variabele kan op elk moment tijdens de verwerking van het programma gecreëerd en vernietigd worden
  • Persistente variabele: onbepaald en mogelijk langer dan de duur van een specifiek programma

[T3.5]

Waarin verschilt een heap-variabele van een lokale of globale variabele?

Een heap-variabele is anoniem, wat betekent dat deze niet wordt gedeclareerd en geen identifier heeft.

Objecten in Java zijn heap-variabelen.

Wat wordt verstaan onder respectievelijk een allocator en een deallocator?

Een allocator is een methode die een heap-variabele creëert. Een voorbeeld van een allocator is de Java-methode new.

Een deallocator is een methode die een gegeven heap-variabele vernietigt.

[T3.5]

Een deallocator is een methode die een gegeven heap-variabele vernietigt. Welk risico brengt het gebruik van deallocators met zich mee?

Het risico dat pointers naar niet-bestaande variabelen verwijzen. Deze pointers worden ook wel dangling pointers genoemd.

[T3.5]

Noem vier nadelen van automatische garbage collection

  • Van elke cel moet bekend zijn of het een pointer naar de heap betreft of niet
  • Elke heap-variabele moet een boolean variabele hebben voor markeringsdoeleinden
  • Van elke heap-variabele moet bekend zijn uit hoeveel componenten deze bestaat
  • Garbage collection kost tijd, waardoor de verwerking van het programma op gezette tijden stil lijkt te staan

In welke twee opzichten verschillen persistente variabelen van tijdelijke (transient) variabelen?

  • Levensduur: persistente variabelen kunnen na de beëindiging van een programma blijven voortbestaan, terwijl de levensduur van tijdelijke variabelen beperkt is tot de duur van het programma
  • Opslaglocatie: persistente variabelen worden opgeslagen in het achtergrondgeheugen, terwijl tijdelijke variabelen in het hoofdgeheugen worden opgeslagen.

[T3.5]

Is het noodzakelijk dat voor persistente variabelen aparte datatypen worden onderscheiden?

Hoewel de meeste programmeertalen dit doen, is het niet noodzakelijk. Het achtergrondgeheugen en het hoofdgeheugen hebben dezelfde abstracte eigenschappen (abstract storage model).

[T3.5]

Waarom is het gevaarlijk om pointers te wijzigen?

Het manipuleren van pointers kan leiden tot aliassen. Het effect daarvan is niet altijd evident, omdat je aan de pointer niet kunt zien naar welke variabele de pointer verwijst. Met name bij recursieve typen zoals lijsten kan dit tot ongewenste situaties leiden.

[T3.6]

Op welke manier kan het verschil tussen copy semantics en reference semantics effectief opgeheven worden?

Door het uitsluiten van selectieve updating.

[T3.6]

Op welke twee manieren kunnen dangling pointers ontstaan?

  • Een pointer wijst naar een heap-variabele terwijl de heap-variabele wordt vernietigd
  • Een pointer wijst naar een lokale variabele terwijl het blok waarin de variabele is gedeclareerd wordt verlaten

In Java zijn beide situaties uitgesloten.

[T3.6]

Noem negen fundamentele typen opdrachten (commands) en maak daarbij onderscheid tussen primitieve opdrachten, samengestelde opdrachten en overige opdrachten.

Primitieve opdrachten

  • Skips (lege opdrachten)
  • Assignments
  • Proper procedure calls (procedureaanroepen)

Samengestelde opdrachten

  • Sequential commands
  • Collateral commands (collaterale opdrachten)
  • Conditional commands (keuzeopdrachten)
  • Iterative commands

Overige opdrachten

  • Block commands
  • Exception-handling commands

[T3.7]

Wat is de functie van het skip command?

Een skip command is een lege opdracht (in Java: empty statement) en doet op zich niks.

Lege opdrachten worden met name gebruikt  in keuzeopdrachten.

[T3.7]

Wat wordt verstaan onder een collaterale opdracht?

Een collaterale opdracht bestaat uit twee of meer opdrachten die in willekeurige volgorde worden uitgevoerd.

[T3.7]

Wat betekent het als een berekening effectief deterministisch is?

Daarmee wordt aangegeven dat de uitkomst van een non-deterministische voorspelbaar is. Dit is het geval als in geen enkele stap van de berekening een variabele wordt geïnspecteerd die in een andere stap gewijzigd wordt.

[T3.7]

Noem twee soorten keuzeopdrachten.

  • De if-opdracht
  • De case- of switch-opdracht

[T3.7]

Wat is het verschil tussen bepaalde herhaling (definite iteration) en onbepaalde herhaling (indefinite iteration)?

Bij bepaalde herhaling is voorafgaand aan de uitvoering bekend hoe vaak een opdracht wordt herhaald. Bij onbepaalde herhaling kan dit niet eenvoudig uit de programmacode worden afgeleid.

[T3.7]

Wat is het essentiële verschil tussen een while-opdracht en een do while-opdracht?

Bij een while-opdracht wordt de herhalingsconditie voorafgaand aan elke iteratie getest, terwijl dit bij een do while-opdracht na afloop van elke iteratie gebeurt.

[T3.7]

Waarom is herhaling over een set (in tegenstelling tot herhaling over een array of lijst) non-deterministisch?

Omdat er geen ordening tussen de elementen van een set bestaat.

[T3.7]

Wat is een opdrachtexpressie (command expression)?

Een opdrachtexpressie is een expressie die tevens een opdracht inhoudt. Een voorbeeld van een opdrachtexpressie is een toekenning.

[T3.8]

Wat is kenmerkend voor op expressies georiënteerde talen?

Er wordt geen onderscheid gemaakt tussen expressies en opdrachten.

Java is tot op zekere hoogte een op expressies georiënteerde taal.

[T3.8]

Waarom doen zich in zuiver functionele talen geen neveneffecten voor?

Zuiver functionele talen kennen geen veranderbare variabelen.

[C2.8]

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
Onthoud sneller, leer beter. Wetenschappelijk bewezen.
Trustpilot-logo