Publications‎ > ‎Software reviews‎ > ‎

XVT Architect 1.0

Nota Bene

Dit artikel, dat ik in mei 1995 heb geschreven, werd vanwege hoofdredactionele turbulentie nooit gepubliceerd...

De C++ Architect

Tegenwoordig worden vrijwel alle applicaties ontwikkeld voor grafische gebruikersinterfaces (GUI’s) zoals Windows, Macintosh en OS/2. Hoewel deze besturingssystemen overeenkomsten met elkaar vertonen, zijn de technische details op ieder platform verschillend. Het meest arbeidsintensieve onderdeel van het ontwikkelen van een applicatie die op meerdere platforms beschikbaar dient te komen, is dan ook vaak het schrijven van de verschillende varianten van de GUI van de applicatie. Voor ontwikkelaars van dergelijke applicaties vormt XVT-Architect, de nieuwe component in de XVT-Development Solution for C++ (XVT-DSC++), een mogelijke oplossing.

Aan de basis van de XVT-DSC++ staan de XVT Portability Toolkits die een extra laag over de Application Programmer Interface (API) van ieder platform aanbrengen, zodat voor ieder platform dezelfde functie-aanroepen gebruikt kunnen worden. Deze platform-onafhankelijke API wordt weer gebruikt in XVT-Power++, een verzameling C++ klasses waarmee GUI-applicaties kunnen worden ontwikkeld. Verder wordt Rogue Wave Tools.h++ meegeleverd, een uitgebreide verzameling C++ klasses van data structuren.

En nu wordt de XVT-DSC++ gecompleteerd door XVT-Architect, een intermediair tussen de XVT-oplossing en de applicatie-ontwikkelaar. Het is de nieuwe grafische ontwikkeltool waarmee programmeurs op visuele wijze de architectuur, eigenschappen en gebruikersinterface kunnen ontwikkelen.
De grote kracht van de XVT-DSC++ is dat met XVT ontwikkelde applicaties relatief eenvoudig naar andere besturingssystemen overgezet kunnen worden via de import- en exportfuncties van XVT-Architect. Tevens zijn applicaties eenvoudig te onderhouden omdat er slechts één versie van de code hoeft te bestaan. Om de met XVT ontwikkelde code te verwerken tot uitvoerbare code moet de applicatie-ontwikkelaar voor ieder besturingssysteem wel reeds een door XVT ondersteunde C-compiler in het bezit hebben. Op ieder platform ondersteunt XVT de meest gangbare compilers. Zo moet bijvoorbeeld op Windows NT Microsoft Visual C++ gebruikt worden.

PCM bekeek de XVT-Development Solution for C++ voor Windows NT-Intel 3.5, mede omdat het belang van Windows NT als 32-bits ontwikkelingsplatform enkel nog verder zal toenemen nu Windows 95 op de markt is verschenen. Een standaard Windows 3.11-configuratie is gebruikt als alternatief platform om het overzetten van applicaties te testen. In het oktober nummer van de PCM uit 1993 viel overigens reeds te lezen over een eerdere versie van het XVT-product.

XVT Architect 1.0


Installatie

Het installeren van de XVT-Development Solution for C++ is een vreemde gewaarwording. Tot de laatste stap verloopt het proces wel zoals verwacht, maar nadat alle bestanden zijn weggeschreven vraagt het installatieprogramma of het AUTOEXEC.BAT bestand mag worden bijgewerkt zodat de omgevingsvariabelen kunnen worden opgenomen. Dit is bijzonder ongebruikelijk, aangezien een Windows NT-computer dit bestand helemaal niet hoeft te gebruiken. Bovendien verschaft de Windows NT-API eenvoudige functies waarmee systeem- en gebruikersvariabelen op gestandaardiseerde wijze geregistreerd kunnen worden. Achteraf bleek dan ook dat niet alle variabelen waren opgenomen. De meegeleverde schriftelijke beschrijving van de installatie was hier kennelijk ook niet van op de hoogte. Deze beschrijft namelijk stap voor stap hoe en waar de XVT-variabelen handmatig moeten worden toegevoegd. XVT maakt hiermee geen goede eerste indruk, maar installatiestrubbelingen zijn natuurlijk snel vergeten indien het achteraf de moeite waard blijkt te zijn geweest.

XVT-Architect
Overzicht

