Ondanks dat ik momenteel erg druk ben met mijn werk en mijn super lieve leuke vriendin ben ik toch weer bezig met Woovi. Theoretisch had ik al lang klaar moeten zijn met release 0.4 maar ik vond het nodig om de database-core te herschrijven. De reden hiervoor was omdat ik even een stap terug moest doen omdat ik tegen een 2-tal problemen aan liep.
1) De opslag van geserialiseerde objecten welke momenteel gewoon als nummers werden opgeslagen. Wat een probleem was omdat je dan niet meer het verschil tussen nummers en objecten kon zien. Wat weer onhandig is als je ze oo wil uitlezen en er verder mee wil werken. De reden waarom ik ze niet als objecten wil opslaan is omdat het aanmaken van objecten in Foxpro te langzaam is. Daarnaast zou ik het probleem ook op de C++ manier op kunnen lossen waar alles een nummer is en alle variabelen sterk getypeerd zijn. Dus daar denk ik nog even over na.
2) Ik ben er ook nog niet uit hoe ik lijsten moet implementeren. Voor enkele lijsten had ik namelijk simpel een get en set functie gemaakt maar dit is voor hele lijsten geen optie omdat het daardoor moeilijk is om later extra functionaliteit toe te voegen. En dat betekend dat ik een goede interface moet schrijven voor lijsten, en daarbij moet ik goed nadenken over hoe en wanneer gegevens geupdate worden vanuit een grafische (en niet grafische) omgeving.
Dus wanneer komt release 0.4? Ja eigenlijk weet ik dat niet zo goed... Ik wil graag alles in één keer goed doen zodat ik de interface tussen database én presentatie-laag niet later hoef aan te passen... maar dat is wellicht een utopische gedachte. Misschien moet ik gewoon deze lagen even houtje-touwtje aan elkaar knopen zodat het tenminste werkt. En vervolgens extra functionaliteit proberen toe te voegen en als ik dan ergens tegenaanloop de boel weer te herschrijven. *-)
Ik heb trouwens tijdens het herschrijven een officiële database-laag gemaakt zodat alleen vanaf die laag de database benadert word (en mag worden). Deze laag is zo klein en simpel mogelijk gemaakt en behelst ook het aanmaken van een nieuwe database. Verder is de laag nog steeds functioneel geschreven en niet object georienteerd maar dat komt doordat de oo langzamer is in foxpro. Maar doordat alles nu netjes is samengepakt zou het veranderen van deze laag niet zo moeilijk meer moeten zijn.
Daarnaast heb ik een concept Woovi-uitleg liggen, moet nog wel wat aan gedaan worden maar ik hoop dat woovi hierdoor al een stuk duidelijker word:
introductieWoovi is ontstaan uit de gedachte dat je met simpele bouwblokken toch complexe systemen in elkaar kan zetten. Als bouwblokken heb ik gekozen voor objecten omdat deze het meest tot de verbeelding spreken en ook de basis vormen voor alle moderne programmeer-talen. Omdat je aan bouwblokken alleen niet genoeg hebt kun je relaties tussen objecten aanleggen, dit kun je zien als het cement.
inspiratieWoovi is geinsprireerd door
wiki's,
microsoft access,
formdesk en zelfs
assembly. Wiki's omdat deze geweldige (zelf)beschrijvende eigenschappen heeft, intuitief werkt én waar je gegevens makkelijk kan structureren.
identificatie van objectenOmdat alle moderne databases id's gebruiken in plaats van namen heb ik besloten dat alle objecten m.b.v. een id worden geïdentificeerd. Het nadeel van namen is dat je per ongeluk dubbele namen kan krijgen, vooral als meerdere mensen met het systeem werken én is het meteen taal-afhankelijk. Woovi is niet taal afhankelijk, in tegenstelling tot zo'n beetje alle programmeer-talen.
toch weer namen :$Maar omdat mensen toch makkelijker met namen kunnen werken dan met nummers is er wél de mogelijkheid om met namen te werken, maar dit is alleen in de presentatie-laag. De notatie voor een woovi-object is {naam} wat zoveel zegt als "geef mij het object met de naam 'naam'".
objecten en relatiesHet object {naam} is meteen een heel leuk voorbeeld. Want dit object is tevens een eigenschap. Zo kan bijvoorbeeld een persoon of een bedrijf een {naam} hebben. Maar nog interessanter is dat bijvoorbeeld een eigenschap zoals {naam} ook een {naam} heeft. In woocode zou je dat als volgt noteren
{naam}.{naam} = "naam" wat in gewoon nederlands betekent "de naam van het object naam is 'naam'". En die gegevens worden als relatie opgeslagen.
relatiesIn woovi is een object zonder relaties statisch, het ís alleen. Met behulp van relaties kun je invulling aan een object geven. Zo kun je voor een object bepaalde eigenschappen invullen zoals de {naam} of de {omschrijving}, maar kun je ook meer geavanceerde dingen doen zoals aangeven welk type object het is of van welk object dit object een uitbreiding is.
opslagOp het moment van dit schrijven is een object eigenlijk alleen een nummer, dat betekent dat echt alles word geregeld via relaties. Dat betekent dat als je een nieuw object aanmaakt je in feite alleen een nieuw nummer krijgt en als je vervolgens niks met dit object doet dan bestaat het object eigenlijk niet meer. Nergens word dus bijgehouden dat het object bestaat, dit moet je doen door relaties aan te leggen. Een relatie hang altijd aan een object, is altijd van een bepaald type (ook een object) én bevat data (wat eventueel een verwijzing naar een ander object kan zijn.
voorbeelden// De naam van naam is naam
{naam}.{naam} = "naam"// De omschrijving van de eigenschap naam
{naam}.{omschrijving} = "Een identificerende naam welke o.a. gebruikt word om woocode leesbaarder te maken."// Een naam is een string
{naam}.{uitbreiding_van} = {string}// Een naam is een unieke eigenschap
{naam}.{uniek} = .T.// Uitleg van de eigenschap uniek
{uniek}.{omschrijving} = "Als een eigenschap uniek is dan kan maar één object een bepaalde waarde bevatten voor deze eigenschap."Zelfbeschrijvend
Uitbreidbaar
Super generiek
Uitwisselbaar (als je guids zou gebruiken)
Ik hou van jou! Hoewel mijn gevoel voor jou moeilijk met woorden te beschrijven is (alles lijkt ontoereikend) zal ik het toch proberen :).
Mirjam ik vind je geweldig, mooi, lief (als in cute, sweet and nice), lkkr, leuk, slim, sexy, intrigerend, grappig, vrolijk...
Sinds zaterdag ben ik de trotse bezitter van een privé zwembad! Ik heb hem zelf buiten geinstalleerd op mijn balkon. Volgens mij kun je er wel met zijn 6'en in :). En dit alles voor maar 19 euri!
Alleen jammer dat Mirjam op vakantie is, want in je eentje romantisch met kaarslicht in het water liggend naar de sterren kijken is niet helemaal optimaal...