25
Informatika I 9. přednáška RNDr. Jiří Dvořák, CSc. [email protected]

Informatika I 9 . přednáška

  • Upload
    kuper

  • View
    33

  • Download
    5

Embed Size (px)

DESCRIPTION

Informatika I 9 . přednáška. RNDr. Jiří Dvořák, CSc. dvorak @uai.fme.vutbr.cz. Obsah přednášky. Vývoj programovacích technik Strukturované programování Modulární programování Objektově orientované programování. Vývoj programovacích technik. Strukturované programování - PowerPoint PPT Presentation

Citation preview

Page 1: Informatika I 9 . přednáška

Informatika I9. přednáška

RNDr. Jiří Dvořák, CSc.

[email protected]

Page 2: Informatika I 9 . přednáška

Informatika I: přednáška 9 2

Obsah přednášky

Vývoj programovacích technik

Strukturované programování

Modulární programování

Objektově orientované programování

Page 3: Informatika I 9 . přednáška

Informatika I: přednáška 9 3

Vývoj programovacích technik

Strukturované programování

Modulární programování

Objektově orientované programování

S tímto vývojem je spojeno: zvyšování úrovně abstrakce posilování principu ukrývání dat a implementačních detailů

Cílem těchto technik je zefektivnit tvorbu programů a zajistit, že vytvořené programy budou mít jasnou a srozumitelnou strukturu a budou snadno ověřitelné a rozšiřitelné.

Page 4: Informatika I 9 . přednáška

Informatika I: přednáška 9 4

Strukturované programování

Zásady a postupy strukturovaného programování: postup shora dolů při tvorbě programu používání doporučených datových a příkazových

struktur nepoužívání (resp. minimalizace používání)

příkazu goto členění programu do podprogramů grafická úprava programu, zvýrazňující jeho

strukturu používání výstižných identifikátorů a účelných

komentářů

Page 5: Informatika I 9 . přednáška

Informatika I: přednáška 9 5

Příkaz goto v PascaluPříkaz goto (příkaz skoku) způsobí předání řízení na příkaz označený

návěštím.

...goto návěští;...návěští: příkaz;...

Návěští je identifikátor nebo celé číslo bez znaménka od 0 do 9999 a musí být deklarováno v nejblíže nadřazeném bloku deklarací

label návěští;

Příkaz skoku i označený příkaz se musejí nacházet v témž bloku. To znamená, že nejsou možné skoky dovnitř bloku nebo ven z bloku.

Označený příkaz může být prázdný a tudíž je možné návěštím označit také koncové end nějaké příkazové struktury.

Page 6: Informatika I 9 . přednáška

Informatika I: přednáška 9 6

Možnosti náhrady příkazu goto v Borland a Object Pascalu

Použití příkazu goto je vhodné např. tehdy, když se jedná o ukončení procedury či programu skokem na konec příslušného bloku nebo o předčasné ukončení cyklu skokem na příkaz bezprostředně následující za příkazem cyklu. Pro tyto účely však existují následující náhrady:

break Tento příkaz způsobí předčasné ukončení cyklu; výpočet pokračuje příkazem bezprostředně následujícím za příkazem cyklu.

exitTento příkaz způsobí ukončení právě prováděného programu nebo podprogramu (procedury nebo funkce).

Page 7: Informatika I 9 . přednáška

Informatika I: přednáška 9 7

Modulární programováníModulární programování spočívá v členění programu do

programových modulů (jednotek), které jsou samostatně kompilovatelné.

. . .

. . .

program

moduly

procedury a funkce

Page 8: Informatika I 9 . přednáška

Informatika I: přednáška 9 8

Struktura moduluJméno moduluRozhraní (interface) modulu

dovoz modulu vývoz modulu

– deklarace veřejných konstant, proměnných a typů

– specifikace veřejných operací (procedur a funkcí)Implementační část modulu

deklarace soukromých konstant, proměnných a typů specifikace a implementace soukromých operací implementace veřejných operací

Page 9: Informatika I 9 . přednáška

Informatika I: přednáška 9 9

Program používající programové jednotkyprogram jméno_programu;

uses seznam jmen jednotek;deklarace návěští;definice konstant;definice typů;deklarace proměnných;deklarace procedur a funkcí;

beginpříkaz1;příkaz2;...

end.

Pozn.: V Pascalu se moduly označují jako jednotky (units).

Page 10: Informatika I 9 . přednáška

Informatika I: přednáška 9 10

Struktura programové jednotkyunit jméno_jednotky;interface

