Készítette: Horváth Zsófia (HOZSAAI.ELTE) 2011 – 2012 – 2. félév
1952-ben készült el Neumann János tervei alapján az EDVAC nevet viselő számítógép, amely az első Neumann-elvek alapján épített gép volt. Innen kezdődik a programozási nyelvek története. Az évek során igen sok programozási nyelv alakult ki, amelyeket szemléletük és fontosabb jellemzőik alapján négy generációba soroltak.
Specializált programozási nyelvek i. Rendszer- és fordítóprogramok fejlesztése: B, C, BCPL, Pascal ii. Formulakezelő nyelvek: FORMAC, REDUCE, MACSYMA iii. Szimbólum-feldolgozó nyelvek: PROLOG, CONVERT, LISP, SNOBOL, COGENT iv. Szimulációs nyelvek: SIMSCRIPT, SIMULA, GPSS v. Adatbázis-kezelő nyelvek
vi. Kiterjeszthető programnyelvek: LOGO, FORTH 4. generációs nyelvek: XX. század második fele
Az SAP szoftvercégnek a saját programozási nyelve az ABAP (angolul Advanced Business Application Programming, németül Allgemeiner Berichts-Aufbereitungs-Prozessor), melyet a 70-es évektől kezdve a cég folyamatosan bővít. Az első verziói (SAP R/1, SAP R/2 rendszerek) még assembly nyelven íródtak, majd megjelentek a COBOL-ban használatos parancsokhoz hasonló utasítások az ABAP/3. Végül 1983-ban megjelent az ABAP/4, amely már strukturált, procedurális programnyelvnek számít (egyfázisú programokkal). Nem sokkal később létrejött az ABAB Objects, amely már tényleges objektumorientált programozásra ad lehetőséget. Az ABAP-ra hatással volt az Objective-C, COBOL, SQL.
Vajon az SAP miért nem a C++, a JAVA vagy az ADA nyelvvel kezdett el fejleszteni? Minden programnyelvnek megvan a maga sajátossága, ami csak az övé, csak ő tudja kihasználni az előnyeit… Miért kellett az SAP-nak megalkotnia egy „teljesen új” programozási nyelvet? Ha összehasonlítjuk pár nyelvekkel, rögtön kiderül, hogy nem csak a felsorolt három nyelv volt rá hatással, hanem azok is, amelyeknek az Assembler a „közös őse”. Hogy válaszolt tudjunk adni a kérdésre, hasonlítsuk össze az SAP nyelvét a fent említett nyelvekkel a következő szempontok szerint.
A nyelv megszületése: Az ABAP első verziója körülbelül akkortájt jelent meg, mint az ADA vagy a C++, azaz a80-as években. Az objektumorientált verziója ABAP Objects pedig a JAVA-val egyidőben született meg a 90es évek végén.
Szintaxis: Ami számomra meglepő volt, ABAP-ban egy utasítássorozat végét egy ponttal (.) fejezzük ki, mely más nyelvekben ugyebár a pontosvessző. Ez olyan hatást keltett bennem, mintha egy mondatot olvasnék egy könyvből. Érthetően lezár egy szakaszt.
Szekvenciák, avagy mit szabad: Mind az ADA, mind a C++ s még az ABAP-ban is van lehetőség arra, hogy egymás után soroljuk fel az azonos típusú változókat, nem kell külön-külön. ABAP szekvencia
C++ szekvencia
ADA (Pascal, Delphi)
. . … .
; ; … ;
; ; … ;
, , ;
, , ;
ekvivalens ezzel: , ,.
Ha ADÁban a felsorolt verzióban értéket is megadunk, akkor az az összes adattagra fog vonatkozni, míg C++ban erre nincs lehetőség, ott csak a legutolsó elem kapja meg a megadott értéket.
Ciklusok: Két féle ciklust különböztetünk meg, a számlálós és a feltételes ciklust. ABAP ciklusok DO [ TIMES]. ENDDO. WHILE . ENDWHILE.
C++ ciklusok for (int i = 0, i<10, i++) { ;} while (feltetel) {; }
ADA (Pascal, Delphi) ciklusok for I in 1..10 loop ; end loop; while loop ; end loop;
JAVA mint a C++ban: for (előkészítő szakasz, feltételes sz.; növekményes szakasz) {ciklusmag}
mint a C++ban és: do {ciklusmag} (logikai kifejezés)
while
Elágazások: Ebből is kétféle verziót különböztetünk meg az if és case elágazást. Számomra az ABAP és ADA között egyszerre van hasonlóság és különbség is ebben. A hasonlóság valószínűleg a Fortran – Algol – Pascal egymás utániságából jön, a különbség pedig a case felépítésén. Meglep, hogy csak a Rubyban láttam eddig untill-es elágyazást, amely a normál if ellentéte lenne. ABAP elágazások: if . <do sth> elseif . <do sth> else. <do sth> endif. Ruby scriptnyelv unless 1 < 2 er = 1 else er = 2 end
case <mezőnév> when <érték1>. when <érték2>. when others. endcase. C++ if elágazása: if(feltétel) utasítás; else utasítás;
ADA elágazások if (felt) then <do sth>; elsif <do sth>; else <do sth>; end if;