Publications‎ > ‎Software reviews‎ > ‎

Programmeren voor de betere klassen

Voor het Windows besturingssysteem zijn een aantal zeer uitgebreide omgevingen beschikbaar waarmee bijzonder krachtige applicaties kunnen worden ontwikkeld. Dit artikel beperkt zich tot de meest recentelijk los verkrijgbare versies van de twee meest gebruikte en uitgebreide omgevingen, Microsoft Visual C++ 4.0 en Borland C++ 5.0 Development Suite. Twee andere omgevingen, Symantec C++ en Watcom C++, hadden hier ook onder de loep kunnen worden genomen. Uit praktische overwegingen is echter gekozen voor een uitgebreidere beschouwing van minder producten.

In een bespreking van beperkte omvang kan natuurlijk geen volledigheid nagestreefd worden. In dit artikel is daarom gekozen voor een benadering vanuit gebruikers oogpunt. Dit in tegenstelling tot veel andere C++ besprekingen, waarin veel aandacht wordt besteed aan de technische capaciteiten, die overigens staat en valt bij de wijze van testen. Een taak kan in C++ in veel gevallen op zeer veel manieren worden geimplementeerd omdat C++ een extreem expressieve taal is. De programmeur speelt kortom een belangrijkere rol dan het gereedschap. Bovendien kan wel met redelijke zekerheid worden aangenomen dat, hoewel er natuurlijk verschillen in uitvoeringssnelheid zullen zijn, alle ontwikkelingsomgevingen bijzonder efficiente code kunnen produceren. Daarom wordt in dit artikel vooral bekeken hoe Visual C++ en Borland C++ de ontwikkelaar helpen bij het zo aangenaam en efficient mogelijk doorlopen van de ontwikkelcyclus.

Ontwikkelcyclus

Het ontwikkelen van een nieuwe applicatie begint in veel gevallen met het starten van een gereedschap zoals AppWizard of AppExpert, waarmee binnen een minuut een toegesneden skelet voor het project kan worden gegenereerd via een aantal eenvoudige keuzemogelijkheden. Met volledig geintegreerde Resource Editors kan vervolgens het applicatie-specifieke deel van de interface objecten aangemaakt worden, zoals bitmaps, iconen, dialoog sjablonen en dergelijke.

Met behulp van een klassen gereedschap zoals ClassWizard of ClassExpert kunnen vervolgens de relevante boodschappen van de interface objecten worden geselecteerd en afgevangen. Voor iedere afgevangen boodschap kan dan een skelet functie worden gegenereerd waarna de specifieke functionaliteit moet worden gecodeerd. Hier begint kortom pas het echte werk.

Natuurlijk is de eigen broncode foutloos, maar mocht dit per ongeluk toch eens niet het geval blijken te zijn, dan biedt de geintegreerde debugger hopelijk uitkomst bij het localiseren van denk- en typefouten. Just-in-time natuurlijk, oftewel het is nooit net te laat om te debuggen, zelfs niet na een crash.

Microsoft Visual C++ 4.0 & Borland C++ 5.0


Visual C++ 4.0

Microsoft Visual C++ 4.0 is een 32-bit ontwikkelomgeving waarmee applicaties kunnen worden gemaakt voor Windows NT, Windows 95 en Windows 3.1 met Win32s. Het wordt geleverd met het applicatie raamwerk Microsoft Foundation Classes (MFC) 4.0, dat onder meer de Windows 95 Common Controls ondersteunt. Ook OLE Controls kunnen binnen deze omgeving worden ontwikkeld en gebruikt. Database ondersteuning wordt geleverd in twee smaken, namelijk de Data Access Objects (DAO) en Open Database Connectivity (ODBC).

Microsoft Visual C++ 1.52 wordt als apart product bijgeleverd, tesamen met MFC 2.5. Met deze ontwikkelomgeving kunnen 16-bit applicaties worden gemaakt voor Windows 3.1 en MS-DOS. Dit lijkt wederom een bevestiging van de strategie bij Microsoft: 16- bit mag niet meer. Zo is bijvoorbeeld één van de nieuwe uitbreidingen in MFC, DAO, niet te gebruiken in Windows 3.1, zelfs niet met Win32s. Dit is een essentieel punt, aangezien Windows 3.1 op dit moment nog steeds het meest gebruikte Windows besturingssysteem ter wereld is.

