Trochu teórie

Prečo ideme programovať v Delphi?
Čo znamená objektovo - orientovaný jazyk?
Zopakujme si, čo vieme z "Pascalu"!
Práca s farbami


Prečo ideme programovať v Delphi?      Nahor
  • Delphi je vizuálne programové prostredie, ktoré slúži na vývoj aplikácií pre OS Windows (podobne ako Visual Basic, C++Builder a pod.) - takéto prostredia zjednodušujú programovanie Windows aplikácií - vzhľad aplikácie pod Windows môžeme zostavovať z ponuky komponentov, pričom samotné vývojové prostredie (napr. Delphi) pomáha pri začleňovaní zodpovedajúceho kódu

  • takéto moderné programovacie jazyky umožňujú začať programovať objektovým prístupom – je to metodológia, bez ktorej sa v súčasnosti nezaobídeme pri práci v tíme, pri práci s veľkými projektmi, pri tvorbe Windows aplikácií

  • v Delphi sa programuje moderným programovacím jazykom objektovým pascalom - tento vychádza z Turbo Pascalu, ale pritom si treba uvedomiť, že Pascal sa v informatickej komunite považuje za "esperanto" programovacích jazykov

  • je ideálny jazyk ako úvodný pri vyučovaní programovania - môžeme sa v ňom naučiť veľmi efektívne programovať modernými metódami, kto ovláda Pascal, ľahko neskôr prejde na iné procedurálne programovacie jazyky


Čo znamená objektovo - orientovaný jazyk?      Nahor
    V doterajších príkladoch sme zadefinovali a používali buď jednoduché premenné (integer, real, char, ...), štruktúrované premenné (array, set, record, ...). V predchádzajúcom príklade sme však pouťili premenné typu grafická plocha TImage, typu tlačidlo TButton atď. Tieto premenné sa líšia od "obyčajných" premenných tým, že

  • pamätajú si svoj momentálny stav v svojich tzv. stavových premenných (napr. pozícia, farba, tvar, ...)

  • majú svoje súkromné príkazy, pomocou ktorých ich nejako riadime, resp. meníme ich stavové premenné - takýmto príkazom (sú to procedúry) hovoríme metódy

  • musia byť vytvorené (nie deklarované) špeciálnym spôsobom - konštruktorom ( Create(...); ) a kým sa takto nevytvoria, nesmú sa vôbec používať

  • takýmto premenným hovoríme OBJEKT - object a typom, z ktorých vytvárame objekty (napr. TCanvas) hovoríme TRIEDA - class, niekedy sa objektu hovorí aj inštancia triedy

  • stretli sme sa už s objektmi ako sú napr. Form1, Image1, Button1 aj premenná g, ktoré sú inštanciou triedy TCanvas

  • zatiaľ si o objektoch treba zapamätať, že sú to premenné, ktoré môžu v sebe obsahovať veľa stavových premenných a tiež "v sebe" obsahujú nejaké svoje procedúry (metódy) => tomuto hovoríme zapuzdrenie - enkapsulácia, lebo v jednom "puzdre" sú aj údaje (stavové premenné) aj algoritmy (metódy), ktoré vedia s týmito údajmi pracovať

  • okrem zapuzdrenia medzi ďalšie vlastnosti objektov patrí dedičnosť - inheritance - od definovaného objektu môžeme odvodiť celú hierarchiu objektov t.j. potomkov, ktoré dedia prístup k dátovým aj programovým zložkám a polymorfizmus - zdielanie akcií v hierarchii objektov.



Zopakujme si, čo vieme z "Pascalu"!      Nahor

Logické hodnoty, logické výrazy

- každý výraz sa vyhodnocuje zľava doprava
- vždy je buď pravdivý alebo nepravdivý, má jednu z dvoch logických hodnôt true alebo false
- logickú hodnotu vrátia napr. relácie: <, <=, =, <>, >=, >
- logické operátory: not, or, and, xor
- priorita operátorov:
    not
    *, /, div, mod, and
    +, –, or, xor
    =, <>, <, >, <=, >=, in
    unárne
    multiplikatívne
    aditívne
    relačné


FOR - cyklus = cyklus a určitým počtom opakovaní

for riadiaca_premenná:=výraz1 to výraz2 do príkaz

