Vergelijkende studie van imperatieve programmeertalen: verschil tussen versies
Geen bewerkingssamenvatting |
|||
Regel 94: | Regel 94: | ||
#Bij de kleine oefeningetjes: bij de overerving in C++ een vraag waar methodes hun argumentenlijst veranderd of toegangsrechten verstrengen. Voor de rest analoog (geen CAT-calls welliswaar) | #Bij de kleine oefeningetjes: bij de overerving in C++ een vraag waar methodes hun argumentenlijst veranderd of toegangsrechten verstrengen. Voor de rest analoog (geen CAT-calls welliswaar) | ||
[[Categorie:1li]] [[Categorie:2li]] [[Categorie:3bi]] | [[Categorie:1li]] [[Categorie:2li]] [[Categorie:3bi]] | ||
==2007-2008== | |||
=== 14/01/07 vm en nm=== | |||
#zet om naar C++ en Eiffel; een kleine (eenvoudige) hierarchie van verzamelingen, bags en ongeordende collecties | |||
en je moest wat features van de taal showen. Bij C++ moest ge trouwens ook ergens pointer arithmetic gebruiken om een rij te overlopen. | |||
bijvragen: | |||
## c++:stel ge doet hier die & weg (bij een reference) wat gebeurt er dan? | |||
## c++: stel dat ge daar een * zet, wat gebeurt er dan? | |||
## eiffel: geeft een voorbeeld oproep voor die unionWith, dat was een poly catcall; hetgeen ge dan moet uitleggen. | |||
## hij vroeg ook hoe het daar zat met het uitbreiden van precondities (kan niet in Eiffel natuurlijk) en hoe lost ge dat op. | |||
# oef 1: | |||
<pre> | |||
int bla[] = {priemgetallen}; | |||
int *b = &(a+6); | |||
*b = 7; | |||
int &c = *b; | |||
c = *b + *(a+2); // en op a+2 staat 5 | |||
(das gewoon 12) | |||
</pre> | |||
oef 2: fun met C# | |||
<pre> | |||
Class | |||
public int prop { | |||
get { return x} | |||
set{ x = value * 2} | |||
} | |||
Class | |||
someMeth(Class s1, ref Class s2) | |||
s1 = s2.prop + 7; | |||
s2 = new Class(); | |||
s2.prop = s1.prop + 14; | |||
} | |||
en dan als oproepen: | |||
Class s = new Class(); | |||
s.prop = 20; | |||
s.someMeth(s, s); | |||
wat is s.prop? (216) | |||
</pre> | |||
nog een oefening van multiple inheritanc in C++ en eentje van single inheritance in C# | |||
de klassieke dingen in die twee oefeningen | |||
statische binding, hiden van methodes, override vs new in C# | |||
oefening op Java generics | |||
<pre> | |||
ArrayList<String> list1 = new ArrayList<String>(); | |||
ArrayList<?> l2 = l1; | |||
ArrayList<? extends Serializable> l3 = l1; | |||
ArrayList<? super Serializable> l4 = l1; | |||
ArrayList<Serializable> l5 = l1; | |||
ArrayList l6 = l1; | |||
wat mag niet (l3, l4 en l5 en warning voor l6) | |||
</pre> |
Versie van 15 jan 2008 22:15
http://www.cs.kuleuven.ac.be/cs/algemene_info/personeel/images/S_Eric.Steegmans.jpg |
Bestanden
Prof. Steegmans werkt heel goed met Toledo, alleen staan de bestanden nogal verspreid en moet je ze allemaal afzonderlijk downloaden en eventueel nog unzippen. Hier vind je mijn poging om alle bestanden te ordenen en te unzippen.
Mocht je een fout vinden, mail me dan op : vincent.nauwelaers.student.kuleuven.be
Hier vind je alle slides samengevoegd tot 1 pdf: Hier
Antwoorden VoorbeeldExamen
Via de pc nagerekend
2.1:
c = 25 (ik denk dat dit "niet gedefinieerd" moet zijn omdat ge de geheugenplaats meermaals overschrijft. (het geeft toch verschillende resultaten op verschillende pc's))
2.2:
i2 = 48
2.3:
b = 40
2.4:
mine.TheX = 50
2.5:
mine.Property = 40
2.6:
a1->x = 13 a2.x = 6
2.7:
enkel a1.g(a2)
2.8: in volgorde:
14 8 14 2
2.9: in volgorde:
11 22 23 13
Examenvragen
2004-2005
28-01-05 8u
Zeer analoog aan het voorbeeldexamen dat op toledo staat:
deel 1: klasses programmeren in Eiffel en C++ voor een email systeem. Ipv het voorbeeld ging het hier om Email, OriginalEmail, ReplyEmail klassen. Waarbij original en reply overerfden. Geen arrays, dus eigenlijk iets gemakkelijker dan voorbeeld.
deel 2: 7 opgaven zoals in het voorbeeld examen. Geen doorstreping van polymorphe catcalls. iets moeilijker dan de voorbeelden. TIP: teken de klassen op papier
Steegmans was heel vriendelijk, stelde nuttige bijvragen en legt je niet zo hard op de rooster.
2005-2006
01-06
20-01-06 8u
- Een abstracte klasse van vluchten, met twee subklassen: indirecte en directe vlucht. Telkens de superklasse en 1subklasse vertalen in eiffel en c++ (hij vroeg op mondeling ongeveer bij iedereen een polymorphe catcall)
- Oefeninkskes zoals voorbeeldexamen
- schrijf klasse in smalltalk
- streep door wat niet klopt volgens generische klassen in java
- meervoudige overerving in eiffel (iets schrijven)
- dan nog 3 oefeninkskes waar ge getallen moet zoeken (referentie, value semantic) (opgelet hierbij, in een property durft hij bij setter zelfs value*2 zetten, de kapoen)
01-06
Ander examen, volledig zelfde opmaak incl polymorphe catcalls (maar over agenda ipv vluchten)
26-01-06 8u
- Zoals te verwachten. Deze keer UnorderedCollection met daaronder Bag en Set. Eiffel en C++ versie.
-
- Smalltalk klasse
- doorstrepen van foute overerving generische klassen
- de rest analoog met vbex
2006-2007
15/01/07 8u
Zo goed als analoog aan het te verwachten patroon:
- Een paar klassen over een avonturenspelleke met een item, een rugzak dat een item is en waarin items kunnen zitten, een wapen dat een item is, ook nog ergens een interface die die rugzak implementeerde: alles samengevat: enkelvoudige overerving, bidirectionele bindingen (die in de java oplossing onveilig waren, Steegmans wil (maar vraag het niet expliciet op papier!) dat je dit toepaslijk kan corrigeren mbv. C++ en C# middelen). En dat alles dus, zoals je al las, in C++ en C#. Je hoeft niet elke letter code op te schrijven (dat laat de tijd ook niet echt toe), een "skelet" is voldoende. Zolang je maar kan vertellen welke "fancy mogelijkheden" je uit elke taal handig kan aanwenden (zeg dus nie da het in C# allemaal 't zelfde is ;-))
-
- Een methode uit de bovenstaande oefening die in de 3 klassen van de overerving voorkwam ("mergewith", er verstrengen wat types enzo) voor elk van die klassen in Eiffel omzetten: enkel hoofding/skelet van de methode én precondities moet je doen, implementatie niet.
- Een paar constructoren uit alweer de bovenstaande oefening omzetten in Smalltalk (eentje die o.a. een array initialiseert). Van elke "nieuwe" message waarvan je gebruikt maakt, moet je ook de hoofding geven
- Meerdere andere oefeningen: meervoudige overerving in C++, polymorfisme in C#, doorstrepen van polymorfe catcalls in Eiffel, iets met Arrays en een heel klein beetje pointer arithmetic in C++, ... (nog meer denk ik, maar ik weet het niet allemaal meer vanbuiten, niks gigantisch nieuw tov andere jaren).
19/01/07 8u en 12u
Zo goed als analoog aan het te verwachten patroon:
- Zelfde hiërarchie. Verwacht u aan enumeraties, rijen, abstracte klassen, interfaces, overriding... Dit alles inEiffel en Smalltalk. Indien gewenst mocht je een van de talen vervangen door C++, voor twee punten minder. Zelfs met amper wat code, kan je goed uit de hoek komen als je kan antwoorden op de bijvragen (waarde/referentie-semantiek, typed/untyped, CAT-calls... )
- dezelfde 'mergeWith' uit een abstracte klassen en twee subklassen ervan omzetten naar C++. Van alles de hoofding. Van een van de subklassen ook de implementatie.
- Bij de kleine oefeningetjes: bij de overerving in C++ een vraag waar methodes hun argumentenlijst veranderd of toegangsrechten verstrengen. Voor de rest analoog (geen CAT-calls welliswaar)
2007-2008
14/01/07 vm en nm
- zet om naar C++ en Eiffel; een kleine (eenvoudige) hierarchie van verzamelingen, bags en ongeordende collecties
en je moest wat features van de taal showen. Bij C++ moest ge trouwens ook ergens pointer arithmetic gebruiken om een rij te overlopen. bijvragen:
- c++:stel ge doet hier die & weg (bij een reference) wat gebeurt er dan?
- c++: stel dat ge daar een * zet, wat gebeurt er dan?
- eiffel: geeft een voorbeeld oproep voor die unionWith, dat was een poly catcall; hetgeen ge dan moet uitleggen.
- hij vroeg ook hoe het daar zat met het uitbreiden van precondities (kan niet in Eiffel natuurlijk) en hoe lost ge dat op.
- oef 1:
int bla[] = {priemgetallen}; int *b = &(a+6); *b = 7; int &c = *b; c = *b + *(a+2); // en op a+2 staat 5 (das gewoon 12)
oef 2: fun met C#
Class public int prop { get { return x} set{ x = value * 2} } Class someMeth(Class s1, ref Class s2) s1 = s2.prop + 7; s2 = new Class(); s2.prop = s1.prop + 14; } en dan als oproepen: Class s = new Class(); s.prop = 20; s.someMeth(s, s); wat is s.prop? (216)
nog een oefening van multiple inheritanc in C++ en eentje van single inheritance in C# de klassieke dingen in die twee oefeningen statische binding, hiden van methodes, override vs new in C#
oefening op Java generics
ArrayList<String> list1 = new ArrayList<String>(); ArrayList<?> l2 = l1; ArrayList<? extends Serializable> l3 = l1; ArrayList<? super Serializable> l4 = l1; ArrayList<Serializable> l5 = l1; ArrayList l6 = l1; wat mag niet (l3, l4 en l5 en warning voor l6)