Vývoj objektových aplikací 2

Rozměr: px
Začít zobrazení ze stránky:

Download "Vývoj objektových aplikací 2"

Transkript

1 Vývoj objektových aplikací 2 Ostrava, 2003 Mgr. Rostislav Fojtík

2 2

3 Obsah: Úvodní lekce...6 Cíl lekce...6 Samostatné práce...6 Podmínky pro přihlášení ke zkoušce...7 Obsah kurzu...7 Literatura...7 Shrnutí lekce...7 Opakování...8 Cíl lekce...8 Základy objektově orientovaného programování...8 Vizuální vývojové nástroje...8 Řešený příklad...9 Shrnutí učiva...15 Projekty I práce s časovými údaji...16 Cíl lekce...16 Program č.1 Jednoduché hodiny...16 Komponenta Timer...16 Komponenta PopupMenu...17 Program č.2 Čas a datum v komponentě StatusBar...20 Komponenta StatusBar...20 Program č.3 Jednoduchý záznamník úkolu...23 Samostatná práce...27 Shrnutí...28 Implementace OOP v jazyku Object Pascal...29 Cíl lekce...29 Konstruktor...31 Destruktor...33 Dědičnost...33 Polymorfismus...33 Shrnutí učiva...37 Vývoj programů...38 Cíle lekce...38 Studie...38 Objektově orientovaná analýza (OOA)...38 Návrh...39 Doporučení pro analýzu a návrh:...40 Implementace...40 Testování...40 Používání...40 Časté chyby...40 Shrnutí učiva...41 Samostatná práce...42 Cíl lekce...42 Zadání samostatné práce...42 Projekty II grafika...44 Cíle lekce...44 Program č.1 Jednoduchý kreslicí program...44 Komponenta Image...44 Třída TCanvas

4 Program č.2 Jednoduchý kreslicí program...47 Shrnutí učiva...50 Projekty III více formulářů v aplikaci...51 Cíle lekce...51 Program č.1 Otevírání modálních a nemodálních oken...51 Shrnutí učiva...58 Test znalostí...59 Cíle lekce...59 Shrnutí

5 Orientační symboly v textu: Cíle, ke kterým chceme dospět. Úkoly, projekty, testy a písemné zprávy. Otazník - průběžné otázky a úkoly. Vykřičník - důležité pojmy a postupy. Suma - shrnutí učební látky. Samostatná práce korespondenční úkol, který je potřeba v určeném termínu zaslat tutorovi kurzu. Zpracoval: Mgr. Rostislav Fojtík Katedra informatiky a počítačů Přírodovědecká fakulta Ostravská univerzita rostislav.fojtik@osu.cz 5

6 Úvodní lekce Cíl lekce Cílem této lekce je vás seznámit s organizací výukového kurzy a požadavky pro absolvování zkoušky. Po absolvování lekce budete: vědět, jaké lekce kurz obsahuje a kdy by jste je měli absolvovat vědět, kdy odevzdat samostatné práce vědět, jaké jsou požadavky pro absolvování zkoušky z předmětu "Vývoj objektových aplikací 2" Časová náročnost lekce: 30 minut Pro zdárné absolvování kurzu "Vývoj objektových aplikací 2" jsou vhodnými základními předpoklady znalosti z předmětů Algoritmy a datové struktury 1 a 2. Dále je nutné absolvovat výukový kurz "Vývoj objektových aplikací 1". Cílem kurzu "Vývoj objektových aplikací 2" je rozšířit si znalosti v oblasti objektově orientovaného způsobu programování a to pomocí konkrétního, komerčně velmi rozšířeného a využívaného programovacího nástroje Delphi. Po absolvování kurzu budete umět vytvářet programy a jednoduché aplikace v jazyku Object Pascal. Komunikace mezi všemi účastníky kurzu je velmi důležitá. Pro její zajištění slouží následující způsoby: - elektronická pošta. Adresa vyučujícího (lektora kurzu) je rostislav.fojtik@osu.cz. Je důležité, aby studenti během semestru neměnili své ové adresy! elektronická konference telefonicky - telefonní spojení na vyučujícího Mgr. Rostislav Fojtík konzultace prezenční formou - konzultace probíhají po předcházející domluvě. Kancelář č.24, v budově na adrese 30.dubna 22, Ostrava. Další možnosti komunikace: ICQ - číslo vyučujícího je internetová video konference - je potřeba domluvit s vyučujícím Veškeré dotazy týkající se učiva, neposílejte na vyučujícího, ale do elektronické konference! Důvodem je možnost zapojení ostatních účastníků kurzu na řešení problémů. Samostatné práce Během úvodního tutoriálu setkání budou určeny termíny, podmínky a formy pro odevzdání samostatných prací. V určeném termínu zašlete rovněž řešení testu z poslední lekce. 6

7 Podmínky pro přihlášení ke zkoušce Pro přihlášení ke zkoušce je potřeba zpracovat samostatný projekt, jehož zadání najdete v poslední lekci. Zkouška z předmětu Vývoj objektových aplikací 2 se bude skládat ze dvou částí. První je obhajoba a rozbor vytvořeného projektu a druhou části zkoušky je předvedení znalosti z oblasti teoretických poznatků objektově orientovaného programování a práce s vizuálním vývojovým nástrojem Borland Delphi. Obsah kurzu Výukový kurz obsahuje níže uvedené výkladové lekce. U každé lekce je uvedena přibližná časová náročnost a datum, ke kterému by jste měli lekci absolvovat - zvládnout její učivo. Nenechávejte si studium na poslední chvíle, nestihnete absolvovat kurz! Úvodní lekce - 30 minut 5. března Opakování - 2 hodiny 12. března Projekty I - 3 hodiny 22. března Implementace OOP v jazyku Object Pascal - 3 hodiny 2.dubna Vývoj aplikací - 2 hodiny 12. dubna Samostatná práce - 1 hodina 22. dubna Projekty II - 3 hodiny 30. dubna Projekty III - 3 hodiny 6. května Test - 1 hodina 10. května Literatura Pro dobré zvládnutí učiva je potřeba studovat i z dalších zdrojů. Velmi doporučuji on-line kurz na stránkách Zive.cz: KADLEC V. Umíme to s Delphi, on-line Tištěné literatury o programování v Delphi je velké množství. Od jednoduchých a rozsahem malých příruček až po do detailů vyvedené a samozřejmě patřičně drahé učebnice. Uvádím alespoň několik vhodných publikací: LISCHNER R. Delphi v kostce, Computer Press, Praha 2000, ISBN CANTU M. Myslíme v jazyku Delphi 6 1.díl knihovna programátora, Grada 2002, ISBN ELLER F. Delphi 6 příručka programátora, Grada, ISBN SVOBODA L., VONEŠ P., KONŠAL T., MAREŠ M tipů a triků pro Delphi, ComputerPress, 2001, ISBN PÍSEK S. Delphi začínáme programovat, Grada, ISBN TEIXERA S., PACHECO X. Mistrovství v Delphi 6, ComputerPress, 2002, ISBN Shrnutí lekce Kurz "Vývoj objektových aplikací 2" je ukončen ústní zkouškou. Ke zkoušce je potřeba přinést řešení samostatné práce. Během zkoušky je potřeba dané řešení umět vysvětlit a případně obhájit. 7

8 Opakování Cíl lekce Cílem této lekce je zopakovat si znalosti z minulého kurzu Vývoj objektových aplikací 1. Po absolvování lekce budete: zopakujete si základní poznatky objektově orientovaného programování vědět, jak správně zpracovat úkol č.3 z lekce Samostatné práce výukového kurzu Vývoj objektových aplikací 1. Časová náročnost lekce: 2 hodiny Základy objektově orientovaného programování Základní tezí objektově orientovaného programování (OOP) je používání objektů, které nejsou určeny jen množinou dat, ale rovněž množinou přesně stanovených a definovaných operací, které objekt může provádět. Během analýzy programu se snažíme vytvořit a popsat objekty, které v rámci programu mají vzniknout. Objekty mezi sebou komunikují a posílají si zprávy, reagují na události. Základní vlastnosti OOP: 1. Zapouzdření (Encapsulation) - základním pojmem OOP je třída (class), která v sobě zahrnuje data a operace. Konkrétní výskyt třídy je instance třídy (objekt). 2. Dědičnost (Inheritance) - Možnost odvozovat nové třídy, které dědí data a metody z jedné nebo více tříd. V odvozených třídách je možno přidávat nebo předefinovávat nová data a metody. 3. Polymorfismus - Česky možno vyjádřit přibližně pojmem "vícetvarost". Umožňuje jediným příkazem zpracovávat "podobné" objekty. Základní pojmy: Třída - je typ definován uživatelem, který se nachází v nějakém stavu, má reprezentaci a chování. Třída je podobná datovému typu. Objekt (instance třídy) - je již proměnná určitého datového typu, který je definován třídou. Objekt je konkrétní místo v paměti. Vizuální vývojové nástroje Grafické operační systémy kladou stále větší nároky na programátory, kteří kromě naprogramování samotného problému řešeného v programu, musí zajistit interface aplikace podle grafického prostředí. Neustálým zvyšování nároků na rychlost vývoje aplikací a zároveň zvyšováním nároků na délku a složitost kódu se postupně dospělo k vizuálním programovacím nástrojům, které se také nazývají RAD. Mezi nejznámější produkty pro prostředí MS Windows patří Visual Basic, Power++, Delphi, C++Builder a další. Pro operační systém Linux existuje linuxová verze Delphi s názvem Kylix. Všechny tyto nástroje využívají předem naprogramované knihovny grafických komponent. Jedná se o objekty, které kromě základních vlastností (např. jméno, rozměry, barva, font textu,...) umí rovněž reagovat na určité události vyvolané v operačním systému (např. kliknutí tlačítkem myši, zmáčknutí určité klávesy, přesun myši...) a zároveň mají předdefinované metody - schopnosti provádět určitou činnost (např. zrušit objekt, smazat svůj obsah,...). 8