Eén van de bijgeleverde externe producten is InstallShield SDK Edition, waarmee setup programma’s voor applicaties kunnen worden aangemaakt via installatie scripts. Crystal Reports levert een uitbreiding op Visual C++ met een database rapportage systeem met run-time engine. Het is echter nogal onduidelijk wat WinCIM, de Windows interface voor CompuServe, op deze CD-ROM doet.

Het is zeer de moeite waard om een jaarabonnement te nemen op Microsoft Visual C++. Zo kan namelijk automatisch updates worden ontvangen. Bovendien zijn kleinere opwaarderingen enkel via dit abonnement te verkrijgen.

Installatie

Een volledige installatie van Visual C++, inclusief de gigantische hoeveelheid online documentatie, vergt 248 Mb en verloopt als een zonnetje. Een typische installatie vereist 131 Mb, omdat dan onder andere de documentatie niet op de harde schijf wordt gezet. Er blijken twee patches te bestaan die een aantal bugs moeten verhelpen. Deze zijn onder meer op de Microsoft website te vinden. Beide verlopen zoals gepland en het aantal bijgewerkte bestanden is nog op de vingers te tellen.

Documentatie

Visual C++ MFC WizardBar en InfoView. Visual C++ wordt geleverd met slechts 2 centimeter aan handleidingen, een Getting Started voor Visual C++ 1.52 en Tutorials voor Visual C++ 4.0. 89 Mb (!) aan online hulp moet deze schamele hoeveelheid handleidingen in papiervorm compenseren. Zeer opvallen d is dat niet het standaard Windows hulp systeem wordt gebruikt, maar één die volledig geintegreerd is met de Visual C++ ontwikkelomgeving. Dit hulpsysteem is werkelijk een verademing en hoewel het niet compleet is en soms ook bepaald niet helder, mag het in zijn totaliteit toch zeker tot één van de beste online-documentatie systemen in de software industrie worden gerekend.

IDE

Algemeen

Visual C++ MFC ClassWizard. Visual C++ projecten worden ontwikkeld in de Developer Studio. Opvallend is dat binnen deze omgeving tevens informatie van Visual Basic, Fortran Powerstation, Visual Test en de Development Library benaderd kan worden, indien deze producten tenminste apart zijn aangeschaft.

Het hart van de Developer Studio is het Project Workspace Window, dat uit vier tabbladen bestaat, namelijk ClassView, ResourceView, FileView en InfoView.

Visual C++ MFC database ondersteuning in AppWizard. Met ClassView kan eenvoudig door de C++ klassen en de bijbehorende methoden en eigenschappen worden genavigeerd. De ResourceView geeft toegang tot de grafische objecten die bij het project horen, zoals dialoog sjablonen, menu’s, iconen en dergelijke. De FileView biedt via een niet-gelaagde listing van de bronbestanden een meer traditionele manier om het project te benaderen. Tenslotte de InfoView. Hiermee kan Books Online, de zéér uitgebreide collectie hulpbestanden, binnen de IDE worden benaderd en doozocht, een enorme vooruitgang vergeleken met de gangbare hulpsystemen die de standaard Windows Help aanroe pen.

Helaas is het Project Workspace Window read-only, zodat het bijvoorbeeld niet mogelijk is om de knopen in de hierachie te herstructureren. Alle benodigde informatie wordt achter de schermen verzameld door de projectbestanden wanneer nodig te parseren. Bij uitgebreide projecten kan het aantal gebruikte klassen echter flink uit de hand lopen. Het niet kunnen ingrijpen in de presentatie methode leidt dan alsnog tot veelvuldig zoeken naar klassen en methoden.

Visual C++ debug-sessie. Natuurlijk biedt de Developer Studio tevens windows voor output, variabelen, registers, geheugen en dergelijke. Al deze windows zijn overigens ‘dockable’ en hebben een full-screen optie. Een ander typisch Microsoft kenmerk is tenslotte de overdaad aan toolbars die bovendien eenvoudig wijzigbaar zijn. Gelukkig maar dat al deze high-tech interface eigenschappen niet persé gebruikt hoeven te worden.