XVT-Architect is zelf ook ontwikkeld met de XVT-DSC++ en geeft dus een goede indicatie van de mogelijkheden van de XVT-oplossing. Het bestaat uit drie componenten, de Blueprint, de Drafting Board en de Strata. Iedere module wordt gepresenteerd als een venster in een Multiple Document Interface (MDI) werkruimte. Het voordeel van deze opzet is dat hierdoor meerdere instanties van de modules tegelijkertijd open kunnen zijn. Bovendien zijn de modules goed geïntegreerd.

Verder bevat de werkruimte een menu waarmee een aantal functionele, maar wel zeer sobere editors geactiveerd kunnen worden, zoals de String Editor en de Accelerators Editor. Met de Layer Editor kunnen variaties van objecten gemaakt worden. Deze mogelijkheid kan gebruikt worden om per platform een aangepaste versie van het grafische object te presenteren. Ook kan hiermee de applicatie gelocaliseerd worden.

De online-help is helaas niet context-gevoelig en ook niet echt uitgebreid. Het is daarom geen alternatief voor de meegeleverde documentatie. Deze gedrukte versie is kwalitatief goed, het slordigheidje niet meegerekend dat soms nog gerefereerd wordt naar XVT-Design, de voorloper van XVT-Architect. De gebrekkige online-help wordt echter weer gecompenseerd door de Quick Help-optie. Wanneer Quick Help geactiveerd wordt, verschijnt een venster dat altijd zichtbaar blijft met duidelijke uitleg over de eigenschappen van het op dat moment actieve object.

Hoewel XVT-Architect intern wel drag-and-drop ondersteunt, is het niet mogelijk om vanuit File Manager een XVT project-bestand naar de werkruimte van XVT-Architect te slepen. Ook vanaf de command-line kan XVT-Architect niet zo gestart worden dat een project direct geopend wordt.

Blueprint

De Blueprint van XVT-Architect. De werkruimte van XVT-Architect wordt dus altijd geopend met de Blueprint van een nieuw project. In de Blueprint dient de interne architectuur van een applicatie te worden vastgelegd door de benodigde interface objecten aan te maken. Om dit te bewerkstelligen hoeven enkel de gewenste object buttons op de Tools toolbar geactiveerd en de gewenste locaties op de blueprint aangeklikt worden. Daarna dienen enkel nog de relaties tussen de objecten te worden vastgelegd. Hiervoor moet de Link button geactiveerd worden, waarna de verbindingen tussen de objecten eenvoudig met de cursor getekend kunnen worden.

Het enige serieuze minpunt van de Blueprint is dat het venster onafhankelijk van de afmetingen van de werkruimte wordt geopend. Dit is helaas het geval bij alle modules van XVT-Architect. Dit is vooral vervelend aangezien de één-regelige context-gevoelige uitleg in de status balk onderaan het venster staat. De uitleg is dus vaak niet zichtbaar voordat het venster handmatig is verplaatst of verkleind.

Deze tekortkoming werkt nog verder door, aangezien de status balk ook weergeeft welke tool actief is. Dit is namelijk niet aan de cursor te zien. Afgezien hiervan voldoet de Blueprint echter prima voor het uitzetten van de interne architectuur van applicaties. Overigens is de Blueprint tevens de plek waarvandaan alle objecten benaderd kunnen worden.

Drafting Board

De Drafting Board van XVT-Architect. In de Drafting Board van XVT-Architect kan de grafische gebruikersinterface worden ontworpen die wordt vastgelegd in het speciale Universal Resource Language (URL) formaat van XVT. Met dit bestand kan dan weer het platform-afhankelijke Resource (RC) bestand worden gegenereerd.

De Drafting Board bevat alle essentiële elementen om een functionele, maar toch wel sobere, interface te creëren. Vooral interessant zijn de Native objecten. Deze objecten hebben op ieder platform de aldaar gangbare eigenschappen. Via een button op de toolbar kan tevens de Menu-editor bereikt worden. Deze editor is eenvoudig maar helder opgezet en voldoet prima.

Zoals reeds vermeld wordt ook het venster van de Drafting Board onafhankelijk van de afmetingen van de werkruimte geopend en is dus niet automatisch zichtbaar welke tool actief is. In deze module vormt dit echter een onacceptabele tekortkoming. Wanneer bijvoorbeeld een grafisch object is toegevoegd aan de interface waarna de eigenschappen gedefiniëerd dienen te worden door het object te dubbelklikken, zal nóg zo’n object toegevoegd worden. Eerst dient namelijk de selectiecursor opnieuw geselecteerd te worden. Dit is onnodig storend.

