Values and types
28 belangrijke vragen over Values and types
Wat zijn de belangrijkste concepten die worden behandeld in het boek "Programming Language Design Concepts"?
Kan je een korte samenvatting geven van het boek "Programming Language Design Concepts"?
Welke onderwerpen worden behandeld in het werkboek dat je wilt samenvatten?
- Hogere cijfers + sneller leren
- Niets twee keer studeren
- 100% zeker alles onthouden
Welke soorten waarden komen voor in de talen Java en Haskell?
De formules waarmee de cardinaliteiten van de verschillende samengestelde typen kunnen worden berekend, kent en kunt toepassen
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?
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]
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.
[T16.2]
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 recursief type worden gerealiseerd?
[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
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