Component gallery

De Component Gallery bevat herbruikbare code zoals OLE Controls, eigen C++ klassen en eventueel componenten van andere producenten. Vooral het toevoegen van OLE Controls door het aanmaken van C++ code omhulsels is hierdoor bijzonder eenvoudig. Andere componenten breiden bestaande klassen uit zodat bijvoorbeeld OLE Automation aan een bestaande klasse kan worden toegevoegd of systeem informatie in de About box door simpelweg op het juiste icoontje te klikken.

Custom AppWizards

Visual C++ MFC OLE ondersteuning in AppWizard. Met AppWizard kunnen, behalve applicaties en bibliotheken, ook aangepaste AppWizards worden gemaakt op basis van code en grafische objecten in een reeds bestaand project. Ook kunnen de standaard AppWizard sjablonen worden aangepast of uitgebreid. Voorbeelden van eenvoudige uitbreidingen zijn bijvoorbeeld bedrijfsspecifieke informatie, iconen en hulpbestanden.

Gegevens

Producent: Microsoft.
Toepassing: Geintegreerde applicatie ontwikkeling in C++.
Minimale systeemeisen: PC met 486 processor, Window 95 of Windows NT 3.51, 16 Mb geheugen, 131 Mb voor een typische installatie, CD-ROM drive.
Prijs: Fl. 1032 inclusief BTW.
Meerprijs jaarabonnement: Fl. 139 exclusief BTW.
Leverancier: Voor Nederland: Microsoft BV, telefoon 023-4689189, fax 023-5637761; Voor België: XXX

Afbeeldingen

Visual C++ MFC OLE ondersteuning in AppWizard. Visual C++ MFC WizardBar en InfoView. Visual C++ debug-sessie. Visual C++ MFC ClassWizard. Visual C++ MFC database ondersteuning in AppWizard.

Borland C++ 5.0

Borland C++ 5.0 is een 32-bit ontwikkelomgeving waarmee applicaties kunnen worden gemaakt voor Windows NT, Windows 95, Windows 3.1 en DOS. Het wordt geleverd met het applicatie raamwerk ObjectWindows Library (OWL) 5.0. Deze bibliotheek ondersteunt onder meer de Windows 95 Common Controls en 16-bit emulatie voor de meeste daarvan. De grote concurrent van OWL, MFC, wordt bovendien door de Borland compiler ondersteund. Een belangrijk pluspunt, aangezien de Microsoft compiler geen OWL ondersteunt. Database ondersteuning wordt geleverd in de vorm van de Visual Database Tools (VDBT). Natuurlijk ontbreekt de geintegreerde debugger niet. En, last but not least, Java. Met deze omgeving kunnen tevens Java applicaties worden ontwikkeld, inclusief syntax highlighting, AppExpert, geintegreerde debugger en Sun’s Development Kit (JDK).

De Borland C++ 5.0 Development Suite voegt hieraan nog een aantal gereedschappen toe. CodeGuard 32/16 is een krachtig bug detectie en diagnose gereedschap. De PVCS Version Manager is belangrijk bij grote projecten waar veel programmeurs voor nodig zijn en versie controle complexer wordt. Met InstallShield Express BC++ 5.0 Edition kan op visuele wijze een setup programma voor de applicatie worden aangemaakt. Tenslotte is er nog een supersnelle Java just-in time compiler die Java applicaties vijf tot tien keer sneller maakt.

Installatie

Een volledige installatie van Borland C++ vereist 195 Mb. Het installeren duurt dus wel even, maar verloopt soepeltjes. Het tekstbestand dat verschijnt na het installeren verwijst de ontwikkelaar nadrukkelijk één van de online adressen te bezoeken alvorens Borland C++ te gebruiken. Er blijken aldaar twee patches aanwezig te zijn. Het uitvoeren van de eerste verloopt foutloos, al worden er beangstigend veel bestanden bijgewerkt. De tweede patch crasht echter direct. Een goede aanleiding dus om de oninstallatie te testen om er helemaal zeker van te zi jn dat er geen bestanden zijn beschadigd. Helaas, die faalt ook genadeloos. Helemaal opnieuw dan maar.

