Fejlett programozási nyelvek C++



Hasonló dokumentumok
C programozás. 1 óra Bevezetés

ME Szoftverfejlesztés

Adatstruktúrák Algoritmusok Objektumok

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

Programozási nyelvek (ADA)

Bevezetés az informatikába

Programzás I gyakorlat

Történeti áttekintés

Elôszó a magyar kiadáshoz A Kiadó Elôszó

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Fordítóprogramok. Aszalós László szeptember 7.

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

4. Programozási nyelvek osztályozása. Amatőr és professzionális

Bevezetés. Dr. Iványi Péter

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Programozási technológia 1.

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Programozási nyelvek JAVA EA+GY 1. gyakolat

A TANTÁRGY ADATLAPJA

A TANTÁRGY ADATLAPJA

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

PROGRAMOZÁSI NYELVEK ÖSSZEHASONLÍTÓ ELEMZÉSE *

Adatbázis és szoftverfejlesztés elmélet

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Bevezetés a C++ programozási nyelvbe

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Programozás 1. Dr. Iványi Péter

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

A TANTÁRGY ADATLAPJA

Programok értelmezése

Programozás elmélete

SZOFTVERFEJLESZTÉS. Földtudományi mérnöki mesterszak / Geoinformatikus-mérnöki szakirány. 2017/18 II. félév. A kurzus ebben a félévben nem indult

A TANTÁRGY ADATLAPJA

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

A TANTÁRGY ADATLAPJA

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Programozás s 2. Alapok

Szoftvertechnológia alapjai Java előadások

1. Alapok. Programozás II

Programozás elmélet tananyag

A.NET Framework és programozása C# nyelven. Kedd I104

Programozási nyelvek (ADA)

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

2018, Funkcionális programozás

Programozás alapjai. 2. előadás

Programozás III. - NGB_IN001_3

FUNKCIONÁLIS PROGRAMOZÁS

Szkriptnyelvek. 1. UNIX shell

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Rekurzió. Dr. Iványi Péter

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

C programozási nyelv

Programozás alapjai (ANSI C)

Bevezetés a Python programozási nyelvbe

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

o a PC blokkvázlatos felépítése:

Fordító Optimalizálás

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

A programozás alapjai

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Java II. I A Java programozási nyelv alapelemei

Szoftver-technológia II. Modulok és OOP. Irodalom

Bevezetés az informatikába

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Programozás II. 2. Dr. Iványi Péter

IK Algoritmusok és Alkalmazásaik Tsz, TTK Operációkutatás Tsz. A LEMON C++ gráf optimalizálási könyvtár használata

Programozás módszertan p.1/46

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Nyékyné Gaizler Judit 2.1. A jelkészlet ffl 29 Az ASCII kód ffl 31 Az EBCDIC kód ffl 31 Az ISO 8859 család ffl 32 A Unicode szabvány ffl 32

Komputeralgebra rendszerek

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Objektumorientált programozás C# nyelven

Szoftver-technológia II. Tervezési minták. Irodalom. Szoftver-technológia II.

Kedvenc Ingyenes editorok avagy milyen a programozó jobbkeze? PSPAD editor DEVPHP IDE

Mintavételes szabályozás mikrovezérlő segítségével

AZ INFORMATIKA OKTATÁSÁNAK MÚLTJA ÉS JELENE A KOLOZSVÁRI EGYETEMEN

Programozási nyelvek 6. előadás

Ismeretanyag Záróvizsgára való felkészüléshez

Törley Gábor PROGRAMOZÁSI NYELVEK, KÖRNYEZETEK KIFEJEZŐEREJÉNEK VIZSGÁLATA

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Ezt a könyvet arra szántuk, hogy programozói csapatoknak biztosítson kódolási szabályokat, mégpedig két okból:

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Átírás:

Fejlett programozási nyelvek C++ Antal Margit 2010 slide 1

Témák Fontos tudnivalók Programozási paradigmák Programozási nyelvek slide 2

I. Fontos tudnivalók Jegy ) 3 számítógépes felmérő (50%) 4. hét 8. hét 12.hét gyakorlati jegy (40%) - minden laborfeladat kötelező elődás jelenlét: 10% slide 3

Könyvészet Antal Margit, Fejlett programozási technikák, Scientia, 2006. (jegyzet) [Vitaly] Vitaly Shmatikov: http://www.cs.utexas.edu/~shmat/courses/cs345_spring08/ Bjarne Stroustrup, A C++ programozási nyelv, Kiskapu, 2001. Nicolai M. Josuttis, The C++ Standard Library, A Tutorial and Reference, Addison-Wesley, 1999. Andrei Alexandrescu, Programarea moderna în C++, Teora, 2002. Scott Meyers, STL biblioteca programatorului, Teora, 2002. slide 4

Könyvészet Matthew H. Austern, Generic Programming and the STL, Addison-Wesley, 1999. David Vandevoorde, Nicolai M. Josuttis, C++ Templates, Addison-Wesley, 2003. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Programtervezési minták, Kiskapu, 2004. James O. Coplien, Multi-Paradigm Design for C++, Addison-Wesley, 2003. Andrei Alexandrescu, Herb Sutter, C++ kódolási szabályok, Kiskapu, 2005. slide 5

