Publications‎ > ‎Software reviews‎ > ‎

C++ in de overgang

In de PCM van oktober 1996 bespraken we Microsoft Visual C++ 4.0 en Borland C++ 5.0, op dat moment de twee meest populaire C++ programmeeromgevingen voor het ontwikkelen van professionele Windows toepassingen. In die vergelijking werd duidelijk dat tussen deze twee ontwikkelomgevingen vooral veel gelijkenissen waren te vinden. Een pluspunt van Visual C++ 4.0 was toen echter dat deze gebruiksvriendelijker was dan Borland C++ 5.0.

Nu, amper een half jaar later, slaat Borland terug met C++ Builder, een echte Rapid Application Development (RAD) omgeving voor C++. Aan de basis van C++ Builder heeft echter niet Borland C++ gestaan, maar Borland’s meest recente kaskraker, Delphi.

Het Microsoft Visual C++ ontwikkelteam heeft echter ook niet stilgezeten en heeft versie 5.0 uitgebracht. Kortom, een nieuwe ronde tussen twee grootmachten in ontwikkelgereedschappen die een nieuwe bespreking waard is.

Microsoft Visual C++ 5.0 & Borland C++ Builder 1.0


Visual C++ 5.0

Microsoft Visual C++ 5.0 is de nieuwste versie van Microsoft’s vlaggeschip voor applicatie-ontwikkeling. Het is de opvolger van Visual C++ 4.0, die ten tijde van de introductie van Windows 95 uitkwam. Alleen ontwikkelaars die tevens het overigens nu afgeschafte abonnement op Visual C++ namen, konden sindsdien nog twee recentere versies ontvangen.

Visual C++ 5.0 is verkrijgbaar in drie smaken: The Learning Edition, The Professional Edition en The Enterprise Edition. We bespreken hier The Professional Edition om eens te bekijken wat Microsoft de afgelopen anderhalf jaar heeft uitgevoerd met Visual C++.

In stallatie

De allereerste indruk is niet best: de ReadMe op de CD-ROM heeft een omvang van 130 KB waarin een schrikbarende hoeveelheid ‘bekende problemen’ vermeld zijn! Toch maar verder gaan?

Zoals gebruikelijk bij C++ ontwikkelomgevingen wordt nogal wat ruimte van je harde schijf opgeeist. Visual C++ 5.0 vergt minimaal 50 MB, maar een complete configuratie inclusief de uitgebreide documentatie neemt 275 MB in beslag.

Nog steeds diskruimte over? Op de CD-ROM staan verder de DAO SDK en de OLE DB SDK. De Data Access Objects geven toegang tot de Microsoft Jet database engine; OLE DB definieert een verzameling interfaces waarmee diverse gegevensbronnen op een uniforme manier toegankelijk gemaakt kunnen worden via COM en bevat onder meer ODBC, de huidige standaard voor het benaderen van databases. Ook kunnen toepassingen eenvoudig gedistribueerd worden met het meegeleverde InstallShield 5.0 Free Edition.

Tenslotte wordt op de tweede CD-ROM een speciale editie van de bekende Microsoft Developer Network Library meegeleverd. Deze staat boordevol informatie, voorbeelden, artikels en hulpgereedschappen die eenvoudig benaderbaar zijn vanuit de Visual C++ ontwikkelomgeving.

Documentatie

De InfoViewer pagina in het WorkSpace Window van Visual C++ geeft toegang tot de uitgebreide HTML-gebaseerde documentatie. Nog geen Web browser? Geen probleem: het tot nu toe alom geroemde hulpsysteem van Visual C++ is namelijk vanaf versie 5.0 HTML-gebaseerd en gebruikt de WebBrowser Control, het ActiveX hart van Microsoft’s Internet Explorer, om de hulppagina’s te tonen. Vandaar dat Internet Explorer moet geinstalleerd worden om toegang tot de Visual C++ hulpbest anden te verkrijgen! Reden tot grote verontwaardiging natuurlijk bij alle Netscape gebruikers...

Dat het hulpsysteem HTML-gebaseerd is betekent echter niet dat er daadwerkelijk HTML bestanden zijn; ze zijn namelijk ingepakt in InfoViewer Title bestanden. Dit is natuurlijk hard nodig om nog met enige snelheid de gigantische hoeveelheid informatie te doorkruizen op zoek naar antwoorden. Aan die snelheid moet echter nog wel gewerkt worden. Vooral het vrije tekst zoeken kan nu onaangenaam lang duren. Bovendien zijn de treffer-markeringen verdwenen.

De opzet van de documentatie is nu meer taak-georienteerd. Zo leveren zoekopdrachten als "What do you want to" en "How do I" onvoorstelbaar veel pagina’s op, wat weer onaangenaam lang duurt.