Uiteindelijk blijkt een verkeerd patch programma bij de tweede patch te zijn bijgevoegd. Met het zeer verontrustende aantal van 229 (!) bijgewerkte bestanden in de tweede patch wordt het installatieproces tenslotte afgerond. Een advies dus: bestudeer eerst uitvoerig de Borland C++ website voor informatie over veel voorkomende problemen. Jammer.

Documentatie

Borland C++ Class Browser. Borland C++ wordt geleverd met 9 centimeter aan handleidingen als Getting Started, Quick Tour, User’s Guide en Programmer’s Guide. Een praktische Tutorial onbreekt echter. Met 44 Mb in 48 online hulpbestanden wordt de documentatie gecomplementeerd. Rest nog de ontsluiting van deze geweldige hoeveelheid informatie. Hiervoor gebruikt Borland C++ de nieuwe standaard Windows Help, waarmee de volledige tekst doorzocht kan worden. Helaas, het overkoepelende hulpbestand OpenHelp is niet dusdanig geconfigureerd dat automatisch alle hulpbestanden doorzocht kunnen worden. Zo levert het zoeken naar het sleutelwoord ‘tutorial’ in eerste instantie geen relevante treffers op, terwijl er wel degelijk een hulpbestand met verwijzingen naar voorbeelden aanwezig is.

IDE

Algemeen

Borland C++ OWL ClassExpert en het Project Manager window. Het hart van de Borland C++ Integrated Development Environment (IDE) is het Project Manager Window, waarin alle project bestanden hierarchisch geschikt zijn. Deze hierachie kan vervolgens vrij eenvoudig gewijzigd of uitgebreid worden met nieuwe targets, of project doelen. Zo wordt dus volledige controle gegeven om source pools op te zetten, verzamelingen bronbestanden die door meerdere versies van de toepassing kunnen worden gedeeld. Via de rechter muisknop zijn altijd de belangrijkste commando’s binnen handbereik voor de geselecteerde knoop in de project hierarchie.

Borland C++ OWL ClassExpert, standaard editor window en het Message window. Vervelend is wel dat dit belangrijkste window geen speciale eigenschappen kan worden gegeven, zoals bijvoorbeeld een mogelijkheid tot ‘docking’ of ‘always on top’. Nu moet regelmatig gezocht worden naar dit window. De meest evidente tekortkoming van het Project Manager Window is echter wel het ontbreken van de geintegreerde mogelijkheid om het project te benaderen op basis van klassen informatie. De IDE beschikt namelijk wel over dergelijke functionaliteit in de ClassExpert, waarover elders meer, maar dit gereedschap is altijd minstens één ‘window away’.

ObjectScripting

Borland C++ 5.0 wordt geleverd met een prijsvraag! Het betreft de promotie van ObjectScripting, de scripttaal waarmee de IDE zélf volledig geprogrammeerd kan worden. Het bereikbaar maken van de volledige functionaliteit van de IDE voor aanpassingen en uitbreidingen door en voor gebruikers kan natuurlijk het gebruikersgemak vergroten, waardoor uiteindelijk de projectcyclus op een prettigere manier doorlopen zou kunnen worden. En in minder tijd misschien, dus tegen lagere projectkosten. Doel is natuurlijk door middel van de ObjectScripting Contest een aantal praktische toepassingen beschikbaar te kunnen stellen voor iedereen zonder dat Borland zelf daar t ijd, geld en creativiteit in hoeft te steken.

Borland C++ basis opties in AppExpert. Voor de hand liggende toepassingen zijn onder meer het aanpassen van bestaande en het toevoegen van nieuwe functionaliteit, het automatiseren van veel voorkomende vervelendheden zoals het importeren van standaard bibliotheken en dergelijke en het integreren van externe gereedschappen. Om de leerdrempel zo laag mogelijk te houden, wordt zelfs een aanzienlijke handleiding meegeleverd.

Java Add-on

