Automatische generatie van grafische interfaces met XML
(Ontwerpproject)
Als je soms op verschillende operating systems werkt, zoals Linux en Windows,
dan is het ergerlijk als je sommige applicaties van het ene, en sommige
van het andere platform wilt gebruiken. Want heel veel applicaties, vooral
de grafische, zijn slecht overdraagbaar. En tools als Wine, Exceed en Cygwin
zijn ook niet echt ideaal.
Binnen een operating system heb je hetzelfde
met `widget collections', dat zijn standaardbibliotheken met buttons en
windows en manieren om die aan te spreken. Als een programmeur een grafisch
programma wil maken, moet hij vooraf kiezen voor zo'n widget collection,
en die keus zit zo sterk in je code verweven, dat je je programma niet
zomaar meer omschrijft naar een andere widget collection. Er zijn wel platformonafhankelijke
talen, maar dan zit je weer per se; aan zo'n taal vast, en dat wil
je ook niet altijd.
Het is dus beter om de keus van widget collection niet
vantevoren al vast te pinnen. Veel beter is, als je een programma maakt,
om de grafische interface in een conceptueel formaat te beschrijven, en
dat automatisch om te zetten in code voor een specifieke widget bibliotheek
op een specifiek operating systeem. In deze opdracht willen we daarvoor
een set tools ontwerpen en bouwen.
Als je weleens HTML hebt gezien, dan
weet je dat daar `tags' in staan. Mogelijk ken je XML ook al, dat is een
extensible variant, waarin je zelf tags kunt bedenken. XML leent zich heel
goed voor het uitdrukken van conceptuele constructies. Dus bijvoorbeeld
niet `radio button' maar `selectie uit alternatieven'. En met een style
sheet (zoiets ken je ook van HTML) kun je een XML document transformeren
naar iets anders, desnoods zelfs programmacode! We willen in deze opdracht
de specifieke code voor een bepaalde widget bibliotheek op een bepaald
operating system en voor een bepaalde programmeertaal automatisch laten
genereren met zo'n stylesheet.
Het belangrijkste onderdeel van deze opdracht
is het bedenken van een XML-taal waarin je, onafhankelijk van programmeertaal
of widget library of operating system, een conceptuele beschrijving van
een grafische interface maakt. We willen een paar voorbeeldjes van grafische
interfaces in die taal uitgewerkt zien, en een paar style sheets die grafische
code genereren voor een bepaalde combinatie van programmeertaal, layout-stijl,
widget library en operating systeem. We verwachten verder een methode om
de gegenereerde code met de achter de grafische interface liggende functionaliteit
te verbinden.
Stel je voor, als iemand deze toolset gebruikt om een ICQ
client te bouwen, en hij gebruikt een portable compiler (zoals gcc/egcs)
dan kan hij zonder veel problemen een grafische interface genereren voor
zowel Netscape Foundation Classes onder MS-windows als voor Qt widgets
onder X-windows. En misschien kan hij zelfs wel net zo gemakkelijk een
tekst-interface genereren, handig voor telnetters! En dat alles niet door
met de hand te programmeren, maar door simpelweg met een andere stylesheet
andere grafische code te genereren.
Als deze toolset een succes is, dan
willen we hem onder GNU licentie uitbrengen. Daarom ook willen we dat je
de toolset en demo zo ontwikkelt dat die in hoge mate overdraagbaar is
tussen systemen.
Ontwikkelende website,
home.
|