Vergeleken met de vorige versie wordt vooral het context-menu gemist bovenin de InfoViewer, van waaruit ten alle tijde het overzicht en de functies van de klassen kon worden bereikt. Dit is nu vervangen door een standaard hyperlink aan het einde van de pagina, waardoor nu veel meer gescrolld moet worden.

Het zeer uitgebreide online hulpsysteem van Visual C++ heeft kortom een flinke facelift ondergaan, waarover de meningen nogal verdeeld mogen zijn in vergelijking met de vorige versie, maar ook deze nieuwste versie bevat weer een schat aan toegankelijke informatie. Dat mag trouwens ook wel, want papieren documentatie wordt nauwelijks meegeleverd.

Developer Studio 97

Inleiding

Het opstarten van Visual C++ duurt nogal lang, maar is het wachten wel waard. De werkruimte van Visual C++ is weer flink gereorganiseerd sinds de vorige versie en heet nu Developer Studio 97. Deze geintegreerde ontwikkelomgeving (IDE) wordt nu ook gebruikt als ontwikkelomgeving voor onder meer Visual J++ 1.1 en Visual InterDev. Het is de bedoeling dat ook met andere programmee rtalen vanuit Developer Studio gewerkt kan worden.

Afgezien van de buttons-nieuwe stijl, die voor het eerst te zien waren in Microsoft Internet Explorer en overigens nog steeds niet niet zonder veel moeite met Visual C++ gemaakt kunnen worden, valt bij een eerste blik vooral de menu balk op. Deze is nu gepromoveerd van een statisch object naar één van de vele toolbars. Een voordeel hiervan is dat het menu daarom nu ook verplaatsbaar is. Tel hierbij de mogelijkheid op om zelf nieuwe toolbars toe te voegen of bestaande toolbars aan te passen, en het is niet moeilijk om na enig experimenteren een visuele chaos teweeg te brengen. Gelukkig ontbreekt het Reset All commando dan ook niet.

Als eenmaal alle knoppen en commando’s op de juiste plek zitten, blijkt de Developer Studio omgeving echter nog meer moois te bevatten, namelijk aansturing via VBScript macro’s en ActiveX Add-in’s. Met Visual Basic Script kunnen veel voorkomende series van handelingen eenvoudig worden opgenomen en toegekend aan een knop of sneltoets. Add-in’s zijn ActiveX componenten waarmee Developer Studio programmatisch kan worden aangestuurd, aangepast of uitgebreid.

Werkwijze

In Visual C++ wordt het ontwikkelen van ActiveX controls zo makkelijk mogelijk gehouden. Visual C++ hanteert een voor C++ programmeurs inmiddels vertrouwde werkwijze waarin normaal gesproken de Microsoft Foundation Classes (MFC) met zijn Wizards een dwingende sleutelrol spelen. Het applicatieraamwerk dat door de code-generator AppWizard wordt opgelegd is gebaseerd op de document-view architectuur. In deze benadering worden de applicatie-gegevens beheerd door een document waarop vervolgens een view geimplementeerd wordt. De applicat ie-gebruiker ziet en manipuleert de gegevens vervolgens via deze view.

Gegevens worden veelal via door klassen definieerde Get/Set functieparen bewerkt. Zo kan een document klasse bijvoorbeeld de methode GetData beschikbaar stellen aan de view klasse, zodat deze het vervolgens kan tonen aan de gebruiker. Op dezelfde wijze zou deze document klasse natuurlijk ook de methode SetData kunnen definieren, zodat de view klasse een gewenste wijziging in de applicatie-gegevens kan laten bewaren door de document klasse. Het grote voordeel van deze splitsing is natuurlijk dat de view klasse niet het onderliggende formaat van de gegevens hoeft te weten; deze wordt beschermd door de document klasse. Applicatie-gegevens kunnen daarom eenvoudig worden gewijzigd zonder dat de view klasse aangepast hoeft te worden. De document-view architectuur kan dus de mate van onderhoudbaarheid aanzienlijk verhogen.

Wizards

Visual C++ biedt voor iedere soort toepassing een Wizard voor een snelle start. Aan AppWizard, de geavanceerde code-generator, zijn weer enkele nieuwe mogelijkheden toegevoegd. De twee meest opvallende zijn de DevStudio Add-in Wizard en de ATL COM Wizard. Hierboven was reeds te lezen waar de DevStudio Add-in Wizard voor gebruikt kan worden. De ATL COM Wizard is echter een belangrijk speerpunt geweest bij het ontwikkelen van Visual C++ 5.0. Deze vereenvoudigt het ontwikkelen van zeer snelle COM objecten met een minimale bestandsgrootte. Dit zijn natuurlijk precies die eigenschappen die vooral voor Internet controls van levensbelang zijn.