Gyakorlati jegy Minden gyakorlatot kötelező bemutatni A másolás vizsgáról való kizárást jelent Adott heti gyakorlatot az adott héten, illetve a rákövetkező héten lehet bemutatni! slide 6

Mit tanulunk? Programozási paradigmák Fogalmak a modern programozási nyelvekben A C++, mint egy többelvű programozási nyelv procedurális (imperatív) elemek objektumorientált elemek generikus elemek STL - Standard Template Library slide 7

Dijkstra on Language Design [Vitaly] The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence. FORTRAN, 'the infantile disorder is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use. It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. slide 8

TIOBE Programming Community Index for February 2010 Position Programming Language Rating 1 Java 17,34% 2 C 16,60% 3 PHP 10,01% 4 C++ 9,44% 5 (Visual) Basic 7,05% 6 C# 5,01% 7 Python 4,31% 8 Perl 3,60% 9 Delphi 2,65% 10 JavaScript 2,63% http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html slide 9

HipHop for PHP Facebook 2010 PHP --->C++ (optimalizált) forráskód átalakító g++ GNU Compiler PHP szkript nyelv C++ kompilált nyelv Eredmény: szerveroldali CPU-idő 50%-al csökkent slide 10

II. Programozási paradigmák Imperatív (procedurális) Funkcionális Objektumorientált Logikai Szkriptek A programozási nyelvek általában hibrid nyelvek, több programozási paradigmát is támogatnak slide 11

Programozási paradigmák hogyan kellene felépíteni a programokat? procedurák matematikai függvények objektumok... slide 12

Imperatív paradigma jellemzők: parancs- pl. értékadás állapot változók pillanatnyi értékeinek halmaza program: parancsok sorozata Nyelvek: Fortran, Algol, Cobol, PL/I, Pascal, Modula-2, Ada, C slide 13

Objektumorientált paradigma alapfogalmak: objektumok üzenetek Program: üzenetek sorozata Nyelvek: Simula, Smalltalk, C++, Modula-3, Java (imperatív OO nyelvek) CLOS (Common Lisp Object System) nem imperatív slide 14

