CASE i 4GL - konkurenci czy towarzysze broni?

Czytając pisma fachowe można odnieść wrażenie, że pomiędzy językami czwartej generacji (4GL 4-th Generation Language) i narzędziami typu CASE odbywa się walka o rynek.

Czytając pisma fachowe można odnieść wrażenie, że pomiędzy językami czwartej generacji (4GL 4-th Generation Language) i narzędziami typu CASE odbywa się walka o rynek. Tymczasem jest to konkurencja mniej więcej taka, jak pomiędzy ciężarówkami i samochodami osobowymi - nie można sobie wyobrazić, że ciężarówki wyprą z rynku samochody osobowe i na odwrót; jedno i drugie wzajemnie się dopełnia. Owszem, ktoś, kto inwestuje pieniądze w oprogramowanie do tworzenia aplikacji, może dziś stanąć wobec wyboru: CASE czy 4GL, niemniej jednak oba te narzędzia są całkowicie komplementarne. Sprzeczność pomiędzy CASE i 4GL jest pozorna i tymczasowa, a to dlatego, że obaj przeciwnicy służą do rozwiązywania tego samego problemu - pisania skomplikowanego oprogramowania, tanio i szybko.

Termin CASE - Computer-Aided Software Engineering - został wprowadzony około dwadzieścia lat temu do opisu narzędzia, służącego do sporządzania diagramów strukturalnych, czyli projektów oprogramowania, najczęściej dla potrzeb przedsiębiorstwa.

W latach osiemdziesiątych zaszły dwa zjawiska, które w istotnym stopniu zmieniły początkowe znaczenie skrótu CASE. Pierwszym (a jego przyczyną było chwytliwe brzmienie tego terminu) stało się zaadaptowanie go przez wytwórców narzędzi programistycznych do określania generatorów kodów, w tym również kodów w językach czwartej generacji. Drugim zjawiskiem była rosnąca funkcjonalność narzędzi typu CASE, posunięta do generowania baz danych i kodów źródłowych. Zaczęto je określać jako I-CASE (Integrated CASE).

Niejednoznaczność dotyczy także określenia "język czwartej generacji". Termin ten wprowadzono dla określenia nowej grupy języków programowania, wyposażonych w bardzo silne instrukcje, dzięki którym czas pisania niektórych aplikacji - w porównaniu z językami "trzeciej generacji" jak C czy COBOL - został wydatnie skrócony. Podobnie jak CASE, termin 4GL również zaczął z czasem obrastać nowymi treściami.

Pisząc program, programista myśli w kategoriach procedur. Jego potrzeby sprowadzają się do posiadania narzędzi, które pozwolą szybko i sprawnie budować procedury (obiekty, klasy, itp.). Jest prawdą, że nowe narzędzia rzeczywiście pozwalają szybciej rozwiązywać problemy algorytmiczne. Budowa profesjonalnego programu powinna jednak uwzględniać coś więcej - zapewnić w przyszłości możliwość łatwej i skutecznej modyfikacji i rozwoju istniejącego już programu.

Nie jest to problem nowy, bowiem takie możliwości stwarzają znane od lat zasady programowania strukturalnego, zarówno w językach trzeciej i czwartej generacji, jak i w narzędzia typu CASE. Problem tylko w tym, że znaczna część programistów po prostu nie umie się nimi posługiwać. Co więcej, wielu z nich nie ma wystarczającego pojęcia o technikach analizy strukturalnej, by projektować oprogramowanie z myślą o ewentualnych przyszłych potrzebach klienta. Niezależnie od treści prospektów reklamowych, zdolność rozwojowa programu aplikacyjnego jest bardziej sprawą doświadczenia i intelektualnej dyscypliny programisty niż własnością narzędzia. Ci, co piszą nierozwojowe programy w języku trzeciej generacji, przypuszczalnie będą robić to samo przy użyciu CASE czy 4GL, tyle, że z większą wydajnością. Nie liczmy za bardzo na to, że komputer będzie w stanie poprawiać ludzkie błędy.