Vanuit ClassWizard kunnen alle klasse-gerelateerde taken worden uitgevoerd nadat een applicatie is gegenereerd met AppWizard. Er zijn pagina ’s voor Message Maps, Member Variables, Automation, ActiveX Events en Class Info. Vanuit de ClassWizard dialoog kan kortom allerlei boodschap-gebaseerde functionaliteit op Wizard wijze worden toegevoegd. Eenvoudige klassen die geen boodschappen gebruiken, zoals data- en hulpklassen, zijn dan ook niet bereikbaar.

In de praktijk wordt echter een aanzienlijk deel van ClassWizard’s functionaliteit nu overgenomen door de WizardBar. Dit is een speciale toolbar bestaande uit een mengeling van ClassWizard en ClassView functionalteit. Van hieruit kunnen alle klassen en functies bereikt worden, dus tevens klassen die geen Windows boodschappen verwerken. Hierdoor is het nu mogelijk om via de WizardBar button vanuit alle C++ implementatie bestanden naar de bijbehorende declaratie bestanden te springen en omgekeerd. Kortom, de WizardBar maakt het leven van de ontwikkelaar met enkele, op zich voor de hand liggende, uitbreidingen aanzienlijk aangenamer.

Project Workspace

In Visual C++ kan met zowel de WizardBar als het Workspace Window het project benaderd worden. Het Project Workspace Window is het hart van een Visual C++ project en bevat vier pagina’s: FileView, ClassView, ResourceView en InfoView. Met de eerste drie pagina’s kunnen alle onderdelen van het project benaderd worden, wat overigens ook subprojecten kunnen zijn. FileView laat de bronbestanden zien waaruit het project bestaat. Het is gelukkig weer mogelijk om zelf groepen te definieren, zodat het overzicht beter kan worden behouden bij grote projecten.

Deze functionaliteit is tevens toegevoegd aan ClassView, die verder ook uitgebreid is met extra commando’s in de context menu’s. Deze v erschaffen functionaliteit die voorheen enkel aan ClassWizard was voorbehouden. Zo is het nieuwe commando Add Windows Message Handler, waarmee een Windows boodschap kan worden afgevangen door de klasse, functioneel gelijk aan de eerste pagina van ClassWizard.

ResourceView geeft toegang tot de definities van dialogen, menu’s, sneltoetsen, teksten en versiebeheer. InfoView geeft tenslotte een hierarchische weergave van de documentatie. Deze laatste twee pagina’s zijn echter niet gewijzigd sinds de vorige versie van Visual C++.

Text Editor

Tijdens een debug-sessie in Visual C++ kunnen automatisch de relevante variabelen worden bekeken. De Text Editor kent nu een Advanced Edit commando-groep die vooral bij perfectionisten goed zal vallen. Hier zijn namelijk functies aan te roepen waarmee de broncode beter geformatteerd kan worden, zoals Tabify Selection, Format Selection and View WhiteSpaces.

Ook de mogelijkheid om de syntax kleuring van C++ sleutelwoorden uit breiden is nu goed gedocumenteerd. Nu was dit reeds mogelijk in de vorige versie, maar slechts weinig mensen wisten ervan. Het is nu kortom zeer eenvoudig geworden om bijvoorbeeld de MFC klassen of zelfgeschreven klassen in een aparte kleur te laten tonen.

Zoals al eerder vermeld wordt de Microsoft Internet Explorer WebBrowser Control gebruikt om de HTML-gebasserde documentatie te tonen. Het is dan eigenlijk ook niet eens meer zo verwonderlijk dat vanuit Developer Studio over het Internet gesurfd kan worden. Nog niet indrukwekkend genoeg? Ook deze bespreking is gedeeltelijk als Microsoft Word document binnen Developer Studio gemaakt... Olé!

MFC en ATL

De Microsoft Foundation Classes and Templates (MFC&T) bestaat uit een samenvoeging van de Microsoft Foundation Classes 4.2 (MFC) en de Active Template Library (ATL) 2.1.

MFC is het Windows applicatie raamwerk dat zich in de loop der jaren tot standaard heeft verheven, niet voor een onbelangrijk deel omdat MFC eenvoudigweg het meest wordt gebruikt. Uitbreidingen sinds versie 4.0 hebben vooral betrekking op het gebied van Internet programmeren. Klassennamen als CInternetSession en CHttpFile spreken dan ook voor zichzelf. Natuurlijk is er nu ook ondersteuning voor ActiveX documenten en ActiveX controls. Tenslotte zijn nog enkele handige hulpklassen toegevoegd. MFC is dus zogezegd helemaal bij de pinken.