9 V našem kurzu budeme nadále využívat vývojový nástroj firmy Borland s názvem Delphi, který využívá k psaní kódu objektově orientovaný programovací jazyk Object Pascal. Řešený příklad Podívejme se na možné řešení úkolu č.3 z lekce Samostatné práce (Vývoj objektových aplikací 1). Zadání znělo: Vytvořte program, u kterého bude měnit font nápisu v okně programu. Program bude obsahovat minimálně tyto objekty: Label - v něm bude umístěn text, který se bude měnit GroupBox č.1 a vněm tři objekty typu RadioButton, pomocí kterých budeme měnit barvu textu (černá, modrá, zelená) GroupBox č.2 a v něm tři objekty typu CheckBox, pomocí kterých budeme měnit styl textu (tučné, kurzíva, podtržené) ComboBox - pomocí kterého budeme nastavovat velikost písma v hodnotách 8, 10, 12, 14, 20, 24 Ukázka zdrojových textů: Soubor Unit1.pas // Mgr. Rostislav Fojtík // Úkol č.3 Samostatná práce VOA1 // Odladěno v Delphi 7 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(tform) LblNapis: TLabel; ChBoxBold: TCheckBox; 9

10 ChBoxItalic: TCheckBox; ChBoxUnderline: TCheckBox; RBtnArial: TRadioButton; RBtnCourierNew: TRadioButton; RBtnTimesNewRoman: TRadioButton; ComboBoxSize: TComboBox; procedure ChBoxBoldClick(Sender: TObject); procedure ChBoxItalicClick(Sender: TObject); procedure ChBoxUnderlineClick(Sender: TObject); procedure RBtnArialClick(Sender: TObject); procedure RBtnCourierNewClick(Sender: TObject); procedure RBtnTimesNewRomanClick(Sender: TObject); procedure ComboBoxSizeChange(Sender: TObject); private { Private declarations } public { Public declarations } var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ChBoxBoldClick(Sender: TObject); {přidá nebo ubere style Bold tučné písmo} if ChBoxBold.checked= true then LblNapis.Font.Style:=LblNapis.Font.Style + [fsbold] else LblNapis.Font.Style:=LblNapis.Font.Style - [fsbold]; procedure TForm1.ChBoxItalicClick(Sender: TObject); {přidá nebo ubere style Italic kurzíva} if ChBoxItalic.checked= true then LblNapis.Font.Style:=LblNapis.Font.Style + [fsitalic] else LblNapis.Font.Style:=LblNapis.Font.Style - [fsitalic]; procedure TForm1.ChBoxUnderlineClick(Sender: TObject); {přidá nebo ubere style Underline podtržené písmo} if ChBoxUnderline.checked= true then LblNapis.Font.Style:=LblNapis.Font.Style + [fsunderline] else LblNapis.Font.Style:=LblNapis.Font.Style - [fsunderline]; procedure TForm1.RBtnArialClick(Sender: TObject); LblNapis.Font.Name:='Arial';{změní font na Arial} 10

11 procedure TForm1.RBtnCourierNewClick(Sender: TObject); LblNapis.Font.Name:='Courier New'; {změní font na Courier New} procedure TForm1.RBtnTimesNewRomanClick(Sender: TObject); LblNapis.Font.Name:='Times New Roman'; {změní font na Times New Roman} procedure TForm1.ComboBoxSizeChange(Sender: TObject); LblNapis.Font.Size:= StrToInt(ComboBoxSize.Items[ComboBoxSize.ItemIndex]); {změní velikost fontu písma podle vybraného čísla v ComboBoxu} end. //*** konec unity Unit1 *** Soubor Project1.dpr program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. //*** konec souboru Project1.dpr *** Soubor Unit1.dfm object Form1: TForm1 Left = 192 Top = 107 Width = 603 Height = 238 Caption = 'CheckBox a RadioButton' Color = clbtnface Font.Charset = DEFAULT_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 11

12 object LblNapis: TLabel Left = 56 Top = 14 Width = 71 Height = 14 Caption = 'Rostislav Fojt'#237'k' Font.Charset = EASTEUROPE_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'Arial' Font.Style = [] ParentFont = False end object ChBoxBold: TCheckBox Left = 32 Top = 64 Width = 97 Height = 17 Caption = 'Bold' Font.Charset = DEFAULT_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsbold] ParentFont = False TabOrder = 0 OnClick = ChBoxBoldClick end object ChBoxItalic: TCheckBox Left = 32 Top = 104 Width = 97 Height = 17 Caption = 'Italic' Font.Charset = DEFAULT_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsitalic] ParentFont = False TabOrder = 1 OnClick = ChBoxItalicClick end object ChBoxUnderline: TCheckBox Left = 32 Top = 145 Width = 97 Height = 17 Caption = 'Underline' Font.Charset = DEFAULT_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [fsunderline] ParentFont = False TabOrder = 2 12

13 OnClick = ChBoxUnderlineClick end object RBtnArial: TRadioButton Left = 208 Top = 64 Width = 113 Height = 17 Caption = 'Arial' Checked = True Font.Charset = EASTEUROPE_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'Arial' Font.Style = [] ParentFont = False TabOrder = 3 TabStop = True OnClick = RBtnArialClick end object RBtnCourierNew: TRadioButton Left = 208 Top = 105 Width = 113 Height = 17 Caption = 'Courier New' Font.Charset = EASTEUROPE_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'Courier New' Font.Style = [] ParentFont = False TabOrder = 4 OnClick = RBtnCourierNewClick end object RBtnTimesNewRoman: TRadioButton Left = 208 Top = 146 Width = 113 Height = 17 Caption = 'Times New Roman' Font.Charset = EASTEUROPE_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'Times New Roman' Font.Style = [] ParentFont = False TabOrder = 5 OnClick = RBtnTimesNewRomanClick end object ComboBoxSize: TComboBox Left = 416 Top = 64 Width = 145 Height = 19 Style = csownerdrawfixed ItemHeight = 13 13

14 TabOrder = 6 OnChange = ComboBoxSizeChange Items.Strings = ( '8' '10' '12' '14' '20' '24') end end //*** konec souboru Unit1.dfm *** 14

15 Shrnutí učiva Základními pojmy objektově orientovaného programování jsou třída (class) a objekt instance třídy. Základními vlastnostmi objektově orientovaného programování jsou zapouzdření, dědičnost a polymorfismus. K usnadnění vývoje aplikací v operačních systémech s grafickým rozhraním se stále více využívají vizuální programovací nástroje, které disponují rozsáhlou zásobou předdefinovaných grafických a jiných komponent, které programátor umisťuje do svých aplikací. Rejstřík class dědičnost Delphi instance třídy komponenty objekt polymorfismus třída vizuální programovací nástroj zapouzdření 15

16 Projekty I práce s časovými údaji Cíl lekce Cílem této lekce je vás seznámit se základními postupy při práci s komponentou Timer. Po absolvování lekce budete: vědět, jak pracovat s komponentou Timer vědět, jak pracovat s komponentou StatusBar vytvoříte si jednoduchou aplikaci, která bude ukazovat aktuální čas vytvoříte si jednoduchou aplikaci, která bude sloužit jako záznamník úkolu Časová náročnost lekce: 3 hodiny Program č.1 Jednoduché hodiny Zadání: Vytvořte aplikaci, která bude ukazovat aktuální čas. Okno, ve kterém budou časové údaje, nebude mít rámeček a bude stále vidět. Kliknutím pravého tlačítka myši na plochu formuláře se vyvolá plovoucí nabídka, která bude obsahovat volbu pro ukončení aplikace. Na následujícím obrázku vidíte možné grafické řešení programu. Řešení Komponenta Timer Pro práci s časovými údaji využijeme komponentu Timer, která se nachází v záložce Standard. Komponenta Timer má následující vlastnosti: Enabled určuje, zda je komponenta aktivní nebo ne Interval určuje interval práce Timeru. Hodnota se udává v milisekundách. Necháme-li hodnotu 1000, bude komponenta pracovat jedenkrát za sekundu. Name Tag 16

17 Komponenta PopupMenu Další komponentou, kterou budeme potřebovat je PopupMenu ze záložky Standard. Komponenta slouží k vyvolání plovoucí nabídky. Kontrolní úkol Prohlédněte si v nápovědě další vlastností a metody komponenty PopupMenu. Obě komponenty můžeme umístit kdekoliv do formuláře, neboť po spuštění programu nejsou vidět. Na dalším obrázku vidíte seznam všech použitých komponent. LblCifernik: TLabel; Timer1: TTimer; PopupMenu1: TPopupMenu; mpkonec: TMenuItem; Soubor Unit1.pas // Jednoduché hodiny // Mgr. Rostislav Fojtík, 2002 // Odladěno v Borland Delphi 7.0 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus; 17

18 type TFrmHodiny = class(tform) LblCifernik: TLabel; Timer1: TTimer; PopupMenu1: TPopupMenu; mpkonec: TMenuItem; procedure Timer1Timer(Sender: TObject); procedure FormCreate( Sender: TObject); procedure LblCifernikDblClick(Sender: TObject); procedure mpkonecclick(sender: TObject); procedure LblCifernikMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } var FrmHodiny: TFrmHodiny; implementation {$R *.dfm} procedure TFrmHodiny.Timer1Timer(Sender: TObject); LbLCifernik.Caption:=TimeToStr(Time); // Zobrazování času. Je potřeba časový údaj převést na řetězec. procedure TFrmHodiny.FormCreate(Sender: TObject); LbLCifernik.Caption:=TimeToStr(Time); // Čas se zobrazí již při vytvoření okna a ne až po 1 sekundě. procedure TFrmHodiny.LblCifernikDblClick(Sender: TObject); Application.Terminate; // Dvojklikem dojde k uzavření aplikace. procedure TFrmHodiny.mpKonecClick(Sender: TObject); Application.Terminate; procedure TFrmHodiny.LblCifernikMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); if (Button=mbRight) then PopupMenu1.Popup(FrmHodiny.Left+X,FrmHodiny.Top+Y); {zajistí vyvolání plovoucí nápovědy, klikneme-li pravým tlačítkem na formulář} end. 18