uses seznam jmen jiných jednotek;veřejné deklarace konstant, typů a proměnných;hlavičky veřejných procedur a funkcí;

implementationuses seznam jmen dalších jednotek;soukromé deklarace;implementace veřejných procedur a funkcí;

begininicializační příkazy;{tyto příkazy se provedou jednou před prvým použitím jednotky}

end.

Page 11: Informatika I 9 . přednáška

Informatika I: přednáška 9 11

Jednotka pro práci s komplexními číslyunit KomplexniCisla; {Při definici operaci nad komplexnimi cisly se

vyuziva toho, ze v Object Pascalu funkce mohou mit strukturovany typ}

interface type TComplex=record Re,Im:real; end; function Hodnota(Re,Im:real):TComplex; {Slouzi pro nastaveni hodnoty komplexniho cisla} function Soucet(X,Y:TComplex):TComplex; function Rozdil(X,Y:TComplex):TComplex; function Soucin(X,Y:TComplex):TComplex; function Podil(X,Y:TComplex):TComplex; function Nasobek(A:real;X:TComplex):TComplex; {Vypocita soucin realneho a komplexniho cisla} function AbsHodn(X:TComplex):real;

Page 12: Informatika I 9 . přednáška

Informatika I: přednáška 9 12

procedure Cti(var X:TComplex); {Z klavesnice se cte realna a imaginarni slozka

jako dvojice cisel typu real; cisla jsou oddelena mezerou a dvojice je ukoncena radkem.}

procedure CtiTF(var T:TextFile; var X:TComplex); {Z textoveho souboru se cte realna a imaginarni

slozka jako dvojice cisel typu real; cisla jsou oddelena mezerou a dvojice je ukoncena radkem.}

procedure Pis(X:TComplex;PocZ,PocD:integer); {Komplexni cislo se vypise na obrazovku ve tvaru

(Re,Im), pricemz se neprechazi na novy radek. PocZ je pocet znaku a PocD počet desetinnych mist. Je-li PocD zaporne, pouzije se semilogaritmicky tvar.}

procedure PisTF(var T:TextFile; X:TComplex; PocZ,PocD:integer); {Kazde komplexni cislo se zapisuje do textoveho

souboru na novy radek jako dvojice hodnot Re a Im oddelenych mezerou. PocZ a PocD mají stejny vyznam jako v predchozim pripade.}

Page 13: Informatika I 9 . přednáška

Informatika I: přednáška 9 13

implementation function Hodnota(Re,Im:real):TComplex; begin Hodnota.Re:=Re; Hodnota.Im:=Im; end; function Soucet(X,Y:TComplex):TComplex; begin Soucet.Re:=X.Re+Y.Re; Soucet.Im:=X.Im+Y.Im; end; function Rozdil(X,Y:TComplex):TComplex; begin Rozdil.Re:=X.Re-Y.Re; Rozdil.Im:=X.Im-Y.Im; end; function Soucin(X,Y:TComplex):TComplex; begin Soucin.Re:=X.Re*Y.Re-X.Im*Y.Im; Soucin.Im:=X.Re*Y.Im+X.Im*Y.Re; end;

Page 14: Informatika I 9 . přednáška

Informatika I: přednáška 9 14

function Podil(X,Y:TComplex):TComplex; var Pom:real; begin Pom:=sqr(Y.Re)+sqr(Y.Im); Podil.Re:=(X.Re*Y.Re+X.Im*Y.Im)/Pom; Podil.Im:=(X.Im*Y.Re-X.Re*Y.Im)/Pom; end; function Nasobek(A:real;X:TComplex):TComplex; begin Nasobek.Re:=A*X.Re; Nasobek.Im:=A*X.Im; end; function AbsHodn(X:TComplex):real; begin AbsHodn:=sqrt(sqr(X.Re)+sqr(X.Im)); end; procedure Cti(var X:TComplex); begin readln(X.Re,X.Im); end;

Page 15: Informatika I 9 . přednáška

Informatika I: přednáška 9 15

procedure CtiTF(var T:TextFile; var X:TComplex); begin readln(T,X.Re,X.Im); end; procedure Pis(X:TComplex;PocZ,PocD:integer); begin if PocD<0 then write('(',X.Re,',',X.Im,')') else write('(',X.Re:PocZ:PocD,

',',X.Im:PocZ:PocD,')'); end; procedure PisTF(var T:TextFile; X:TComplex;

PocZ,PocD:integer); begin if PocD<0 then write(T,X.Re,' ',X.Im) else write(T,X.Re:PocZ:PocD,

' ',X.Im:PocZ:PocD); writeln; end;end.