ATL bestond nog niet in 1995 toen Visual C++ 4.0 uitkwam, maar is reeds toe aan versie 2.1. Dit vindt zijn oorzaak in Microsoft’s 540 graden koerswijziging met betrekking tot het Internet. ATL bestaat uit een verzameling sjabloon-gebaseerde C++ klassen waarmee het ontwikkelen van zeer snelle COM objecten met een minimale bestandsgrootte eenvoudiger wordt. Nou ja, relatief dan. Het implementeren van COM objecten is wel een stuk eenvoudiger geworden met behulp van de ATL bibliotheek en bijbehorende Wizards, maar een grondige kennis van COM blijft toch echt noodzakelijk om niet in paniek te raken. Maar ja, dat geldt natuurlijk in zekere zin ook voor MFC wat betreft de Win32 API.

Kiezen tussen MFC en ATL is overigens niet zo moeilijk: voor volledige Windows applicaties die gebruik maken van de document-view architectuur is MFC het aangewezen gereedschap. Kleine logische eenheden waarbij ook distributie een rol speelt, zouden met ATL kunnen worden geimplementeerd. En indien niet gekozen kan worden, kunnen beide bibliotheken bovendien ook nog tegelijkertijd worden gebruikt.

Conclusie

Kan Developer Studio 97 als geintegreerde ontwikkelomgeving eigenlijk nog wel verder verbeterd worden? Altijd natuurlijk, maar het verlanglijstje is wel een heel stuk korter geworden. Hoogtepunten zijn de toevoegingen van VBScript en Add-ins om Developer Studio te automatiseren, de sterk verbeterde WizardBar en de mogelijkheid tot het maken van sub-folders in het Project Workspace Window. Kortom, precies de toevoegingen die we in de PCM-bespreking van versie 4.0 nog het meest misten!

MFC is uitgebreid met klassen voor nieuwe technologieen zoals ActiveX en biedt ruime ondersteuning voor Internet programmeren. Bovendien wordt een nieuw alternatief geboden met ATL.

Een minpunt is wel het vernieuwde hulpsysteem dat wat langzamer is en minder functionaliteit biedt. Uitgebreid is het echter zeer zeker wel. Marketing-technisch gezien ligt verder het verplicht moeten installeren van de Microsoft Internet Explorer natuurlijk nogal gevoelig.

Al met al is Microsoft Visual C++ 5.0 voor huidige gebruikers van versie 4.0 of lager zeer zeker een upgrade waard.

Gegevens

Producent: Microsoft
Toepassing: 32-bit Windows applicatieontwikkeling in C++
Minimale systeemeisen: Intel 486DX/66 MHz; Windows 95, Windows NT 4.0; 20 MB geheugen; 175 MB harde schijf-ruimte.
Straatprijzen excl. BTW: Learning edition: Fl 231 / BFr 4250
Professional edition: Fl 1236 / BFr 22750
Enterprise edition: F 3012 / BFr 55000
Leverancier: Microsoft;Telefoon Nederland: +31-235689189
Telefoon België: +32-27303911

Afbeeldingen

De InfoViewer pagina in het WorkSpace Window van Visual C++ geeft toegang tot de uitgebreide HTML-gebaseer de documentatie. In Visual C++ wordt het ontwikkelen van ActiveX controls zo makkelijk mogelijk gehouden. Visual C++ biedt voor iedere soort toepassing een Wizard voor een snelle start. In Visual C++ kan met zowel de WizardBar als het Workspace Window het project benaderd worden. Tijdens een debug-sessie in Visual C++ kunnen automatisch de relevante variabelen worden bekeken.

C++ Builder 1.0

Borland C++ Builder is het is het nieuwe tweelingsbroertje van het zo succesvolle Borland Delphi. Het enige echte verschil is de programmeertaal die gebruikt wordt: Delphi doet het met Object Pascal en C++ Builder met C++, de industrie-standaard programmeertaal en de moedertaal van de Windows besturingssystemen.

C++ Builder is verkrijgbaar in drie smaken: The Standard Edition, The Professional Edition en The Client/Server Edition. We bespreken hier The Client/Server Edition en zijn benieuwd of Borland met C++ Builder het succesvolle Delphi RAD concept nu werkelijk in C++ heeft kunnen toepassen.

Installatie

Een volledige installati e van C++ Builder neemt 135 MB in beslag. Hierbij horen tevens enkele hulpmiddelen voor het ontwikkelen van database toepassingen, zoals de Database Desktop en de Borland Database Engine met SQL Links en ODBC Sockets. Natuurlijk ontbreekt ook een geintegreerd versie-controle systeem niet.

Bovendien bevat de CD-ROM versie de nieuwste versie van de InterBase Developer Client. De C++ Builder Client/Server Suite wordt zelfs geleverd met een speciale versie van de InterBase Server. Tenslotte wordt voor het distribueren van applicaties InstallShield Express C++ Builder Edition meegeleverd. Een volledig pakket dus.

Documentatie