19 Soubor Unit1.pas object FrmHodiny: TFrmHodiny Left = 177 Top = 154 BorderStyle = bsnone Caption = 'Hodiny' ClientHeight = 36 ClientWidth = 136 Color = clblue Font.Charset = DEFAULT_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] FormStyle = fsstayontop OldCreateOrder = False OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object LblCifernik: TLabel Left = 2 Top = 0 Width = 145 Height = 37 Cursor = crarrow Caption = '00:00:00' Color = clblue Font.Charset = DEFAULT_CHARSET Font.Color = clyellow Font.Height = -31 Font.Name = 'MS Sans Serif' Font.Style = [fsbold] ParentColor = False ParentFont = False OnDblClick = LblCifernikDblClick OnMouseDown = LblCifernikMouseDown end object Timer1: TTimer OnTimer = Timer1Timer Left = 120 Top = 16 end object PopupMenu1: TPopupMenu Left = 96 Top = 16 object mpkonec: TMenuItem Caption = 'Konec' OnClick = mpkonecclick end end end Nezapomeňte správně nastavit vlastnosti formuláře podle zadání. Pro vytvoření formuláře bez okraje nastavte vlastnost BorderStyle: BorderStyle = bsnone Chceme-li, aby okno bylo stále v popředí je potřeba nastavit vlastnost FormStyle: FormStyle = fsstayontop 19

20 Program č.2 Čas a datum v komponentě StatusBar Zadání: Vytvořte aplikaci, která bude ukazovat aktuální čas a datum v komponentě StatusBar. Komponenta StatusBar Nejprve si ukažme, jak pracovat s komponentou StatusBar. Komponentu můžeme nalézt v záložce Win32. Pokud chceme StatusBar rozdělit na více části, musíme nastavit vlastnost Panels. U každého panelu pak určíme jeho šířku pomoci vlastnosti Width. Dále nás bude zajímat vlastnost Text, která určí, jaký nápis se objeví na příslušném panelu. 20

21 Kontrolní úkol Prohlédněte si v nápovědě další vlastností a metody komponenty StatusBar. Prostudujte si v nápovědě následující metody TimeToStr(Time) {Změní čas na řetězec} DateToStr(Date) {Změní datum na řetězec} Soubor Unit1.pas unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls; type TForm1 = class(tform) StatusBar1: TStatusBar; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } var Form1: TForm1; implementation {$R *.dfm} 21

22 procedure TForm1.Timer1Timer(Sender: TObject); StatusBar1.Panels[0].Text:=TimeToStr(Time); StatusBar1.Panels[1].Text:=DateToStr(Date); {zobrazení času a data v panelech StatusBaru} end. Soubor Unit1.dfm object Form1: TForm1 Left = 192 Top = 107 Width = 275 Height = 132 Caption = #268'as a datum' Color = clbtnface Font.Charset = DEFAULT_CHARSET Font.Color = clwindowtext Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnCreate = Timer1Timer PixelsPerInch = 96 TextHeight = 13 object StatusBar1: TStatusBar Left = 0 Top = 86 Width = 267 Height = 19 Panels = < item Width = 70 end item Width = 50 end> end object Timer1: TTimer OnTimer = Timer1Timer Left = 176 Top = 32 end end 22

23 Program č.3 Jednoduchý záznamník úkolu Zadání: Vytvořte program, který bude sloužit jako jednoduchý záznamník pro jeden úkol. Do připraveného formuláře zapíše uživatel text, čas a datum úkolu (schůzky). Formulář se následně minimalizuje. Po uplynutí času se objeví druhé okno se zněním úkolu. Soubor Unit1.pas unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TUkol=record Text:string[200]; hod,min,den,mes,rok:word; aktivni:boolean;{určuje, zda upozornění bylo provedeno} TFrmPlanovac = class(tform) EditUkol: TEdit; EditHodiny: TEdit; LblHodiny: TLabel; EditMinuty: TEdit; Label1: TLabel; EditDen: TEdit; Label2: TLabel; 23

24 EditMesic: TEdit; Label3: TLabel; EditRok: TEdit; Label4: TLabel; BtnOK: TButton; BtnKonec: TButton; Timer1: TTimer; procedure BtnKonecClick(Sender: TObject); procedure BtnOKClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure JenProCteni(h:boolean); procedure SmazatEdity; private { Private declarations } public { Public declarations } var FrmPlanovac: TFrmPlanovac; ukol:tukol; implementation uses Unit2; {$R *.dfm} procedure TFrmPlanovac.JenProCteni(h:boolean); {nastavíme edity podle parametru h } EditUkol.ReadOnly:=h; EditHodiny.ReadOnly:=h; EditMinuty.ReadOnly:=h; EditDen.ReadOnly:=h; EditMesic.ReadOnly:=h; EditRok.ReadOnly:=h; procedure TFrmPlanovac.SmazatEdity; //smazani editu EditUkol.Clear; EditHodiny.Clear; EditMinuty.Clear; EditDen.Clear; EditMesic.Clear; EditRok.Clear; EditUkol.SetFocus; procedure TFrmPlanovac.BtnKonecClick(Sender: TObject); Application.Terminate; 24

25 procedure TFrmPlanovac.BtnOKClick(Sender: TObject); ukol.text:=editukol.text; ukol.hod:=strtoint(edithodiny.text); ukol.min:=strtoint(editminuty.text); ukol.den:=strtoint(editden.text); ukol.mes:=strtoint(editmesic.text); ukol.rok:=strtoint(editrok.text); ukol.aktivni:=false; FrmPlanovac.WindowState:=wsMinimized; JenProCteni(true); procedure TFrmPlanovac.Timer1Timer(Sender: TObject); var cas:tdatetime; h,mn,s,ss,d,ms,r:word; Cas:=Now; DecodeDate(cas,r,ms,d); DecodeTime(cas,h,mn,s,ss); if (ukol.aktivni=false) then if (ukol.min=mn) then if (ukol.hod=h) then if (ukol.den=d) then if (ukol.mes=ms) then if (ukol.rok=r) then ukol.aktivni:=true; JenProCteni(false); SmazatEdity; FrmUkol.EditUkol.Text:=ukol.Text; FrmUkol.ShowModal; {otevře okno s upozorněním} end. Soubor Unit2.pas unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFrmUkol = class(tform) EditUkol: TEdit; BtnOK: TButton; procedure BtnOKClick(Sender: TObject); private { Private declarations } public { Public declarations } 25

26 var FrmUkol: TFrmUkol; implementation {$R *.dfm} procedure TFrmUkol.BtnOKClick(Sender: TObject); close; end. Soubor Project1.dpr program Project1; uses Forms, Unit1 in 'Unit1.pas' {FrmPlanovac}, Unit2 in 'Unit2.pas' {FrmUkol}; {$R *.res} Application.Initialize; Application.CreateForm(TFrmPlanovac, FrmPlanovac); Application.CreateForm(TFrmUkol, FrmUkol); Application.Run; end. 26

27 Úkol Upravte předcházející program podle níže uvedeného obrázku. Přidejte tlačítko Nový, kterým zajistíte záznam nového úkolu. Ve StatusBaru nechejte zobrazovat aktuální čas. Samostatná práce Upravte předcházejí program tak, aby se do něj dalo zapisovat více úkolů (maximálně 100). U jednotlivých úkolů půjde nastavit datum a čas, prioritu a text. Jednotlivé úkoly se budou zapisovat do souboru a zároveň pro přehlednost do ListBoxu. Pro výběr priority úkolu můžete použít komponentu SpinEdit, kterou můžete nalézt v záložce Samples. Vybraný úkol bude možné ze seznamu zrušit. Prohlédněte si obrázek možného grafického řešení aplikace. Své řešení zašlete v určeném termínu na adresu tutora kurzu. Termín odevzdání bude určen na úvodním tutoriálu. Zašlete všechny zdrojové soubory, které jsou potřebné pro překompilování do spustitelného tvaru. Soubory pošlete zkomprimovány například ve formátu ZIP. 27

28 Shrnutí Pro práci s časovými údaji slouží komponenta Timer. Komponenta StatusBar slouží k zobrazování pomocných informací. Nejčastěji se umísťuje ve spodní části formuláře. Komponenta PopupMenu slouží k zobrazení plovoucí nabídky, která se vyvolává stiskem pravého tlačítka. Nezapomeňte v určeném termínu zaslat na adresu tutora kurzu zdrojové soubory vaší samostatné práce. Rejstřík PopupMenu SpinEdit StatusBar Timer 28

