Narzędzia obiektowe

Jeśli myślą Państwo, że przejście od systemów informatycznych budowanych przy użyciu oprogramowania strukturalnego do systemów opartych na relacyjnych bazach danych było krokiem w złym kierunku, proszę to przemyśleć jeszcze raz. Wielu programistów ma co prawda pewne kłopoty z opanowaniem nowej techniki programowania, jednak krok po kroku jest ona wprowadzana w życie.

Jeśli myślą Państwo, że przejście od systemów informatycznych budowanych przy użyciu oprogramowania strukturalnego do systemów opartych na relacyjnych bazach danych było krokiem w złym kierunku, proszę to przemyśleć jeszcze raz. Wielu programistów ma co prawda pewne kłopoty z opanowaniem nowej techniki programowania, jednak krok po kroku jest ona wprowadzana w życie.

Wszystko to budzi wiele kontrowersji, gdy przychodzi do wyboru odpowiedniego narzędzia, którego należy użyć do zaprojektowania aplikacji. Odejście od tradycyjnych metod programowania na rzecz programowania zorientowanego obiektowo zaowocowało pojawieniem się na rynku wielu wizualnych narzędzi, które wspomagają proces budowania systemów informatycznych. Można tu wymienić produkty, takie jak: PowerBuilder (Powersoft Corp.) czy Visual Basic (Microsoft Corp.). Wejściu na rynek produktów typu OOP (Object Oriented Programming) towarzyszy bogactwo zorientowanych obiektowo środowisk pracy: Smalltalk i VisualWorks (ParcPlace Systems Inc.), Smalltalk (Digitalk Inc.), NextStep (Next Computer Inc.), Visual Age (IBM), Snap (Template Software Inc.) czy narzędzia firmy Taligent Inc.

Dostępność narzędzi nowej generacji stawia programistów przed dylematem - które środowisko pracy i jakie narzędzie wybrać. Poszczególne rodzaje narzędzi i środowiska różnią się między sobą znacznie, a każde z nich ma swoje wady oraz zalety. Wybór jest więc sprawą trudną. Zadania tego nie ułatwiają też zaprzysiężeni zwolennicy konkretnego narzędzia, twierdzący, że jest to bezapelacyjnie najlepszy produkt. Coraz więcej przedsiębiorstw przekonuje się do nowych, obiektowych metod programowania widząc korzyści, jakie one przynoszą. Pozwalają one budować szybko solidne aplikacje, oferując przy tym możliwość wielokrotnego użycia stworzonych raz obiektów. Wszystko to wymaga jednak trochę czasu i poczynienia pewnych inwestycji (zakup oprogramowania oraz szkolenie pracowników).

OOP kontra narzędzia wizualne

Zorientowane obiektowo środowiska pracy różnią się znacznie od środowisk wykorzystujących narzędzia wizualne. Bierze się to po części z tego powodu, że te ostatnie wywodzą się z prostej linii z produktów służących do zarządzania relacyjnymi bazami danych. Podziela tę opinię Natasha Krol, wiceprezydent firmy konsultingowej The Meta Group (Stanford, Conn.). Z technicznego punktu widzenia narzędzia wizualne są bliższe środowisku sieci LAN i baz danych oraz są oparte na pracy klienta a nie serwera.

"Do budowania prostych aplikacji używam PowerBuilder firmy Powersoft" mówi Xavier Alier, kierownik działu programowania obiektowego w IBM. "Jeśli już muszę projektować większe systemy, stosuję bardziej złożone narzędzia".

Prawdziwe środowiska pracy zorientowane obiektowo muszą spełniać cztery podstawowe warunki. Muszą one oferować rozwiązania typu: enkapsulacja, polimirfizm, dziedziczenie i abstrakcja. Na tym jednak kończy się zazwyczaj ich podobieństwo.

Tak jak młotek czy śrubokręt służą do wykonywania tylko określonych czynności, tak i każde z narzędzi wspomagających proces programowania ma określone cechy, które predysponują je do budowania specyficznych aplikacji. Jeszcze trzy lata temu było zupełnie inaczej i wszystkie narzędzia do programowania były bardzo podobne do siebie.

