640 likes | 950 Views
Programovacie jazyky . Doc. Ing. Juraj Vaculík, PhD., Mail : juvac@fpedas.utc.sk Web http://nf446.host.sk. Generácie jazykov. 1. g. Strojový kód 2. g. Assembler 3. g. Procedurálne a štruktúrované jazyky 4. g. Objektovo orientované 5. g. SQL – databázové spracovanie
E N D
Programovacie jazyky Doc. Ing. Juraj Vaculík, PhD., Mail : juvac@fpedas.utc.sk Web http://nf446.host.sk
Generácie jazykov • 1. g. Strojový kód • 2. g. Assembler • 3. g. Procedurálne a štruktúrované jazyky • 4. g. Objektovo orientované • 5. g. SQL – databázové spracovanie • 5,5. g. Značkové jazyky • 6. g. Natural language Progranmovanie 2006 Strojový kód
Strojový kód • to sú elementárne inštrukcie vyjadrené číselnými kódmi, vlastná reč počítača, na PC to môže byť napr. „presuň obsah registru AX na zadané miesto v pamäti“, „pripočítaj 1 k obsahu registru BX“ atd. • k programovaniu v strojovom kóde je treba poznať architektúru počítača, pre ktorý svoj program píšeme. • programovať pomocou elementárnych inštrukcií, navyše vyjadrených číslami, je problematické; ešte väčší problém ale predstavujú absolútneadresy. I nepatrná úprava programu totiž spôsobí, že sa zmení všetky nasledujúce adresy a my potom musíme v programe zmeniť odkazy na ne. Je jasné, že opravy a údržba takéhoto programu sú veľmi náročné. Progranmovanie 2006 Assembler ...
Assembler ... • jazyk symbolických adries, ktoré dnes súhrnne nazývame asembler • v asembleri sú číselné kódy inštrukcií nahradené mnemotechnickými skratkami, napríklad mov ax,adr alebo add bx,1. • Rôzne miesta v programe je možné označiť návestím - symbolickýmiadresami, a na toto návestie sa v inštrukciach odvolávame. • Jednotlivá zmena potom nemusí mať za následok zmeny celého programu. Progranmovanie 2006 assembler
Assembler • niečozaniečo - program napísaný v asemblere je nutné najskôr preložiť do strojovéhokódu. • Assembler je závislý na type procesora a každý má svoju špecifickú sadu inštrukcií, • Zápis programu v asembleri sa vôbec nepodobá spôsobu, akým sa vyjadrujeme v bežnom živote; i to bol jeden z dôvodov, prečo bolo programovanie spočiatku záležitosťou úzko vyhranených špecialistov. Skutočnú zmenu spôsobili až vyššie programovacie jazyky. Progranmovanie 2006 abstrakcia
Prvá vrstva abstrakcie • Niekde tu sa prvý krát objavil trik, ktorý programátori používajú k riešeniu najrôznejších problémov dodnes: medziseba a hardware sme vložili vrstvu, ktorá prácu s hardwarom uľahčuje, zjednodušuje a skrýva pred nami niektoré jej problematické miesta. • Niekedy o tom hovoríme ako o vrstveabstrakcie. Samozrejme, táto vrstva bola na začiatku len tenká, pretože aj programátor, ktorý používal asembler, musel stále veľmi podrobne poznať architektúru počítače. Progranmovanie 2006 Prvé jazyky
Prvé jazyky • Jedným z prvých úspešných pokusov o vyšší programovací jazyk bol OperationalCompiler (Laning a Zierler, M.I.T, 1954). • Pretože prvé počítače slúžili skutočne predovšetkým k počítaniu, umožňoval tento jazyk zapisovať matematické výrazy podobne ako v matematike a poskytoval nástroje pre numerické riešeniediferenciálnychrovníc. Progranmovanie 2006 Fortran ...
Fortran ... • Za prvý použiteľný vyšší programovací jazyk sa spravidla pokladá Fortran (skratka z FORmula TRANslation). • Avšak idea vyššieho programovacieho jazyka je staršia – jeho vznik predpovedal už v r. 1954 K. Zuse a vymyslel preň aj názov Plankalkül. Progranmovanie 2006 Fortran ...
Fortran ... • Fortran vyvinul tým vedený Johnom Backusem firmy IBM pre počítač IBM 704. • Cieľom bolo vyvinúť jednoducho zvládnuteľný programovací jazyk • Obsahoval rad optimalizačnýchalgoritmov, z ktorých niektoré si dokonca spúšťali úseky preloženého programu, aby mohli čo najlepšie určiť alokáciu registrov. Verzia Fortran II priniesla možnosť rozdeliťprogram na niekoľkých samostatneprekladanýchčastí. Progranmovanie 2006 Fortran
Fortran ... • Najväčšia sila spočívala v možnosti zapisovať pomerne zložité matematickévzorce spôsobom blízkym matematickej praxi. • Na rozdiel od mnohých neskorších programovacích jazykov umožňoval Fortran rozdeliť program na samostatne prekladané podprogramy. • Neobsahoval však konštrukcie ako zloženýpríkaz alebo úplnýpríkazIF, okrem polí nepodporoval užívateľom definované typy, neposkytoval nástroje pre prácu s pamäťou, nedovoľoval rekurziu pri volaní podprogramov atd Progranmovanie 2006 Ďalšie ...
Nasledovníci FORTRANU • Úspech Fortranu podnietil záujem o vytváranie ďalších jazykov, napríklad už v r. 1963 sa len vo Veľkej Británii používalo viac ako 30 rôznych jazykov. Väčšina z nich skoro zase zanikla, niektoré však priniesli novinky, ktoré si našli trvalé miesto v programovaní. • Jazyky z tej doby boli problémovoorientované – to znamená, že sa hodili len k riešeniu určitej pomerne úzkej triedy problémov. Progranmovanie 2006 ALGOL 60
Algol 60 • vytvorila ho spoločná komisia organizácií GMM a ACM predovšetkým ako jazyk pre publikovaniealgoritmov. • Tento jazyk naučil programátorov pracovať s blokovouštruktúrou programu a využívať rekurziu. • Poskytol taktiež úplný príkazif, ktorého špecifikácia však ponechala rad dôležitých miest otvorených, takže ich rôzne implementácie riešili po svojom. Progranmovanie 2006 COBOL
Cobol60 • jazyk pre spracovanie hromadnýchdát (predchodca dnešných databázií). Cobol (Common Object Bussines Oriented Language) zoznámil programátorov s konštrukciou, ktorá sa obvykle označuje ako štruktúra alebo záznam a ktorá predstavuje vlastne jeden riadok v databázovej tabuľke – i keď v tom čase ešte žiadne databáze v podstate neexistovali. Progranmovanie 2006 LIPS
LISP • je jazyk pre symbolickémanipulácie, predovšetkým pre spracovanie zoznamov. • Používa sa pre tzv. funkcionálneprogramovanie – všetko, čo v ňom robíme je skladanie funkcií, ktoré sa aplikujú na symbolické výrazy. • LISP ukázal, že imperatívne programovacie jazyky, v ktorých je program zapísaný ako postupnosť príkazov, nepredstavujú jedinú možnosť. Podnietil taktiež záujem o dynamickédátovéštruktúry. Progranmovanie 2006 Univerzálne
Univerzálne jazyky Problémovo orientované jazyky znamenali výrazný krok vpred, ale čoskoro bolo zrejmé, že ide len o provizórne riešenie. Preto sa už od začiatku 60. rokov snažili ako teoretici, tak i praktici vyvinúť univerzálny programovací jazyk, teda jazyk, ktorý by poskytoval nástroje pre vedecko-technické výpočty, spracovanie hromadných dát, spracovanie dynamických dátových štruktúr a ďalšie – v tej dobe ešte neznáme oblasti aplikácií Progranmovanie 2006 PL/I
PL/I • Šlo o spojenie vlastností Fortranu, Algolu a Cobolu s niektorými novými rysmi. • Ako jeden z prvých umožnil ošetrovať výnimočné situácie za behu programu, používať ukazovatele a paralelne vykonávať vstupné a výstupné operácie. • Celkovo však bol hodnotený skôr nepriaznivo, pretože mal príliš málo skutočnej sily pri veľmi rozsiahle definície. Progranmovanie 2006 Simula
Simula 67 • vznikla ako nadstavba Algolu 60; priniesla plnohodnotné objektovoorientovanéprogramovanie – nájdeme v nej triedy aj dedičnosť; polymorfizmus je riešený virtuálnymifunkciami. • Vedľa toho obsahovala automatickú správu pamäti a prostriedky pre prácu so zoznamami. Progranmovanie 2006 Algol 68 ...
Algol 68 ... • Priniesol veľké množstvo nových možností, ako je paralelneprogramovanie a základne prostriedky pre synchronizáciuprocesov (semafor), riedenie alokácie pamäti, možnosť predefinovať nové operátory, zachádzať s funkciami ako s dátovými objektmi atd. Progranmovanie 2006 Algol 68
Algol 68 ... • Prišiel tiež s myšlienkou, že programovací jazyk sa má skladať z malého množstva základných prostriedkov a pravidiel pre ich systematické kombinovanie a nesmie obsahovať náhodné obmedzenia (tomu sa hovorí ortogonalitajazyka). • Tento jazyk predbehol svoju dobu – prvé rozumné implementácie Algolu 68 sa datujú až do druhej poloviny 70. rokov, a to už sa používali modernejšie jazyky. Progranmovanie 2006 Pascal
Pascal (N. Wirth, 1971) • Naozaj výrazný obrat vo vývoji programovacích jazykov znamenal Pascal, navrhnutý N. Wirthom pre výučbu programovania (1971). • Položil dôraz na jednoduchosť, prehľadnosť a dobré štruktúrovanie programu a vo výučbe prakticky cez noc nahradil predtým používané jazyky PL/I, Fortran a Algol 68. • Veľmi skoro sa však začal používať aj pre skutočné aplikácie. Tento jazyk zaviedol vymenované typy. Progranmovanie 2006 Jazyk C
Jazyk C (D. Ritchie, 1972) • poskytoval podobné možnosti ako Pascal, navyše mal možnosť oddeleného prekladu. • Vzdor zložito vyzerajúcej syntaxe získal rýchlo popularitu, a pretože obsahoval prostriedky pre nízko-úrovňovéprogramovanie, slúžil aj ako „prenositeľnýasembler“. Progranmovanie 2006 SmallTalk
Smalltalk (1973) • bol prvým čisto objektovým programovacím jazykom. • Všetko v ňom predstavuje objekt, aj triedy alebo časti kódu. Taktiež Smalltalk predbehol svoju dobu, pretože mohol efektívne bežať len na dostatočne výkonných počítačoch. • Poslúžil však ako nástroj pre rozvoj teórie objektového programovania. Progranmovanie 2006 ADA
Jazyk Ada • vyvinutý z iniciatívy Ministerstva obrany USA (1980), kládol maximálny dôraz na bezpečnosť. • Jeho novinkou bolo genericképrogramovanie Progranmovanie 2006 Jazyk C+
Jazyk C++ (B. Stroustrup, 1985) • bol najpopulárnejším jazykom 90. rokov, a to i napriek tomu, že sa v tej dobe prudko vyvíjal a prešiel radom zmien. • Do programovania vniesol okrem iného viacnásobnú dedičnosť a priestory mien Progranmovanie 2006 JAVA
Java (Gosling, 1995) • je síce syntakticky podobná C++, je však určená pre tzv. virtuálny stroj. To ale nie je v programovaní nič nového – s tým sme sa mohli stetnúť už pri jazyku Basic (Kemeney, 1963). • Je prvý široko používaným jazykom, ktorý ponúka nástroje pre pokročilú prácu s typmi. • Java je čisto objektová; jej neprehliadnuteľný úspech je dôsledkom jej prenositeľnosti a prepracovaných knihovní Progranmovanie 2006 C#, .NET
C# a .NET • Na podobnej myšlienke ako Java sú založené i jazyky pre platformu .NET, z ktorých na prvom mieste menujme C#. Ide opäť o jazyky prekladané do bajtovéhokódu, ktoré navyše poskytujú niečo, čo vyzerá samozrejme, ale bohužiaľ to samozrejmé nie je – triedu, napísanú v jednom jazyku, je možné používať i v iných jazykoch (v inom jazyku od nej je možné napríklad odvodiť potomka.) Progranmovanie 2006 vývojové
Programovacie jazyky Vývojové prostredie
Vývojové prostredie • Na programovací jazyk sme sa mohli dívať ako na vrstvu vloženú medzi programátora a hardware, vrstvu, ktorá uľahčuje programátorovi prácu tým, že skrýva strojový kód. • Integrované vývojové prostredie, často označované skratkou IDE (Integrated Development Environment), predstavujú ďalšiu takúto vrstvu, tento krát vloženú medzi programátora a programovací jazyk. Progranmovanie 2006 IDE prvé
IDE Basic... • Historicky prvé IDE so sebou priniesol v roku 1963 jazykBasic. Tento jazyk bol od počiatku interpretovaný, takže poskytoval programátorom možnosť spúšťať si úseky programu a hneď vidieť ich výsledky. • To umožnilo interaktívnu prácu pri vývoji programov, ktorá je podstatne efektívnejšia než v tej dobe štandardné dávkové spracovanie. • Avšak skutočný význam Basic získal, až keď sa terminály, umožňujúce interaktívnu prácu, stali štandardnou súčasťou výpočtových stredísk Progranmovanie 2006 IDE
IDE SmallTalk... • Ďalší významný krok vo vývoji IDE priniesol jazyk Smalltalk na začiatku 80. rokov. • Graficky orientované IDE je neoddeliteľnou súčasťou tohto jazyka, pretože sa skladá z objektov, ktoré sú súčasťou knižníc a ktoré je možné využívať aj v programe. • Toto prostredie taktiež prinieslo možnosť interaktívneholadenia Progranmovanie 2006 Klasické
IDE Pascal,C • Z hľadiska rozšírenia nie je možné obísť IDE prekladača programovacích jazykovC a Pascalu na PC od poloviny 80. rokov; masový predaj týchto nástrojov umožnil ich rýchly vývoj. • Prvé verzie v polovine 80. rokov neobsahovali o mnoho viac než editor, prekladač a nápovedu; na začiatku 90. rokov pribudol integrovanýladiaciprogram - debbuger. Progranmovanie 2006 Visual
VisualBasic, Delphi • Zatiaľ čo na konci 80. rokov sa IDE zaoberalo jednotlivýmiprogramami a v prvej polovine 90. rokov projektmi, dnes sa hovorí o riešených skupináchprojektov. • V dnešných IDE k základnej štvorici, tvorenej prekladačom, editorom, ladiacimprogramom a nápovedou, pribúdajú ďalšie nástroje, ako sú sprievodcovia – wizard, inspector, atď., ktorí automatizujú rutinné operácie, generujú opakujúce sa časti kódu Progranmovanie 2006 Prístup
Programovacie jazyky Prístup k programovaniu
Prístupy k programovaniu • V ranných dobách programovania sa nehovorilo o programovacom štýle, o prístupe k programovaniu, o metodike programovania alebo o programovacom paradigmate. • Ľudia programovanie chápali skôr ako umenie než ako technológiu s pevne danými postupmi. To sa však skoro začalo meniť. Progranmovanie 2006 Modulárne
Modulárne programovanie • Na konci 50. rokov vzrástol výkon počítačov a s ním aj zložitosť programov. • Programátori si začali uvedomovať potrebu rozdeliť program na viac samostatných časti a tieto časti potom opakovane využívať, čo viedlo k vzniku modulárnehoprogramovania, ktoré zaviedlo modul ako základní jednotku programu. • Modul je uzavretá, spravidla samostatne prekladaná súčasť, ktorá prostredníctvom svojho rozhraní poskytuje služby ostatným častiam programu. Progranmovanie 2006 Štruktúrované ...
Štruktúrované programovanie • Na konci 60. rokov sa tiež začalo hovoriť o softwarovej krízii. • Tento pojem vyjadroval priepastný rozdiel medzi prudko rastúcou úrovňou hardwaru a úrovňou tvorby softwaru. • Výsledkom týchto diskusií bol nový prístup k programovaniu, označovaný ako štruktúrovanéprogramovanie. Progranmovanie 2006 štruktúrované
Štruktúrované programovanie • základnou myšlienkou bolo písať programy tak, aby boli jednoducho zrozumiteľné nie len pre počítač, ale aj pre človeka, aby ich mohol jednoducho opravovať, udržovať a rozvíjať. • Po formálnej stránke tento prístup požadoval, aby sa program skladal len z postupnosti príkazov, z cyklov a z rozhodovaní. • Každá z týchto konštrukcií pritom smie mať práve jeden vstupný a právejedenvýstupnýbod Progranmovanie 2006 jackson
Jacksonovediagramy • Spolu so štruktúrovaným programovaním sa v 70. rokoch objavili i metodiky, ktoré poskytovali návod, ako zo zadania odvodiť logicky správnu a pritom prehľadnú štruktúru programu. • Niektoré s nich sa opierali o predstavu, že štruktúra programu musí vychádzať zo štruktúry dát - napr. že opakujúce sa dáta rovnakého typu na vstupe budeme spracovávať cyklom a pod. • Asi najznámejšie metodika štruktúrovaného programovania pochádza od M. Jacksona a opiera sa o tzv. Jacksonovediagramy Progranmovanie 2006 diagramy
Jacksonovediagramy Asi najznámejšia metodika štruktúrovaného programovania pochádza od M. Jacksona a opiera sa o tzv. Jacksonovediagramy Progranmovanie 2006 OOP
OO Programovanie • Ak si odmyslíme všetky marketingové poviedky o revolučnosti, zásadnom prínose apod., ktoré sme v súvislosti s objektovoorientovanýmprogramovaním (OOP), zistíme, že OOP nie je nič iného než logické pokračovanie predchádzajúcich dvoch prístupov. • Samozrejme, OOP prinieslo nové pojmy, nové postupy a nové nástroje a prechod programátorov k nemu bol veľmi pozvoľný, aspoň v merítku vývoja informačných technológií. Progranmovanie 2006 Pojmy ...
Pojmy OOP • OOP sa točí okolo pojmu trieda, čo je vlastne programový model triedyobjektov z reálneho sveta, z oblasti riešeného problému. • Ako objekty potom označujeme premenné alebo konštanty týchto typov - vlastnosti. • Trieda je vlastne modul, v ktorom sú zapúzdrenédáta - ako dáta jednotlivých inštancií, tak i dáta tried ako celkov. • Operácie, ktoré je možné s týmito dátami vykonávať, sa označujú ako metódy. Objektovo orientovaný program sa skladá z objektov, ktoré si navzájom posielajú správy, t.j. volajú svoje metódy. Progranmovanie 2006 Pojmy
Pojmy OOP • Mechanizmus označovaný nie príliš vhodne ako dedenie umožňuje odvodiť od jednej triedy ďalšie, ktoré predstavujú podtriedy, špecializácie pôvodnej triedy. OOP taktiež prišlo s ideou polymorfizmu: so všetkými inštanciami by malo byť možné zachádzať rovnakým spôsobom, teda posielať im rovnaké správy. • Implementácia polymorfizmu sa v rôznych programovacích jazykoch a prostrediach líši, sú rôznym spôsobom obmedzené Progranmovanie 2006 UML
JazykUML • Taktiež pre OOP sa objavil rad metodík; dnes majú celkom dominantné postavenie metodiky založené na modelovacom jazykuUML (Univrsal Modeling Language). • Niektoré z nich vychádzajú zo starších metodik pre návrh databázií, napr. z entitne-relačnýchdiagramov. Progranmovanie 2006 komponentové
Ďalší prístup k programovaniu • komponentovéprogramovanie založené na znovu použiteľných komponentoch - samostatne vyvíjaných a dodávaných triedach alebo skupinách tried, ktoré poskytujú presne vymedzené služby VCL – Visual Component Library Progranmovanie 2006 šablónové
Ďalší prístup ... • šablonovémetaprogramovanie - ide o prístup založený na využití šablón, ktorý je možné stručne charakterizovať ako snahu nechať miesto vlastného programu počítať prekladač. Zatiaľ je obmezené na jazyk C++ Progranmovanie 2006 aspektovo
Ďalší prístup ... • Dnes sa tiež začína hovoriť o aspektovoorientovanomprogramovaní. V ňom ide o implementáciu aspektov - vlastností spoločných inak nesúvisiacim triedam. • Objavili sa už aj prvé nástroje, ktoré túto možnosť poskytujú - napr. AspectJ od Eclipse. Progranmovanie 2006 Agentovo
Ďalší prístup ... • Medzi často skloňované pojmy patrí dnes i agentovoorientovanéprogramovanie, založené na agentoch, programoch schopných priebežne a samostatne plniť určité úlohy v distribuovanom prostredí. Progranmovanie 2006 Java
Ďalší prístup ... • Pravdepodobne najpopulárnejším programovacím jazykom je dnes Java. • Narazíme na ňu všade, kde nie je kritická rýchlosť odozvy. Jej zásadnou prednosťou sú bohaté a neustále sa vyvíjajúce knižnice pre najrôznejšie aplikácie. Progranmovanie 2006 PHP
Ďalší prístup ... • Vedľa Javy patria k najpoužívanejším jazyky preskriptovanie v prostredí internetu na strane klienta aj serveru; typicky ide o PHP alebo Perl, v poslednej dobe sa stále častejšie objavuje aj Python. • Podobne ako Java poskytujú prepracované knižnice, aj keď zďaleka nie v takej šírke - aspoň doteraz. Pre výmenu dokumentov sa používa značkovací jazyk XML Progranmovanie 2006 SQL
Structured Query Language • Data Definition Language (DDL) • Data Manipulation Language (DML) • Data Control Language (DCL) • Transaction Control Comands (TCC) Progranmovanie 2006 DDL