Funkcionális és logikai Funkcionális matematikai függvény nincs állapot, mellékhatás nem minden funkcionális nyelv tiszta (DEFUN EXISTS ( ATOM LIST ) (COND ((NULL LIST) NIL) ((EQ ATOM (CAR L)) ((EXISTS ATOM (CDR L))) ) ) Logikai slide 15

Szkript nyelvek magas szintű nyelvek gyakran komponensek összeragasztására használják dinamikusan típusos gyengén típusos nagyon elterjedt a webalkalmazások készítésére slide 16

Statikusan és dinamikusan típusos statikusan: változó típusa már fordításidőben eldől kompilált nyelvek biztonságos dinamikusan: változó típusa futásidőben dől el értelmezett nyelvek a hibák csak futásidőben derülnek ki slide 17

Több milliárd dolláros tévedés sikertelen az Ariane 5 rakéta fellövése (1996) $7 milliárd a fejlesztési költség szoftver hiba 64 bites lebegőpontos szám (vízszintes sebesség) átalakítása 16 bites egész számmá; a szám nagyobb volt mint 32767 [Vitaly] slide 18

Programozási nyelvek átalakítása Natív-kód fordító: gépi kód Kompilált nyelvek: Fortran, C, C++, Pascal,... Értelmező (interpreter): belső formátumra alakít és utána végrehajtja (read-eval-print ciklus) Értelmezett nyelvek: Basic, Scheme, Haskell, Python Bájtkód fordító: hordozható bájtkód a bájtkódot egy virtuális gépen kell végrehajtani (Java) Hibrid fordítás: Forrásnyelvre alakítás (C++ C gépi kód) Just-in-time Java fordítók a gyakran hívott bájtkód darabokat az első végrehajtáskor natív kóddá alakítják slide 19

Fordítás gépi kódra [Vitaly] Lexikális elemző tokens Szintaktikus elemző forráskód Preprocesszor forráskód ASTs Köztes kódgenerálás IC Optimizáló ICopt Végleges kódgenerálás ASM Assembler Gépi kód slide 20

Fordítás lépései Előfeldolgozás szöveghelyettesítés Lexikális analízis kulcsszavak, azonosítók, konstansok szimbólum sorozat Szintaktikai analízis: szintaxis-fa Kódgenerálás köztes kód optimalizálás gépi kód slide 21

Értelmező (interpreter) Read Eval -Print bemenő kifejezés REPL interpreter eredmény Interpreter processz Mi a hátránya az értelmezett programnak a fordítotthoz képest? slide 22

Bájtkód forrás program Bájtkód fordító bájtkód Bájtkód interpreter eredmény Emulált virtuális gép A bájtkód a gépi kódhoz hasonló, de nem valós mikroprocesszor utasításokat hanem virtuális mikroprocesszor utasításokat tartalmaz. 1. lépés: fordítás forráskód -->bájtkód 2. lépés: értelmezés bájtkód interpreter megvalósítja (emulálja) a virtuális gépet és ezen végrehajtja a bájtkódot Mi az előnye a bájtkódnak a gépi kódhoz képest? slide 23

Kötés (binding) Binding = asszociáció egy objektum és annak egy tulajdonsága között változó - típus változó - érték Kötéstípusok Early binding korai kötés - fordítási időben Late binding késői kötés futási időben slide 24

III. Programozási nyelvek I have regarded it as the highest goal of programming language design to enable good ideas to be elegantly expressed. Sir Charles Antony Richard Hoare -best known for the development in 1960 of Quicksort (Hoaresort), slide 25

Programozási nyelv számítások formális leírása jellemzők: szintaxis szemantika (jelentés)- minden egyes szintaktikai egységre gyakorlati megvalósítás egy valós vagy virtuális gépre hatékonyság vagy hordozhatóság slide 26

Assembly nyelv [Vitaly] 1950-es évek elején bináris műveletkódok helyett szöveges kódok push ebp mov ebp, esp sub esp, 4 push edi slide 27

FORTRAN procedurális, imperatív nyelv kutatásban napjainkban is használják 1950 - IBM -John Backus (1924-2007) Backus 1977-ben Turing díjat kapott slide 28

FORTRAN --> LISP Anyone could learn Lisp in one day, except that if they already knew FORTRAN, it would take three days - Marvin Minsky slide 29

LISP John McCarthy matematikus (1927-...) 1971 -Turing díj a lambda-kalkulus bevezetése hozzajárult a PL fogalmak bevezetéséhez: automatikus memóriafelszabadítás (garbage collection) dinamikusan tipizált slide 30

Algol 60 Tervezés: 1958-1960 Modern programozási nyelvek BNF - Backus Naur Form Peter Naur (Dánia): 2005 Turing díj procedura, változó deklarálás, rekurzív eljárások, verem használata alprogram hívására Birth of computer science -- Dijkstra A language so far ahead of its time that it was not only an improvement on its predecessors, but also on nearly all its successors -- Hoare slide 31

Pascal Niklaus Wirth svájci elektromérnök tervezte 1970-ben 1984 Turing díj Jellemzők hasznos struktúrák népszerű a programozás tanításában ipari környezetben nem sikeres 1980: Modula-2 1988: Oberon slide 32

SIMULA 67 Ole-Johan Dahl (1931-2002) norvég informatikus Kristen Nygaard (1926-2002) norvég matematikus és informatikus 2001 közösen kaptak Turing díjat Első objektumorientált nyelv osztályok és objektumok öröklődés virtuális eljárások slide 33

BCPL / B / C nyelvcsalád Alacsony szintű nyelv: kézi memóriakezelés explicit pointer(cím)kezelés gyengén típusos (char int) rendszerprogramok készítésére alkalmas PDP-7, PDP-11, VAX, Unix munkaállomás és PC C nyelv = hordozható assembly nyelv slide 34

B 1969: Ken Thomson mérnök (és Dennis Ritchie mérnök), Bell Labs Tömör nincsenek egymásba ágyazott függvények Pre-/postfix jelölés: x++ és ++x, x:=x+1 helyett null karakterben végződő karakterláncok Ken Thompson és Dennis Ritchie slide 35

C Bell Labs 1972 (Dennis Ritchie mérnök) A UNIX op. rendszerrel egyszerre tervezték 1983 Turing díj K. Thompson és D. Ritchie natív kódra fordítás slide 36

C típusok C típusok int int int int int int int i, *pi, **ppi; f(); *f(); **f(); *(*pf)(); (*pf)(int); *api[10]; slide 37

C standardok 1973-1980: új típusok unsigned, long, union, enums 1978: megjelent a K&R C könyv 1989: ANSI C standard Függvény prototípus mint a C++ nyelvben 1999: ISO 9899:1999, C99" Concurrent C, Objective C, C++, C# slide 38

C++ Bell Labs 1979 (Bjarne Stroustrup, dán informatikus) C with Classes (1983: C++ nyelv) a Simula nyelv befolyásolta Kezdetben C forrásnyelvre alakított majd natív kódra GNU g++ PL-ből átvett fogalmak több ősosztály sablonok, generikus programozás kivételek kezelése slide 39

Java Sun 1991-1995 (James Gosling informatikus) Oak, eredeti név háztartási gépek vezérlésére tervezték C, C++ és Modula-3 keverék eltérések, C++ nincs többszörös származtatás nincs operátor túlterhelés Modula-3, hasonlóságok interfész típus egy ősosztály kivételkezelés beépített szálkezelés slide 40

Programozási nyelvek fejlődése Keressük a legjobb módszereket szoftverek építésére A jó ötletek fennmaradnak Algol Simula Smalltalk C with Classes C++,,Céltudatosan'' fejlesztett nyelvek: Szkript nyelvek: Perl, Tcl, Python, PHP, stb. PHP is a minor evil perpetrated by incompetent amateurs, whereas Perl is a great and insidious evil, perpetrated by skilled but perverted professionals. - Jon Ribbens slide 41