De Borland C++ Development Suite IDE heeft verder een op dit moment nog uniek kenmerk: geintegreerde ondersteuning voor de ontwikkeling van Java applicaties en applets. Ideaal. Het leren werken binnen een IDE is namelijk niet de prettigste manier om je tijd door te brengen. Helemaal in het geval van het ontwikkelen van Java applicaties, wat tot voor kort op de command-line diende te gebeuren. Vooral de aanwezigheid van een geintegreerde debugger is natuurlijk een geschenk uit de hemel. Een verlaagde Java leerdrempel dus voor Borland C++ ontwikkelaars.

Gegevens

Producent: Borland.
Toepassing: Geintegreerde applicatie ontwikkeling in C++ en Java.
Minimale systeemeisen: PC met 486 processor, Window 95 of Windows NT 3.51, 16 Mb geheugen, 120 Mb voor een typische installatie, CD-ROM drive (floppy disk versie tegen meerprijs verkrijgbaar).
Prijs: F. 779 / Bfr. 14.250,
Upgrade: F. 399 / Bfr. 7.350,
Development Suite: F. 1079 / Bfr. 19.700,
Upgrade: F. 559 / Bfr. 10.200, exclusief BTW.
Leverancier: Borland Benelux, telefoon 020-5035100, fax 020-5035170.

Afbeeldingen

Borland C++ basis opties in AppExpert. Borland C++ OWL ClassExpert en het Project Manager window. Borland C++ OWL ClassExpert, standaard editor window en het Message window. Borland C++ Class Browser.


Kader: MFC versus OWL, Wizards versus Experts

MFC en OWL

C++ klassen verzamelingen als de Microsoft Foundation Classes (MFC) en de ObjectWindows Library (OWL) bieden een dusdanig omvangrijke functionaliteit dat ze eigenlijk geen klassen bibliotheken meer genoemd kunnen worden. Ze bevatten een hoge mate van volledigheid aan benodigde componenten voor het ontwikkelen van complete applicaties.

Beiden verschaffen een object-georienteerde abstractielaag over de meest frequent benodigde functiegroepen in de Windows API’s. De ontwikkelaar krijgt bovendien door de omkapseling en overerving een gestructureerd beeld van aanwezige functionaliteit in de Windows API’s.

Het gebruik van één van deze applicatie raamwerken leidt impliciet tot een hoge mate van standaardisatie in het ontwikkelen. Beide funderingen bieden bijvoorbeeld standaard het Document/View model, waar de gegevens bewaard en beheerd worden in het document object. Het laten zien en manipuleren van die gegevens wordt vervolgens verzorgd door het View object. Hierdoor is h et onder meer mogelijk om meerdere aanzichten te bieden op dezelfde gegevens.

Een andere overeenkomst is het gebruik van boodschapverwerkingssystemen, die Windows boodschappen automatisch doorsturen naar de juiste klasse methoden. In MFC zijn deze kenmerken bekend onder de naam ‘message maps’; in OWL worden ze ‘response tables’ genoemd. Een enorme vooruitgang vergeleken met traditionele Windows code, waar alle boodschappen in één functie werden opgevangen. Dit staat niet alleen object-georienteerd programmeren in de weg, maar kan bovendien uiteindelijk leiden tot technische onoverkomelijkheden.

De alsmaar toenemende complexiteit bij het ontwikkelen van software impliceert helaas dat er fouten in de uitvoering van applicaties kunnen optreden. Wie heeft immers nog nooit de intrigerende boodschap "GENERAL PROTECTION FAULT" op zijn scherm gehad? Om dit soort gebruikersonvriendelijkheden zo veel mogelijk te voorkomen, kunnen "exception handler" objecten worden gebruikt om foutgevoelige delen in de broncode te omsluiten. Een functie die een fout veroorzaakt, kan dan zo een nooduitgang worden verschaft. In het ergste geval zou de applicatie tenminste nog elegant afgebroken moeten kunnen worden. Zowel MFC als OWL bieden een aantal klassen die deze functionaliteit verzorgen.

Het toevoegen van OLE functionaliteit aan applicaties hoeft het programmeursgilde niet langer meer slapeloze nachten te bezorgen. Met MFC en OWL wordt OLE binnen handbereik gebracht doordat het gehele onderliggende Component Object Model (COM) ingekapseld is binnen een begrijpbare OLE object hiërarchie.

