Wyślij zapytanie Dołącz do Sii

Kobieta widoczna na zdjęciu prowadzącym do tego wpisu, to Grace Hopper (źródło: flickar.com). W oparciu o jej prace w 1959 powstał język programowania Cobol. Mimo upływu lat, na świecie wciąż działają systemy informatyczne napisane w Cobolu. Są to głównie systemy przetwarzające ogromne liczby transakcji, wykorzystywane w bankach, firmach ubezpieczeniowych, instytucjach publicznych.

Początkowo programowanie w Cobolu i nie tylko polegało na tym, że program zapisywało się na papierowym arkuszu a następnie operator zakodowywal poszczególne instrukcje na karcie perforowanej (dziurkowanej). Łatwo się domyślić, że każda pomyłka kosztowała wiele czasu i nerwów.

karta programowania Cobol
Ryc. 1 Papierowy arkusz z fragmentem programu.
Źródło: https://neil.fraser.name/news/2013/02/23/
karta perforowana
Ryc. 2 Karta perforowana, na której zapisywano dawniej programy. Na jednej karcie zapisywano jedną linię kodu.
Źródło: https://commons.wikimedia.org/wiki/File:Blue-punch-card-front.png

Wraz z wprowadzeniem przyjaźniejszych edytorów tekstu programowanie w Cobolu stało się prostsze. Dwa przykłady programów zamieszczone poniżej pokazują, że czytelność kodu jest całkiem spora. Składnia języka miała być jak najbardziej podobna do języka angielskiego. Efektem ubocznym tego podejścia jest zbytnie jej rozbudowanie. Zdarzają się programy zawierające kilkadziesiąt tysięcy linii kodu (w jednym pliku). Łatwo się domyślić, jak wygląda analiza takiego programu.

Od wielu lat panuje trend odchodzenia od systemów napisanych w Cobolu. Przemawiają za tym ograniczenia języka, jak i inne czynniki:

  • Brak zmiennych lokalnych
  • Brak obiektowości (nowsze wersje języka, które wprowadziły obiektowość nie przyjęły się wśród programistów)
  • Brak rekurencji
  • Nadmiernie rozbudowana („przegadana”) składnia
  • Rosnąca średnia wieku programistów (młodzi programiści niechętnie uczą się Cobola) – coraz trudniej znaleźć na rynku specjalistów

Osobom chcącym spróbować swoich sił w Cobolu, bez konieczności zabawy w emulację mainframeów, polecam kompilator GnuCOBOL: https://sourceforge.net/projects/open-cobol/

Można go uruchomić na Linuxie i Windowsie (tutaj będzie to trochę bardziej skomplikowane). Polecenie służące do kompilacji i generujące plik wykonywalny: cobc –x nazwa_pliku.cob.

Poniżej najprostszy program wyświetlający napis ‘Hello, Sii’:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY Hello, Sii.
STOP RUN.

Kompilacja i uruchomienie programu HELLO (plik hello.cob):

$ cobc -x hello.cob
$ ls
hello  hello.cob
$ ./hello
Hello, Sii

Poniższy program wybiera z pliku „ACCOUNTS.IN” id klientów i ich rachunki, posiadających przynajmniej milion na koncie (dla uproszczenia pominięto kilka elementów, jak np. waluta rachunku i konieczność przewalutowania). Wybrane rekordy zapisywane są do pliku REPORT.OUT.

</p>
       IDENTIFICATION DIVISION.
PROGRAM-ID. MILLIONAIRE.
AUTHOR. SII PROGRAMMER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
* deklaracja plikow
FILE-CONTROL.
SELECT CUSTOMER-ACCOUNTS ASSIGN "ACCOUNTS.IN"
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
 
SELECT MILLIONAIRE-ACCOUNTS ASSIGN "REPORT.OUT"
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
 
DATA DIVISION.
* definicja struktury rekordow w plikach
FILE SECTION.
FD CUSTOMER-ACCOUNTS.
01 CUSTOMER-RECORD.
02 ACCOUNT-NUM             PIC 9(26).
02 CUSTOMER-ID             PIC 9(8).
02 BALANCE                 PIC S9(13)V99.
 
FD MILLIONAIRE-ACCOUNTS.
01 MILLIONAIRE-RECORD.
02 MILLIONAIRE-ID          PIC 9(8).
02 MILLIONAIRE-ACCOUNT     PIC 9(26).
 