Pre riadiacu premennú (premennú cyklu for) platí:
- priradí sa jej hodnota akú nadobúda výraz1
- výraz2 sa vyhodnotí na začiatku cyklu
- ak je jeho hodnota menšia ako hodnota výraz1, cyklus sa nevykoná
- ak je výraz1=výraz2, cyklus prebehne práve raz
- inak riadiaca_premenná prechádza rozsahom hodnôt medzi výraz1 a výraz2
- musí byť ordinálneho typu (zatiaľ poznáme len celočíselný ordinálny typ - integer)
- jej hodnotu programátor v priebehu cyklu nesmie meniť, t.j. nesmie byť na ľavej strane žiadneho priraďovacieho príkazu počas prechodu for-cyklu
- po skončení cyklu má nedefinovanú hodnotu
Poznámka: Po skončení cyklu riadiaca premenná nemá hodnotu, ktorú nadobúda výraz2+1 ani žiadnu inú, jej podobnú.

While - cyklus = cyklus s podmienkou na začiatku

Táto programová konštrukcia slúži na opakovanie príkazov, kým je splnená nejaká podmienka
Všeobecný tvar príkazu je:

while podmienka do príkaz

- otestuje sa podmienka a ak je pravdivá (true), tak sa vykoná príkaz (t.j. telo cyklu) a celé sa to opakuje
- ak bude podmienka nepravdivá (false), tak sa telo cyklu už nevykoná a pokračuje sa na príkaze za cyklom
- ak podmienka bude mať stále hodnotu true, tak vznikne nekonečný cyklus - ak nekonečný cyklus (alebo veľmi dlho trvajúci cyklus) neobsahuje špeciálnu vsuvku pre Windows, tak počas cyklu sa systém nedostane ku slovu a tým sa napr. normálne nedá zhodiť bežiaci program
- jedným z riešení je raz začas použiť volanie Application.ProcessMessages;, ktoré pustí Windows na chvíľu ku slovu a tým dovolí používateľovi ukončiť aplikáciu alebo zatlačiť tlačidlo a pod. - toto volanie ale trochu spomalí priebeh výpočtu

Repeat - cyklus = cyklus s podmienkou na konci

Táto programová konštrukcia slúži na opakovanie príkazov, až kým nie je splnená nejaká podmienka
Všeobecný tvar príkazu je:

repeat
    príkaz 1
    príkaz 2
    ...
    príkaz k


until podmienka

- tento cyklus opakovane vykonáva telo cyklu (príkazy medzi slovami repeat a until) a po každom takomto vykonaní týchto príkazov, otestuje podmienku cyklu (logický výraz za slovom until)
- keď je podmienka splnená (hodnota je true), cyklus končí a pokračuje sa príkazmi za cyklom
- keď je podmienka nepravdivá (hodnota je false), cyklus pokračuje - hovoríme tomu podmienka ukončenia cyklu
- tento cyklus sa správa "opačne" ako cyklus while
- telo cyklu sa vykoná vždy aspoň raz, aj keď je podmienka hneď na začiatku splnená

If a Case

if podmienka then príkaz 1 else príkaz 2

- ak je podmienka splnená, vykoná sa vnorený príkaz 1, ak je hodnota podmienky nepravda, tak sa vykoná vnorený príkaz 2. Neúplný príkaz nemá časť "else".

case výraz of     konštanta1: príkaz1;
    konštanta2: príkaz2;
    ...

    else príkazy
end;
pričom vetva else (podobne ako pri if) môže chýbať, výraz aj konštanty môžu byť len celočíselného typu

Procedúry - podprogramy

procedure meno;
    ... // lokálne deklarácie pre procedúru
    begin
    ... // telo procedúry
    end;
- pri volaní podprogramu mu môžeme poslať nejaké hodnoty, aby sme nemuseli rôzne špeciality nastavovať v globálnych premenných, v podprograme zadefinujeme špeciálne lokálne premenné, tzv. formálne parametre, do ktorých sa pred samotným volaním priradia (inicializujú) hodnoty skutočných parametrov.

Štandardné jednoduché typy INTEGER, REAL, BOOLEAN, CHAR

Integer
- hodnoty sú z intervalu -2147483648 .. 2147483647
- zaberá 4 bajty = 32 bitov, 1bit znamienko
- definované sú aritmetické operácie +, -, *, div, mod, obidva operandy sú celé čísla
- relačné operácie <, <=, ..., funkcie pred a succ, príkazy inc a dec
- štandardné funkcie, napr. sqr, abs
- šestnástkové konštanty - $, napr. $1e=30