Ook bij het implementeren van database en internet applicaties schieten de raamwerken te hulp. Hoewel het gebruik en de achterliggende technologie ervan verschillen, kan wel degelijk hetzelfde doel worden bereikt.

Er zijn natuurlijk ook verschillen tussen MFC en OWL aan te wijzen in de onderliggende achitectuur en de aangeboden functionaliteit. Veel belangrijker is echter dat beide raamwerken een groot aantal identieke essentiële kenmerken delen, waarvan er hierboven slechts een klein aantal zijn genoemd. Het zijn twee volwassen producten, die beiden een dusdanig krachtig en flexibel raamwerk verschaffen dat de ontwikkelaar zich enkel nog op een consistente wijze met de applicatie-specifieke functionaliteit hoeft bezig te houden, zonder zich beperkt te voelen. Alles kan, en in veel gevallen nog eenvoudig ook. In het begin is alleen wel een flinke dosis volharding vereist voordat door de klassen het raamwerk te zien is.

Wizards En Experts

Programmeren voor Windows vereist geavanceerde gereedschappen die lastige en vervelende technische problemen voor hun rekening nemen, zoals het afvangen van object boodschappen en het automatisch up-to-date houden van de grafische objecten. Zowel Visual C++ als Borland C++ bieden hiervoor oplossingen, Microsoft zoals gewoonlijk met Wizards en Borland natuurlijk met Experts.

Dit zet echter wel een serie afhankelijkheden in werking, omdat deze geavanceerde gereedschappen uit moeten kunnen gaan van een gestroomlijnde en gestandaardiseerde fundering, zoals MFC en OWL. Dit heeft kortom tot gevolg dat de Wizards en Experts enkel bruikbaar zijn indien de applicatie gebaseerd is op het achterliggende applicatie raamwerk.

Aangezien de Wizards van Visual C++ MFC als fundering hebben en de Experts van Borland C++ OWL, is het niet mogelijk om een eenmaal ontwikkelde applicatie in een andere ontwikkelomgeving te importeren zonder de functionaliteit van de gereedschappen te verliezen. Visual C++ ondersteunt eenvoudigweg geen OWL; Borland C++ biedt gelukkig een compilatie optie die de C++ interpretatie dusdanig aanpast dat MFC code in ieder geval gebruikt kan worden.

Opzet

Algemeen

De belangrijkste reden om een applicatie raamwerk te gebruiken, is de mogelijkheid om zeer snel en eenvoudig Windows applicaties (.EXE), bibliotheken (.DLL) en dergelijke te kunnen opzetten. Aan het te generen project kan een groot aantal kenmerken worden toegewezen door opties aan te klikken, zodat een toegesneden geraamte voor de applicatie kan worden gegenereerd waaraan enkel (!) nog de applicatie-specifieke functionaliteit hoeft te worden toegevoegd.

Zo kan voor het type gebruikersinterface worden gekozen voor een Single Document Interface (SDI), Multiple Document Interface (MDI) of een dialoog-gebaseerde gebruikersinterface. Belangrijk is ook de mogelijkheid dat ieder mogelijk type OLE ondersteuning gekozen kan worden, zoals OLE Containers, OLE Servers en OLE Automation..

Zowel AppWizard als AppExpert bieden veel mogelijkheden om een snelle start te bewerkstelligen, al gaat AppWizard hierin wel iets verder.

AppWizard

De AppWizard in Visual C++ biedt tevens twee typen database ondersteuning. Er kan gekozen worden uit Open Database Connectivity (ODBC) en Data Access Objects (DAO). Bijzonder prettig is het overigens dat voor het genereren reeds gekozen kan worden voor een view die gebaseerd is op een Common Windows Control, zoals bijvoorbeeld de RichEditView voor standaard tekstverwerkingsfunctionaliteit. Control-gebaseerde views zijn omhulsels voor onafhankelijke standaard objecten die intern alle benodigde functionaliteit implementeren, zodat met weinig extra werk een volledige applicatie voor bijvoorbeeld geformatteerde tekstverwerking te realiseren is.

