W niniejszym rozdziale przedstawimy ogólny zarys Delphi — jego historię, możliwości poszczególnych wersji, przydatność do tworzenia programów dla Windows oraz inne informacje, które mogą być pomocne każdemu projektantowi. Zajmiemy się także kilkoma interesującymi funkcjami IDE; niektóre nie są znane nawet doświadczonym projektantom.
Zadaniem tego rozdziału nie jest jednak nauka tworzenia aplikacji w Delphi od podstaw — staraliśmy się unikać powtarzania informacji powszechnie dostępnych w dokumentacji, stawiając raczej na metodykę wykorzystania istniejących mechanizmów, wypracowaną przez lata naszych doświadczeń z Delphi. Niewątpliwie skorzystają na tym doświadczeni projektanci — początkującym proponujemy natomiast rozpoczęcie lektury od dokumentacji Delphi i stopniowe poznawanie funkcjonowania IDE oraz ogólnych zasad tworzenia aplikacji na prostych przykładach; zdobycie niezbędnego doświadczenia będzie tylko kwestią czasu.
Delphi 6 występuje w trzech różnych wersjach: Delphi 6 Personal, Delphi 6 Professional i Delphi 6 Enterprise. Każda z tych wersji adresowana jest do innej grupy projektantów, charakteryzujących się określonymi potrzebami.
Delphi 6 Personal jest wersją podstawową i najbardziej ograniczoną. Zawiera wszystko, co niezbędne do rozpoczęcia nauki Delphi i jest idealna dla hobbystów oraz twórców prostych programów narzędziowych na potrzeby własne. Techniczne możliwości tej wersji są następujące:
· optymalizujący 32-bitowy kompilator Object Pascala, oferujący wiele nowych i ulepszonych elementów języka;
· biblioteka VCL (Visual Component Library), zawierająca ponad 85 standardowych komponentów;
· obsługa pakietów, umożliwiająca tworzenie małych rozmiarowo aplikacji i bibliotek komponentów;
· zintegrowane środowisko IDE zawierające edytor, debugger, projektanta formularzy i wiele innych produktywnych narzędzi;
· rozszerzenia IDE, m.in. wizualne dziedziczenie formularzy (Visual Form Inheritance), hierarchiczny podgląd obiektów (Object TreeView), uzupełnianie klas (Class Completion), Code Insight itp.
· pełna obsługa Win32 API, włącznie z COM, GDI DirectX, wielowątkowością i różnymi pakietami SDK (Software Development Kits) Microsoftu i innych wytwórców.
Licencja związana z wersją Personal nie zezwala na komercyjną dystrybucję aplikacji stworzonych za jej pomocą; mogą być one wykorzystywane tylko do użytku osobistego.
Wersja Delphi 6 Professional adresowana jest do tych profesjonalnych projektantów, dla których zbędne są zaawansowane mechanizmy typowe dla aplikacji korporacyjnych (enterprise level). Zawiera ona wszystkie mechanizmy wersji Personal , a ponadto:
· ponad 255 standardowych komponentów VCL;
· ponad 160 komponentów CLX na potrzeby aplikacji międzyplatformowych — dla Windows i Linuksa;
· obsługę baz danych — m.in. podsystem DataCLX, kontrolki bazodanowe, komponenty i sterowniki międzyplatformowe dbExpress, Active DataX Objects (ADO), Borland Database Engine (BDE) dla kompatybilności z wcześniejszymi wersjami Delphi, mechanizm tzw. wirtualnego zbioru danych (virtual dataset) umożliwiający integrację różnorodnych typów baz danych z VCL, Database Explorer, repozytorium danych i rodzime komponenty InterBase (InterBase Express);
· sterowniki InterBase i MySQL dla dbExpress;
· implementację architektury DataCLX (poprzednio znanej jako MIDAS) z lokalną maszyną danych MyBase opartą na XML-u;
· kreatory do tworzenia komponentów COM/COM+, takich jak kontrolki ActiveX, formularze aktywne (ActiveForms), serwery automatyzacji, arkusze właściwości i komponenty transakcyjne;
· różnorodność narzędzi i komponentów niezależnych wytwórców, m.in. narzędzia internetowe INDY, komponenty raportujące QuickReport, komponenty prezentacji graficznej TeeChart i komponenty internetowe FastNet firmy NetMasters;
· serwer bazy danych InterBase 6 z licencją na 5 użytkowników;
· narzędzie dystrybucji sieciowej kontrolek ActiveX (Web Deployment);
· narzędzie do instalacji aplikacji — InstallSHIELD MSI Light;
· interfejs OpenTools API umożliwiający samodzielną rozbudowę funkcjonalności IDE i dostarczający interfejsu dla systemu kontroli wersji PVCS;
· narzędzia i komponenty NetCLX WebBroker umożliwiające tworzenie internetowych aplikacji międzyplatformowych;
· kod źródłowy bibliotek VCL, CLX, RTL i edytorów właściwości.
Zgodnie z licencją, aplikacje stworzone za pomocą wersji Professional mogą być rozpowszechniane w sposób komercyjny.
Delphi 6 Enterprise to wersja najbardziej rozbudowana, przeznaczona dla projektantów tworzących aplikacje na szczeblu przedsiębiorstwa (enterprise level). Oprócz mechanizmów dostępnych w wersjach Personal i Professional zawiera także:
· ponad 300 standardowych komponentów VCL;
· obsługę technologii BizSnap umożliwiającej tworzenie aplikacji opartych na języku XML oraz usług sieciowych (Web Services);
· platformę projektową WebSnap pozwalającą na integrację XML-a i technik skryptowych z aplikacjami internetowymi;
· implementację specyfikacji CORBA na potrzeby tworzenia aplikacji klientów i serwerów, wraz z VisiBrokerem ORB w wersji 4.0x oraz Borland APP Serverem w wersji 4.5;
· oprogramowanie TeamSource zapewniające kontrolę wersji kodu źródłowego na podstawie różnorodnych mechanizmów, m.in. ZIP i PVCS;
· narzędzia umożliwiające łatwą zmianę wersji językowej i lokalizację aplikacji;
· rodzime sterowniki SQLLinks BDE dla serwerów Oracle, MS SQL Server, InterBase, Informix, Sybase i DB2;
· sterowniki Oracle i DB2 dla dbExpress;
· zaawansowane narzędzia tworzenia aplikacji opartych na SQL-u, m.in. SQL Explorer, SQL Monitor, SQL Builder i obsługa kolumn abstrakcyjnych typów danych (ADT) w przeglądarce tabelarycznej.
Podobnie jak w przypadku wersji Professional, licencja zezwala na komercyjną dystrybucję aplikacji stworzonych za pomocą wersji Enterprise.
Na często zadawane pytania w rodzaju „Co czyni Delphi tak dobrym?” oraz „Dlaczego powinienem raczej wybrać Delphi niż …?” wypracowaliśmy przez lata dwie odpowiedzi: krótką i długą. Krótka odpowiedź brzmi „produktywność” — prostotę i szybkość tworzenia programów dla Windows za pomocą Delphi naprawdę trudno przecenić.
Komu ta lakoniczna odpowiedź nie wystarczy, musi cierpliwie wysłuchać odpowiedzi długiej, wymieniającej pięć najważniejszych cech, które decydują o potędze Delphi — oto one:
· komfort wizualnego projektowania aplikacji,
· szybkość kompilacji kontra efektywność generowanego kodu,
· możliwości języka programowania w kontekście jego złożoności,
· elastyczność i skalowalność architektury baz danych,
· wzorce projektowania i użytkowania wymuszone przez strukturę środowiska.
Cechy te zestawiliśmy w postaci pięcioramiennego diagramu przedstawionego na rysunku 1.1.
Rysunek 1.1. Graf produktywności Delphi
Mimo iż powyższe kryteria wybrane zostały cokolwiek subiektywnie i nie uwzględniają kilku istotnych czynników, jak np. instalacja i rozpowszechnianie gotowych aplikacji, dokumentacja, czy wykorzystanie produktów niezależnych wytwórców, są jednak wystarczająco przekonujące. Ponieważ każde z przedstawionych kryteriów może mieć różną wagę dla różnych projektantów, proponujemy wykonanie prostego eksperymentu: należy na każdej z pięciu osi z rysunku 1.1 umieścić punkt odległy od środka diagramu proporcjonalnie do istotności cechy reprezentowanej przez daną oś; łącząc poszczególne punkty liniami, otrzymamy pięciokąt — im większe jego pole, tym większa przydatność Delphi dla konkretnego czytelnika.
Środowisko wizualnego projektowania aplikacji narzędzi typu RAD można zasadniczo podzielić na trzy współpracujące ze sobą elementy: edytor, debugger i projektant formularzy. I tak, w miarę umieszczania na formularzu kolejnych komponentów, Delphi generuje automatycznie związany z tym kod źródłowy; kod ten można następnie modyfikować i (lub) uzupełniać za pomocą edytora, zaś po skompletowaniu można go skompilować, uruchomić i śledzić za pomocą zintegrowanego debuggera.
Edytor Delphi wyposażony jest w kilka użytecznych mechanizmów, z których bodaj najbardziej spektakularnym jest CodeInsight, pozwalający zaoszczędzić czas poświęcony na wpisywanie z klawiatury; mechanizm ten opiera swe działanie na informacji uzyskiwanej z kompilatora (w przeciwieństwie do Visual Basica, pobierającego analogiczną informację z odpowiedniej biblioteki), co czyni go użytecznym w wielu różnych sytuacjach. Chociaż domyślne ustawienia edytora Delphi są w pełni zadowalające, wielu użytkowników preferuje ustawienia charakterystyczne dla Visual Studio jako bardziej konfigurowalne.
Zintegrowany debugger ostatnich wersji Delphi łączy w sobie cechy Visual Studio z zaawansowanymi mechanizmami w rodzaju zdalnego śledzenia, dołączania procesu, śledzenia pakietów i bibliotek DLL pod nadzorem aplikacji wywołującej, obserwacji wykonywanego kodu maszynowego i rejestrów itp. Komfortu pracy dopełnia możliwość ustalania dogodnego układu okien (z wykorzystaniem dokowania) i zapisywania tych ustawień w postaci nazwanych schematów. Ze zrozumiałych względów brak jest natomiast w Delphi możliwości zmiany kodu aplikacji w trakcie jej wykonywania, charakterystycznej dla środowisk interpretowanych w rodzaju Visual Basica czy niektórych narzędzi Javy — w środowisku wykonującym „rasową” kompilację zaimplementowanie czegoś takiego z pewnością byłoby niezmiernie trudne.
Projektant formularzy jest nieodłączną częścią środowisk typu RAD — Delphi, Visual Basica, C++Buildera i PowerBuildera. Wcześniejsze, „klasyczne” środowiska projektowe, jak Visual C++ czy Borland C++, zorientowane są raczej na edytory dialogowe, te zaś nie posiadają zdolności tak ścisłego integrowania z pozostałymi elementami środowiska jak projektant formularzy. Brak tego ostatniego w wyraźny sposób wpływa ujemnie na ogólną produktywność całego narzędzia — wszak jednym z elementów diagramu na rysunku 1.1 jest właśnie projektowanie wizualne.
Przez ostatnie lata Delphi i Visual Basic prześcigały się w coraz to nowych pomysłach ulepszania projektanta formularzy, lecz pod jednym przynajmniej względem Visual Basic nie jest w stanie zdystansować swego konkurenta. Otóż Delphi stworzone zostało od początku w architekturze zorientowanej obiektowo, a to pociąga za sobą niebagatelne konsekwencje praktyczne w postaci zjawiska zwanego wizualnym dziedziczeniem formularzy (Visual Form Inheritance): wszelkie zmiany, wprowadzone do danego formularza, automatycznie odzwierciedlone zostają we wszystkich dziedziczonych z niego formularzach . W szczególności — każdy formularz dziedziczy wszelkie cechy swej klasy bazowej klasy TForm.
Wobec powtarzających się cyklicznie poszczególnych etapów tworzenia kodu źródłowego — edycja, rekompilacja, testowanie, edycja, rekompilacja itd. — szczególnego znaczenia nabiera czas kompilowania kodu. Przy kosztownych czasowo kompilacjach użytkownik zmuszony jest do wprowadzania większej liczby poprawek „na raz” (tj. pomiędzy kolejnymi kompilacjami), a to raczej nie przyczynia się do wzrostu produktywności.
O zaletach efektywnego kodu wynikowego nie trzeba nikogo przekonywać — duża szybkość wykonywania programu i jego niewielki rozmiar zawsze będą mile widziane.
Szybkość kompilacji to jedna z najbardziej cenionych cech Delphi — posiada ono bodaj najszybszy kompilator języka wysokiego poziomu na platformie Windows. Język C++, tradycyjnie (i z konieczności) kompilujący się wolniej od Pascala, w ostatnich wersjach Visual C++ i C++Buildera doświadczył wielu zabiegów optymalizacyjnych w rodzaju konsolidacji przyrostowej (incremental linking), czy różnych strategii buforowania kodu; mimo to jego kompilatory i tak są średnio kilka razy wolniejsze od kompilatora Delphi.
Doceniwszy szybkość kompilatora, warto przyjrzeć się drugiej stronie medalu — mianowicie efektywności tworzonego kodu wynikowego — i zadać istotne pytanie: czy ulepszanie jednego z tych czynników musi odbywać się kosztem drugiego? Okazuje się, że niekoniecznie: kompilator Delphi korzysta z tego samego zaplecza (back-end), co kompilator C++Buildera, obydwa więc produkują równie efektywny kod wynikowy.
Ostatnie wersje Visual C++ zdają się dorównywać Delphi pod względem efektywności generowanego kodu (w wielu przypadkach kod ten jest nawet efektywniejszy), a to za sprawą pewnych wyszukanych optymalizacji. I choć nie ma to większego znaczenia dla szeroko rozumianego tworzenia aplikacji, to może stać się niezmiernie istotne w procesach dokonujących intensywnych obliczeń.
W kontekście ogólnie pojętej kompilacji Visual Basic stanowi pewną osobliwość. W czasie projektowania aplikacji bazuje on na kodzie całkowicie interpretowanym, co zapewnia wystarczającą mobilność; kompilator przekształcający gotowy kod do pliku .EXE plasuje się pod względem szybkości daleko za Delphi i C++, to samo można powiedzieć o generowanym kodzie wynikowym. Ostatnia wersja Visual Basica — Visual Basic.NET — znajdująca się w fazie beta-testów, wprowadza pewne usprawnienia w tym obszarze.
Java to kolejny interesujący przypadek. Kompilatory narzędzi zbudowanych na jej bazie (JBuilder i Visual J++) dorównują szybkością kompilatorowi Delphi, lecz efektywność generowanego kodu często pozostawia wiele do życzenia. Biorąc pod uwage fakt, że Java jest językiem interpretowanym — trudno liczyć na zmianę tego stanu rzeczy.
Każdy język programowania oceniany jest głównie w aspekcie swych możliwości — czyli popularnie rozumianej „mocy” — oraz złożoności, przekładającej się przede wszystkim na łatwość jego nauczenia się, prostotę używania i podatność na błędy. Nie trzeba dodawać, iż kryteria te mają charakter na wskroś subiektywny — to, co dla pewnych osób jest dziecinnie łatwe, dla innych może być barierą nie do pokonania; coś, co wydaje się komuś nieuzasadnionym ograniczeniem, dla kogoś innego może wręcz nosić znamiona elegancji. Nic więc dziwnego, iż kwestia oceny danego języka programowania jest zwykle przedmiotem niekończących się sporów na grupach dyskusyjnych (i nie tylko), także poniższe konkluzje stanowią subiektywny punkt widzenia autorów.
Językiem o zdecydowanie największych możliwościach jest język asemblera — gdy istnieje możliwość bezpośredniego operowania rozkazami kodu maszynowego, można zaprogramować dosłownie wszystko, co teoretycznie da się zaprogramować. Owa niemal nieograniczoność okupiona jest jednak ogromną złożonością, podatnością na błędy i znacznymi utrudnieniami w pracy zespołowej. Trudno wyobrazić sobie nawet średniej wielkości program dla Windows napisany całkowicie w asemblerze — w miarę wędrówki od jednego programisty do drugiego, zmieniających się koncepcji i pojawiających się nowych idei, tekst programu zdaje się mieć coraz mniej wspólnego z językiem programowania i stopniowo zaczyna przypominać, nie przymierzając, opowieść zapisaną w sanskrycie. Mimo ogromnej mocy asemblera, jego złożoność okazuje się czynnikiem zdecydowanie dyskwalifikującym (w aspekcie przydatności do tworzenia aplikacji).
C++ to inny przypadek „wszechmocnego” języka. Dzięki preprocesorowi, szablonom, przeciążaniu operatorów i wielu innym wspaniałościom można za pomocą C++ stworzyć wręcz …własny język programowania! Pozostające do dyspozycji programisty środki językowe, o ile używane są rozsądnie, umożliwiają stworzenie czytelnego, łatwego do konserwacji kodu. Problem jednak w owym „rozsądnym używaniu” — bogactwo konstrukcji C++ umożliwia bowiem także tworzenie kodu wyglądającego wręcz horrendalnie; język ten nie posiada żadnych środków prowadzących do stworzenia logicznego i przemyślanego projektu — kwestia ta zależna jest całkowicie od odpowiedzialności programistów; jeśli się dobrze zastanowić, można w tym dostrzec pewien przejaw złożoności.
Językami, które wydają się znakomicie godzić moc ze złożonością są Object Pascal i Java. Obydwa charakteryzują się pewnymi ograniczeniami, które nie pozwalają „zejść na manowce” i tym samym wymuszają w pewnym stopniu logikę projektowania. I tak, np. brak w Object Pascalu i Javie możliwości wielokrotnego dziedziczenia klas, a jest możliwość implementacji przez daną klasę wielu interfejsów; nie spotkamy tu także wygodnego, lecz często niebezpiecznego przeciążania operatorów. Ponadto w obydwu środowiskach zdecydowana większość zabiegów projektowych odbywa się na płaszczyźnie kodu źródłowego języka programowania, przy niewielkich możliwościach konfigurowania konsolidatora. Ograniczeniom tym towarzyszą jednocześnie użyteczne mechanizmy nie powodujące większych zagrożeń — zintegrowana obsługa wyjątków, informacja o typach danych dostępna w czasie wykonania (RTTI) i łańcuchy z automatycznym zarządzaniem pamięcią (jako rodzime typy języka programowania). Nie jest też kwestią przypadku, iż zarówno Object Pascal, jak i Java to języki stworzone nie przez oficjalne komitety, lecz w ramach małych grup, bardzo dobrze wiedzących, jak powinien wyglądać język programowania.
Podstawowym założeniem, leżącym u podstaw Visual Basica, była możliwość szybkiej nauki programowania. Prosty początkowo język zaczął jednak z czasem obrastać w dodatkowe możliwości i stawał się coraz bardziej złożony. Visual Basic wciąż posiada wiele ograniczeń, które trzeba omijać „okrężną drogą”, oczywiście za cenę dodatkowej komplikacji projektu. Visual Basic.NET zdaje się czynić znaczące postępy w tym obszarze, jednak kosztem wstecznej kompatybilności.
Ponieważ Borland nie posiada własnej agendy do spraw baz danych, obecna wersja Delphi syntetyzuje w sobie te mechanizmy obsługi baz danych, które autorzy uznali za warte implementacji ze względu na elastyczność i mnogość potencjalnych zastosowań. Mamy więc efektywną technologię dbExpress, choć efektywność ta okupiona jest w pewnym stopniu brakiem niektórych zaawansowanych elementów, poza tym repertuar sterowników jest obecnie raczej ograniczony. BDE wciąż działa, i jest niezłym rozwiązaniem dla wielu aplikacji, gdyż współpracuje z wieloma różnorodnymi źródłami danych; Borland nie ukrywa jednak zamiarów wycofania się z tej technologii. Komponenty ADO dostarczają efektywnych środków komunikacji z danymi poprzez mechanizm ADO bądź za pośrednictwem ODBC. Użytkownikom serwera InterBase Delphi oferuje zestaw rodzimych komponentów IBExpress.
Użytkownik, dla którego żaden z dostępnych standardowo mechanizmów nie okaże się zadowalający, może zorganizować dostęp do danych wedle swego własnego pomysłu, wykorzystując architekturę abstrakcyjnego zbioru danych, bądź też może zakupić u niezależnych wytwórców gotowe rozwiązanie tej kategorii. Mechanizm DataCLX umożliwia ponadto logiczny lub fizyczny podział na warstwy, organizujące dostęp do poszczególnych źródeł danych.
Produkty Microsoftu zdążają natomiast w swym własnych kierunku, opierając się na rodzimych rozwiązaniach typu ODBC, OLE DB itp.
Elementem determinującym najsilniej sposób korzystania z Delphi jest (przy całym szacunku dla pozostałych elementów) biblioteka VCL. Możliwość manipulowania właściwościami i zdarzeniami komponentów w trakcie projektowania, możliwość tworzenia nowych komponentów drogą dziedziczenia cech komponentów istniejących — to wszystko przyczynia się do skrócenia czasu budowania aplikacji i czyni sam proces budowania bardziej odpornym na błędy użytkownika.
Konkurencyjne środowiska projektowe bazujące na komponentach nie są tak elastyczne. Przykładowo kontrolki ActiveX, porównywalne pod względem elastyczności na etapie projektowania, nie udostępniają już możliwości dziedziczenia klas (na potrzeby tworzenia nowych kontrolek). Środowiska tradycyjne, jak OWL czy MFC, wymagają natomiast od użytkownika niezłej znajomości szczegółów technicznych, by można je było wykorzystywać w sposób naprawdę produktywny — i oczywiście pozbawione są tej elastyczności na etapie projektowania, jaką mają komponenty VCL.
Microsoftowa biblioteka .NET wydaje się drogą we właściwym kierunku, tym bardziej, że jej komponenty współpracują z niektórymi środowiskami RAD, jak Visual C++ czy Visual Basic.
Delphi 6 stanowi kontynuację linii rozwojowej, którą ponad 17 lat temu zapoczątkował Anders Hejlsberg tworząc pierwszą wersję Turbo Pascala. Jego wyjątkowymi cechami były: niezwykle szybka kompilacja, efektywna diagnostyka błędów, wygodna obsługa oraz — co tu ukrywać — ogromne bogactwo języka w porównaniu z innymi wersjami Pascala, głównie dla wszechobecnych wówczas komputerów klasy mainframe. Kolejne wersje Turbo Pascala zdawały się potwierdzać tę pochlebną opinię — wobec niesłychanie szybko postępującego rozwoju informatyki i jej zastosowań oraz lawinowo rosnącej popularności mikrokomputerów, programiści stawali przed coraz to nowymi wyzwaniami, a z perspektywy czasu można dziś śmiało stwierdzić, iż Turbo Pascal jako narzędzie programistyczne spełnił pokładane w nim oczekiwania. Pojawienie się programowania modularnego (podział na moduły w wersji 4.0), nakładkowanie i wykorzystanie języka asemblera oraz wbudowany debugger (wersja 5.0), wprowadzenie elementów programowania obiektowego (wersja 5.5) i wreszcie sprostanie standardom DPMI (wersja 7.0) umożliwiające pokonanie coraz bardziej dotkliwej bariery 640kB pamięci operacyjnej — to tylko niektóre z istotnych zalet kolejnych wersji Turbo Pascala.
Nie jest więc niczym niezwykłym, iż Delphi okazało się godnym następcą Turbo Pascala. Programiści otrzymali właśnie jego szóstą wersję, która jednocześnie jest piątą wersją przeznaczoną dla środowiska 32-bitowego — i jednocześnie pierwszą, która przełamuje granice Windows, umożliwiając tworzenie aplikacji także dla Linuksa, a w przyszłości (zgodnie z zapowiedziami Borlanda) dla wielu innych platform.
Aby uzmysłowić sobie postęp, który dokonał się w ponad siedmioletnim żywocie Delphi, prześledźmy pokrótce historię jego kolejnych wersji.
Na początku kariery mikrokomputerów, w czasie niepodzielnego panowania szacownego DOS-u, programiści nie mieli zbyt dużego wyboru narzędzi — wybór ów sprowadzał się w zasadzie do wymuszonego kompromisu pomiędzy wygodnym i produktywnym, lecz mało sprawnym BASIC-iem (w różnorodnych odmianach) oraz niezwykle efektywnym, lecz trudnym do opanowania językiem asemblera. Pojawienie się Turbo Pascala oznaczało zasypanie tej — dość głębokiej — przepaści. Nie inaczej rzecz się miała w środowisku Windows 3.1 — wybór sprowadzał się do „pisania” w C++ lub „budowania” w Visual Basicu.
Pojawienie się Delphi 1.0 było prawdziwym przełomem: oferowało ono zarówno konstruowania aplikacji z elementów wizualnych, jak i włączania tradycyjnych modułów tekstowych, przy jednoczesnym tworzeniu niezależnych plików wykonywalnych, wykorzystaniu bibliotek DLL, dostępie do mechanizmów obsługi baz danych, co czyniło z niego niezwykle udany kompromis między skrajnymi biegunami „pisania” i „budowania”.
Efektywność Delphi jako narzędzia projektowego była tak uderzająca, że na określenie jego — i narzędzi jemu podobnych w przyszłości — stworzono powszechny już dziś akronim RAD, stanowiący skrót od angielskiego określenia „błyskawicznego tworzenia aplikacji” (Rapid Application Development).
Kombinacja kompilatora, narzędzi projektowania wizualnego i efektywnej obsługi baz danych — to była naprawdę kusząca propozycja dla dotychczasowych entuzjastów Visual Basica. Także użytkownicy Turbo Pascala postanowili „przesiąść się” na platformę bardziej nowoczesną — szczególnie gdy okazało się, iż „nowy” Pascal jest nieporównanie bardziej dojrzały. Zespół Visual Basica w Microsofcie poczuł się zagrożony — wolny i ociężały Visual Basic 3 nie mógł się równać z Delphi 1.
Był wówczas rok 1995 i Borland wygrał apelację po przegranym z Lotusem procesie dotyczącym podobieństwa Quattro do 1-2-3. Postanawiając konkurować z Microsoftem na rynku aplikacji, Borland sprzedał Quattro Novellowi i zabrał się za unowocześnianie dBase’a i Paradoxa, aby uczynić z nich narzędzia dla profesjonalistów — dotychczas przeznaczone były one raczej dla użytkowników-amatorów. Microsoft oczywiście nie próżnował, próbując bez zbytniego rozgłosu przeciągnąć na swoją stronę znaczną część projektantów aplikacji bazodanowych dla Windows — tym bardziej, że ujawniły się pewne błędy w Delphi i nowej edycji Borland C++.
Rok później Delphi zagościło po raz pierwszy na 32-bitowej platformie Windows 95/ NT, oferując, oprócz zoptymalizowanego, niezwykle efektywnego 32-bitowego kompilatora, poszerzoną bibliotekę komponentów, znacznie udoskonalone mechani...
hansgolastyk