WORKING-STORAGE SECTION.
* zmienna switchowa - wskaznik konca pliku
01 WS-SW-CUSTOMER-EOF         PIC X(1).
88 WS-SO-CUSTOMER-EOF-YES      VALUE "Y".
88 WS-SO-CUSTOMER-EOF-NO       VALUE "N".
 
* stala - milion
01 CT-MILLION                 PIC 9(7) VALUE 1000000.
 
PROCEDURE DIVISION.
BEGIN.
* otwarcie pliku wejsciowego i wyjsciowego
OPEN INPUT CUSTOMER-ACCOUNTS
OPEN OUTPUT MILLIONAIRE-ACCOUNTS
 
SET WS-SO-CUSTOMER-EOF-NO TO TRUE
 
* odczyt pierwszego rekordu z pliku ACCOUNTS.IN
READ CUSTOMER-ACCOUNTS
AT END SET WS-SO-CUSTOMER-EOF-YES TO TRUE
END-READ
 
* czytanie pliku w petli
PERFORM UNTIL WS-SO-CUSTOMER-EOF-YES
* sprawdzenie czy saldo wieksze od miliona
IF BALANCE >= CT-MILLION
* przepisanie id klienta i nr rachunku do pliku REPORT.OUT
MOVE CUSTOMER-ID TO MILLIONAIRE-ID
MOVE ACCOUNT-NUM TO MILLIONAIRE-ACCOUNT
WRITE MILLIONAIRE-RECORD
END-IF
* odczyt kolejnego rekordu z pliku ACCOUNTS.IN
READ CUSTOMER-ACCOUNTS
AT END SET WS-SO-CUSTOMER-EOF-YES TO TRUE
END-READ
 
END-PERFORM
* zamkniecie plikow
CLOSE CUSTOMER-ACCOUNTS
CLOSE MILLIONAIRE-ACCOUNTS
* koniec programu
STOP RUN.

Plik wejściowy „ACCOUNTS.IN” zawiera następujące rekordy (struktura rekordów zdefiniowana jest programie):

a6

Kompilacja i uruchomienie programu MILLIONAIRE (plik millionaire.cob):

$ cobc -x millionaire.cob
$ ls
millionaire millionaire.cob
$ ./ millionaire
$ ls
millionaire millionaire.cob ACCOUNTS.IN REPORT.OUT

Jak widzimy, pojawił się plik REPORT.OUT, w którym mamy rekordy klientów – milionerów (struktura rekordów zdefiniowana w programie):

a9

Program Cobolowy składa się zazwyczaj z następujących bloków/dywizji (DIVISIONS), co widać na powyższym przykładzie:

  • IDENTIFICATION DIVISON – zawiera nazwę programu i inne dane, np. nazwisko autora
  • ENVIRONMENT DIVISION – specyfikuje pliki wejściowe i wyjściowe (rodzaj plików, nazwa)
  • DATA DIVISION – definiuje strukturę plików oraz zmienne używane w programie
  • PROCEDURE DIVISION – zawiera logikę programu.

Bloki IDENTIFICATION DIVISON oraz PROCEDURE DIVISION są wymagane.

W programie „MILLIONAIRE” dodatkowo pojawiają się sekcje (SECTIONS). Sekcje wchodzą w skład dywizji. Dla przykładu DATA DIVISION dzieli się na sekcje:

  • FILE SECTION – zawiera definicję struktury rekordu w pliku
  • WORKING-STORAGE SECTION – zawiera deklaracje zmiennych/stałych

Dokładniejsze wyjaśnienie struktury programu w Cobolu a także omówienie składni języka można znaleźć pod adresem: http://www.csis.ul.ie/cobol/course/Default.htm

Strona zawiera także więcej przykładów programów: http://www.csis.ul.ie/cobol/examples/ Zachęcam do zapoznania się z nimi.

 

5/5 ( głosy: 2)
Ocena:
5/5 ( głosy: 2)
Autor

Zostaw komentarz

Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Może Cię również zainteresować

Pokaż więcej artykułów

Bądź na bieżąco

Zasubskrybuj naszego bloga i otrzymuj informacje o najnowszych wpisach.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Natalia Competency Center Director

Get an offer

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

Aplikuj Aplikuj

Paweł Process Owner

Join Sii

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?