In de vorige C++ bespreking van Borland C++ 5.0 behoorde de documentatie helaas nog tot de minpunten, wat de leercurve verhoogde. In C++ Builder is aan dit punt gelukkig al iets beter aandacht besteed. De mogelijkheden van het standaard Windows Help systeem worden goed uitgebuit. Zo kan bijvoorbeeld via de Book Shelf button direct toegang tot alle geconfigureerde hulpbestanden worden verkregen, waaronder een eenvoudige database-georienteerde tutorial. Met het OpenHelp hulpprogramma kan bovendien de inhoud van de Book Shelf worden aangepast en uitgebreid.

De standaardisering van het hulpsysteem is echter wel wat te ver doorgevoerd. Zo is op iedere pagina een "See Also" verwijzing te vinden, terwijl die er soms helemaal niet is. Dit leidt dan steevast tot de boodschap "No Additional information is available". Een ander minpunt is de zeer schaarse hoeveelheid in de documentatie geintegreerde broncode voorbeelden. Voor de TStringGrid component bestaat zelfs in het geheel geen documentatie.

De papieren documentatie ziet er prima uit. Een flink aantal handleidingen, die voor een groot deel tevens terug te vinden zijn in het online Hulpsysteem, geeft in het begin toch een betere grip op de materie. En met de C++ Builder verzameling kun je wel even vooruit.

Ontwikkelomgeving

Inleiding

Ook Wizards ontbreken niet in C++ Builder. De C++ Builder ontwikkelomgeving is vrijwel identiek aan Delphi en Visual Basic, zodat een groot aantal mensen meteen met C++ Builder aan de slag kan. In tegenstelling tot de meeste andere C++ omgevingen is dus niet gekozen voor een gesloten MDI werkruimte waarbinnen alle ontwikkelactiviteiten plaatsvinden, maar voor een open interface waarbij de C++ Builder vensters vrij op de desktop geplaatst kunnen worden. De standaard C++ Builder onderdelen zijn de Code Editor, de Object Inspector, de Form Designer en het Main Window.

Main Window

Het Main Window is een drie-eenheid dat uit het menu, de toolbar en het Component Palette bestaat. Vanuit dit window kan het project bestuurd worden en zijn de hulpgereedschappen bereikbaar. De Project Manager bijvoorbeeld toont de bronbestanden waaruit het project bestaat en geeft toegang tot de configuratie opties, die overigens niet echt uitgebreid zijn maar in veel gevallen wel zullen voldoen.

Ook de vele database gereedschappen zijn eenvoudig bereikbaar. Naast de Database Desktop en de Database Explorer hulpprogramma’s biedt de Client/Server Suite bovendien onder meer een SQL Monitor, Visual Query Builder, Data Dictionary en een Database Form Wizard. Met deze hulpgereedschappen wordt het opzetten, ontwikkelen en testen van database-georienteerde toepassingen dus aanzienlijk vereenvoudigd.

In het Image Editor hulpprogramma bijken overigens nog niet alle Delphi sporen te zijn uitgewist. Hoewel de About dialoog vermeldt dat het hier om de C++ Builder Image Editor gaat, luidt de hoofdtitel van het bijbehorende Hulpbestand "The Delphi Image Editor".

C++ Builder kent geen Resource Editor hulpgereedschap. Die traditionele scheiding is met deze RAD omgeving verdwenen. Het aanmaken van bijvoorbeeld string tabellen om woorden uit de natuurlijke taal te scheiden van de programmacode, is niet meer van toepassing. Alle woorden worden ingegeven in de Object Inspector en vervolgens opgeslagen in zogenaamde DFM bestanden. Internationalisatie van toepassingen kan daarom worden bereikt door de DFM bestanden te vertalen. Aangezien in dergelijke bestanden echter de volledige Form definitie staat, is dit niet echt een elegante oplossing.

Component Palette

Zonder een groot arsenaal aan toegankelijke componenten is het nu eenmaal niet mogelijk om met de RAD methode te ontwikkelen. C++ Builder wordt dan ook geleverd met meer dan honderd direct te gebruiken componenten die via het Component Palette te benaderen zijn. Dankzij de pagina indeling van het palet zijn de componenten goed gecategoriseerd en neemt het geheel bovendien weinig schermruimte in beslag.

De inhoud van een database is in de ontwerpfase al te zien in C++ Builder. Vanzelfsprekend zijn er kant-en-klare componenten voor alle Windows controls en standaard dialogen. Ook systeem objecten als een Timer, MediaPlayer, OLE Container en DDE conversatie componenten ontbreken niet. De grote kracht van C++ Builder is echter het bijzonder uitgebreide arsenaal aan kant-en-klare database functionaliteit. Er zijn sessie, database, tabel, query en procedure componenten en een volledige verzameling onderdelen om de interface naar de database objecten aan de gebruiker te tonen. Bovendien worden QuickReport componenten van QuSoft meegeleverd, zodat tevens op eenvoudige wijze database rapportages kunnen worden aangemaakt. Hiervan is overigens alleen de objectcode meegeleverd en de documentatie is niet geintegreerd met C++ Builder.