Języki czwartej generacji stworzono po to, by uprościć proces przechodzenia od założeń proceduralnych do budowy kompletnego systemu. W przypadku CASE punktem wyjścia do pracy nad projektem są założenia czysto funkcjonalne. Ostateczny cel stosowania obu narzędzi jest taki sam - jest nim po prostu kod programu aplikacyjnego, i ewentualna rozgrywka między CASE i 4GL może się odbywać tylko na tym polu.

Z upływem czasu coraz trudniej jest zakreślić granicę pomiędzy 4GL i generatorami kodu, jako że generatory mają coraz więcej cech typowych dotąd dla 4GL i na odwrót - 4GL mają coraz więcej cech I-CASE. Ściśle rzecz ujmując, coraz częściej rezultatem działania I-CASE jest kod w języku czwartej generacji. Z kolei 4GL albo produkują egzekwowalny kod wynikowy, albo działają we własnym środowisku.

Klasycznym celem działania generatora kodu jest przyspieszenie wytwarzania kodu w języku 3GL, który jest dobrze użytkownikowi znany. Kody te na ogół nie są zbyt dobrze optymalizowane - a trzeba przyznać, że praca nad szlifowaniem kodu wyprodukowanego przez generator nie należy do zajęć przyjemnych. Ideałem narzędzi I-CASE jest zwolnienie programisty z tego kłopotliwego zajęcia. Biorąc pod uwagę popłoch, nieuchronnie towarzyszący przeglądaniu wygenerowanego kodu 3GL, jest to założenie ze wszech miar słuszne.

Podobne założenie przyświeca producentom 4GL - pozostawić programistę na poziomie 4GL, zwalniając go z grzebania się w kodzie 3GL. Rzeczywiście, języki czwartej generacji drastycznie zmniejszają czas pracy niezbędny do opracowania nawet bardzo złożonych aplikacji; również kod w nich napisany jest znacznie krótszy. Na ogół pozwalają zatrzymać się na skraju czysto koncepcyjnej fazy pracy nad programem, redukując do absolutnego minimum zmiany wprowadzane podczas jego uruchamiania. Nie zwalnia to jednak nikogo z planistycznej dyscypliny. Wielu producentów aplikacji popadło w kłopoty właśnie z powodu niedoceniania tego wymogu.

Wybierając narzędzie do pracy, twórca aplikacji stoi przed dwoma istotnymi wyborami, odpowiadającymi dwóm zasadniczym fazom cyklu produkcyjnego, jakimi są opracowywanie koncepcji oraz kodowanie. Na pierwszą fazę "front end" składa się analiza struktury organizacji, którą program ma obsługiwać, definiowanie założeń programu oraz projekt ogólny. Tu nie ma wyboru - trzeba mieć narzędzie typu CASE. Oczywiście, najlepszy nawet CASE nie rozwiąże problemów sam z siebie. Ci, którzy wiedzą, co znaczy progresywna struktura danych i budowa programu z przewidywaniem kierunku jego rozwoju, ci nie wezmą się do pracy bez CASE. Ci, którzy tego nie rozumieją, niech lepiej nie biorą się za duże przedsięwzięcia, bo czekają ich poważne kłopoty niezależnie od stosowanego narzędzia.

Drugi wybór, dotyczący fazy kodowania "back end" - 3GL, 4GL czy generator kodu - staje się coraz mniej ważny. Wyższość generatorów kodu i języków czwartej generacji nad 3GL wychodzi na jaw zwłaszcza w tych przypadkach, gdy klient nie wie dokładnie, o co mu chodzi i istnieje potrzeba szybkiego pokazania mu "czegoś" na początek. Należy od razu powiedzieć, że warto dążyć do znalezienia takiego narzędzia, które generuje 100% kodu bez potrzeby dalszego ingerowania w jego treść, starannie unikając sytuacji, w której trzeba grzebać się w szczegółach dużego, skomplikowanego programu.

Kto wygra w pozornej wojnie między językami czwartej generacji i narzędziami CASE? Zwycięzca może być tylko jeden - jest nim programista-użytkownik. Tendencja do wzajemnego zbliżania się tych narzędzi, widoczna w coraz bardziej zintegrowanych produktach zawierających jedno i drugie, jest oczywista i widoczna gołym okiem.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200