29 Implementace OOP v jazyku Object Pascal Cíl lekce Cílem této lekce je vás seznámit se základními postupy při vytváření tříd a jejich instancí. Po absolvování lekce budete: vědět, jak definovat třídu umět vytvářet konstruktory a destruktory třídy umět volat konstruktory a destruktory jednotlivých objektů Časová náročnost lekce: 3 hodiny Programovací jazyk Object Pascal firmy Borland vychází ze standardního jazyka Pascal, který v sedmdesátých letech minulého století navrhl Niclaus Wirth. Navazuje na možnostmi programovacích nástrojů Turbo Pascal 7.0 a Borland Pascal 7.0. Již od verze 5.5 firma Borland zavedla, i když s jistými omezeními, možnosti objektově orientovaného programování. Jazyk Object Pascal je s uvedenými produkty zpětně kompatibilní (lze využívat některé programové konstrukce a kódy). Třídu lze v jazyku Object Pascal tvořit dvěma způsoby. Z důvodu zpětné kompatibility, lze používat pro vytvoření třídy klíčové slovo object (přebráno z předchozích verzí jazyka Borland Pascal). Tento způsob nedoporučuji, neboť vede k záměně pojmů třída a objekt. Nověji je přidáno klíčové slovo class. Příklad: type TCas = class private hod, min, sek : integer; public construktor Init(h,m,s:integer); procedure ZmenHod(h:integer); procedure ZmenMin(h:integer); procedure ZmenSek(h:integer); function DejHod:integer; function DejMin:integer; function DejSek:integer; Uvedená třída může sloužit k vytváření objektů, které mohou zpracovávat časové údaje. Dané objekty však s časem mohou provádět jen operace definované v dané třídě, čímž nemůže dojít k nepatřičným operacím. Atributy hod, min, sek obsahují údaje o hodině, minutě a sekundě. Tím, že jejich přístupová práva jsou nastavena na private, není možné k nim z vnějšku objektu přistupovat přímo, ale jen pomocí veřejných (public) přístupových metod. Data takto chráníme před neoprávněnými operacemi. Object Pascal využívá následujících specifikátorů přístupu: private takto označené vlastnosti a metody nejsou přímo přístupné z vnějšku třídy (objektu) public veřejné vlastnosti a metody jsou přímo přístupné mimo třídu (objekt) protected k chráněným položkám se může přímo přistupovat jen uvnitř samotné třídy nebo v dědicích 29

30 published zvláštní přístupová práva Object Pascalu. Vlastnosti nebo metody jsou přístupné nejen za běhu, ale i při tvorbě aplikace. Pro aplikaci se chovají podobně jako public. Metoda construktor Init(h,m,s:integer); je speciální procedura, která se nazývá konstruktor a slouží k vytvoření (přidělení paměti) a inicializaci (nastavení hodnot) daného objektu. Jednotlivé metody, které jsme ve třídě deklarovali, je potřeba také definovat. construktor TCas.Init(h,m,s:integer); hod:=h; min:=m; sek:=s; {přiřazení hodnoty lze ošetřit proti chybným údajům} procedure TCas.ZmenHod(h:integer); hod:=h; procedure TCas.ZmenMin(h:integer); min:=m; procedure TCas.ZmenSek(h:integer); sek:=h; function TCas.DejHod:integer; DejHod:=hod; function TCas.DejMin:integer; DejMin:=min; function TCas.DejSek:integer; DejSek:=sek; Všimněte si, že každá metoda má v hlavičce přidáno ještě jméno třídy. Bez tohoto jména by se jednalo o samostatnou řadovou funkci nebo proceduru, která nesouvisí s žádnou třídou. V okamžiku, kdy nadefinujeme všechny metody, můžeme vytvořit jednotlivé instance: var ted:tcas; ted:=tcas.init(12,10,30); {volání konstruktoru} ted.zmensek(40); {změní hodnotu sekund} Vypis(ted.DejHod, ted.dejmin, ted.dejsek); {vypíše čas; předpokládáme, že máme definovanou proceduru Vypis} ted.hod:=13; {CHYBA! Nelze! Neboť atribut hod je private} end. 30

31 Příklad: Upravte předcházející kód tak, aby zadávané hodnoty byly správně. Zadáme-li například sekund více než 59, pak se rovněž upraví počet minut. V rámci vývojového nástroje Delphi je aplikace tvořena několika základními typy souborů se zdrojovými kódy. Prvním typem je soubor s příponou DPR (delphi project), který uchovává informace o projektu. Soubory s příponou PAS obsahují jednotlivé jednotky (unit). Jejich překladem vznikají soubory s příponou DCU. Přípona DFM charakterizuje soubory, které obsahují informace o daných formulářích (oknech) aplikace. Soubory s příponou RES jsou tzv. resource soubory, které jsou binární soubory spojené s projektem, obsahující jeho ikonu. Jednotlivé jednotky (unit) mají následující strukturu: unit Nazev; interface uses {následuje výčet unit potřebných pro činnost}; type {následují definice tříd a dalších datových typů} var {následuje výčet instancí a dalších proměnných} implementation {$R *.DFM} {zde jsou uvedeny definice všech metod a řadových funkcí} end. Jazyk Object Pascal umožňuje pouze jednoduchou dědičnost. Rodič se při vytváření potomka zapisuje za klíčové slovo class do závorek. Příklad: type TridaPotomek = class (TridaRodic) {seznam položek třídy} Kromě tří výše uvedených přístupových práv zavádí Delphi specifikaci published. Tato volba je implicitní a klíčové slovo nemusí být uváděno. Položky v této sekci jsou přístupné v Object Inspectoru. Součásti třídy, které definujeme jako published jsou přístupny nejen za běhu, ale i při tvorbě aplikace. Položky jsou viditelné podobně jako položky public. Konstruktor Konstruktory jsou velmi důležitými metodami třídy. Pokud programovací jazyk neumí vytvářet implicitní konstruktor, je potřeba, aby jej definoval sám programátor. Metoda konstruktor je uvozena klíčovým slovem constructor a účelem konstruktoru je vytvoření objektu instance třídy. To znamená, že musí zajistit pro objekt příslušný kus paměti, případně inicializovat určené položky (viz. příklad s třídou TCas). Pokud nedefinujeme svůj vlastní konstruktor, například, abychom inicializovali vnitřní data vlastnosti objetu, můžeme využít tzv. implicitního konstruktoru. Ten nemusíme ve třídě zavádět a definovat, ale musíme jej zavolat (viz. příklad). 31

32 Příklad: TZaznam = class private index : integer; public procedure ZmenIndex(i:integer); function DejIndex:integer; var zaznam : Tzaznam; {definování objektu pomocí implicitního konstruktoru} zaznam:=tzaznam.create;... {další příkazy} Je možné však definovat vlastní konstruktor, který kromě vymezení paměti pro objekt může rovněž nastavit hodnoty požadovaných položek objektů. Příklad: Type TZaznam = class private index : integer; public constructor Create(i:integer); procedure ZmenIndex(i:integer); function DejIndex:integer; constructor TZaznam.Create(i:integer); if (i>=1) AND (i<100) then index := i else index := 0; procedure TZaznam.ZmenIndex(i:integer); if (i>=1) AND (i<100) then index := i else index := 0; var zaznam : Tzaznam; {definování objektu pomocí vlastního konstruktoru} zaznam:=tzaznam.create(10);... {další příkazy} Pokud se pozorně podíváte na konstruktor Create a metodu ZmenIndex, zjistíte, že mají stejný vnitřní kód. To by mohlo vést k mylnému závěru, že jedna z metod je zbytečná. Toto je však chybná úvaha, neboť konstruktor se pro daný objekt volá právě jednou! Konstruktor pro jeden objekt nelze volat vícekrát. To by znamenalo snahu o mnohanásobné vytvoření jediného objektu. Naproti tomu metoda ZmenIndex nenahradí 32

33 volání konstruktoru, neboť nevytvoří v paměti potřebný prostor pro objekt. Bez zavolání konstruktoru objekt vlastně nevznikne, neboť mu není přiděleno místo v paměti! Destruktor Úkolem metody zvané destruktor je zrušit objekt instanci třídy a uvolnit paměť. Tedy přesně opačná činnost než provádí konstruktor. Implicitní název konstruktoru je Free. V našem předcházejícím příkladu by se objekt rušil následujícím způsobem: zaznam.free; {volání destruktoru} Dědičnost Dědičnost patří k velmi silným nástrojům objektově orientovaných jazyků. Object Pascal patří mezi programovací nástroje, které podporují pouze jednoduchou dědičnost. Následující ukázka zavádí třídu TZamestnanec, která je dědicem třídy TOsoba. type TZamestnanec = vlase (TOsoba) //zde jsou umístěny vlastnosti a metody třídy TZamestnanec Polymorfismus Polymorfismus souvisí s tzv. včasnou (někdy nazývanou statickou) a pozdní (dynamickou) vazbou. Představme si například třídy TOsoba a jejího dědice třídu TStudent. V obou třídách si vytvoříme metodu se stejným názvem i parametry, ale v každé třídě bude tato metoda provádět jinou činnost. Jako příklad si můžeme ukázat metodu Vypis, která vypíše údaje o osobě nebo studentovi. type TOsoba = class //vlastnosti a metody procedure Vypis; virtual; TStudent = class(tosoba) //vlastnosti a metody procedure Vypis; override; var p:^tosoba; V případě, že se pokusíme vytvořit dynamický seznam a do něj ukládat objekty třídy TOsoba i TStudent, je nutné metodu Vypis definovat jako virtuální metodu. Pokud bychom tak neučinili, pak by se uplatnila vždy včasná vazba. To znamená, že by se nezávisle na vytvořené instanci vždy použila metoda Vypis ze třídy TOsoba. Při pozdní vazbě se pro danou třídu vytváří tabulka virtuálních metod (Virtual Method Table). Každý objekt obsahuje vnitřní ukazatel do této tabulky a příslušná metoda se vybere až po alokaci paměti. Kromě klíčových slov virtual a override se využívá ještě slovo abstrakt, které deklaruje metody, jenž budou definovány až v potomcích současné třídy. 33

34 Příklad: Vytvořte program, ve kterém si vyzkoušíte přidávání (vytváření) objektů a jejich následné rušení. Pro objekty vytvořte speciální třídu, která bude obsahovat index (číslo) vytvořeného objektu. Indexy objektů vypisujte v ListBoxu. Soubor Hlavni.pas // První unita // Příklady v Delphi // Mgr. Rostislav Fojtík, 2002 // odladěno v Borland Delphi 6 unit hlavni; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, trida; {připjení unity trida} type TFrmClass = class(tform) ListBoxObjekty: TListBox; BtnKonec: TButton; BtnNovy: TButton; BtnZrusit: TButton; procedure BtnKonecClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BtnNovyClick(Sender: TObject); procedure BtnZrusitClick(Sender: TObject); private { Private declarations } public { Public declarations } 34