Tenslotte kunnen eenvoudig ActiveX controls worden toegevoegd aan de ActiveX pagina op het Component Palette. Standaard worden de NetManage controls voor Internet oplossingen meegeleverd, maar ook componenten voor visualisatie van gegevens en spellingscontrole ontbreken niet.

Form Designer

Een Form of formulier is eigenlijk een container waar objecten van het Component Palette naartoe gesleept kunnen worden waarna ze gebruikt kunnen worden in de toepassing.

Componenten zijn iconische metaforen voor functionele eenheden en hoeven dus niet zichtbaar te zijn in de uiteindelijke applicatie. Een button is bijvoorbeeld een zichtbare component; een database connectie is een voorbeeld van een onzichtbare component die alleen in de ontwerpfase visueel wordt gerepresenteerd door een icoon.

In meer traditionele C++ ontwikkelomgevingen lijkt een Form nog het meest op een dialoog sjabloon. Het grote voordeel van een Form is echter dat er visueel mee wordt geprogrammeerd, terwijl een dialoog sjabloon slechts visueel wordt geprepareerd, waarna de bijbehorende code handmatig moet worden toegevoegd. Om die toevoegingen te controleren op juistheid, moet de applicatie dan echter eerst worden gecompileerd en gelinkt. In C++ Builder kunnen veel eigenschappen van componenten eenvoudigweg worden gekozen in de Object Inspector en zijn de resultaten daarvan direct te zien. Lekker RAD gaat dat.

Object Inspector

Het op dit formulier gesleepte TTimer object kan ingesteld worden in C++ Builder's Object Inspector. De Object Inspector bestaat uit twee pagina’s. Standaard wordt deze geopend op de Properties pagina. Hier kunnen tijdens het ontwerpen de meeste eigenschappen van de op het Form geplaatste objecten worden ingesteld. De Events pagina geeft toegang tot de Windows boodschappen die de component kan verwerken. Zo kunnen de overige eigenschappen in de bijbehorende broncode worden geimplementeerd die niet in de ontwerpfase kunnen worden gekozen.

Code Editor

De Code Editor bestaat uit één window waarin ieder tekst document als afzonderlijke pagina wordt geopend. Deze manier zorgt ervoor dat het openen van meerdere brondocumenten niet resulteert in een enorme chaos op het scherm. Via het context-menu kunnen per document de meest voorkomende commando’s worden uitgevoerd, zoals het openen van het bijbehorende C++ declaratie- of implementatiebestand. Vreemd genoeg ontbreken in dit menu echter de Cut-Copy-Paste opdrachten, de meest voor de hand liggende commando’s in een tekstverwerker.

Object Repository

De Forms pagina in de New Items dialoog van C++ Builder geeft toegang tot de herbruikbare formulieren in de Object Repository en kunnen gekopieerd, afgeleid of direct gebruikt worden. Een flinke verzameling kant-en-klare componenten is zich nog geen garantie voor het succesvol toepassen van de RAD methode. Hergebruik van eenmaal ontwikkelde applicatie-onderdelen is op langere termijn veel belangrijker . In C++ Builder wordt aan deze eis tegemoet gekomen met de Object Repository, de centrale opslagplaats voor herbruikbare C++ Builder componenten.

Het toevoegen van bestaande componenten aan de huidige toepassing bebeurt via de New Items dialoogbox. Deze toont de inhoud van de Object Repository per pagina. Standaard kan reeds uit een redelijk aantal herbruikbare componenten worden gekozen, die varieren van eenvoudige Thread Objecten tot volledige Windows 95 applicatie sjablonen. De Object Repository fungeert kortom niet alleen als opslagplaats voor herbruikbare programma-onderdelen, maar ook als component en applicatie Wizard.

De kracht van de Object Repository ligt in de flexibiliteit waarmee de componenten zijn te hergebruiken. Er kan namelijk niet alleen voor worden gekozen om het onderdeel simpelweg te kopieren naar de huidige toepassing, maar ook is het mogelijk om de nieuwe component af te leiden, waardoor latere wijzigingen aan het sjabloon object automatisch worden doorgevoerd naar de nieuwe klasse, terwijl applicatie-specifieke aanpassingen in de afgeleide component geen invloed op het basis object hebben. Tenslotte kan ook de component in de Object Repository zélf worden hergebruikt.

VCL

