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
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í
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é.
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ářů
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.
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).
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
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í
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).
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.
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;
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.}
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;
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;
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.
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);
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.
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.
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
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)
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čů)
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
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
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ě.
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++, … )