<Desc/Clms Page number 1>
Werkwijze voor het in een rekenmachine automatisch herstellen van consistentie in een hiërarchische objektstruktuur na een interaktie door een gebruiker en rekenmachine voorzien van zo een systeem voor automatische consistentieherstelling
EMI1.1
GEBIED VAN DE UITVINDING De uitvinding heeft betrekking op een werkwijze voor het in een rekenmachine na een gebruikersinteraktie automatisch herstellen van consistentie in een weergavestruktuur van informatie, die is gebaseerd op een verzameling objekten in derzelver hiërarchische objektstruktuur, waarbij de gebruikersinteraktie een of meer primaire variabele objekten modificeert, en daarop binnen de objektstruktuur sekundaire variabele objekten worden bijgewerkt. De uitvinding maakt daarmee deel uit van een gebruikersinteraktie systeem (user interface).
Het meest complexe voorbeeld daarvan is in het algemeen een grafisch interface, vanwege de vergaande ruimtelijke parallelliteit van de presentaties aan de gebruiker, al is de uitvinding in principe ook in andere interfaces toepasbaar, bijvoorbeeld zulke die videobeelden, geluid, en andere uitingsmiddelen bezitten. Hier kan die parallelliteit zieh eveneens voordoen. Zo'n interface kan beschouwd worden als een interaktie tussen een gebruiker, in het algemeen een persoon, die akties uitvoert, waardoor de weergave niet langer consistent is met de toestand van het systeem, en een proces dat vervolgens die consistentie herstelt. Traditioneel wordt dat herstellen geimplementeerd met zogenaamde call-back funkies, zoals nader wordt uitgelegd.
Deze aanpak werkt volledig bottom-up en daarbij worden steeds achtereenvolgens eerst de primaire variabele objekten bijgewerkt en dan direkt de zieh daarop baserende sekundaire variabele objekten op achtereenvolgende hiërarchisch hogere niveaus. Dit gebeurt door lokaal in het programma aanwezige instrukties, die direkt worden uitgevoerd. Het is bij deze organisatie twijfelachtig, enerzijds of alle relevante consistentierelaties worden aangesproken, en anderzijds of niet ook overbodige consistentierelaties worden aangesproken, bijvoorbeeld zulke die alleen buiten het aktuele weergaveveld implikaties hebben. Dit probleem wordt veroorzaakt doordat de consistenties hersteld moeten worden zonder dat de relaties expliciet zijn, want er wordt alleen gebruik gemaakt van alles wat er in het programma is opgenomen.
Dit probleem is vooral groot als het interface werkt met een veranderend programmapakket, bijvoorbeeld doordat dit ontwikkeld, verbeterd of onderhouden moet
<Desc/Clms Page number 2>
worden. Gelijk bekend worden alle enigszins complexe programma's voortdurend aan zulke veranderingen onderworpen.
SAMENVATTING VAN DE UITVINDING
Dientengevolge is het onder meer een doelstelling van de uitvinding om
EMI2.1
een werkwijze te verschaffen welke in het geval van zo een interface het korrekt i bijwerken van de weergave automatisch verzorgt en dit onafhankelijk van verdere delen i van het programmapakket, om aldus het ontwerpen, bijwerken en onderhouden daarvan te vereenvoudigen.
Welnu, volgens een harer aspekten realiseert de uitvinding dit doordat zij het kenmerk heeft, dat de objektstruktuur een netwerk van consistentierelaties bevat die elk één of meer incrementele objekten specificeren als funktie van een of meer incrementele objekten en/of variabele incrementele objekten op een naastlager hiërarchisch niveau, en waarbij de gebruikersinteraktie een of meer zulke variabele inkrementele objekten op een laagste niveau modificeert, dat eerst in een bottom-up signaleringsstap een verzameling van waardeinconsistenties voor de incrementele objekten wordt gesignaleerd,
en dat daarna in een top-down bijwerkstap op grond van elk element van die verzameling de waarde van het bijbehorend incrementele objekt wordt bijgewerkt op grond van eventuele waardeverandering van de
EMI2.2
bijbehorende specificerende variabele incrementele objekten en/of incrementele objekten i op lager hierarchisch niveau. Daarbij zijn dus de zogenoemde incrementele objekten gebonden aan een expressie, die expliciet of impliciet kan zijn, en waarvan de uitdrukking willekeurig is. Zo kan deze expressie bijvoorbeeld ook als een tabel zijn gegeven. De zogenoemde variabele incrementele objekten zijn gebonden aan een waarde die door een gebruikersinteraktie gewijzigd kan worden. De incrementele objekten kunnen daarbij behalve van variabele incrementele objekten ook weer van andere incrementele objekten afhangen. Zo vindt de berekening dus recursief plaats.
De implementatie van de veranderingen vindt in twee stappen plaats : eerst worden in een bottom-up stap de inconsistenties automatisch gesignaleerd. Daarna worden in een topdown stap de consistenties ook weer automatisch hersteld.
Op zichzelf geeft het Amerikaanse Octrooischrift 4, 631, 690 een multiprocessorsysteem om een kleurenbeeld te vormen uit objekten die gedefinieerd zijn in een hiërarchische datastruktuur. Volgens deze referentie wordt de relevantie van een bepaald objekt voor een bepaald beeldpunt bepaald in een top-down stap, omdat immers
<Desc/Clms Page number 3>
EMI3.1
voor alle beeldpunten een afbeelding gevonden moet worden. Volgens de onderhavige uitvinding hoeven alleen voor de variabele incrementele objekten die inderdaad gewijzigd zijn de veranderingen aan de incrementele objekten bepaald te worden.
Uiteraard dikteert deze strategie ook de opbouw van de objektstruktuur, waarin dan elk objekt een verwijzing moet hebben naar het naasthogere niveau. Een ander verschil met de referentie is dat laatstgenoemde werkt met bounding-boxes, die de afmeting van een objekt aangeven en waardoor de relevantie voor een bepaald beeldpunt wordt aangegeven. Volgens de uitvinding worden de hiërarchische relaties veeleer middels vergelijkingen gedefiniëerd. Dit realiseert toepasbaarheid op een veel groter scala van objekten en gebruikersinteraktiesystemen.
De uitvinding voert het bijwerken uit middels een stelsel van vergelijkingen, waarbij de aard van dit stelsel geheel willekeurig is. De uitvinding is in het bijzonder demand-driven, waarbij juist die berekeningen worden uitgevoerd welke nodig zijn voor het produceren van de juiste gebruikersinformatie, en binnen de beperkingen die gegeven zijn door de aard van de objektstruktuur, en niet meer berekeningen of minder berekeningen. De vergelijkingen geven aan in hoeverre de consistentie weer hersteld moet worden. Als een objekt inconsistent is, zoekt het systeem uit welke objekten op hoger niveau het veranderde objekt gebruiken, en op het desbetreffende hogere niveau wordt ook de relevantie bepaald. De struktuur van deze callers zal nader worden uitgelegd. Pas na dit uitzoeken wordt het bijwerken geëffektueerd.
Volgens een voorkeursuitvoering wordt, uitgaande van een van een wijziging van een variabel objekt, een aan de voet van de hiërarchie gelegen deel door direkte calling vanuit genoemde wijziging wordt bijgewerkt, en waarbij een grens tussen de struktuur der incrementele objekten en het direkt bijgewerkte deel gevormd door variabele incrementele objekten. Daarbij wordt de grens tussen de struktuur der inkrementele objekten en het direkt bijgewerkte deel gevormd door variabele incrementele objekten. In sommige gevallen kan deze laatste opzet een versnelling geven, mits de kans klein is dat te weinig of juist te veel operaties worden uitgevoerd, in zo een geval waar de koppeling direkt is tussen zo'n primair variabel objekt, en de ermee direkt verbonden sekundaire variabele objekten. Voor het deel van de struktuur wordt dan de basisaanpak volgens de uitvinding gebruikt.
De uitvinding betreft mede een rekenmachine voorzien van een systeem
<Desc/Clms Page number 4>
voor automatische consistentieherstelling na een gebruikersinteraktie op basis van het voorgaande. Verdere voordelige aspekten van de uitvinding worden gereciteerd in onderconclusies. De opslag van de respektievelijke objekten in het rekenmachinegeheugen kan bevatten een waardeveld, een callerlijst, een environmentveld, een evaluatorveld, en een ophefveld, een en ander voor zover noodzakelijk.
KORTE BESCHRIJVING VAN DE TEKENING
Deze en andere aspekten en voordelen van de uitvinding worden nader uitgelegd aan de hand van de navolgende beschrijving van de voorkeursuitvoeringen, en in het bijzonder de aangehangen tekening die in de respektieve Figuren het volgende toont :
Figuur 1 een algemeen blokdiagram van een rekenmachine ;
Figuur 2 het traditioneel bijwerken van een weergave ;
Figuur 3 een notatievoorbeeld voor een incrementeel objekt ;
Figuur 4 idem voor een variabel objekt ;
Figuur 5 idem voor een zijeffekt-inkrementeel objekt ;
Figuur 6 het bijwerken van een weergave volgens de uitvinding.
BESCHRUVING VAN EERDERE TECHNIEKEN
Figuur geeft 1 een algemeen blokdiagram van een rekenmachine. Daarbij is onderscheid gemaakt tussen de verschillende funkies, die in de praktijk anders over de samenstellende subsysteme verdeeld kunnen zijn. In dit principe-diagram zijn er slechts drie funkies. Daar is in de eerste plaats het dataverwerkende deel, in het algemeen de processor 20. Deze ontvangt gebruikersinvoer uit het schematisch aangegeven toetsenbord 22. Andere gebruikersinformatie kan worden toegevoerd middels een muis, een spraak-ingavekanaal, zacht toetsenbord en andere middelen, hetgeen op zichzelf geen deel uitmaakt van de uitvinding. Voorts geeft de processor gebruikersinformatie af aan het schematisch aangegeven beeldscherm met bijbehorende stuurelektronica 24.
Andere gebruikersinformatie kan worden afgegeven middels een spraakuitgavekanaal, losse indikatoren, enzovoorts, maar ook dat maakt op zichzelf geen deel uit van de uitvinding. Het gebruikersinteraktiesysteem bestaat in abstrakte zin uit het geheel van organisaties volgens welke de ingegeven en uit te geven informaties
<Desc/Clms Page number 5>
kunnen samenwerken met elkaar en met de uitvoering van de dataverwerking. In het volgende zal alleen besproken worden hoe een per toetsenbord ingegeven opdracht vertaald wordt in het bijwerken van het weergegeven beeld.
Figuur 2 geeft het traditioneel bijwerken van een weergave. In dit abstrakte plaatje wordt de datastruktuur door een driehoek 26 aangegeven, en het scherm door indikatie 24 ; in de datastruktuur zijn objekten verbonden door hiërarchische relaties, waarbij elke relatie bestaat uit een koppeling tussen een of meer objekten op een bepaald niveau en een of meer objekten op een naasthoger niveau of omgekeerd. Daarbij kunnen verschillende hiërarchische verbindingen tussen twee objekten dezelfde aantallen of verschillende aantallen deelverbindingen bevatten. Nu is verondersteld dat op een laagste niveau een primair variabel objekt wordt gemodificeerd, hetgeen is gesymboliseerd door de pijl 32.
Dit kan velerlei betekenen : een objekt kan worden toegevoegd, verwijderd, verplaatst, en ook zijn logische relaties tot andere objekten kunnen worden gewijzigd (toegevoegd, opgeheven, geassigneerd aan een ander objekt, waarbij de verandering in de relatie ook een ander niveau in de hierarchie kan betekenen, zowel voor het primair variabele objekt zelf als voor de relatie). De gegeven opsomming is niet limitatief. Klassiek wordt nu de consistentie bottom-up hersteld, volgens de richting van de pijl 28. Daarbij is de hiërarchische relatie van de objektstruktuur impliciet in het programma aanwezig doordat de inverse relaties tussen de verschillende objekten in dat programma expliciet gemaakt is.
Tijdens de uitvoering wordt dus geen onderzoek naar de relaties gedaan, maar wordt datgene wat geëxpliciteerd is, direkt uitgevoerd : dat betreft dus het bijwerken van de telkens naasthogere sekundair variabele objekten. De invloed van dit bijwerken is aangegeven door het donker getekende gebied. Als het bijwerken een objekt ontmoet dat geen verandering behoeft te ondergaan, dan worden toch alle verder geëxpliciteerde veranderingen afgewerkt. Dit gebeurt ook als een objekt ontmoet wordt dat voor de afbeelding niet relevant is. Tenslotte zijn alle noodzakelijke veranderingen aangebracht en is de gehele weergave in zijn nieuwe gestalte gerealiseerd. Het kan nu zijn dat het bijwerken overbodig is, omdat het geen effekt heeft op de weergave : het kan op een hoger niveau blijken dat de representaties van het objekt bijvoorbeeld buiten beeld vallen.
Anderzijds kan op een hoger niveau blijken dat veranderingen op een lager niveau van de hierarchie niet nodig blijken, terwijl op een hoger niveau alsnog invloed uitgeoefend zou worden. In dit laatste geval moet de klassieke werkwijze alles toch
<Desc/Clms Page number 6>
expliciteren, waaruit blijkt dat het al heel waarschijnlijk is dat daarbij fouten worden gemaakt.
GEDETAILLEERDE BESCHRIJVING VAN DE VOORKEURSUITVOERING
Volgens de uitvinding wordt niet alleen automatisch de consistentie van de uitgegeven gebruikersinformatie hersteld, maar zelfs de consistentie van de gehele datastruktuur van een applikatie, voor zover van belang voor de uit te geven gebruikersinformatie, in het algemeen dus het beeldscherm. In zo'n datastruktuur worden consistentierelaties tussen verschillende objekten weergegeven door vergelijkingen, bijvoorbeeld door a=fl (b, c). Deze vergelijking maakt deel uit van een hiërarchische struktuur, door middel van verdere vergelijkingen, bijvoorbeeld b=f2 (d, e) ; g=f3 (a, h) ; k=f4 (h, c, e). Daarbij is ook de afbeelding, of algemener de weergave, gedefinieerd als funktie van de objekten. Het stelsel vergelijkingen kan direkt geprogrammeerd worden.
Een andere implementatie is met behulp van een formalisme voor dit stelsel wordt opgezet, en dat de machine een vertaler daarvoor bevat. Als dus de consistentie uiteindelijk hersteld is, is ook de weergave conform de datastruktuur.
Als de waarde van b of c verandert, moet de waarde van a opnieuw berekend worden.
Als door een operatie bijvoorbeeld de waarde van b verandert, moet de operatie die b veranderde, ook de waarde van a opnieuw bijwerken. Dit betekent dat de programmeur niet zozeer de natuurlijke consistentierelatie implementeert, als wel een inversie daarvan : de vergelijking voor a verwijst immers niet naar expressies van hoger niveau, waarin objekten voorkomen welker waarde bepaald wordt door de waarde van a. Met de hieronder beschreven techniek wordt slechts de relatie a=f (b, c) beschreven en met een bepaalde administratie bijgehouden of de uitdrukkingen waarin a voorkomt consistent zijn of niet. Het verschil met de traditionele aanpak blijkt duidelijk uit vergelijken van de Figuren 2 en 6. De bovengenoemde administratie wordt uitgelegd aan de hand van Figuren 3 tot 5. De consistentie wordt nu automatisch hersteld door zogenoemde incrementele evaluatie.
Hierbij wordt elk objekt in de datastruktuur, dus bovengenoemde a... k, voorzien van extra gegevens. In de eerste plaats zijn er incrementele objekten, dat zijn objekten waarvan de waarde door een expressie zoals boven gegeven is, dus a, b, g, k. In de tweede plaats zijn er variabele incrementele objekten, waarvoor niet zo'n expressie bestaat, dus c, d, e, f, h, maar waarvan de waarde
<Desc/Clms Page number 7>
EMI7.1
mag worden gewijzigd, bijvoorbeeld door een call-back funktie, direkt door ingrijpen van de gebruiker, of anderszins. Door dit wijzigen worden de incrementele objekten inconsistent, en moeten ze worden herberekend tot de consistentie weer hersteld is.
Figuur 3 geeft een notatievoorbeeld voor een incrementeel objekt. Het werkelijk in de datastruktuur aanwezige formaat wordt niet gespecificeerd, omdat de uitvinding daardoor niet wordt beïnvloed. Ten eerste heeft dit objekt een of andere identifikatie, bijvoorbeeld een naam of een adres, die kan worden aangeroepen en door een pijl Ident is aangegeven. Verder heeft het objekt een waarde waarde kan genoteerd zijn op elke manier die overeenstemt met het gebruik van het objekt in kwestie, hetgeen de deskundige genoegzaam bekend is. Voorts bevat het objekt in een callerlijst een aantal"callers", dat zijn identifikaties van andere objekten welke de huidige waarde van het onderhavige objekt in de laatstgeldige consistente toestand gebruikten voor het berekenen van hun eigen waarde.
Een incrementeel objekt is dan en slechts dan lokaal consistent wanneer zijn verzameling"callers"niet leeg is (lokale consistentie hoeft nog niet globale consistentie van de hele datastruktuur te betekenen). In de bottom up-fase worden de callers (c) verwijderd, zoals in de annex meer uitgebreid wordt aangegeven.
De waarde van het incrementele objekt wordt berekend (geëvalueerd) middels de mede in het objekt gespecificeerde expressie eval. De verzameling daarvoor noodzakelijke objekten is de environment env. De bovengenoemde voorbeelden voor de expressies maken dit direkt duidelijk. Met a=fl env De waarde van een incrementeel objekt b ten behoeve van een objekt a wordt verkregen door het executeren van de expressie b. geeft de"punt"aan dat het navolgende deel van de expressie een attribuut van het voorgaande deel is. Zoals zal blijken kan een enkele expressie een reeks door punten gelieerde delen bevatten. Hierbij wordt a toegevoegd aan b. en is direkt hierna b consistent. Als a consistent is zal a. niet opnieuw f berekenen, maar direkt de waarde a. De vertaling kan handmatig zijn, dan wel automatisch.
Figuur 4 geeft een notatievoorbeeld voor een variabel incrementeel objekt. Dit is deels overeenkomstig met Figuur 3, maar de expressie om de waarde te bepalen is afwezig. In dit geval wordt de waarde immers bepaald door een call-back funktie, of direkt door een gebruikersaktie. Een verdere mogelijkheid is dat het systeem zelf een waardeverandering initieert, bijvoorbeeld door een ingebouwde instabiliteit een simulatiesysteem voor moleculen kan bijvoorbeeld de inherente warmtebeweging mede
<Desc/Clms Page number 8>
ingebouwd hebben : deze blijft dan voortdurend zichtbaar. Er is in dat geval dus geen inconsistentie mogelijk op dit niveau. Het is uiteraard mogelijk dat de objektstruktuur wordt veranderd, bijvoorbeeld doordat een gebruiker objekten creëert. Het vernietigen van objekten is niet direkt toegestaan.
Eventueel kan dat worden gedaan met een techniek van zogenoemde "garbage collectie" die buiten het kader van de uitvinding valt.
Het is mogelijk dat de direkte herberekening van een objekt goedkoper is dan een administratie met behulp van de gegeven struktuur voor incrementele objekten.
In dat geval kan daarvoor gebruik gemaakt worden van het definieren van een closure objekt (Clos). Dit laatste objekt heeft de struktuur van een incrementeel objekt, maar zonder de administratie van callers en value : er is dus slechts een environmentveld en een evaluatorveld. Daaruit volgt direkt dat het nooit lokaal consistent is in de betekenis dat de waarde niet meer bepaald hoeft te worden. Doordat er geen callerlijst is, kan de consistentie niet gedetekteerd worden. Als nu een zeker incrementeel objekt a de evaluatie van een Closure objekt b uitvoert, welke op zijn beurt een incrementeel objekt c evalueert, zal niet b, maar a aan de verzameling callers van c worden toegevoegd.
Figuur 5 geeft een notatievoorbeeld voor een zogenaamd zij-effektinkrementeel objekt ; dit kan bijvoorbeeld gebruikt worden voor het representeren van een element dat op het beeldscherm moet worden weergegeven. Als dit weergegeven element op zichzelf statisch is, en tot een ander element moet worden bijgewerkt, dan moet in feite eerst de oude representatie worden weggehaald, en daaropvolgend pas de nieuwe worden gevormd. Een verdere bijzonderheid is dat het betreffende objekt geen waarde behoeft te hebben. Daarom bevat dit objekt als getoond een ophef-veld, dat steeds wordt geëxecuteerd wanneer het betreffende incrementele objekt inconsistent geraakt is.
Figuur 6 geeft het bijwerken van een weergave volgens de uitvinding.
Evenals in Figuur 2 is er een beeldscherm 24, een datastruktuur 34, en een initiële aktie 32, die een direkte modifikatie 40 van een primair variabel objekt ten gevolge heeft, welke op dezelfde manier geimplementeerd kan worden als volgens Figuur 2. Daardoor
EMI8.1
kunnen dus direkt een aantal (nul of meer) sekundaire variabele objekten door i gemodificeerd worden. Het gebied waar zieh deze sekundaire variabele objekten bevinden reikt tot een grensgebied dat als een band 42 is aangegeven. Vanaf deze grens
<Desc/Clms Page number 9>
wordt nu de werkwijze van de uitvinding geimplementeerd. Ter plaatse van deze grens 42 worden de direkt gemodificeerde secundair variabele objekten genoteerd als variabele inkrementele objekten, op de eerder beschreven manier.
Daarna wordt eerst in een bottom-up signaleringsstap gedetekteerd tussen welke objekten waarde-inconsistenties ontstaan voor de incrementele objekten (dat wil dus zeggen de objekten die niet op het laagste niveau van de band 42 zijn gelegen) : de uitkomst van de signaleringsstap is een ja/nee grootheid. Dit gebeurt doordat elk gemodificeerd objekt voor elke caller in zijn callerlijst het bijbehorende objekt aanroept, en bovendien de betreffende caller verwijdert. Dit eventueel achtereenvolgende aanroepen van meerdere callers is voor het originerende objekt een ondeelbare operatie, en daarna is de callerlijst dus leeg. Dit gaat vervolgens evenzo voor de objekten die middels een caller vanuit een hiërarchisch lager objekt zijn aangeroepen, totdat de top van de datastruktuur is bereikt. Daarna zijn de inconsistenties bekend.
Na het signaleren van de inconsistenties wordt voor alle objekten die voor de uit te geven gebruikersinformatie relevant zijn, een herberekening uitgevoerd met behulp van de vergelijkingen die de respektievelijke consistentierelaties specificeren. Dit laatste kan door een topdown aanpak zoals door de pijl 36 is aangegeven. De volgorde van de respektievelijke herberekeningen is op zichzelf willekeurig, maar de organisatorische samenhang is top-down, omdat zó bepaald wordt welke consistenties hersteld moeten worden. De overige kunnen gevoeglijk blijven bestaan. Daarbij is voor een opnieuw te berekenen objekt steeds aan te geven wanneer de daarvoor onderliggende berekeningen geheel gereed zijn ; dan worden telkens de
EMI9.1
bijbehorende callers opnieuw ingevoerd, zoals uit de annex ook blijkt.
In het bijzonder i begint de bottom-up fase bij die variabele incrementele objekten waarvan de waarde is veranderd. De top-down fase begint bij consistentieherstelling van direkt weergegeven objekten. In de hierna volgende annex worden achtereenvolgens gegeven de bottom-up procedure, de top-down procedure, idem voor een Closure element, idem voor een zijeffekt incrementeel objekt.
<Desc/Clms Page number 10>
EMI10.1
ANNEX bottom-up makeincons (x) : each o e x. makeincons x. end #inconsistent and x. dat is de lege verzameling top-down eval (x, : = if x. then x. + {y} return (x. x. g (x. env. a. eval (x. env. x. env. b. eval (x. env. x. env. c. eval (x. env.
) x. + {y} return (x.
#x is consistent with a, x.
Closure objekt eval (x, : (x. env. a. eval (x. env. x. env. b. eval (x. env. x. env. c. eval (x. env.
)
<Desc/Clms Page number 11>
:Zij-effekt incrementeel objekt, g produceert het effekt make¯incons (x) : = x. undo () ; verder hetzelfde als bij een normaal incrementeel objekt eval (x, y)
EMI11.1
: = if callers == {} then x. + {} g (x. env. a. eval (x. env. a, x), x. env. b. eval (x. env. b, x), x. env. c. eval (x. env. c, x) ;