35 var FrmClass: TFrmClass; index:integer; zaznamy: array[1..100] of TZaznam; zaznam : TZaznam; implementation {$R *.dfm} procedure TFrmClass.BtnKonecClick(Sender: TObject); Application.Terminate; procedure TFrmClass.FormCreate(Sender: TObject); index:=0; procedure TFrmClass.BtnNovyClick(Sender: TObject); index:=index + 1; zaznamy[index]:=tzaznam.create(index); {volání explicitního konstruktoru} ListBoxObjekty.Items.Add('Objekt s vnitřní hodnotou indexu = ' + IntToStr(zaznamy[index].DejIndex)); if index > 0 then BtnZrusit.Enabled:=true; if index > 99 then BtnNovy.Enabled:=false; procedure TFrmClass.BtnZrusitClick(Sender: TObject); zaznamy[index].free; {volání destruktoru} index := index -1; ListBoxObjekty.Items.Delete(index); if index = 0 then BtnZrusit.Enabled:=false; if (index >= 0) and (index< 100) then BtnNovy.Enabled:=true; end. //*** konec unity Hlavni *** Soubor Trida.pas // Druhá unita // Příklady v Delphi // Mgr. Rostislav Fojtík, 2002 // odladěno v Borland Delphi 6 unit trida; interface type TZaznam = class private index : integer; public constructor Create(i:integer); procedure ZmenIndex(i:integer); function DejIndex:integer; 35

36 implementation constructor TZaznam.Create(i:integer); if (i>=1) AND (i<100) then index := i else index := 0; procedure TZaznam.ZmenIndex(i:integer); if (i>=1) AND (i<100) then index := i else index := 0; function TZaznam.DejIndex:integer; DejIndex:=index; end. //*** konec unity Trida *** 36

37 Shrnutí učiva Třída je uvozena klíčovým slovem class. Jednotlivé vlastnosti a metody třídy mají pomocí klíčových slov private, public, published a protected určeny přístupová práva. Pro vytvoření objektu instance třídy je potřeba zavolat implicitní nebo explicitní konstruktor. Konstruktor je speciální metoda, která se stará o vytvoření objektu (vyhrazení potřebného paměťového prostoru, případně inicializace určených vlastností). Při rušení objektu se volá metoda s názvem destruktor. Rejstřík class destruktor konstruktor ListBox metoda private protected public publisher tabulka virtuálních metod třída virtual 37

38 Vývoj programů Cíle lekce Cílem lekce je seznámit se s mechanizmem tvorby aplikací, jednotlivými fázemi analýzy a vývoje. Po absolvování lekce budete: vědět v jakých fázích se vyvíjí aplikace umět provádět objektovou analýzu a návrh aplikace umět lépe navrhovat a vytvářet své programy Časová náročnost lekce: 2 hodiny Vývoj každého programu se děje v několika základních fázích: 1. Studie 2. Analýza 3. Návrh 4. Implementace 5. Testování 6. Používání Během všech kroků je potřeba pamatovat na tvorbu důkladné a dostatečně obsáhlé dokumentace, bez které nelze udržet přehled o vytvářeném programu a bude téměř nemožné jej po času upravovat a doplňovat. Studie Studie představuje analýzu požadavků (requirement analysis) na aplikaci. Jedná se o společnou činnost zákazníka a softwarové firmy, která aplikaci vytváří. V této fázi je potřeba důkladně a zcela přesně definovat požadavky zákazníka na vytvářenou aplikaci. Nejasné zadání může vést k tomu, že výsledný produkt nebude odpovídat původním představám zadavatele! Objektově orientovaná analýza (OOA) Mechanismus abstrakce a hierarchie. Je potřeba nalézt objekty a skupiny příbuzných objektů z reálného světa požadované aplikace. Dále je nutné popsat vazby mezi objekty. Jedná se o implementačně nezávislou fázi vývoje aplikace, která dává možnost přenositelnosti. Výsledkem této fáze je objektový model aplikace. Model objektu je zobecněný konečný automat (state machine), jehož stav je dán konkrétními hodnotami atributů. Vstupy odpovídají metodám, které mohou změnit stav. Výstupy jsou reprezentovanými hodnotami, které vracejí jednotlivé operace (přístupové metody). V této fázi vývoje nemusíme uvažovat o vývojových nástrojích, ani o cílové platformě. Objekt = je modelem objektu z reálného světa aplikace Objekty: abstraktní instanční 38

39 Objekty nesmí být ani příliš velké ani naopak malé. Objekty mohou mít následující povahu: - informační mají schopnost nést a spravovat informace - řídící mají schopnost spravovat a ovládat jiné objekty - prezentační mají schopnost prezentovat své vlastnosti a komunikovat s okolím Není příliš vhodné vytvářet objekty, které v sobě slučují všechny tři povahy. Program je pak následně špatně přenositelný na jinou platformu, jiné grafické rozhraní a podobně. Podle převažujících rysů můžeme objekty rozdělit na: - entitní nést informace a metody pro jejich automatickou správu - řídící vedou dialog s okolím programu a reagují na události z okolí - rozhraní modelují vstupně-výstupní zařízení a typicky spolupracují s jedním řídícím objektem Vazby mezi objekty: Instanční vazba (používá) logická vazba (souvislost) mezi jednotlivými objekty, ke které se přidává kardinalita vazby. Vztah závislosti je jednosměrný. Vazba celek-část (kompozice) Vazba obecný-speciální (dědičnost) Návrh Nejprve je potřeba zvolit i v návaznosti na vytvořený objektový model aplikace implementační prostředí. Výsledkem této fáze je objektově orientovaný návrh (Object- Oriented Design - OOD), který je upřesněním a doplněním objektového modelu. Tvůrci návrhu by se měli snažit co nejméně narušit objektový model vzniklý při OOA a zachovat tak přenositelnost na jiné systémy. Návrh si můžeme rozdělit na čtyři základní oblasti: Problémová oblast (Problem Domain Component PD) - model vzniklý jako důsledek analýzy. Uživatelské rozhraní (Human Interaction Component HI) komunikace s uživatelem Správa dat (Data Management Component DM) zajišťuje ukládání dat do vnější paměti, bezpečnost a konzistenci dat, obnovu dat apod. Řízení spolupráce (System Interaction SI) rozhraní na hardware, operační systém a počítačovou síť. Je potřeba si stanovit: 1) Cíle návrhu 2) Kroky návrhu: 1) Nalezení tříd 2) Specifikovat operace 3) Specifikovat závislost tříd na jiných třídách 4) Specifikovat rozhraní tříd 5) Reorganizovat hierarchii tříd 39

40 Doporučení pro analýzu a návrh: provést smysluplné zobecnění při začátku návrhu je možné si pomoci pomůckou, která říká, že podstatné jméno = objekt (třída) a sloveso = operace (metoda). minimalizovat vazby mezi třídami třída je spojena s jinou v případě, že mezi nimi existuje vztah (dědičnosti, používání, kompozice). Osamocené třídy, které nejsou ve vztahu s žádnými jinými třídami, se mohou zrušit. Naopak třída, která je spojena s velkým množstvím tříd, přináší problémy. rozdělit třídy, které mají příliš mnoho odpovědností mnoho operací spojit třídy s malými odpovědnostmi vyloučit počet jedna vytvoření mnoha objektů musí být stejně snadné jako vytvoření jediného objektu. Měli bychom dobře zvážit všechna zda jsou smysluplná zahrnutí s počtem jedna. opakovanou funkčnost vyjádřit děděním má-li více tříd stejnou odpovědnost (operaci), pak je vhodné navrhnout lépe dědičnost mezi třídami. To znamená najít základní obecnou třídu a ostatní z ní odvodit. úroveň abstrakce na každé úrovní abstrakce by měla mít třída určitou odpovědnost Implementace Jedná se o realizaci programových textů, tedy o vlastní fázi objektově orientovaného programování v konkrétním vývojovém nástroji. Testování Testování se provádí až v okamžiku alespoň částečného dokončení projektů. Na rozdíl od ladění, které probíhá již ve fázi implementace a kterou provádí programátoři, provádí testování obvykle speciální tým, který se nemusí podílet na implementaci (psaní zdrojových kódů). Dokonce je výhodnější, jsou-li týmy testerů a programátorů odlišné. - testování podle scénářů - testování podle subsystémů Používání Pro každý softwarový projekt je důležitá zpětná vazba, kterou poskytují uživatelé aplikace. Získané poznatky jsou důležité pro úpravu nových verzí. Kontrolní úkol: Proveďte kompletní vývoj pro úkol v samostatné práci. Zaměřte se hlavně na fázi analýzy a návrhu. Zpracujte textovou a případně i grafickou dokumentaci k jednotlivým fázím vývoje programu. Časté chyby Vlastnosti třídy vytváříte s přístupovými právy public, čímž nezajistíte dostatečnou ochranu dat. Nejprve píšete program a teprve následně začínáte přemýšlet o třídách a jejich schopnostech. Pamatujte, že je potřeba nejprve udělat kvalitní rozbor programu a návrh řešení. 40

41 Shrnutí učiva Správně vytvořit program není jen psaní programového kódu v konkrétním vývojovém nástroji v určitém programovacím jazyku. Jedná se o komplexní činnost, kterou si můžeme rozdělit do několika fází: 1. Studie 2. Objektově orientovaná analýza 3. Objektově orientovaný návrh 4. Implementace 5. Testování 6. Používání Během všech kroků je potřeba pamatovat na tvorbu důkladné a dostatečně obsáhlé dokumentace. Výsledkem analýzy je objektový model aplikace, který by měl být přenositelný a tedy nezávislý na konkrétní hardwarové a softwarové implementaci. Objektově orientovaný návrh si můžeme rozdělit na čtyři základní části - problémová oblast - uživatelské rozhraní - správa dat - řízení spolupráce Doporučení pro analýzu a návrh: - provést smysluplné zobecnění - minimalizovat vazby mezi třídami - rozdělit třídy, které mají příliš mnoho odpovědností spojit třídy s malými odpovědnostmi - vyloučit počet jedna - opakovanou funkčnost vyjádřit děděním Rejstřík implementace konečný automat ladění objektový model aplikace objektově orientovaná analýza objektově orientovaný návrh testování 41

