Summary Programming language design concepts

-
ISBN-10 0470853204 ISBN-13 9780470853207
449 Flashcards & Notes
5 Students
  • This summary

  • +380.000 other summaries

  • A unique study tool

  • A rehearsal system for this summary

  • Studycoaching with videos

Remember faster, study better. Scientifically proven.

This is the summary of the book "Programming language design concepts". The author(s) of the book is/are David A Watt contributions William Findlay. The ISBN of the book is 9780470853207 or 0470853204. This summary is written by students who study efficient with the Study Tool of Study Smart With Chris.

Summary - 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:
      - het type-volledigheidsprincipe
      - het kwalificatieprincipe
      - het abstractieprincipe
      - het correspondentieprincipe
    • een goed inzicht hebt in inkapselingstechnieken, typesystemen en manieren om de programmaverwerking 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
      - de objectgeoriënteerde
      - de functionele
      - de parallelle
      - de logische
      - de scripting programmeertalen.
  • 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
    [C1.zelftoets]
  • Wat is een expressie?
    An expression is a construct that will be evaluated to yield a value.
    Een taalconstructie die uitgerekend kan worden en een waarde oplevert.
  • Welke samengestelde typen kent Java?
    • Klassen (waaronder String)
    • Interfaces
    • Arrays
    [C1.zelftoets]
  • Welke primitieve typen kent Haskell?
    • gehele getallen
    • drijvende-puntgetallen
    • characters
    [C1.zelftoets]
  • Welke samengestelde typen kent Haskell?
    • Tupels
    • Lijsten (waaronder String)
    • Datatypen (waaronder Bool)
    • Functies
    [C1.zelftoets]
  • 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
    [C1.zelftoets]

  • 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.
    [C1.zelftoets]
  • Welke vormen van constructies kent Java?
    • Array-initializers
    • Constructoraanroepen
    [C1.zelftoets]
  • Welke vormen van constructies kent Haskell?
    • Tupelconstructie
    • Lijstconstructie
    • Constructorfuncties
    [C1.zelftoets]
Read the full summary
This summary. +380.000 other summaries. A unique study tool. A rehearsal system for this summary. Studycoaching with videos.

Latest added flashcards

Wat is een expressie?
An expression is a construct that will be evaluated to yield a value.
Een taalconstructie die uitgerekend kan worden en een waarde oplevert.
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 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:
    - het type-volledigheidsprincipe
    - het kwalificatieprincipe
    - het abstractieprincipe
    - het correspondentieprincipe
  • een goed inzicht hebt in inkapselingstechnieken, typesystemen en manieren om de programmaverwerking 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
    - de objectgeoriënteerde
    - de functionele
    - de parallelle
    - de logische
    - de scripting programmeertalen.
Welke vier methoden heeft de trait Actor en waar worden deze methoden voor gebruikt?
  • 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
[C17.2.3]
Hoe kunnen we in Scala functies gebruiken als eersteklas waarden?
We kunnen functies gebruiken als gewone objecten.
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]
Waaraan herkent men in Scala de declaratie van een singleton-object?
Aan het sleutelwoord object
[C17.2.1]
Noem twee voorbeelden van cross-cutting concerns
  • Logging van wijzigingen in de personeelsadministratie
  • Controle op autorisatie
[C17.1]
Wat wordt in een logische taal verstaan onder een assertie?
Een assertie is een bewering in de vorm r(T1,...,Tn) waarbij r een m-voudige relatie is en de termen T1,...,Tn expressies zijn die variabelen kunnen bevatten.
[T15.1]
Welke samengestelde waarden kent Prolog?
  • Tagged structures (vergelijkbaar met tagged tuples)
[T15.3.1]
Welke primitieve waarden kent Prolog?
  • Numbers
  • Atoms (parameterloze contructors)
[T15.3.1]