Naar aanleiding hiervan bleek nog een tekortkoming. Indien een stap ongedaan wordt gemaakt die bij nader inzien toch wel juist was, dan kan deze stap niet terug worden teruggehaald hoewel het Redo-commando in het Edit-menu toch andere verwachtingen wekt... Dit commando is tijdens de gehele evaluatie niet actief gebleken. Tevens komt de beschikbaarheidstoestand van de toolbar buttons voor het kopiëren, knippen en plakken niet altijd overeen met de beschikbaarheidstoestand van de equivalente acties in het Edit-menu. Misschien in de volgende versie?

Strata

De Strata van XVT-Architect. In de Strata schuilt echter de ware kracht van XVT-Architect. De Strata is de editor waar alle eigenschappen van de applicatie objecten op visuele wijze kunnen worden gedefiniëerd. De class browser, die zich in het onderste deel van de module bevindt, maakt de object-hiërarchie duidelijk en toegankelijk. Het bovenste deel van de Strata bestaat uit een notebook control (met tab-bladen) waar iedere pagina een klasse in de object-hierarchie representeert. Alle objecten kunnen zowel via de class browser als via de notebook control worden geselecteerd.

Zo is bijvoorbeeld veel van de beschikbare functionaliteit voor de vensters definiëerbaar op de CView-pagina. Hier kan onder andere de titel en de inhoud van het systeem menu van het venster worden ingesteld. Ook de omgeving van het venster, zoals kleur-instellingen en lettertypen, kan eventueel per object worden gedefiniëerd.

De beschikbare functionaliteit leidt wel tot een zekere leercurve, howel dit natuurlijk voor alle uitgebreide ontwikkelomgevingen geldt. Een enorme uitkomst is hier dan ook de reeds eerder genoemde Quick Help. In de Blueprint en de Drafting Board kan Quick Help eventueel beschouwd worden als een luxe, maar tijdens het definiëren van de eigenschappen van de objecten in de Strata zal deze hulp vooral in het begin werkelijk onmisbaar blijken te zijn.

Algemeen

De uiteindelijke tutorial-applicatie van XVT-Architect. De bij XVT-Architect meegeleverde tutorial vormt een goede inleiding in de technische mogelijkheden van de XVT-DSC++. Zo worden bijvoorbeeld verschillende typen event-afhandelingen, drap-and-drop en veld-validatie behandeld. Ook wordt aandacht geschonken aan Automatic Data Propagation, een data management concept in de XVT-DSC++.

Aan het gebruikersaspect van de tutorial-applicatie is echter te weining aandacht besteed. Na het starten van de uiteindelijke tutorial-applicatie worden vijf vensters geopend, die ec hter op één na niet de gebruikelijke eigenschappen bezitten, zoals bijvoorbeeld de mogelijkheid het venster te minimaliseren. Door het gemis hiervan maakt de applicatie een nogal rommelige en incomplete indruk. Het minimaliseren bleek namelijk wel heel eenvoudig toegevoegd te kunnen worden door deze eigenschap in de Strata van de objecten aan te klikken.

XVT-Architect bevat kortom nog schoonheidsfoutjes. Het reeds eerder vermelde probleem dat vensters op vaste grootte worden geopend, blijkt (voorlopig?) ook niet op te lossen zonder de hele vensteropeningsprocedure zelf te implementeren. Door dit gebrek moeten regelmatig de vensterdimensies handmatig worden gewijzigd. In enkele gevallen blijkt het bijwerken van het uiterlijk van het venster echter niet helemaal volgens verwachting te gaan. Het is dan mogelijk dóór de statusbar te kijken. Een ander schoonheidsfoutje bevindt zich in de Strata. Hier loopt in sommige situaties de scrollbar niet synchroon met de vensterinhoud.

Overigens is het altijd mogelijk om platform-specifieke mogelijkheden uit te buiten. XVT heeft voor ieder platform een hierop toegesneden boekje waarin het gebruik van platform-specifieke XVT-attributen vermeld staan. Het lijkt echter wat tegenstrijdig om een product dat zijn kracht ontleent aan platform-onafhankelijkheid te gebruiken in combinatie met conditionele compilatie om zo een applicatie van platform-specifieke eigenschappen te voorzien. Om applicaties te ontwikkelen met platform-specifieke state-of-the-art eigenschappen kunt u natuurlijk beter platform-specifieke software gebruiken. Een produkt als XVT-Architect kan logischerwijs ook niet méér bevatten dan de grootst mogelijke gemene deler zonder de platform-onafhankelijkheid op te geven.