Het aantal uiteindelijk gegenereerde en geimporteerde bestanden kan oplopen tot een stuk of 30. Gelukkig wordt er tevens een ReadMe.txt bij gegenereerd, zodat even nagelezen kan worden wat er eigenlijk allema al gebeurd is. Tenslotte verloopt het genereren, compileren, linken en uitvoeren van het nieuw aangemaakte project foutloos.

AppExpert

AppExpert in Borland C++ biedt verder onder meer een optie om niet het gebruikelijke Document/View model te gebruiken.

Het aantal uiteindelijk gegenereerde en geimporteerde bestanden kan oplopen tot een stuk of 45, waaronder wel veel kleine bitmaps. Helaas wordt er geen ReadMe.txt bij gegenereerd, zodat in het Project Manager Window wel te zien is wat er gegenereerd is, maar niet waarom. Dit is voor nieuwe gebruikers natuurlijk wel lastig. Tenslotte verloopt het compileren van de hulpbestanden niet goed bij het gebruik van lange bestandsnamen. Dit is nogal frustrerend, aangezien wel expliciet voor de optie ‘lange bestandsnamen’ kan worden gekozen. Dit is te wijten aan het aanroepen van de oude Microsoft help compiler. Natuurlijk kan dit wel opgelost worden, maar gegenereerde code hoort gewoon in één keer volledig foutloos te compileren.

Uitzet

Algemeen

Indien een applicatie is opgezet met AppWizard of AppExpert, kan voor het implementeren van de applicatie-specifieke functionaliteit de hulp ingeroepen worden van een geavanceerd gereedschap als ClassWizard of ClassExpert. Hiermee kunnen dan onder meer eenvoudig de klasse gegevens worden bekeken, gewijzigd en uitgebreid.

Deze gereedschappen betekenen een enorme vereenvoudiging voor de implementatie, die veelal te herleiden is tot de ruime ondersteuning voor het doorverwijzen van object boodschappen naar klasse eigenschappen en methoden en het eenvoudig onderscheppen van hierarchisch hoger gedefinieerde virtuele functies.

Het gebruik van deze gereedschappen wordt pas echt een zegen indien OLE functionaliteit moet worden geimplementeerd. De ontwikkelaar wordt v rijwel geheel afgeschermd van de OLE rompslomp, zoals het bijhouden van het Object Definition Language bestand, en kan normaal gesproken volstaan met het definieren van de bloot te stellen methoden en eigenschappen.

ClassWizard

Interactie met ClassWizard vindt plaats via een modale dialoog box die uit vijf tabbladen bestaat, getiteld Message Maps, Member Variables, OLE Automation, OLE Events en Class Info.

Met ClassWizard kunnen niet alleen volledig nieuwe klassen worden afgeleid van een uitgebreide reeks basisklassen, maar tevens kunnen klassen worden gegenereerd op basis van OLE Type Libraries, waarin interface methoden kenbaar worden gemaakt. Op deze manier kunnen eenvoudig andere applicaties, zoals bijvoorbeeld Microsoft Excel, worden aangestuurd door te genereren C++ klasse. De OLE Control ondersteuning in ClassWizard is in principe identiek aan die voor OLE Automation.

Tenslotte is er nog de WizardBar, het kleine broertje van ClassWizard, dat zich altijd bovenaan de broncode bestanden bevindt. Hiermee kunnen sneller object boodschappen doorverwezen worden naar klasse methoden, wat een veel voorkomende actie is. Grootste beperking van de WizardBar is wel dat het een onderdeel is van het bronbestand en niet van het project, zodat het bijvoorbeeld niet mogelijk is om een andere klasse te selecteren.

ClassExpert

In tegenstelling tot ClassWizard is de functionaliteit van ClassExpert volledig geintegreerd met de daarbij behorende broncode. Het bestaat uit een edit window waarvan het bovenste deel is ingeruimd voor een overzicht van in het project gedefinieerde klassen en de daarop toepasbare methoden. Dit werkt bijzonder prettig.

ClassExpert houdt eigenlijk het midden tussen de uitgebreidere ClassWizard en de veel beperktere WizardBar in Visual C++. De integratie van deze Expert is ech ter grandioos. Via de rechter muisknop kan zo bijvoorbeeld heel eenvoudig OLE Automation methoden en eigenschappen worden toegevoegd zonder dat overgeschakeld moet worden naar een modale dialoog, waardoor de broncode tijdelijk onbereikbaar wordt.