"Istnieje wiele różnych sposobów budowania aplikacji pracujących w trybie rozproszonym i do każdego z nich używa się odmiennego narzędzia" mówi Mitch Klamer, konsultant pracujący w firmie Patricia Seybold Group. Za pomocą narzędzi zorientowanych obiektowo można budować dużo bardziej złożone aplikacje, niż za pomocą narzędzi wizualnych. Charakteryzują się one przy tym bardzo przejrzystą architekturą. Zalety narzędzi OOP to: możliwość wielokrotnego użycia utworzonego raz obiektu, łatwość obsługi i skalowalność.

To co wydaje się różnić najbardziej te dwa rodzaje narzędzi, to skalowalność i możliwość budowania obiektów (odpowiadających różnym fazom prowadzenia biznesu), które mają swoją reprezentację graficzną. Systemy billingowe (fakturujące) koncentrują się głównie na aspekcie przetwarzania danych, a nie na prezentacjach wizualnych. Dlatego trudno byłoby je budować za pomocą narzędzi wizualnych.

Tom Moldauer (Andersen Consulting Inc.) twierdzi, że dobry programista nie powinien koncentrować się na jednym rodzaju narzędzi. Bowiem poszczególne rodzaje narzędzi nadają się lepiej do budowania określonych aplikacji.

Narzędzia wizualne (zarówno te operujące na poszczególnych elementach oprogramowania, jak i te w pełni obiektowe) oferują różne możliwości. Najbardziej kompleksowym produktem są narzędzia obiektowe; najmniej, narzędzia pozwalające budować pojedyncze elementy oprogramowania.

Tak więc do pisania bardzo złożonych aplikacji, pracujących na poziomie całego przedsiębiorstwa, należy stosować narzędzia obiektowe. Narzędzia wizualne spisują się w tym środowisku dużo gorzej (są mniej podatne na skalowanie).

Obiekty wielokrotnego użycia

Prestiżową kwestią przy budowaniu aplikacji obiektowej jest dokładne poznanie mechanizmów rządzących wielokrotnym przywoływaniem do pracy raz zbudowanego obiektu. Samo poznanie narzędzi takich jak PowerBuilder czy Visual Basic to za mało, aby skonstruować prawidłowo pracującą aplikację obiektową.

Programistom wydaje się, że samo zastosowanie technologii obiektowej gwarantuje im możliwość wielokrotnego używania obiektu. Nie jest to prawda. Aby uzyskać pożądany efekt, należy przedsięwziąć odpowiednie kroki we wszystkich fazach projektu informatycznego: od początkowej analizy projektu przez fazę projektowania i konstruowania architektury aplikacji po fazę pisania oraz wdrażania jej w życie.

Napisanie pierwszej dużej aplikacji przy użyciu programu NextStep zajęło np. firmie Integrity Solutions ok. dwóch lat. "Nasza druga aplikacja używała już 40% powtarzalnego kodu, a pod koniec 1994 r. uzyskaliśmy całkiem niezły wynik - 90% aplikacji bazowało na obiektach wielokrotnego użytku" mówi Dan McCreary, prezydent firmy Integrity Solutions. "Możemy teraz tworzyć kompletne aplikacje (z możliwością usuwania, dodawania i modyfikowania rekordów), nie używając prawie wcale języka Objective C".

Obecnie programiści są w dużo lepszej systuacji, niż kilka lat temu. Mają do dyspozycji biblioteki obiektów, szablony i dopracowane środowiska pracy, które bardzo ułatwiają zadanie pisania złożonych aplikacji.

Po wprowadzeniu nowej metody programowania (NextStep) firma Integrity Solutions przeżyła istną rewolucję. D. Mc Creary mówi: "przedtem każdą bazę danych musieliśmy projektować od samego początku. Tworzyć fizyczne obiekty, które generowały zapytania SQL, jak i programy rezydujące po stronie klienta, które współpracowały z bazą danych konkretnego formatu".

Obecnie dysponujemy już gotowymi obiektami, które wykonują wszystkie te funkcje. Uruchamiając NextStep wchodzimy w środowisko pracy EOF (Enterprise Object), które oferuje nam wiele gotowych rozwiązań. Pozwala ono np. bez trudu budować aplikacje obiektowe pracujące na szczycie standardowych, relacyjnych baz danych.

Efekt wielokrotnego użycia obiektów można też uzyskać nie odwołując się do środowisk pracy typu EOF. Tom Moldauer (Andersen Consulting Inc.) mówi, że jego firma napisała w ten sposób dla jednego z klientów aplikację, uzyskując wynik 92%. Bowiem taka część projektu bazuje na obiektach wielokrotnego użytku.

C++ kontra SmallTalk