Compilatie

Met XVT-Architect wordt dus van een applicatie de architectuur uitgezet en de objecten met hun eigenschappen gedefiniëerd. De C++ code k an gegenereerd worden zodra dit proces voltooid is. Er is dan natuurlijk echter nog een lange weg te gaan; alle interne applicatie-specifieke code dient immers nog geschreven te worden. Dit proces speelt zich in principe geheel af binnen de compileromgeving, tenzij er achteraf nog nieuwe objecten moeten worden toegevoegd.

Een probleem ontstaat echter indien de eigenschappen van een object gewijzigd moeten worden nadat reeds interne code buiten XVT-Architect handmatig is toegevoegd. Het genereren van de C++ code geschiedt namelijk enkel op bestandsniveau; er wordt dus niet een database voor functieposities in project-bestanden bijgehouden. XVT-Architect vraagt wel om bevestiging indien een basisbestand op het punt staat overschreven te worden zodat eventueel eerst nog een kopie van de interne code gemaakt kan worden, maar optimaal is deze toestand natuurlijk niet te noemen. Bovendien kost het tijd. Het belang van een gedegen project-voorbereiding moet mede door deze rigiditeit dan ook niet onderschat worden.

Het compileren van XVT-code duurt helaas vrij lang. Bovendien leidde het compileren tot een reeks waarschuwingen aangezien in één van de belangrijke headerfiles een drijvende punt-waarde niet expliciet geconverteerd was naar een 4-bits waarde, wat toch wel erg storend is. Nu kan dit wel opgelost worden door het waarschuwingsniveau van de compiler lager te zetten, maar dat is natuurlijk geen oplossing. Aan de andere kant is het natuurlijk ook wel een vervelend idee om een XVT-systeembestand te moeten wijzigen.

Verwant hieraan is het probleem bij het bijwerken de bestandsafhankelijkheden. Microsoft Visual C++ blijkt namelijk tijdens het lezen van de precompiler directives niet te rekenen op commentaren die zich bevinden op meerdere regels zonder dat iedere afzonderlijke regel als commentaar gemarkeerd is. Het gevolg hiervan is een hele reeks irrelevante foutmeldingen die echter wel bestudeerd moet worden o m eventuele echte foutmeldingen op te sporen.

Conclusie

XVT-Architect maakt een slechte eerste indruk door de gebrekkige installatie procedure. De tutorial is wat inhoud betreft prima, maar aan de gebruikersvriendelijkheid van de applicatie is te weinig aandacht besteed. XVT-Architect kent een intelligente architectuur en biedt veel functionaliteit, maar verwacht geen glitter & glamour. Enkele tekortkomingen, die technisch gezien relatief eenvoudig op te lossen zouden moeten zijn, werpen echter een smet op het geheel. Ook het compileren van de code maakt een slordige indruk.

Het feit dat volledig met XVT ontwikkelde applicaties relatief eenvoudig naar andere besturingssystemen overgezet kunnen worden, kan deze tekortkomingen echter wel vergoeden. Een keuze voor de XVT-DSC++ zou af moeten hangen van het accent dat gelegd wordt op het belang van de beschikbaarheid van applicaties op méér dan twee platforms. Ook dient het belang van het uiterlijk van de applicatie te worden overwogen, aangezien met platform-specifieke ontwikkelingssoftware geavanceerdere gebruikers-interfaces kunnen worden bereikt.

XVT-Architect, versie 1.0, is kortom een produkt waarmee het ontwikkelen van platform-onafhankelijke applicaties vereenvoudigd kan worden, maar er moet nog wel aan worden geschaafd.

Gegevens

Onderwerp: Platform-onafhankelijke C++ applicatie-ontwikkeling
Produkt: XVT-Architect 1.0, de nieuwe C++ tool in de XVT-Development Solution for C++
Platform-ondersteuning: Windows 3.1; Windows NT (Intel, DEC Alpha); Macintosh en PowerMac; OS/2; OSF/Motif (DEC Alpha OpenVMS, DEC Alpha OSF/1, HP-UX, AT&T 3400, IBM RS6000, SCO Unix, SGI Irix, Sun OS 4.1.x, Solaris 2.4)
Leverancier: PVI Precision Software BV, telefoon 08385-52588

Afbeeldingen
De Blueprint van XVT-Architect. De Strata van XVT-Architect. De Drafting Board van XVT-Architect. De uiteindelijke tutorial-applicatie van XVT-Architect.