De Visual Component Library (VCL) is de in Delphi reeds beproefde klassen blibliotheek. In de VCL naslagwerken zijn dan ook meer referenties naar Delphi te vinden dan naar C++ Builder. Het zou daarom duidelijker geweest zijn indien men voor deze eerste versie van C++ Builder gewoon nog geen poging had ondernomen om alle voorkomens van het woord Delphi te vervangen door C++ Builder.

Tenslotte ís VCL geschreven in Delphi Object Pascal waaroverheen een C++ type vertalingsmap is gelegd. Het is dan ook eigenlijk niet verwonderlijk dat Delphi code gewoon gebruikt kan worden in C++ Builder. Het compileren van Pascal code gebeurt namelijk met een aangepaste versie van de Borland Delphi compiler die meegeleverd wordt met C++ Builder. Vervolgens wordt een C++ declaratiebestand aangemaakt dat de C++ vertaling van de Object Pascal code bevat. De overstap van Delphi naar C++ Builder is dus triviaal.

Een debug sessie in Delphi uh… C++ Builder met de Debug Inspector. Tijdens een serieuze debugsessie kan overigens een leuk bijeffect worden meegemaakt. Of had u al eens eerder in één debugsessie tussen C++ en Pascal heen en weer gestapt?

Borland beschouwt VCL als de volgende generatie klassenblibliotheek. Zo worden bijvoorbeeld de Microsoft Foundation Classes (MFC) en Borland’s eigen Object Windows Library (OWL) al "legacy" code genoemd. Wat de toekomst OWL te bieden heeft, laat zich dan ook raden...

Het is overigens wel mogelijk om MFC of OWL te combineren met VCL. Hercompilatie van deze bibliotheken met de C++ Builder compiler is dan echter wel noodzakelijk. Voor MFC geldt bovendien dat de door Borland geprepareerde MFC versie gebruikt dient te worden. Deze speciale versie wordt geleverd bij Borland C++ 5.01 en later.

Overigens kan het ook andersom. C++ Builder Forms kunnen geimporteerd worden in MFC of OWL applicaties. Ook hiervoor geldt echter dat delen van de bibliotheken opnieuw moeten worden gecompileerd en enkele andere rare fratsen moeten worden uitgehaald. Hoewel het dus mogelijk is de bibliotheken te combineren, mag wel worden geconcludeerd: "bezint eer ge begint!"

Van klasse naar component

Borland’s Visual Component Library (VCL) biedt applicatie-ontwikkelaars de mogelijkheid tot een hogere graad van object inkapseling waardoor een component bovendien visueel manipuleerbaar w ordt vanuit de C++ Builder Object Inspector. Deze benadering is behalve aangenamer ook minder foutgevoelig. Met de muis worden nu eenmaal minder typefouten gemaakt. Er moet echter vanzelfsprekend wel extra werk worden verricht om van een zelfgemaakte klasse een C++ Builder component te maken die bereikbaar is via de Object Inspector.

Een component is namelijk gebaseerd op het Property-Method-Event (PME) model en bezit een aantal eigenschappen waardoor het zich in een bepaalde staat bevindt. Een klasse daarentegen is gebaseerd op Get/Set functieparen waarmee de klasse-data kan worden gelezen of geschreven. In C++ Builder kan een klasse promoveren door een extra abstractielaag toe te voegen. Een klasse kan eigenschappen publiceren met behulp van het "__published" sleutelwoord door Get/Set functieparen aan één eigenschap te koppelen. Deze gepubliceerde eigenschappen zijn vervolgens manipuleerbaar in de Object Inspector.

Bovendien dienen er nog enkele extra stappen gevolgd te worden die van een meer huishoudelijke aard zijn. Zo moet de klasse direct of indirect zijn afgeleid van TComponent, de basisklasse voor alle componenten. Bovendien moet er nog een registratiefunctie worden geschreven. Dit is nodig aangezien C++ Builder moet weten waar de component opgenomen dient te worden in het Component Palette. Tenslotte moet alle bron- en objectcode verplaatst worden naar de Library folder van C++ Builder, zodat de nieuwe component daadwerkelijk kan worden geinstalleerd.

Conclusie

Borland heeft met het nieuwe C++ Builder een echte RAD omgeving afgeleverd die gebaseerd is op de industrie-standaard programmeertaal C++. Opmerkelijk genoeg is VCL, de klassenbibliotheek die ten grondslag ligt aan C++ Builder, niet in C++ geschreven maar in Object Pascal. VCL is dan ook oorspronkelijk ontworpen voor Borland Delphi. Aangezien ook de uitstekende interface een volledige kopie is van Delphi, kan eenvoudigweg worden gesteld dat C++ Builder eenvoudigweg Delphi ís, waarmee echter met C++ gewerkt wordt. Een pluspunt is dan ook dat reeds opgedane Delphi kennis direct toepasbaar is in C++ Builder.