Wybór określonego rodzaju narzędzia (np. obiektowego) jest tylko pierwszym krokiem na długiej drodze do celu. Kolejną decyzją będzie wybranie jednego z dwóch środowisk pracy: SmallTalk lub środowiska opartego na języku C++. Każde z nich ma swoich zagorzałych zwolenników.

Z technicznego punktu widzenia C++ jest produktem hybrydowym, opartym na języku C. "Posługując się językiem C++ można budować tak obiekty, jak i modele proceduralne. SmallTalk nie pozwala już na to. Możemy przywoływać tu do pracy tylko poszczególne obiekty - mówi Hugh Bishop z Aberden Group Inc. "Ucząc ludzi języka SmallTalk, uczymy ich najczystszej formy projektowania obiektowego" dodaje T. Moldauer. Zwolennicy języka SmallTalk poddają krytyce środowiska pracy oparte na języku C++, zarzucając im niemożność dynamicznego modyfikowania systemu informatycznego.

"Około 75% zorientowanego obiektowo projektu jest napisane w języku C++. Dlatego programista nie dysponuje gotowymi do użycia obiektami. Po uruchomieniu programu nie ma już możliwości dynamicznego rekonfigurowania systemu i dodawania nowych obiektów" twierdzi D. McCreary. Co ciekawe, D. Mc Creary stosuje jednak do pisania aplikacji właśnie NextStep. Jest to narzędzie oparte na Objective C, umożliwiające wykonywanie pewnych dynamicznych zmian (jednak w ograniczonym stopniu).

Innym zarzutem w stosunku do środowisk pracy opartych na C++ jest ich nadmierne rozbudowanie. N. Krol twierdzi, że jest to jedno z najbardziej kompleksowych i trudnych do opanowania środowisk. Projekty tego typu są nieraz przeładowane do granic możliwości i pełno jest w nich nigdy nie używanych i niepotrzebnych obiektów.

Dla początkującego programisty, projektującego aplikacje typu OOP, SmallTalk jest bez wątpienia językiem łatwiejszym do opanowania. Narzędzie to wymaga jednak pewnego wysiłku, aby go dobrze poznać. C++ sprawuje się znacznie lepiej przy projektowaniu systemów transakcyjnych (konwersacyjne przetwarzanie żądań). Poznanie SmallTalk, jak i towarzyszących mu bibliotek wymaga sporo czasu. "Ucząc się jednej biblioteki dziennie, poznanie całego systemu SmallTalk zajmie więcej czasu, niż przygotowanie astronauty do wyprawy na księżyc" twierdzi N. Krol. I dodaje "na dodatek SmallTalk nie jest produktem tak łatwo skalowalnym, jak C++".

Lepiej jest używać SmallTalka do pisania niewielkich aplikacji pracujących na poziomie jednego działu w przedsiębiorstwie czy szybkiego tworzenia aplikacji metodą RAD (Rapid Application Development). C++ nadaje się natomiast do budowania ogólnozakładowych systemów informatycznych, które muszą pracować bardzo niezawodnie.

John McGehee (Texas Instruments) kreśli wyraźną linię między narzędziami do tworzenia pojedynczych aplikacji i całych systemów informatycznych. I dodaje "nigdy nie używam języka SmallTalk do budowania systemów operacyjnych, systemów zarządzających bazami danych czy modułów niskiego poziomu obsługujących komunikację sieciową. Przy projektowaniu tego typu systemów doceniam zalety języków C i C++ i przechodzę na NextStep.

Osoby posługujące się systemem NextStep podkreślają, że oprócz zalet tego produktu, takich jak: dostępność bibliotek obiektów i baz danych, gotowych do użycia elementów oprogramowania, edytorów tekstu czy programów do przeglądania plików, ważne jest to, że jest to tak kompleksowa platforma.

NextStep narzuca programiście pewne ograniczenia i zmusza go do poruszania się po określonym tylko obszarze. Niektórzy uważają, że jest to cecha ujemna tego produktu. Wielu jednak nie przejmuje się tym i używa tego systemu z powodzeniem.

Narzędzia następnej generacji

Wiele z zaprezentowanych powyżej argumentów straci na swojej aktualności po wejściu do użycia produktów następnej generacji. Umożliwią one obiektowe za pomocą dwojakiego rodzaju produktów: narzędzi wizualnych i kreujących określone środowiska pracy (frameworks). Będą to systemy oparte na wyższym poziomie abstrakcji niż obiekty. Zorientowany obiektowo system VisualAge (IBM) jest oparty na SmallTalk i pozwala budować aplikacje przy użyciu utworzonych wcześniej elementów typu System Object Model.