Page 16: Informatika I 9 . přednáška

Informatika I: přednáška 9 16

Sečítání komplexních číselprogram ScitaniKompCisel;{$APPTYPE CONSOLE}{Cisla se ctou z textoveho souboru a soucet se

vypisuje na obrazovku}uses KomplexniCisla;

var X,Suma:TComplex; Vstup:textfile; Jmeno:string;

begin writeln('Zadej vstupni soubor'); readln(Jmeno); assignfile(Vstup,Jmeno); reset(Vstup);

Page 17: Informatika I 9 . přednáška

Informatika I: přednáška 9 17

Suma:=Hodnota(0,0); while not seekeof(Vstup) do begin CtiTF(Vstup,X); Suma:=Soucet(Suma,X); end; write('Soucet= '); Pis(Suma,8,2); writeln; closefile(Vstup); writeln('Stiskni Enter'); readln;end.

Page 18: Informatika I 9 . přednáška

Informatika I: přednáška 9 18

Objektově orientované programování

Objektově orientované programování je přístup k tvorbě programů, založený na využití objektů a jejich vlastností. Zahrnuje analýzu problému, návrh struktury programu i způsob psaní programu.

Základní pojmy:

objekt, třída (objektový typ), posílání zpráv,

zapouzdření, dědičnost, polymorfismus.

Page 19: Informatika I 9 . přednáška

Informatika I: přednáška 9 19

ObjektObjekt je programová struktura, obsahující jak data, tak

metody, které s těmito daty pracují.

Zapouzdření (encapsulation) znamená, že data objektu jsou přístupná pouze prostřednictvím metod tohoto objektu.

data

metody

Page 20: Informatika I 9 . přednáška

Informatika I: přednáška 9 20

Třída (class)Třída je skupina objektů, které mají stejné vlastnosti

(atributy, datové složky) a stejné chování (metody).

Objekt, který patří do určité třídy, se nazývá instance této třídy.

Atributy (datové složky): atributy třídy atributy instancí

Metody: metody třídy (např. konstruktor) metody instancí (např. destruktor)

Page 21: Informatika I 9 . přednáška

Informatika I: přednáška 9 21

Dědičnost (inheritance)

Od jedné třídy (bázové, rodičovské) můžeme odvodit třídu jinou (odvozenou, dceřinnou).

Dceřinná třída (potomek) dědí všechny složky své rodičovské třídy (předka) a k nim může přidat svoje vlastní. Zděděné metody je možno předefinovat.

Potomek může v programu vždy zastoupit předka (i nepřímého). Naopak to možné není.

Dědičnost může být: jednoduchá (třída má jednoho rodiče) vícenásobná (třída má více rodičů)

Page 22: Informatika I 9 . přednáška

Informatika I: přednáška 9 22

Třídy, objekty a dědičnost

Třída T

Atributy: A1, A2

Metody: M1, M2

A1, A2

M1

M2

Třída T1 (od T)

Atributy: A3

Metody: M1, M3

A1, A2, A3

M1

M2

M3

odvození třídy

vytvořeníinstance

Page 23: Informatika I 9 . přednáška

Informatika I: přednáška 9 23

Skládání tříd a objektů

Třída T1

Atributy: a1, a2

Metody: m1,m2,m3

Třída T2

Atributy: A typu T1

Metody: M1, M2

vytvořeníinstance

a1, a2

m1

m2m3

M1

M2

a1, a2

m1

m2m3

Page 24: Informatika I 9 . přednáška

Informatika I: přednáška 9 24

Posílání zprávObjekty spolu komunikují tak, že si navzájem posílají

zprávy. Obvykle to znamená, že jeden objekt (odesilatel zprávy) volá metodu jiného objektu (příjemce zprávy).

Časná vazba (early binding):Příjemce zprávy je určen v okamžiku kompilace.

Pozdní vazba (late binding):Příjemce zprávy je určen až za běhu programu.

Pomocí pozdní vazby se realizuje polymorfismus (mnohotvarost). To znamená, že určitá metoda se může v různých kontextech chovat různě.

Page 25: Informatika I 9 . přednáška

Informatika I: přednáška 9 25

Jazyky pro OOP

Jazyky čistě objektové

(Smalltalk, Actor, CLOS, … )

Jazyky podporující OOP, ale umožňující programovat i neobjektově

(Borland Pascal, Object Pascal, C++, … )