Samenvatting

Conclusie

De twee besproken C++ ontwikkelomgevingen, Visual C++ 4.0 en Borland C++ 5.0, worden geleverd met enorme applicatie raamwerken, MFC en OWL, die object-georienteerde abstracties bieden over de meest relevante delen van de Windows API’s. Deze funderingen worden vervolgens benut door de in de ontwikkelomgeving geintegreerde hulpgereedschappen, Wizards en Experts, om het gebruik van deze raamwerken te vereenvoudigen en het niet-creatieve deel van de uit te voeren taken te automatiseren, zoals het opzetten van standaard projecten en het afvangen van object boodschappen.

Tussen de ontwikkelomgevingen zélf zijn er wel enige uiteen lopende tendenzen waar te nemen. De Visual C++ omgeving kent een enorm aantal configuratiemogelijkheden, die wel als typisch Microsoft mogen worden aangemerkt: full-screen, docking en customizable windows en toolbars overal. De gebruiker heeft volledige controle over de interface. De meer sobere Borland C++ omgeving is een andere richting ingeslagen; de omgeving zélf, en daarmee de bereikbare functionaliteit, is volledig aanpasbaar geworden. Bovendien heeft Borland C++ met de integratie van Java een mooie troef in handen.

Wat nu te kiezen? Beginners zijn beter af met Visual C++, omdat er meer zorg is besteed aan de documentatie en het meer en betere tutorials biedt. Indien het belangrijk is dat 16-bit applicaties geintegreerd ontwikkeld moeten kunnen worden, dan is Borland C++ weer een betere keuze. Bovendien kan MFC code gecompileerd worden in Borland C++, wat niet vice versa geldt. Aan de andere kant wordt MFC steeds meer besc houwd als het standaard C++ applicatie raamwerk. Enzovoorts. De één verdient een extra plusje hier, de ander een extra plusje daar.

Op punten

Functionaliteit : Visual C++ | Borland C++
Database toegang : J | J
Database rapportage : J | J
Client/server mogelijkheden : J | J
Koppeling naar andere talen : Assembly, C | Assembly, C; Java
OLE koppeling : J | J
Object gericht : J | J
Bedieningsgemak *** : **
Visueel programmeren | J/N : J/N
Compileren | J : J
Uitgebreidheid | *** : ***
Werkgemak | *** : **
32-bit | J : J
16-bit versie verkrijgbaar | Apart bijgevoegd Geintegreerd
Installatie generator : ** | ***
Potentiele snelheid applicaties : **** | ****
Leerbaarheid : *** | **
Geschiktheid voor beginners : ** | *
Geschiktheid voor gevorderden : *** | ***
Geschiktheid grote applicaties : *** | ***

Meningen

Wat vinden anderen eigenlijk? Microsoft of Borland? OWL of MFC? Deze vragen circuleren met grote regelmaat in de nieuwsgroepen die gewijd zijn aan MFC en OWL. Iedere posting veroorzaakt steevast een aanzienlijke thread, veel reacties dus.

Men lijkt het er wel over eens te zijn dat beide IDE’s zeer acceptabel zijn. Over het te gebruiken applicatie raamwerk verschillen de meningen nogal, wat niet geheel toevallig enigzins samenhangt met de nieuwsgroep waarin het artikel gepost wordt. De trend lijkt er echter wel te zijn dat in het geval van een reeds gemaakte keuze er geen enkele aanleiding is om over te schakelen. Mo et de keuze nog worden gemaakt, dan zou voor MFC gekozen kunnen worden omdat dit nu eenmaal de industrie standaard lijkt te zijn geworden. OWL geniet bij anderen echter weer de voorkeur.

Er zijn wel enkele regelmatig terugkerende elementen waar te nemen in de reacties op het dilemma. Zo wordt dikwijls de persoonlijke voorkeur als doorslaggevende factor benadrukt. Een ander argument werd onlangs aldus verwoord: "You'll hear a lot of strong arguments for one development tool or the other. But in the end, I find that it's the developer that makes more of a difference than any particular feature or advantage of a tool."