42 Samostatná práce Cíl lekce Cílem této lekce je seznámit se se zadáním samostatné práce. Ke zkoušce z předmětu Vývoj objektových aplikací 2 se budete moci přihlásit jen v případě, že zpracujete zadaný úkol. Vytvořené programy doneste vyučujícímu zároveň se všemi zdrojovými soubory, ve kterých budete muset umět vysvětlit uplatněné postupy. Po absolvování lekce budete: umět samostatně vytvořit program mít základní podklady pro vykonání ústní zkoušky Časová náročnost lekce: 1 hodina (pro nastudování zadání) Zadání samostatné práce Vytvořte aplikace, které budou sloužit k vytváření didaktických testů a jejich následnému zkoušení. Program musí splňovat následující podmínky: Bude obsahovat část pro tvorbu testových otázek a odpovědí. Otázky (testy) budou ukládány do binárních souborů. Názvy souborů si určí tvůrci testů. Práce bude obsahovat část pro zkoušení žáka. Modul pro tvorbu a modul pro zkoušení testu mohou být dva samostatné programy. Po provedení testu, program vyhodnotí úspěšnost žáka. Testové otázky budou načítány z libovolného z připravených souborů. Testové otázky budou zkoušenému nabízeny v náhodném pořadí. Rovněž možné odpovědi na danou otázku budou zobrazovány v náhodném pořadí. Při zahájení testu bude možné vybrat počet testových otázek. Aplikace musí obsahovat přehledné a uživatelský přístupné grafické rozhraní. K aplikaci přiložíte dokument s rozborem vývoje programu. Hlavně se zaměřte na fázi analýzy a návrhu (viz. lekce Vývoj programů). K testovým otázkám budou nabízeny odpovědi. U každé z odpovědí doporučuji přidat parametr počet bodů, podle kterého lze určit zda je odpověď zcela správně, zcela špatně nebo správně jen částečně. Budete moci pak vytvářet testové otázky nejen z jednou správnou odpovědí, ale i s více správnými nebo s odpověďmi s odstupňovanou kvalitou správnosti. Vytvořte alespoň jeden zkušební soubor s testem pro předmět, který vyučujete. Odzkoušejte test na svých žácích. 42

43 Rady a poznámky k řešení: Pro práci s testovými otázkami si zaveďte samostatnou třídu (případně alespoň záznam). Tento typ bude obsahovat například následující položky: TOdpoved = rekord text: string;{text odpovědi} body: byte;{počet bodů za odpověď} TOtazka = class private otazka: string; odpoved1: TOdpoved; odpoved2: TOdpoved; odpoved3: TOdpoved; odpoved4: TOdpoved; public //zde vytvoříte potřebné metody Pro náhodný výběr otázek a pro náhodné pořadí odpovědí si vytvořte společnou proceduru, která pomoci generace náhodných čísel zajistí požadovanou operaci. Neodkládejte řešení samostatné práce. Naopak začněte s do řešením programu, co nejdříve, dokud máte v hlavě řešení minulých úkolů. Nechejte si na vývoj aplikace dostatek času. Tento úkol se nedá kvalitně zvládnout za jedno či dvě odpoledne. Počítejte raději s časem několika týdnu (podle vašich znalostí a zkušeností s programováním v Delphi). Budete-li mít vážné problémy s řešením některých části aplikace, neváhejte a zašlete dotaz na můj rostislav.fojtik@osu.cz. 43

44 Projekty II grafika Cíle lekce Cílem lekce je seznámit se s možnostmi práce s grafickými objekty. Po absolvování lekce budete: vědět, jak využívat grafické možnosti Delphi umět pracovat se třídu TCanvas umět lépe navrhovat a vytvářet své programy Časová náročnost lekce: 3 hodiny Program č.1 Jednoduchý kreslicí program Zadání: Vytvořte aplikaci, která bude umožňovat nakreslit jednoduchý obrázek pomocí myši. Naprogramujte tlačítko na ukončení aplikace a smazání nakresleného obrázku. Na následujícím obrázku vidíte možné grafické řešení programu. Řešení Abychom aplikaci mohli vytvořit, je nejprve potřeba seznámit se s komponentou Image a třídou TCanvas. Komponenta Image Pro práci s grafikou můžeme využít například komponentu Image, kterou můžeme nalézt v záložce Additional. Komponenta může zobrazovat obrázek uložený v souboru a rovněž lze na ni kreslit. 44