Digitalk jest twórcą wizualnego narzędzia o nazwie PARTS. Programista może budować aplikacje składające się z obiektów utworzonych za pomocą języków C++, SmallTalk i innych. Wizualny Visualworks (ParcPlace) posiłkuje się z kolei przenośnymi obiektami pisanymi pod systemem SmallTalk.

Firmy Next, Taligent czy Template Software wprowadzają już na rynek narzędzia, które oferują kompleksowe środowiska pracy i szablony. Ułatwiają one budowanie obiektów niższego poziomu i obiektów realizujących konkretne zadania towarzyszące zarządzaniu przedsiębiorstwem. Wszystkie te produkty oferują, chociaż w różny sposób, podobne rozwiązania: możliwość budowania obiektów niższego poziomu, wizualne i co może najważniejsze szablony, które tak bardzo ułatwiają przywoływanie obiektów wielokrotnego użytku do pracy.

Nowe środowiska pracy dostarczają programiście wiele rozwiązań, które ułatwiają znacznie zadanie korzystania ze wspomnianych powyżej opcji. Jak twierdzi N. Krol, produkty firm Taligent i Template Software oferują dużo bardziej wszechstronne i kompleksowe środowiska pracy, niż środowisko systemu SmallTalk.

Snap firmy Template Software jest doskonałym narzędziem do budowania aplikacji stosowanych przez urzędy państwowe (sądownictwo i policja). Wie o tym dobrze IBM, który wyposaża w to narzędzie stacje robocze RS/6000. Snap jest gotowym do użycia produktem, które kreuje środowisko współpracujące z komputerami różnych platform, pracującymi pod różnymi systemami operacyjnymi.

Niektórzy programiści wzdrygają się na myśl o stosowaniu gotowych już szablonów do budowania kompleksowych systemów informatycznych. Porównują oni te szablony do formularzy, które należy tylko odpowiednio wypełnić. Twierdzą, że ogranicza to ich pole działania.

Inni wierzą, że systemy takie ułatwiają rozwiązywanie problemów niższego poziomu, takich jak dostęp do komputerów różnych platform czy do baz danych różnych formatów, co pozwala budować solidne i silne aplikacje.

Narzędzia takie są jednak dość drogimi produktami. Za możliwość wielokrotnego używania obiektów przychodzi słono płacić. Bowiem każdy z takich szablonów odzwierciedla w pewien sposób określony odcinek rzeczywistego świata biznesu, który jest bardzo różnorodny. Klient ma więc w czym wybierać.

Jedno jest oczywiste. Przedsiębiorstwom zainteresowanym technologią obiektową opłaca się inwestować w tego typu przedsięwzięcia i doskonalić swoje systemy informatyczne. I to niezależnie od tego czy chodzi tu o narzędzie oparte na języku C++, zorientowany obiektowo system w rodzaju SmallTalk, czy inny tego rodzaju produkt.

Słownik terminów technologii obiektowej

Abstrakcja: zdolność sklasyfikowania obiektów (według klas czy rodzajów danych) występujących w rzeczywistym świecie biznesu, które są składową każdego systemu informatycznego opartego na technologii obiektowej.

Klasa: szablon służący do definiowania klas.

Enkapsulacja: technika upakowywania w obiektach danych razem z przetwarzającymi je procedurami (programami).

Dziedziczenie: zdolność przejmowania przez obiekty klasy podrzędnej cech właściwych obiektom klasy nadrzędnej. Obiekty obu klas muszą być usystuowane w tej samej linii hierarchicznego drzewa obiektów.

Komunikat: sygnał wysyłany przez jeden obiekt do drugiego obiektu. Komunikat składa się z nazwy obiektu (adresata), nazwy wywoływanej metody (procedury) i parametrów potrzebnych tej procedurze do podjęcia pracy.

Metoda: procedura wchodząca w skład jednego obiektu, która może świadczyć swe usługi innym obiektom (zgłaszającym takie żądania).

Obiekt: logiczna reprezentacja pakietu oprogramowania, który składa się z procedur wykonujących określone zadania i towarzyszących im danych.

Polimorfizm: metoda wyposażania obiektów w jeden zunifikowany interfejs (skrywający różne rozwiązania), który ułatwia różnym obiektom wzajemne komunikowanie się.