De Object Repository vormt een krachtige en flexibele basis, vooral omdat gekozen kan worden op welke wijze componenten worden hergebruikt. Hoogtepunt in de direct te gebruiken componenten is de ondersteuning voor database toepassingen.

Met C++ Builder kan kortom daadwerkelijk visueel worden ontwikkeld in C++, wat automatisch inhoudt dat de leerdrempel bijzonder laag is voor een C++ ontwikkelomgeving. Bovendien is goed nagedacht over het herbruik van code. Het kan dan ook niet anders of C++ Builder moet wel een echte kaskraker worden.

Gegevens

Produkt: C++ Builder 1.0
Producent: Borland
Toepassing: 32-bit Windows applicatieontwikkeling in C++
Minimale systeemeisen: Intel 486 processor; Windows 95, Windows NT 3.51; 16 MB geheugen; 130 MB harde schijf-ruimte.
Adviesprijzen excl. BTW: Standard edition: Fl 209 / BFr 3850Professional edition: Fl 1499 / BFr 27500, Client/Server edition: Fl 4850 / BFr 89000
Leverancier: Borland;Telefoon Nederland en België: +31-205035100

Afbeeldingen

Ook Wizards ontbreken niet in C++ Builder. De inhoud van een database is in de ontwerpfase al te zien in C++ Builder. Het op dit formulier gesleepte TTimer object kan ingesteld worden in C++ Builder's Object Inspector. De Forms pagina in de New Items dialoog van C++ Builder geeft toegang tot de herbruikbare formulieren in de Object Repository en kunnen gekopieerd, afgeleid of direct gebruikt worden. Een debug sessie in Delphi uh… C++ Builder met de Debug Inspector. Samenvatting

Microsoft Visual C++ 5.0 en Borland C++ Builder 1.0 zijn twee programmeeromgevingen die het ontwikkelen van toepassingen in C++ voor de 32-bits Windows besturingssystemen vanuit een verschillend perspectief benaderen.

Visual C++ hanteert een voor C++ programmeurs inmiddels vertrouwde werkwijze waarin de zeer complete MFC en ATL bibliotheken met bijbehorende Wizards een sleutelrol spelen. Uitgangspunten zijn geavanceerde code-generatie, het expliciet creëren en afleiden van klassen die veelal via Get/Set functieparen bewerkt worden en een standaard document-view applicatie architectuur. Deze benadering is met Visual C++ 5.0 in hoge mate geperfectioneerd.

C++ Builder biedt een verfrissende nieuwe invalshoek. Een applicatieraamwerk in VCL kan uit veel minder code bestaan door zo veel mogelijk bestaande componenten te combineren, die eigenschappen bezitten en op visuele wijze kunnen worden samengevoegd op formulieren. In dit property-method-event progr ammeermodel vormt de verzameling formulieren de uiteindelijke applicatie. Het zelf ontwikkelen van componenten betekent echter wel dat een extra abstractielaag aan de klassen toegevoegd moet worden.

Voor het ontwikkelen van uitgebreide 32-bits Windows applicaties met OLE functionaliteit of voor snelle lichtgewicht COM objecten waarbij Internet distributie een rol speelt, is Visual C++ met MFC of ATL nog altijd op afstand de beste keuze.

Voor meer standaard 32-bits applicaties, en in het bijzonder database client programma’s, waarbij vooral de ontwikkelsnelheid een cruciale rol speelt, lijkt C++ Builder echter moeilijk te verslaan. Zeker voor al die mensen voor wie C++ op dit moment nog geen gesneden koek is.

Kaders

C++ 97

Niet alleen de C++ ontwikkelomgevingen evolueren, ook de C++ programmeertaal is weer een stap dichterbij standaardisering. Op 2 december 1996 is namelijk de tweede ISO-ANSI C++ werkversie beschikbaar gekomen. Het is de bedoeling dat de complete versie in november 1997 gereed is. De officiele publicatie is tenslotte gepland in augustus 1998.

Deze verdergaande standaardisering van C++ is ook terug te vinden in de compilers van Microsoft Visual C++ en Borland C++ Builder. Beiden hebben hun woordenschat verder uitgebreid met de C++ sleutelwoorden bool, explicit, mutable en typename. Bovendien bieden beide omgevingen een vernieuwde implementatie van de Standard C++ Library.

Meer informatie

Visual C++ homepage: www.microsoft.com/visualc/
Visual C++ nieuwsgroepen: comp.os.ms-windows.programmer.tools.mfc microsoft.public.vc.mfc
C++ Builder homepage: www.borland.com/bcppbuilder/
ISO-ANSI C++ Standaard: www.cygnus.com/misc/wp/
ISO-ANSI C++ FAQ: reality.sgi.com/employees/austern_mti/std-c++/faq.html
ISO-ANSI C++ Nieuwsgroep: comp.std.c++

Comments