PRG003 rysy a odkazy

Z ωικι.matfyz.cz
Přejít na: navigace, hledání

Úvodní slovo[editovat | editovat zdroj]

Tuto sbírku stručných informací a odkazů vytvořil původně jako XHTML dokument Michal Šrajer, později bylo vše portováno do Wiki (proto také vypadají například linky tak jak vypadají :), kde snad bude dokument dál žít vlastním životem ..

obecné odkazy[editovat | editovat zdroj]

Fortran[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • strojová nezávislost
  • srozumitelnost pro ne-programátory
  • common blocks

odkazy[editovat | editovat zdroj]


Algol[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • poprvé bloková struktura
  • syntaxe definována pomocí BNF (bezkontext. gramatika)
  • parametry předávány jménem nebo hodnotou
  • možnost rekurze
  • dynamické pole
  • uživatelem def. datové typy
  • klíčová slova nesmí být využita jinak
  • poprvé ELSE vetva
  • slabé I/O
  • mnoho side-efektů (předávání jménem, indexované proměnné cyklu)

odkazy[editovat | editovat zdroj]


PL/1[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • vyjímky
  • mnoho typů
  • přístup k Job Control Language

odkazy[editovat | editovat zdroj]


APL[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • funkcionální jazyk
  • ne-ascii znaky (řecká písmena)
  • dynamická pole .. silný v maticích (možnost výběru celých řádků a sloupců)
  • interaktivní
  • možnost přetížit operátory a symboly
  • logické hodnoty ( 1 - true, 0 - false)
  • podm. skoky (na automaticky číslované řádky :)
  • přiřazení mělo hodnotu (podobně jako v C)

odkazy[editovat | editovat zdroj]


Simula[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • prvni objektově orientovaný jazyk, klíčové slovo none pro prázdnou referenci
  • dva typy přiřazení
    •  := 'algolítko' - pro základní datové typy
    •  :- 'simulítko' - pro referenční proměnné
  • procesy
  • diskrétní a spojitá simulace
  • nadmnožina Algolu, zůstala side-efektnost, dynamické pole
  • jeden z posledních jazyků s operátorem umocňování

odkazy[editovat | editovat zdroj]


ADA[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • balíčky (packages)
  • silný typový systém
  • výjimky
  • šablony (generiky)
  • paralelismus

odkazy[editovat | editovat zdroj]

Smalltalk[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • čistě objektový
  • vše je posílání zpráv objektům
  • všechny metody virtuální
  • iterátory select a reject (vybírajé prvky podle podmínky), collect sezbírá výsledky aplikace výrazu

odkazy[editovat | editovat zdroj]


CLU[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • poprvé iterátory
  • moduly
  • typové CLUstery

odkazy[editovat | editovat zdroj]


Prolog[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • logické programování
  • backtracking

odkazy[editovat | editovat zdroj]


Lisp[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • funkcionální programování
  • rekurze
  • garbage collector

odkazy[editovat | editovat zdroj]


Haskell[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

  • funkcionální jazyk
  • mečování

odkazy[editovat | editovat zdroj]


Pascal[editovat | editovat zdroj]

http://www.freepascal.org/ - podobné Borland Pascalu - bez nápovědy, musí se donastavit

http://spsemoh.cz/vyuka/pascal/file.htm

http://ksvi.mff.cuni.cz/~holan/ide.pdf - Tomáš Holan - IDE Pascalu

http://www.dbme.feec.vutbr.cz/homes/provaznik/page.php?lang=cz&page=pp2.php - propracované zápisky o Pascalu

C/C++[editovat | editovat zdroj]

rysy[editovat | editovat zdroj]

odlišuje objekt a ukazatel na něj

  • Proměnná typu T je vždy objekt typu T a žádného jiného, přestože do ní lze přiřadit i objekt odvozeného typu.
  • class U : public T { /*...*/ }; U y; T x = y; // toto je kopie části objektu y do vznikajícího objektu x.
  • Nefunguje naivní implementace polymorfního typu.

default constructor

  • Kompilátor se jej pokusí vygenerovat, je-li to třeba a pokud třída nemá vůbec žádný konstruktor.
    • Generovaný konstruktor volá konstruktor bez parametrů na všechny předky a položky (což nemusí jít např. pro neexistenci takového konstruktoru).

copy-constructor

  • vola se napr. pri
    • předávání parametrů hodnotou a předávání návratových hodnot
    • vytvareni docasnych promennych ve vyrazech (a+b+c)
    • kopírování do nově-vznikající proměnné: T x = y;
  • Kompilátor se jej pokusí vygenerovat, je-li to třeba a pokud třída kopírovací konstruktor nemá.
    • Položky, které nejsou třídami, jsou kopírovány.
    • Na předky a položky se volá kopírovací konstruktor (což nemusí jít kvůli ochraně přístupu).

destructor

  • Každá abstraktní třída má mít virtuální destruktor. Proč? Pokud je objekt destruován operátorem delete aplikovaným na ukazatel na předka, musí být destruktor v tomto předku deklarován jako virtuální.

abstraktni trida

  • Třída obsahující alespoň jednu čistě virtuální funkci.
  • Představuje rozhraní, které mají z ní odvozené třídy (potomci) implementovat.
  • Nelze delat instance takové třídy.. :))

nasobna dedicnost

  • Obvykle musí být virtuální, aby odpovídala sjednocení:
    • Fyzikář = Pedagogika + Fyzika; Matikář = Pedagogika + Matematika; Fyzikář+Matikář nemá mít dvě rozhraní pro Pedagogiku.

templates

  • Šablona třídy je generická třída parametrizovaná libovolným počtem formálních parametrů těchto druhů: celé číslo, ukazatel libovolného typu, libovolný typ.
  • Šablona funkce je generická globální funkce.
    • Pod stejným identifikátorem může být deklarováno několik různých šablon funkce a navíc několik obyčejných funkcí. Obyčejné funkce mají přednost před generickými.

exceptions

  • Destruktor nesmí skončit vyvoláním výjimky. Výjimka může být vyvolána uvnitř, ale musí být zachycena nejpozději uvnitř destruktoru. Jinak je program casto ukoncen nasilne, jako reseni vyjimky ve vyjimce pri odrolovavani zasobniku.
  • Konstruktor globálního objektu nesmí skončit vyvoláním výjimky. Není místo, kde ji zachytit. Stane-li se to, program končí. Jiné konstruktory ale výjimky volat mohou (a bývá to vhodné).
  • Copy-constructor typu v hlavičce catch-bloku nesmí skončit vyvoláním výjimky. Catch blok by nebylo možné vyvolat.

Stane-li se to, program končí.

  • Výjimka při výpočtu výrazu v throw příkaze - tento throw příkaz nebude vyvolán.
  • Výjimka v destruktoru při stack-unwinding povolena, pokud neopustí destruktor. Po zachycení a normálním ukončení destruktoru se pokračuje v původní výjimce.
  • Výjimka uvnitř catch-bloku povolena, pokud je zachycena uvnitř, ošetření původní výjimky může dále pokračovat (přikazem throw bez výrazu). Pokud není zachycena, namísto původní výjimky se pokračuje ošetřováním nové.
  • Kompilátory samy ošetřují některé výjimky. Dojde-li k výjimce v konstruktoru některého prvku, úspěšně zkonstruované prvky budou destruovány.
  • Silna (transakcna) a slaba (invariantna) bezpecnost výjimek.

odkazy[editovat | editovat zdroj]

Java[editovat | editovat zdroj]

C#[editovat | editovat zdroj]