Real
- čísla vyjadrené desatinným zápisom aj s exponentom
- obsahuje des. bodku, exponent približne ±300
- real ± (5.0 x 10^–324 .. 1.7 x 10^308 ) 15-16 číslic 8 bajtov
- ukážky reálnych čísel 1.23, -3.23989E+02, 9.89E-01
- pre každé číslo nevieme určiť nasledovné reálne číslo, t.j. medzi 0 a 0.0001 možno existuje číslo, nemá zmysel nasledovník, t.j. nefunguje pred ani succ, inc, dec
- operácie - +, -, *, /
- automatická konverzia - keď sa pri reálnej operácii vyskytne celočíslený operand konvertuje sa na reálne číslo, napr. 1+1.5, 1/3 = 1.0/3.0
- reálne operácie veľmi často majú chyby spôsobené realizáciou v počítači
- štandardné funkcie, napr. sqrt, sqr, sin, cos, abs

Boolean - konštanty - predefinované identifikátory konštanty true, false (ako predtým definované naše konštanty), v pamäti zaberá 1 bajt
- operácie and, or, not, xor
- FALSE - štandardné funkcie: ord, boolean( 0 alebo 1), napr. boolean(0)=FALSE, pred, succ

Char
- ordinálny typ, ktorý obsahuje sadu 256 znakov (tzv. ASCII), tieto sú usporiadané vnútorne sú reprezentované číselným kódom 0..255, t.j. zaberajú 1 bajt (8 bitov)
- znakové konštanty v apostrofoch alebo #kód
- treba si pamätať: ' '<...<'0'<'1'<...<'9'<...<'A'<'B'<...<'Z'<...<'a'<'b'<...<'z'
- znakové funkcie: pred, succ, ord, chr (char)
- treba si pamätať: ord(' ')=32; ord('0')=48; ord('1')=49; ... alebo #32=' '; #48='0'; #49='1'; ... ord('A')=65; ord('a')=ord('A')+32=97; ... t.j. #65='A'; #97='a'; ...
- ak c obsahuje znak cifry ('0'..'9'), tak ord(c)-ord('0')=cifra (podobne pre písmená)
- príkazy inc, dec fungujú aj pre znaky (napr. c:='A'; inc(c,32); )



Práca s farbami      Nahor

Už sme sa zoznámili s niekoľkými situáciami, keď sme zadávali nejakú farbu (farba pera, farba výplne, farba pera) - doteraz sme používali preddefinované konštanty, napr. clBlack, clRed, clBlue a pod.

Vo Windows sa farba určuje trojicou čísel, ktoré vyjadrujú v akom množstve treba "namiešať" tri základné farby - červenú, zelenú a modrú, aby vznikla žiadaná farba - množstvá týchto zložiek sa zadávajú celým číslom od 0 do 255 , napr. ak namiešame 0 červenej, 0 zelenej a 255 modrej, vznikne jasná modrá farba; 0 červenej, 0 zelenej a 0 modrej je čierna; všetky zložky po 255 znamená bielu; 255 červenej, 255 zelenej a 0 modrej vyrobí žltú a pod.

Vo Windows sa tieto zložky nazývajú Red Green Blue a v Delphi môžeme farby definovať aj pomocou funkcie RGB, ktorá dostáva 3 čísla popisujúce zastúpenie zložiek.

Mená niektorých preddefinovaných farieb:

clBlack
clMaroon
clGreen
clOlive
clNavy
clPurple
clTeal
clGray
clSilver
clRed
clLime
clYellow
clBlue
clFuchsia
clAqua
clLtGray
clDkGray
clWhite
RGB(0,0,0)
RGB(128,0,0)
RGB(0,128,0)
RGB(128,128,0)
RGB(0,0,128)
RGB(128,0,128)
RGB(0,128,128)
RGB(128,128,128)
RGB(192,192,192)
RGB(255,0,0)
RGB(0,255,0)
RGB(255,255,0)
RGB(0,0,255)
RGB(255,0,255)
RGB(0,255,255)
RGB(192,192,192)
RGB(128,128,128)
RGB(255,255,255)

Prvý program Obsah Niekoľko grafických príkazov