User Tools

Site Tools


2m240:aspecten_van_programmeertalen

Aspecten van Programmeertalen (2M240)

In dit vak leer je te reflecteren over een belangrijk onderdeel van de informatica: de programmeertaal. Hierbij worden naast gangbare leervormen ook twee minder gangbare gebruikt: deelname aan een debat of het schrijven van een essay. Een bijkomend doel is dat je wat te weten komt over enkele belangrijke programmeertalen die mogelijk niet in de rest van je studie aan de orde komen.

Dit vak wordt dit jaar voor de laatste keer gegeven.

Laatste Nieuws

20 februari 2007 Uitslag tentamen januari bekend
22 januari 2007 Beschrijving tentamenstof toegevoegd
10 januari 2007 Locatie debat is Auditorium 12
10 januari 2007 Debatposities (voor of tegen) zijn rondgemaild

Organisatie

Docenten

Kees Huizing, HG 6.87, tel. 040-2474120, email: c.huizing at tue.nl

Kees Hemerik, HG 7.46, tel. 040-2472825, email: c.hemerik at tue.nl

Instructeurs

Gerard Zwaan, HG 7.42, tel. 040-2474291, email: g.zwaan at tue.nl

Mohammad Mousavi, HG 6.79, tel. 040-2472993, email: m.r.mousavi at tue.nl (currently abroad)

Uitslag tentamen

Het tentamen van januari 2007 is nagekeken. De cijfers zijn gecombineerd met het debatcijfer (in de verhouding 7:3) en bij de studentenadministratie ingeleverd. Studenten die geen debat hebben gedaan, hebben nog geen cijfer gekregen. Hieronder volgen de uitslagen, gesorteerd op identiteitsnummer. Aan deze lijst kunnen geen rechten ontleend worden.

Id.nr	E/D	Tent	Eind
455734		4,22	
493443	8	7,44	8
512267		8,44	
514413	7	3,33	4
518841		7,33	
527698		8,00	
528248		5,89	
532816	8	8,56	8
537059	8	6,89	7
542914		5,67	
547028	7,5	7,33	7
557411	7,5	5,56	6
559423	7,5	4,22	5
559938	8	6,33	7
566348	8	9,22	9
568036	8	6,44	7
568105	7,5	7,44	7
569081	8	8,67	8
569954	8	9,78	9
570063	7,5	9,00	9
571455		8,56	
573419		6,56	
573626	7,5	5,00	6
574147	7,5	1,33	3
574299	7,5	6,89	7
574426	8		
574551	7,5	6,11	7
575435	7	6,78	7
575629		8,78	
575766	8	8,22	8
575883	7		
577259	7,5	7,56	8
578312		9,11	
578651	7	8,33	8
579524		6,33	
579816		8,56	

Tentamenstof

De stof voor het tentamen is wat er op college behandeld is:

  • Hoofdstuk 1 t/m 8 uit Programming Language Design Concepts van Watt
  • Notitie over typedeductie

De notitie over tyepabstractie is achtergrondmateriaal.

Debatten

De procedure voor deelname aan de debatten is als volgt.

  1. Schrijf je in voor een onderwerp; je kunt dat met z'n tweeën doen, je kunt je ook individueel inschrijven en wachten tot zich iemand bij je voegt of iemand erbij vragen.
  2. Bereid het onderwerp voor. Zoek informatie over het onderwerp, bedenk argumenten voor beide standpunten, bedenk vragen die je aan de begeleider wilt stellen.
  3. Maak een afspraak met de begeleider, bij voorkeur in de week van 18 december.
  4. Een aantal dagen voor het debat verneem je welk van de twee stellingen je moet verdedigen. Maak een overheadtransparant met een samenvatting van je argumenten. Oefen het debat met z'n tweeën.
  5. De debatten vinden plaats op vrijdag 12 januari van 8:45 tot 11:00. Locatie is Auditorium 12.

Onderwerpen

D1 Multiple inheritance is een nuttig / onbruikbaar programmeerconcept

Begeleider: Gerard Zwaan

Multiple inheritance verrijkt de modelleringskracht van de taal en voorkomt codeduplicatie. De implementatie geeft echter hoofdbrekens en de complexiteit van de klassestructuur kan tot zulke hoogten stijgen dat de ontwerper zijn eigen model niet meer snapt.

D2 Asserties horen thuis in een moderne programmeertaal / kunnen beter achterwege blijven

Begeleider: Gerard Zwaan

Hoewel asserties (hier gebruikt als een verzamelnaam voor loop-invarianten, data-invarianten, en pre-/postcondities) vaak een wezenlijke rol spelen bij het ontwerp van een programma, zijn ze in de uiteindelijke code niet - of hooguit als commentaar - terug te vinden. Sommige talen gaan wat verder, bijvoorbeeld door het opnemen van assert en/of assume statements. In een enkel geval - bijvoorbeeld de programmeertaal Eiffel - zijn asserties verder in de taal geïntegreerd. In hoeverre moeten asserties een integraal onderdeel van de taal uitmaken?

D3 Memory-management hoort wel / niet bij de taak van de programmeur

Begeleider: Kees Hemerik

Het aanvragen van geheugen en het weer vrijgeven is een lastige taak, waar makkelijk fouten mee gemaakt worden. Er zijn programmeertalen die implementaties voorschrijven die dit de programmeur uit handen nemen. Maar dan is de programmeur wel de controle kwijt over de granulariteit van de aanvragen en over het tijdsgedrag van geheugenvrijgever (garbage collector). Is dit acceptabel?

D4 In het eerste jaar van de studie informatica dient Java onderwezen te worden / hoeft Java helemaal niet onderwezen te worden

Begeleider: Kees Huizing