45 Mezi důležité vlastnosti komponenty patří: Picture, do které můžeme načíst obrázek ze souboru. Například: Image.Picture.LoadFromFile( obrazek.bmp`); Kontrolní úkol Prohlédněte si v nápovědě další vlastností a metody komponenty Image. Podívejte se rovněž na komponentu PaintBox ze záložky System. Třída TCanvas Pro kreslení je důležitá třída TCanvas - plátno. Mnoho z grafických komponent v Delphi má objekt Canvas, který je objektem třídy TCanvas a který umožňuje grafické operace v dané komponentě. Podívejme se na několik základních vlastnosti a schopností objektu Canvas: Brush (štětec) umožňuje změnu barvy a vzoru grafických objektů. nejakakomponenta.canvas.brush.color:=clred; //nastaví barvu štětce na červenou nejakakomponenta.canvas.brush.style:=bssolid; //nastaví styl na úplné vyplnění Font nastavení písma nejakakomponenta.canvas.font.color:=clblue; //nastaví barvu písma nejakakomponenta.canvas.textout(100,20, Text do určeného místa ); Pen (péro) nastavuje vlastnosti kreslícího péra nejakakomponenta.canvas.pen.color:=clblue; //nastaví barvu kreslcího péra Mezi metody třídy TCanvas patří například: Arc kreslí část elipsy Ellipse vykreslí elipsu nebo kružnici, která je definována jako vepsána obdélníku LineTo nakreslí úsečku z aktuální pozice grafického kurzoru do pozice zadané v parametru metody MoveTo přesune grafický kurzor z aktuální pozice do pozice zadané v parametru metody Rectangle vykreslí obdélník nebo čtverec Kontrolní úkol Prohlédněte si v nápovědě další vlastností a metody třídy TCanvas. Rozbor programu: 1. Vytvořte si složku (adresář), do kterého budeme ukládat všechny soubory projektu. 2. Spusťte Delphi. 45

Vývoj objektových aplikací 1

Vývoj objektových aplikací 1 Vývoj objektových aplikací 1 Ostrava, 2002 Mgr. Rostislav Fojtík 2 Obsah: Úvodní lekce...6 Cíl lekce...6 Samostatné práce...7 Podmínky udělení zápočtu...7 Obsah kurzu...7 Literatura...8 Shrnutí lekce...8

Více

CZ.1.07/1.5.00/

CZ.1.07/1.5.00/ Celá čísla Celočíselný typ má označení INTEGER. Kromě tohoto základního jsou k dispozici ještě další celočíselné typy, které uvádí následující tabulka. Každý typ umožňuje definovat určitý rozsah celých

Více

Realizace algoritmu v Delphi

Realizace algoritmu v Delphi Realizace algoritmu v Delphi Jedná se o výukový materiál určený k shrnutí učiva pro ty, co nemají žádné dřívější zkušenosti s programováním. Není to určené k učení nazpaměť, tím pádem je to obsáhlejší.

Více

Objektové programování

Objektové programování Objektové programování - přináší nové možnosti a styl programování - vytváří nový datový typ, který umí vše co standardní datové typy + to co ho naučíme - překladač se k tomuto typu chová stejně jako k

Více

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox 1 Opakování kreslení do Image 1. Canvas = plátno - Color, Caption Nastavení typu čáry pro kreslení perem Pen: barva Image1.Canvas.Pen.Color

Více

Delphi popis prostředí

Delphi popis prostředí Delphi popis prostředí Delphi je komplexní vývojové prostředí, které slouží pro tvorbu aplikací. Řadí se mezi objektově orientované jazyky, protože podporuje koncepci skutečného objektového programování.

Více

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.

Více

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu: Plán předmětu Název předmětu: Algoritmizace a programování (PAAPK) Školní rok: 2007/2008 Forma studia: Kombinovaná Studijní obory: DP, DI, PSDPI, OŽPD Ročník: I Semestr: II. (letní) Typ předmětu: povinný

Více

INOVACE PŘEDMĚTŮ ICT MODUL 10: PROGRAMOVÁNÍ V DELPHI

INOVACE PŘEDMĚTŮ ICT MODUL 10: PROGRAMOVÁNÍ V DELPHI Vyšší odborná škola ekonomická a zdravotnická a Střední škola, Boskovice INOVACE PŘEDMĚTŮ ICT MODUL 10: PROGRAMOVÁNÍ V DELPHI Metodika Zpracoval: Ing. Jan Tihon Srpen 2009 Metodika pro předmět: Modul Programování

Více

Reliance 3 design OBSAH

Reliance 3 design OBSAH Reliance 3 design Obsah OBSAH 1. První kroky... 3 1.1 Úvod... 3 1.2 Založení nového projektu... 4 1.3 Tvorba projektu... 6 1.3.1 Správce stanic definice stanic, proměnných, stavových hlášení a komunikačních

Více

PROGRAMOVÁNÍ PRO MS WINDOWS 1

PROGRAMOVÁNÍ PRO MS WINDOWS 1 Jazyk C# je moderní jazyk z rodiny jazyků podporovaných aplikačním prostředím.net. Cílem předmětu je seznámit posluchače s tímto objektovým jazykem, a s programováním aplikací pro MS Windows. V průběhu

Více

Delphi podstata, koncepce a metody MDI aplikace

Delphi podstata, koncepce a metody MDI aplikace Delphi podstata, koncepce a metody MDI aplikace Bc. Tomáš Selucký, Ústav statistiky a operačního výzkumu, Provozně ekonomická fakulta, Mendelova zemědělská a lesnická univerzita v Brně, selucky@selucky.com

Více

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

Důležité: Pokud jako Caption zadáme (tj. pomlčku), je položka menu změněna na oddělovač.

Důležité: Pokud jako Caption zadáme (tj. pomlčku), je položka menu změněna na oddělovač. Delphi lekce 8 Vrátíme se k popisu často používaných komponent. TMainMenu Komponenta symbolizuje hlavní menu aplikace se všemi podmenu. Po umístění komponenty na formulář se dá poklepání na ikonu komponenty

Více

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března Dědičnost Cíle lekce Cílem lekce je naučit se pracovat a využívat dědičnosti při návrhu a tvorbě programů. Lekce je zaměřena hlavně na jednoduchou dědičnost. Bude rovněž vysvětlen rozdíl mezi dědičností

Více

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

11 Diagram tříd, asociace, dědičnost, abstraktní třídy 11 Diagram tříd, asociace, dědičnost, abstraktní třídy Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost diagramům tříd, asociaci,

Více

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox 02. HODINA Obsah: 1. Typy souborů a objektů 2. Ovládací prvky Label a TextBox 3. Základní příkazy a vlastnosti ovládacích prvků 4. Práce s objekty (ovládací prvky a jejich vlastnosti) 2.1 Typy souborů

Více

Programování v C++ 3, 3. cvičení

Programování v C++ 3, 3. cvičení Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového

Více

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ Page 1 of 7 7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ 1. Úvod 2. Obalení 3. Dědičnost 4. Polymorfismus 5. Statické a virtuální metody 6. Dynamické objekty 7.1 ÚVOD Objektově orientované programování (dále

Více

PROGRAMOVÁNÍ PRO MS WINDOWS 1

PROGRAMOVÁNÍ PRO MS WINDOWS 1 Cílem předmětu je seznámit posluchače s moderními prostředky pro tvorbu aplikací pro Windows jmenovitě s programovou platformou.net a programovacím jazykem C#. V průběhu budou vysvětlena následující témata:

Více

Objektově orientované programování. Doc. Ing. Vladimír Jehlička, CSc.

Objektově orientované programování. Doc. Ing. Vladimír Jehlička, CSc. Objektově orientované programování Doc. Ing. Vladimír Jehlička, CSc. Recenze: doc. RNDr. Štěpán Hubálovský, Ph.D. Doc. Ing. Václav Vrbík, CSc. Autor: Doc. Ing. Vladimír Jehlička, CSc. Název: Objektově

Více

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7 PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z

Více

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7 PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z

Více

Tematická oblast: Programování 1 (VY_32_INOVACE_08_3_PR) Anotace: Využití ve výuce: Použité zdroje:

Tematická oblast: Programování 1 (VY_32_INOVACE_08_3_PR) Anotace: Využití ve výuce: Použité zdroje: Tematická oblast: Programování 1 (VY_32_INOVACE_08_3_PR) Autor: Ing. Petr Stránský Vytvořeno: duben 2013 až květen 2013 Anotace: Digitální učební materiály slouží k seznámení s blokovou strukturou programu,

Více

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda Anotace sady: Úvod do objektově orientovaného programování, VY_32_INOVACE_PRG_OOP_01 Autor: Blanka Sadovská Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda Druh učebního materiálu:

Více

01. HODINA. 1.1 Spuštění programu VB 2010. 1.2 Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

01. HODINA. 1.1 Spuštění programu VB 2010. 1.2 Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start. 01. HODINA 1.1 Spuštění programu VB 2010 - pomocí ikony, z menu Start. - po spuštění si můžeme vybrat, zda chceme vytvořit nový Projekt a jaký nebo zda chceme otevřít již existující Projekt. 1.2 Prvky

Více

Delphi - objektově orientované

Delphi - objektově orientované Kapitola 6 Delphi - objektově orientované programování Objektově orientované programování (zkracováno na OOP, z anglického Object oriented programming) je metodika vývoje softwaru, založená na těchto myšlenkách,

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Dědičnost tříd Dědičnost umožňuje vytvářet nové třídy z tříd existujících tak, že odvozené třídy (tzv. potomci) dědí vlastnosti

Více

MS Excel makra a VBA

MS Excel makra a VBA Autor: RNDr. Obsah: MS Excel makra a VBA 1 Využití, ukázky, výhody a nevýhody... 2 2 Makra a zabezpečení... 2 2.1 Nastavení zabezpečení Excelu... 2 2.2 Uložení maker do sešitu a osobního sešitu maker...

Více

24. listopadu 2013, Brno Připravil: David Procházka

24. listopadu 2013, Brno Připravil: David Procházka 24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory

Více

Print Version. Delphi

Print Version. Delphi Print Version Delphi Table of Contents Úvodní informace Práce ve vývojovém prostředí základní obrazovka Nástrojové lišty Vytvoření projektu vložení komponent Zarovnání komponent Programování události Odladění

Více

1. Dědičnost a polymorfismus

1. Dědičnost a polymorfismus 1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

Obsah. 1.1 Práce se záznamy... 3 1.2 Stránka Dnes... 4. 2.1 Kontakt se zákazníkem... 5

Obsah. 1.1 Práce se záznamy... 3 1.2 Stránka Dnes... 4. 2.1 Kontakt se zákazníkem... 5 CRM SYSTÉM KORMORÁN UŽIVATELSKÁ PŘÍRUČKA Obsah 1 Základní práce se systémem 3 1.1 Práce se záznamy................................. 3 1.2 Stránka Dnes.................................... 4 1.3 Kalendář......................................

Více

Delphi nastavení formulářů

Delphi nastavení formulářů Úvod Formulář je základní komponentou aplikace a nastavení jeho vlastností má podstatný vliv na její celkový vzhled. Je proto velmi vhodné ihned po jeho vložení a přidání nové jednotky, která je s formulářem

Více

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

Obsah Úvodem... 5 Co je to vlastně formulář... 6 Co je to šablona... 6 Jak se šablona uloží... 6 Jak souvisí formulář se šablonou...

Obsah Úvodem... 5 Co je to vlastně formulář... 6 Co je to šablona... 6 Jak se šablona uloží... 6 Jak souvisí formulář se šablonou... Obsah Úvodem... 5 Co je to vlastně formulář... 6 Co je to šablona... 6 Jak se šablona uloží... 6 Jak souvisí formulář se šablonou... 7 Jak se formulář vytváří... 8 Návrh formuláře... 8 Co jsou ovládací

Více

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU

KAPITOLA 3 - ZPRACOVÁNÍ TEXTU KAPITOLA 3 - ZPRACOVÁNÍ TEXTU KLÍČOVÉ POJMY textové editory formát textu tabulka grafické objekty odrážky a číslování odstavec CÍLE KAPITOLY Pracovat s textovými dokumenty a ukládat je v souborech různého

Více

Programování II. Polymorfismus

Programování II. Polymorfismus Programování II Polymorfismus Osnova přednášky Vztah přetížení, překrytí a protected přístupu. Co je polymorfismus? Příklad. Přetížení, překrytí, protected Přetížení x překrytí Přetížením řešíme doplnění

Více

Programování v C++ 1, 6. cvičení

Programování v C++ 1, 6. cvičení Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Základní pojmy objektově orientovaného programování Objekt vychází z reálného světa. Má dva charakteristické rysy. Všechny objekty mají stav Všechny objekty

Více

Tvorba kurzu v LMS Moodle

Tvorba kurzu v LMS Moodle Tvorba kurzu v LMS Moodle Před počátkem práce na tvorbě základního kurzu znovu připomínám, že pro vytvoření kurzu musí být profil uživatele nastaven administrátorem systému minimálně na hodnotu tvůrce

Více

MS Word 2007 Šablony programu MS Word

MS Word 2007 Šablony programu MS Word MS Word 2007 Šablony programu MS Word Obsah kapitoly V této kapitole se seznámíme s: Možností využití šablon při vytváření nových dokumentů Vytvářením vlastních šablon Studijní cíle Po absolvování této

Více

PB161 Základy OOP. Tomáš Brukner

PB161 Základy OOP. Tomáš Brukner PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250

Více

MS SQL Server 2008 Management Studio Tutoriál

MS SQL Server 2008 Management Studio Tutoriál MS SQL Server 2008 Management Studio Tutoriál Vytvoření databáze Při otevření management studia a připojením se ke konkrétnímu sql serveru mám v levé části panel s názvem Object Explorer. V tomto panelu

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 05. Turbopascal, prostředí TP6, struktura programu v TP Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

Studijní informační systém. Tvorba rozvrhu ve Studijním informačním systému (SIS) I. Obecné principy

Studijní informační systém. Tvorba rozvrhu ve Studijním informačním systému (SIS) I. Obecné principy Studijní informační systém Tvorba rozvrhu ve Studijním informačním systému (SIS) Co je třeba zajistit před zadáním rozvrhu do systému 1. Všechny předměty realizované v rozvrhovaném semestru jsou zadané

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Projektová dokumentace GED 2006

Projektová dokumentace GED 2006 Projektová dokumentace GED 2006 20.4.2006 Řešitelé týmu a podíl práce na projektu: Kamil Dudka xdudka00 objektový návrh uživatelské rozhraní podpora plug-in programů kreslící plocha vkládání textu programová

Více

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná. Průběžná klasifikace Nová verze modulu Klasifikace žáků přináší novinky především v práci s průběžnou klasifikací. Pro zadání průběžné klasifikace ve třídě doposud existovaly 3 funkce Průběžná klasifikace,

Více

10 Balíčky, grafické znázornění tříd, základy zapozdření

10 Balíčky, grafické znázornění tříd, základy zapozdření 10 Balíčky, grafické znázornění tříd, základy zapozdření Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům balíčkům, grafickému

Více

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto

Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Gymnázium Vysoké Mýto nám. Vaňorného 163, 566 01 Vysoké Mýto Registrační číslo projektu Šablona Autor Název materiálu / Druh CZ.1.07/1.5.00/34.0951 III/2 INOVACE A ZKVALITNĚNÍ VÝUKY PROSTŘEDNICTVÍM ICT

Více

Programování v C++ 2, 4. cvičení

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D. Unity a Objekty Programování 2 (NMIN102) RNDr. Michal Žemlička, Ph.D. Větší programy Časté problémy: Ve více programech by se nám hodilo využít stejné řešení nějakého podproblému dalo by se vyřešit překopírováním

Více

Programování v C++ VI

Programování v C++ VI Programování v C++ VI Konstruktory, destruktory a dědičnost Konstruktory a dědičnost I když jsme se bavili o dědičnosti, trochu jsme zapomněli na konstruktory to se ale nevyplácí, vzpomeňte si, jak důležitý

Více

Tematický celek 03 - Cvičné příklady

Tematický celek 03 - Cvičné příklady Tematický celek 03 - Cvičné příklady Cvičný 1 Dim a As Object Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Proceruda tlačítka "Vlož obsah

Více

Jak namalovat obraz v programu Malování

Jak namalovat obraz v programu Malování Jak namalovat obraz v programu Malování Metodický text doplněný praktickou ukázkou zpracovanou pro možnost promítnutí v prezentačním programu MS PowerPoint PaedDr. Hana Horská 20. 7. 2006 MALOVÁNÍ aplikace,

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

Více

Inovace a zkvalitnění výuky prostřednictvím ICT Vytváření aplikací pro systém Windows

Inovace a zkvalitnění výuky prostřednictvím ICT Vytváření aplikací pro systém Windows Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Vytváření aplikací pro systém Windows Tlačítka Autor: Ing.

Více

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

Programování II. Třídy a objekty (objektová orientovanost) 2018/19 Programování II Třídy a objekty (objektová orientovanost) 2018/19 Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad. Proč potřebujeme objekty? Udržovatelnost softwaru

Více

Jak namalovat obraz v programu Malování

Jak namalovat obraz v programu Malování Jak namalovat obraz v programu Malování Metodický text doplněný praktickou ukázkou zpracovanou pro moţnost promítnutí v prezentačním programu MS PowerPoint PaedDr. Hana Horská 20. 7. 2006, aktualizováno

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného

Více

Popis výukového materiálu

Popis výukového materiálu Popis výukového materiálu Číslo šablony III/2 Číslo materiálu VY_32_INOVACE_I.16.20 Autor Petr Škapa Datum vytvoření 31. 03. 2013 Předmět, ročník Tematický celek Téma Druh učebního materiálu Anotace (metodický

Více

Základní nastavení textového editoru Word 8.0 (Microsoft Office 97)

Základní nastavení textového editoru Word 8.0 (Microsoft Office 97) Základní nastavení textového editoru Word 8.0 (Microsoft Office 97) V následujícím textu jsou zapsány nabídky, příslušné podnabídky a záložky, které je nutné volit a hodnoty nastavení, které je třeba nastavit.

Více

Postupy práce se šablonami IS MPP

Postupy práce se šablonami IS MPP Postupy práce se šablonami IS MPP Modul plánování a přezkoumávání, verze 1.20 vypracovala společnost ASD Software, s.r.o. dokument ze dne 27. 3. 2013, verze 1.01 Postupy práce se šablonami IS MPP Modul

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody Obsah 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody 3) 4) Mantichora Mantichora je moderní aplikace, který

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího

Více

Univerzita Pardubice Fakulta elektrotechniky a informatiky. Rozvrh hodin Jan Kubánek

Univerzita Pardubice Fakulta elektrotechniky a informatiky. Rozvrh hodin Jan Kubánek Univerzita Pardubice Fakulta elektrotechniky a informatiky Rozvrh hodin Jan Kubánek Bakalářská práce 2009 Prohlašuji: Tuto práci jsem vypracoval samostatně. Veškeré literární prameny a informace, které

Více

Programování II. Návrh programu I 2018/19

Programování II. Návrh programu I 2018/19 Programování II Návrh programu I 2018/19 Osnova přednášky Co víme? Objektový návrh programu. Příklad. Co víme? Třída Třída je popisem objektů se společnými vlastnostmi. class private:

Více

Projekt. Sestavení projektu

Projekt. Sestavení projektu Projekt V záložce Nástroje / Projekt MISYS jsou přehledně uspořádány funkce, které slouží k sestavení a editaci projektu. Lze také zapnout nástrojovou lištu Projekt (pravé tlačítko myši v šedé oblasti

Více

VISUAL BASIC. Přehled témat

VISUAL BASIC. Přehled témat VISUAL BASIC Přehled témat 1 ÚVOD DO PROGRAMOVÁNÍ Co je to program? Kuchařský předpis, scénář k filmu,... Program posloupnost instrukcí Běh programu: postupné plnění instrukcí zpracovávání vstupních dat

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Softwarové komponenty a Internet

Softwarové komponenty a Internet Softwarové komponenty a Internet Doc. Dr. Ing. Miroslav Beneš Katedra informatiky FEI VŠB-TU Ostrava Miroslav.Benes@vsb.cz Obsah přednášky Motivace Vývoj přístupů k tvorbě programů Definice komponenty

Více

Nápověda k aplikaci EA Script Engine

Nápověda k aplikaci EA Script Engine Nápověda k aplikaci EA Script Engine Object Consulting s.r.o. 2006 Obsah Nápověda k aplikaci EA Script Engine...1 1. Co je EA Script Engine...2 2. Důležité upozornění pro uživatele aplikace EA Script Engine...3

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9 Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií

Více

Manuál QPos Pokladna V1.18.1

Manuál QPos Pokladna V1.18.1 Manuál QPos Pokladna V1.18.1 OBSAH Obsah 1. QPOS dotyková pokladna... 3 2. Jak číst tento manuál... 4 2.1. Čím začít?... 4 2.2. Členění kapitol... 4 2.3. Speciální text... 4 3. První spuštění... 5 3.1.

Více

Virtuální metody - polymorfizmus

Virtuální metody - polymorfizmus - polymorfizmus - potomka lze použít v místě, kde je možné použít předka - v dosud probraných situacích byly vždy volány funkce, které jsou známy již v době překladu. V situaci, kdy v době překladu není

Více

Vyšší odborná škola ekonomická a zdravotnická a Střední škola, Boskovice. Studijní opora

Vyšší odborná škola ekonomická a zdravotnická a Střední škola, Boskovice. Studijní opora Vyšší odborná škola ekonomická a zdravotnická a Střední škola, Boskovice MODUL 2: Programování v Delphi Studijní opora Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České

Více

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

V této aplikaci si ukážeme jakým způsobem zobrazovat čas a datum. Pro ovládání zobrazení času a datumu se naučíme využívat nabídku.

V této aplikaci si ukážeme jakým způsobem zobrazovat čas a datum. Pro ovládání zobrazení času a datumu se naučíme využívat nabídku. HODINY V této aplikaci si ukážeme jakým způsobem zobrazovat čas a datum. Pro ovládání zobrazení času a datumu se naučíme využívat nabídku. Prvky na formuláři Na formuláři potřebuji jen dva prvky typu Label

Více

DLS V v1.2. Nové funkce. Používání programu DLS V

DLS V v1.2. Nové funkce. Používání programu DLS V DLS V v1.2 Nové funkce Nahrazuje SW DLS IV stáhne se sám přes DLS IV Updater, nebo ho lze nainstalovat ručně Existuje DLS V pro instalační firmy a DLS V SA pro uživatele Databáze místo MS SQL serveru se

Více

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

IB111 Programování a algoritmizace. Objektově orientované programování (OOP) IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,

Více

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE

Více

MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci

MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ MRBT Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci Autoři: Jaromír Picka ID:115255 Jaroslav Večeřa ID:115306

Více

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student.

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student. Téma 3.2 Formuláře Formuláře usnadňují zadávání, zobrazování, upravování nebo odstraňování dat z tabulky nebo z výsledku dotazu. Do formuláře lze vybrat jen určitá pole z tabulky, která obsahuje mnoho

Více

7.3 Diagramy tříd - základy

7.3 Diagramy tříd - základy 7.3 Diagramy tříd - základy - popisuje typy objektů a statické vztahy mezi nimi Objednávka -datumpřijetí -předplacena -číslo -cena +vyřiď() +uzavři() {if Objednávka.zákazník.charakteristika = 'nejistý'

Více

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;

Více

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora SofCon spol. s r.o. Střešovická 49 162 00 Praha 6 tel/fax: +420 220 180 454 E-mail: sofcon@sofcon.cz www:

Více

Takto chápanému druhu objektů se říká TŘÍDA.

Takto chápanému druhu objektů se říká TŘÍDA. Objekty a třídy Každý objekt obsahuje: vlastnosti události metody např. Panel z předchozích příkladů: vlastnost BorderStyle událost Paint metoda Refresh Neplatí co objekt, to originál. V programu se často

Více

INFORMATIKA PRO ZŠ. Ing. Veronika Šolcová

INFORMATIKA PRO ZŠ. Ing. Veronika Šolcová INFORMATIKA PRO ZŠ 2 Ing. Veronika Šolcová 6. 7. 2016 1 Anotace: 1. Nástroje I 2. Ukládání dokumentu 3. Otevírání dokumentu 4. Nový dokument 5. Nástroje II 6. Nástroje III 7. Kopírování 8. Mazání 9. Text

Více