In heel veel informatica-opleidingen is Java een vanzelfsprekend onderwerp in het eerste-jaarsonderwijs. Op de meeste niet-informatica opleidingen op deze universiteit is dat ook het geval. Java is een veel gebruikte GPL waarvoor veel bibliotheken en onderwijsmateriaal beschikbaar is. Bovendien brengt Java meer dan de meeste vergelijkbare talen een aantal principes van goed taalontwerp in de praktijk. Maar de ontwerpers van het informaticacurriculum van deze instelling hadden goede redenen om dat niet te doen. Zijn er betere talen voor dit doel, of doet het er niet zoveel toe welke taal je kiest>

D5 Static typing heeft meer voordelen dan nadelen / meer nadelenn dan voordelen

Begeleider: Gerard Zwaan

Voor de industriële praktijk lijkt het keurslijf van strong typing wel erg te knellen. Voor een redelijke mate van flexibiliteit moet de programmeur typechecking tot run-time kunnen uitstellen. Kijk maar naar Java, waarbij generieke programma's niet om down-casts heen kunnen evenmin als programma's die de nieuwe technieken van reflectie gebruiken. Of zijn moderne typesystemen sophisticated genoeg om die flexibiliteit te bieden?

D6 Programmeren in een functionele programmeertaal is te moeilijk / goed te doen voor de meeste programmeurs

Begeleider: Kees Hemerik

(toelichting volgt)

Essays

Als alternatief voor deelname aan het debat kun je een essay schrijven. Dit is een opstel waar je een aspect van programmeertalen belicht en daarover een beargumenteerd standpunt inneemt. Essays worden individueel of eventueel met z'n tweeën geschreven, bij voorkeur in het Nederlands.

Inschrijven gaat via Studyweb, vanaf maandag 18 december 2006.

Hieronder volgt een lijst van onderwerpen met begeleiders. Je kunt ook zelf een onderwerp voorstellen aan een van de begeleiders (docenten en instructeurs).

Onderwerpen

E1 Arrays versus lists

Begeleider: Zwaan

Vaak moet men bij het implementeren van een algoritme een keuze maken tussen arrays en lists voor de representatie van rijen van dataelementen (hierbij is de volgorde van de elementen van belang en bovendien zijn de elementen van de rij meestal van hetzelfde type (homogene rij)). De keuze dient gemaakt te worden door een vergelijking van enerzijds de vereiste eigenschappen van en operaties op de abstracte rijen en anderzijds de mogelijkheden die arrays en/of lists in een bepaalde programmeertaal bieden (uiteraard spelen ook efficientieoverwegingen een belangrijke rol). Moderne programmeertalen (en bijbehorende standaardbibliotheken) bieden een uitgebreid scala aan mogelijkheden op dit gebied. Gevraagd wordt een essay te schrijven waarin de volgende zaken aan bod komen:

  1. inventarisatie van eigenschappen van en operaties op geordende rijen die een rol kunnen spelen bij de beschrijving van abstracte algoritmen (denk aan definitie/constructie/ manipulatie/ elementen/ deelrijen/ …);
  2. inventarisatie van eigenschappen van en operaties op arrays en/of lists in een aantal moderne programmeertalen waaronder Delphi (Object Pascal), Java, C#, Python en Haskell (denk naast aan de voor de hand liggende aspecten ook aan aspecten als “zijn er expressies van deze typen mogelijk?”, subtypering, allocatie, …);
  3. een overzicht van de verbanden (of het ontbreken ervan) tussen de aspecten vermeld onder 1 en de aspecten vermeld onder 2;
  4. voorbeelden van enkele abstracte algoritmen die gebruik maken van rijen, en hun implementatie(s) met een gemotiveerde keuze voor arrays en/of lists.

E2 Rood-zwartbomen

Begeleider: Zwaan

In hoofdstuk 13 van [1] worden zogenaamde rood-zwartbomen beschreven. Met rood-zwartbomen kunnen operaties op dynamische verzamelingen (zoals SEARCH, PREDECESSOR, SUCCESSOR, MINIMUM, MAXIMUM, INSERT en DELETE) op efficiente wijze geimplementeerd worden. Hoofdstuk 14 van [1] beschrijft een tweetal uitbreidingen van rood-zwartbomen. De datastructuur en de operaties daarop worden in deze hoofdstukken beschreven in een pseudocode. Het doel van deze opdracht is de daadwerkelijke implementatie van deze datastructuur en de uitbreidingen daarop in een aantal programmeertalen te onderzoeken.

Gevraagd wordt een essay te schrijven waarin het volgende aan bod komt:

  1. implementatie van rood-zwartbomen in Delphi, minstens een van Java/C#/C++, Haskell en eventueel een andere programmeertaal naar keuze
  2. implementatie van de uitbreidingen van rood-zwartbomen in dezelfde programmeertalen
  3. een vergelijking en evaluatie van de mogelijkheden van de programmeertalen aan de hand van de gemaakte implementaties (m.n. abstractiemogelijkheden en mogelijkheden tot uitbreiding en wijziging dienen aan bod te komen)
Referenties

1. T.H. Cormen, C.E. Leierson, R.L. Rivest, C. Stein. Introduction to Algorithms (Second Edition), MIT Press, 2001.

Beoordeling

Het vak wordt beoordeeld op basis van een schriftelijke toets (tentamen, eerste keer is 30 januari 2007) en hetzij deelname aan een debat, hetzij het schrijven van een essay.

Weging: debat/essay telt voor 30% mee, toets voor 70%. Gewogen middeling en afronding levert het eindcijfer.

Materiaal

2m240/aspecten_van_programmeertalen.txt · Last modified: 2013/05/02 12:51 (external edit)