$PROG 1 Str. 1/5 Lgický prgram - struktura, základní pjmy, datvá struktura seznam, práce s databází Prlgu. Hlavní dlišnsti prti prcedurálnímu prgramvání, mžnsti pužití neprcedurálníh prgramvacíh jazyka. Prlg je jazyk pr prgramvání symblických výpčtů. Jazyk vychází z principů matematické lgiky (PROgramvání v LOGice). Jeh úspěch byl pdnětem pr vznik nvé disciplíny matematické infrmatiky lgickéh prgramvání, cž je perspektivní styl prgramvání na vyšší abstraktní úrvni. Prlg je také strjvým jazykem nejmdernějších pčítačů. Má dpsud specifické blasti pužití - umělu inteligenci, znalstní inženýrství, atp. Histrie: První verze jazyka služila pr efektivní dvzvání lgických důsledků z určité třídy frmulí predikátvé lgiky. V dalších verzích byl Prlg zvlen jak základní jazyk lgickéh prcesru centrální jedntky pčítače 5. generace. T vyvlal vlnu zájmu Prlg a metdy lgickéh prgramvání. Prlg se začal rychle prsazvat vedle jiných jazyků pr symblické výpčty (např. Lisp). K čemu se pužívá Prlg: Od pčátku byl Prlg využíván při zpracvání přirzenéh jazyka (francuštiny) a pr symblické výpčty v různých blastech umělé inteligence. Pužívá se v databázvých a expertních systémech i v klasických úlhách symblických výpčtů, jak je návrh a knstrukce překladačů, a t nejen jak prstředek vhdný pr reprezentaci a zpracvání znalstí, ale i jak nástrj pr řešení úlh. Prvnání s jinými jazyky: Prlg je knverzační jazyk nvé generace prgramvacích jazyků, která by měla usnadnit tvrbu prgramů c nejširšímu kruhu uživatelů. Snaží se dstranit část rutiny při prgramvání a tím si zajistit míst vedle svědčených jazyků jak Frtran, Cbl a Pascal. Uživatel Prlgu se může více sustředit na ppis vlastnstí relací, tedy na tázku c se má vypčítat, aniž by byl na každém krku nucen řešit detaily spjené s tázku jak t udělat a kam ulžit získané výsledky. V Prlgu nejsu příkazy pr řízení běhu výpčtu ani příkazy pr řízení tku dat. Chybějí prstředky pr prgramvání cyklů, větvení apd. a nepužívá se přiřazvací příkaz. S tím suvisí i rzdílná úlha prměnných. Prměnná v Prlgu značuje p dbu výpčtu bjekt, který vyhvuje určitým pdmínkám. Jeh vymezení se při výpčtu upřesňuje. Průběh výpčtu je v Prlgu řízen jeh interpretem na základě znění prgramu. Prgramátr může chd výpčtu vlivnit řídícími příkazy v mnhem menší míře než u jiných jazyků. I když byl půvdně Prlg navržen jak jazyk specializvaný na symblické výpčty, mderní implementace směřují k becnějšímu pužití. Lgickým prgramem budeme rzumět pslupnst faktů (nepdmíněných příkazů) (H.) a pravidel (pdmíněných příkazů) (H :- A1, A2,..., An.) Datvé typy Knstanty, prměnné a struktury suhrnně značujeme jak termy. Každá implementace jazyka Prlg bsahuje řadu tzv. vestavěných predikátů (prcedury nabízené tu kteru implementací jazyka Prlg), které jsu ze syntaktickéh hlediska také pvažvány za termy. Knstanta neb prměnná se nazývá atmický term. Atmickými termy jsu tedy jak jednduchá jména bjektů, tak i čísla a prměnné. Z atmických termů můžeme vytvářet i slžitější výrazy, které se nazývají struktury. Prměnné začínají velkým písmenem neb speciálním symblem "_" (pdtržítk) a jsu tvřeny libvlnu pslupnstí písmen, číslic a znaku "_". Prměnnu je také samtný znak "_". Takvu prměnnu nazýváme annymní prměnná, která je bdbu zájmen ckli neb kdkli. Její zvláštnstí je t, že každý její výskyt představuje jinu prměnnu, tedy výraz p(_,_) je ttéž c p(x,y), nikli p(x,x). Hdnty annymních prměnných se v dialgu uživateli nevypisují.
$PROG 1 Str. 2/5 Klauzule: Prgramvání v Prlgu spčívá v deklarvání faktů bjektech a relacích mezi bjekty, v definvání pravidel bjektech a relacích platících mezi nimi a v zdpvídání dtazů. Klauzule jsu výrazy jazyka, pmcí nichž se zapisují nepdmíněné příkazy fakta, pdmíněné příkazy, které vyjadřují pravidla a výrazy, které mají tvar dtazu cílvé klauzule. Fakta nepdmíněné příkazy: Nepdmíněné příkazy vyjadřují fakt relaci. Fakta jsu vztahy, které mají jmén, za nímž následuje výčet bjektů, kterých se vztah týká. Objekty jsu dděleny čárkami a jejich výčet je uzavřen d kulatých závrek. Každý fakt je uknčen tečku. Pkud fakt nebsahuje prměnné, hvříme tzv. základním faktu. Př. - fakta ulžena v databázi, která vyjadřují, že sba M je matku X a Y matka(m, X). matka(m, Y). Pdmíněný příkaz je ddělen znaménkem implikace ":-" na dvě části, uknčený tečku. Část vlev d dvjznaku se nazývá hlava pravidla, naprav d něh je těl pravidla. Př.: surzenci(x,y) :- matka(m,x), matka(m,y). Prgram může bsahvat dtazy, kterým říkáme cílvé klauzule. Cílvé klauzule v textu prgramu nesmějí bvykle bsahvat prměnné, na něž není vázaná hdnta. Otázka (cílvá klauzule) začíná dvjicí znaků "?-" a knčí tečku. Na cílvu klauzuli plženu v průběhu dialgu uživatele se systémem nejsu kladena žádná mezení týkající se prměnných v ní bsažených. Dtaz, který nebsahuje prměnné se nazývá základní tázka. Odpvěď (řešení), kteru systém vrací, je buď "yes", "n" neb výpis hdnt prměnných bsažených v tázce (krmě hdnt annymních prměnných -> ty se v dialgu uživateli nevypisují). Jelikž databáze v Prlgu nemůže bsahvat negativní data, chápeme dpvěď "n" dvěma způsby: 1) záprná dpvěď neb 2) neexistující dpvěď. Př. - dtaz na hledání splečné matky?- matka(m,x), matka(m,y). Predikáty: T c jsme dříve nazývali prceduru můžeme přesněji ppsat jak všechny klauzule začínající stejným funktrem a mající shdný pčet argumentů. Mhu mít stejné jmén struktury a různý pčet argumentů. Prt se čast uvádí jmén prcedury splu s pčtem jejích argumentů (tj. Aritu). Prcedury (predikáty) existují standardní (vestavěné predikáty - t jsu prcedury, které jsu implementvány přím v systému) a dále prcedury, které si uživatel definuje sám. Prgram je pak tvřen z jedntlivých prcedur, které se skládají z příkazů. Příkazy jsu nepdmíněné (tj. fakta) a pdmíněné (tj. pravidla). Jedná se jen jiné chápání výklad pslupnstí klauzulí. Seznamvé struktury: Velice častu datvu strukturu pužívanu v symblických výpčtech jsu seznamy. Prlg chápe seznamy jak běžné prlgvské struktury, tj. termy s funktrem a argumenty a také tak s nimi zachází. Seznam je tvřen pslupnstí prvků (tj. libvlných termů) ddělených čárkami a uzavřených d hranatých závrek []. Prvkem seznamu tedy může být knstanta, prměnná či struktura. Seznam je určitu strukturu, která se však vyjadřuje jiným způsbem. Př.: [thle, je, prvni, seznam, jen_z_knstant, 1] [druhy, seznam, [je, [slzitejsi], bsahuje(strukturu)]] Pr vytváření seznamů v Prlgu existuje předdefinvaný funktr "." (tečka), který je definván jak dvuargumentvý funktr ("." je jménem struktury, značením vestavěnéh predikátu). Seznam se skládá z hlavy a těla (zbytku seznamu). Hlavu seznamu může být ckli atm, seznam, libvlný term, ale tělem seznamu je vždy seznam.
$PROG 1 Str. 3/5 Př.:.(Hlava, Těl) Jedinu výjimku je prázdný seznam, který nebsahuje žádné prvky: je reprezentván degenervaným strmem [], který se nedá rzlžit na dvě části. Prt prázdný seznam nemá hlavu ani těl. Ve skutečnsti se jedná vyčleněný atm. Př. prázdný seznam [] Zápis seznamů: Seznamy lze zapisvat různými způsby, Prlg však každý seznam interpretuje interně jak strukturu. V Prlgu se k zápisu seznamu pužívá binární funktr ".". Jak syntaktická pmůcka se zavádí " " svislá (někdy přerušvaná) čára, která dděluje hlavu seznamu d těla seznamu. Mezi zvláštnsti seznamů patří t, že prgramátr má k dispzici speciální seznamvu ntaci, která je přehlednější a uživatelsky phdlnější. Všechny tyt zápisy jsu ekvivalentní. Př. - zápis čtyřprvkvéh seznamu pmcí funktru ".". (a,. (b,. (c,. (d, [] ))) Př. - zápis čtyřprvkvéh seznamu pmcí funktru ".", jestliže chápeme "." jak infixvý perátr (a. (b. (c. (d. [] ))) Př. - zápis čtyřprvkvéh seznamu pmcí " " [a [b, c, d]] Př. - zápis čtyřprvkvéh seznamu pmcí seznamvé ntace [a,b,c] Z praktických důvdů se dvluje pužívat svislu čáru k ddělení prvé části seznamu (tj. za druhu, třetí a další plžku) d zbytku seznamu, který musí být vždy seznam. Hlavu seznamu je i v tmt případě puze první plžka seznamu. Př. - následující zápisy značují tentýž seznam, hlavu seznamu je i v těcht příkladech a [a, b, c, d] [a [b, c, d]] [a, b [c, d]] [a, b, c [d]] [a, b, c, d [] ] Př. - napak tent příklad není seznamem, prtže za symblem " " musí následvat pět seznam [a b] Operace se seznamy: Seznamy jsu nejdůležitější struktury pužívané v Prlgu. Mezi základní prcedury pr práci s nimi patří append, member, length, delete, aj. append /* pužívá se pr spjvání seznamů */ member /* pužívá se pr určvání příslušnsti prvku k seznamu */ length /* určuje délku seznamu, tj. pčet prvků seznamu */ delete /* dstraňuje prvek ze seznamu */ Seznam je rekurzivně definvaná datvá struktura, také prcedury s ním pracující jsu rekurzivní. Řízení databáze Nejdůležitějšími predikáty pr řízení databáze jsu predikáty assert a retract. Umžňují ukládat klauzule d databáze neb je z ní dstraňvat. Užitečným predikátem pr práci s databázi je i predikát listing a clause. assert /* ukládá klauzule d databáze */ asserta /* ukládá klauzule d databáze na začátek */
$PROG 1 Str. 4/5 assertz /* ukládá klauzule d databáze na knec */ retract /* dstraní z databáze klauzuli */ retractall /* dstraní z databáze všechny klauzule */ listing /* způsbuje výpis klauzulí v databázi */ clause /* hledá klauzule pdle kterých může unifikvat klauzule */ Řízení průchdu prgramem! (řez) představuje klíčvé rzhdnutí překrčí-li jej zpracvávání, už se nejde vrátit lze jej využít k zefektivnění výpčtu - nenutíme Prlg, aby se navracel mnh pdcílů zpět, pkud víme, že tak nenajde nvá řešení. dva typy řezů červený - pkud jej z prgramu smažu, bude prgram pracvat chybně zelený - pkud jej smažu, může djít ke snížení efektivity, ale funkce prgramu se nezmění fail nikdy nesplněný predikát nelze se přes něj dstat repeat při průchdu prgramem blkuje návrat neknečný cyklus: repeat write('pracuji'), nl, fail. Příklady řezů pcitej :- repeat, write('zadej cisl mensi nez 100'), read(s), S < 100,!, faktrial(s). Zde je řez pužit k ddělení načítání čísla, které má být menší než 100, d výpčtu faktriálu. (Samtný predikát faktriál v ukázce neuvádíme). Pkud se z nějakéh důvdu nepdaří faktriál vypčítat, Prlg se nebude vracet k nvému načítání čísla a rvnu sknčí. Jak vidíte, řezem je mžné vlivnit průběh výpčtu tak, že zamezíme zbytečným návratům. Krmě th lze ale řezem zabránit i nežáducímu phybu dpředu, přesněji řečen zbytečnému vyknávání alternativních větví pravidla. zjisti1(a) :- 0 is A md 2, write('cisl je sude'), nl,!. zjisti1(a) :- 1 is A md 2, write('cisl je liche'), nl. Pravidl má zjistit, zda argument A je sudé, neb liché čísl. Pkud se vykná první větev pravidla - tedy čísl bude sudé - Prlg už nebude zkumat, jestli je čísl liché. Předchzí variantu je mžné zkrátit takt: zjisti2(a) :- 0 is A md 2, write('cisl je sude'), nl,!. zjisti2(a) :- write('cisl je liche') Všimněte si, že kdybychm z pravidla zjisti1 dstranili řez, na jeh fungvání by se nic nezměnil (tzv. zelený řez). Avšak kdybychm řez vynechali v pravidle zjisti2, prgram by
$PROG 1 Str. 5/5 nefungval (tzv. červený řez). Jak by se prjevila chyba, kdybychm dstranili řez z predikátu zjisti2? Pr sudá čísla by pravidl vracel dvě řešení - hlášení, že čísl je sudé i že je liché. Pr lichá čísla by predikát fungval dbře, nebť jeh první část by se nespustila. Odlišujeme tedy dva druhy řezů: zelený řez, který je mžné dstranit, aniž by se tím změnil fungvání prgramu červený řez, který nelze dstranit bez pškzení prgramu
$PROG 2 Str. 1/4 Databáze, databázvý systém. Hlavní funkce DBS. Histrický vývj DBS. Mdely dat. Relační algebra: prjekce, selekce, spjení. SQL. 1. Hlavní funkce DBS Databázvý systém (DBS)- suhrn prstředků, které dvlují přístupným a bezpečným způsbem manipulvat s ulženými daty (bází dat) - vytvářet, mdifikvat neb aktualizvat je a především v těcht datech vyhledávat pžadvané infrmace. DBS = BD + SŘBD + DBA Báze dat (BD) Systém řízení báze dat (SŘBD) Databázvá aplikace (DBA) mnžina infrmací, nichž chceme mít přehled. prgram pr shrmažďvání a udržvání dat. prgram, který umžňuje uživatelům přístup k datům, velku část tvří uživatelské rzhraní. V architektuře DBS lze rzlišit tři úrvně: Externí úrveň - je reprezentvána daty z phledu uživatele Knceptuální úrveň - je schématem celé databáze Interní úrveň - krespnduje s fyzickým ulžením dat na paměťvých médiích DBS by měl pskytnut: efektivní manipulaci s databází, suběžný přístup, chranu dat, ztavení se z chyb systému. 2. Histrický vývj DBS 60. léta první síťvé SŘBD sálvých pčítačů, 1971 SŘBD IMS d IBM pr prgram Apll s hierarchickým uspřádáním dat, 1974 pčátky relační databáze a první verze SQL, 80. léta prudký rzvj relačních DB vývj SQL, 90. léta první bjektvě rientvané databáze. 3. Databázvé mdely dat Rzlišujeme čtyři mdely lgické struktury dat - hierarchický, síťvý, relační a bjektvý. Hierarchický databázvý mdel. Všechny vztahy mezi daty mhu být znázrněny pmcí strmvé struktury. Každý element má právě jednh předchůdce, ale může mít více následvníků. Řeší snadn a rychle vztahy 1:N, prblémy můžu nastat při řešení vztahů M:N a při změně struktury dat. Síťvý databázvý mdel. Síťvý mdel se vyznačuje tím, že každý prvek může mít více následvníků i předchůdců. Data jsu reprezentvána klekcemi záznamů a vztahů mezi nimi. Řeší snadn a rychle vztahy 1:N i M:N, prblémy můžu nastat při změně struktury dat. Relační databázvý mdel. Nejrzšířenějším datvým mdelem je mdel relační. Byl navržen s cílem dsažení datvé nezávislsti a neprušensti. Infrmace uchvávány v jednm typu bjektu jsu uchvávány v tabulkách s určitu strukturu. Tabulky jsu navzájem prvázány relacemi, relace pak usnadňují vyhledávání různých infrmací ulžených v těcht tabulkách. Objektvý databázvý mdel. Vychází z principů bjektvě rientvanéh přístupu. Objektem je datvá struktura definvaná jak třída s určitými vlastnstmi a metdami. Kmunikace mezi bjekty prbíhá pmcí zpráv. Hlavní výhdu bjektvě rientvaných platfrem je mžnst příméh vyjádření slžitstí mdelvané reality v databázi. Díky tmu, že sučástí ulžených bjektů je také jejich chvání, zjedndušuje se struktura aplikace. Objektvě rientvané databázvé systémy jsu vhdnější pr práci se slžitě strukturvanými daty (např. gegrafické systémy, průmyslvý design). 4. Relační algebra: prjekce, selekce, spjení Relační mdel je zalžen na přesných výrcích terie mnžin. Základem jsu mnžinvé perace sjedncení, průnik, rzdíl a kartézský sučin. Relační algebru lze chápat jak mnžinu perací na
$PROG 2 Str. 2/4 relacích, pracuje s celými relacemi a výsledkem jsu pět relace. Základními peracemi nad relačními tabulkami jsu prjekce, selekce a spjení. Prjekce tabulky definvaná pdmnžinu atributů představuje vypuštění některých slupců nebsažených v pžadvané mnžině atributů. Sučástí perace prjekce je i případné vypuštění duplicitních řádek ve výsledné tabulce. Tabulku lze napak také rzšířit slupec vzniklý nějaku perací nad hdntami ulžených atributů. Prjekce relace R na atributy B: pb(r), B je pdmnžina atributů R Selekce tabulky definvaná pdmnžinu definičníh bru relace (tj. lgicku pdmínku charakterizující tut pdmnžinu) představuje průnik relace s tut nvu pdmnžinu. Selekce relace R pdle lgické pdmínky j: sj(r) Spjení (jin) dvu relací vytvří třetí relaci, výsledná relace bsahuje všechny kmbinace které vyhvují zadané pdmínce prvnání hdnt. Pdle způsbu prvnávání hdnt ve spjvaných slupcích se rzlišují 3 druhy spjení spjení přes rvnst (Equijin), přes nervnst (Theta jin) a vnější spjení (Outer jin). Pkud výsledná relace bsahuje prvky na základě rvnsti hdnt stejnjmenných atributů, jde přirzené spjení. Další mžnstí je spjení dvu tabulek bez mezení - kartézský sučin tabulek. Výsledná tabulka bsahuje spjené řádky každý s každým. Např. má-li první tabulka 10 záznamů, druhá 20, tak výsledná p spjení bude mít 200 záznamů. Vnější spjení dvu relací umžňuje zahrnut d výsledné relace i ty řádky, pr které neexistuje v druhé relaci stejná hdnta ve splečném slupci; chybějícím hdntám druhé relace se přiřadí hdnta NULL. Zůstanu tak ve výsledné relaci zachvány i ty řádky, které by se při přirzeném spjení ztratily. Left Outer Jin vytvří A natural jin B a řádky relace A, které nelze s ničím spjit, dplní hdntami NULL. Výsledná relace bude bsahvat všechny řádky levé relace, tj. relace A. Right Outer Jin vytvří A natural jin B a řádky relace B, které nelze s ničím spjit, dplní hdntami NULL. Výsledná relace bude bsahvat všechny řádky pravé relace, tj. relace B.
$PROG 2 Str. 3/4 5. SQL Structured Query Language - strukturvaný dtazvací jazyk pr kmunikaci s relačními databázemi SQL je nezávislý na datech, uživatel se nezabývá fyzickým ulžením dat. Jazyk SQL se pužívá pr získání infrmací z databázvých subrů, přičemž pžadavky na výběr se specifikují ppisně. SQL je standardem standardizačních systémů ANSI a ISO. SQL je neprcedurální jazyk, ppisujme jaká data chceme najít, ne jak t má pčítač prvést. Základní příkazy SELECT (získávání dat), INSERT (vkládání dat), UPDATE (mdifikace dat), a DELETE (mazání řádků) Základní funkce příkazu SELECT: SELECT specifikuje které slupce mají být zahrnuty ve výsledku. FROM specifikuje tabulku(y) která se má pužít WHERE filtruje řádky GROUP BY vytváří skupiny řádků se stejnu hdntu v daném slupci HAVING filtruje skupiny pdle dané pdmínky ORDER BY specifikuje přadí hdnt ve výsledku (ASC, DESC) DISTINCT eliminuje duplicity Agregační funkce mhu být pužity puze v seznamu příkazu SELECT a v klauzuli HAVING. Mezi agregační funkce patří: COUNT vrátí pčet hdnt ve specifikvaném slupci SUM vrátí sučet hdnt ve specifikvaném slupci AVG vrátí průměr hdnt ve specifikvaném slupci MIN vrátí nejmenší hdntu ve specifikvaném slupci MAX vrátí největší hdntu ve specifikvaném slupci Krmě COUNT(*), každá funkce nejdříve eliminuje hdnty NULL a pracuje puze se zbylými hdntami. Phledy je bjekt, který uživateli pskytuje data ve stejné pdbě jak tabulka. Na rzdíl d tabulky, kde jsu data přím ulžena, bsahuje phled puze předpis, jakým způsbem mají být data získána z tabulek a jiných phledů. Jde virtuální relaci, která se vytvří v kamihu vyžádání. Výhdy phledů: sustřeďují ptřebná data pr uživatele skrývají slžitst pdkladvých dat zjedndušují správu uživatelských právnění definují uspřádání dat pr exprt d jiných aplikací Ulžená prcedura (anglicky stred prcedure) je databázvý bjekt, který nebsahuje data, ale část prgramu, který se nad daty v databázi má vyknávat. Trigger (česky spušť) v databázi definuje činnsti, které se mají prvést v případě definvané událsti nad databázvu tabulku. Definvanu událstí může být například vlžení neb smazání dat. Transakce je skupina, pslupnst příkazů, která se navenek tváří jak jeden příkaz. V SQL pr transakce existují tři základní příkazy: BEGIN začátek transakce, ROLLBACK dvlání transakce, všechny změny se anulují, COMMIT ptvrzení transakce, změny jsu trvale zaznamenány. Privilegia (právnění) uživatelů jsu akce (příkazy), které uživatel může realizvat tabulku neb phledem příslušné databáze. Privilegia uživatelů můžu být mezena na vyjmenvané databáze, tabulky neb slupce.vlastník databáze neb tabulky uděluje statním uživatelům ptřebná privilegia pužitím klauzule GRANT, debírá pak pužitím klauzule REVOKE.
$PROG 2 Str. 4/4 Příklad SQL příkazu SELECT [DISTINCT agregacni_funkce] atributy FROM název_tabulky [WHERE pdmínka_výběru] [GROUP BY atributy [HAVING pdmínka_agregace [agregacni_funkce]]] [ORDER BY atributy] [UNION [ALL]] Příklad SQL prcedury (pr firmu vyhleda a zbrazi jeji pbcky) CREATE PROCEDURE PbckyFirmy @idfirmy int AS SELECT f.nazev As "Název firmy", p.dplnkvynazev AS "Pbčka", A.ulice AS "Ulice", O.bec AS "Obec", O.psc AS "PSČ", P.telefn AS "Telefn", P.fax AS "Fax", P.email AS "E-mail", P.www AS "WWW" FROM Pbcka P left uter jin Firma AS F ON P.idFirmy = F.idFirmy, Obec AS O, Adresa AS A WHERE F.idFirmy = @idfirmy AND P.idAdresy = A.idAdresy AND A.idObce = O.idObce Trigger SQL (v případě smazání firmy smaže také všechny navázané záznamy jak jsu pbčky, sby atp) CREATE TRIGGER smazvseprfirmu ON Firma INSTEAD OF DELETE AS DECLARE @Firma int, @FirmaNazev varchar(40) SELECT @Firma = idfirmy FROM Deleted SELECT @FirmaNazev = nazev FROM Deleted DELETE FROM Aktivita WHERE Aktivita.idOsby IN (SELECT Osba.idOsby FROM Osba WHERE Osba.idFirmy = @Firma) DELETE FROM Prilezitst WHERE Prilezitst.idOsby IN (SELECT Osba.idOsby FROM Osba WHERE Osba.idFirmy = @Firma) DELETE FROM Osba WHERE Osba.idFirmy = @Firma DELETE FROM Pbcka WHERE Pbcka.idFirmy = @Firma DELETE FROM Firma WHERE Firma.idFirmy = @Firma PRINT 'Byla smazána firma ' + @FirmaNazev=
$PROG 3 Str. 1/2 Knceptuální mdelvání. E-R mdel a jeh grafické znázrnění. Relační mdel. Typy vztahů mezi entitami a jejich reprezentace v relačním mdelu. Vlastnsti relační tabulky. Nrmální frmy relačníh schématu. 1. Entity-Relatinship (E-R) mdel a jeh grafické znázrnění E-R mdel je prvním krkem návrhu databáze. Jde mdelvání databáze na knceptuální úrvni. Pracuje s pjmy entita = bjekt, typ entity = mnžina bjektů stejnéh typu, relatinship = vztah, atribut = vlastnst. E-R mdel představuje tedy metdu mdelvání entit a vztahů mezi nimi. U jedntlivých vztahů je definvána kardinalita vztahů, u atributů pak dména atributu určující přípustné hdnty. U atributů je určván i primární klíč - minimální mnžina atributů jednznačně identifikující entitu. Pr grafické znázrnění E-R mdelu je mžn využít např. ntace UML. 2. Relační mdel Základy byly plženy v sedmdesátých letech (E.F.Cdd). Hlavním cílem byl vnést disciplínu d způsbu manipulace s daty, zabezpečit nezávislst dat (aby se při manipulaci s daty nebyl nutné zajímat přístupvé mechanizmy) a zvýšit prduktivitu prgramvání. Relační mdel je zalžen na vlastnstech relační algebry. Databáze je klekce databázvých relací reprezentvaných tabulkami. Všechny infrmace jsu ulženy v relacích. Databázvá relace se liší d matematické definice ve 2 aspektech: Relace je vybavena pmcnu strukturu - schématem relace. Schéma relace tvří: jmén relace jména atributů definice dmén Hdnty jsu atmické V rce 1985 Cdd specifikval 5 skupin pravidel pr relační databázvé systémy: 1. základní pravidla 2. pravidla týkající se struktury dat 3. pravidla týkající se integrity dat 4. pravidla týkající se mdifikace dat 5. pravidla nezávislsti dat Pravidel je celkem 12, jde pravidla jak např. schpnst RDB manipulvat s daty pmcí perací relační algebry, pdpra relací, dmén, primárních klíčů, cizích klíčů, pdpra hdnty NULL na reprezentaci chybějící infrmace, nezávislst dat d aplikace, která data pužívá atd. Transfrmace E-R mdelu d relačníh mdelu Typ entit reprezentujeme tabulku, její slupce tvří atributy. Vztah M:N reprezentujeme tabulku, která bsahuje primární klíče typů entit, participujících na daném vztahu. V případě vztahu 1:1 neb N:1 není nutné vytvářet nvu tabulku. U vztahu N:1 definujeme cizí klíč na straně N. Kmpzici reprezentujeme tabulku, přičemž d nvé tabulky zahrneme klíč rdičvské tabulky. 3. Typy vztahů mezi entitami a jejich reprezentace v relačním mdelu Vztah vyjadřuje určité prpjení mezi entitami. Kardinalita vztahu vyjadřuje klik entit jednh typu může být ve vztahu s klika entitami z druhéh typu entit. Vztah typu 1:1 vztah, ve kterém na bu stranách vystupuje puze jeden bjekt dané entity. Vztah typu 1:N na jedné straně je jediný bjekt, který je ve vztahu s jedním neb více bjekty na straně druhé. Jedná se typ, který se vyskytuje velmi čast (např. ddělení a zaměstnanec). Vztah typu M:N vztahy, kde vystupuje více bjektů na bu stranách (např. zaměstnanec a úkl, kde jeden úkl může řešit více zaměstnanců a sučasně jeden zaměstnanec může řešit více úklů).
$PROG 3 Str. 2/2 ISA hierarchie U ISA vztahu hvříme nadtypech a pdtypech. Hlavní účel zavedení ISA vztahu mezi typy entit je, že jedna entita může zdědit atributy druhé entity, ale také může mít další atributy. Pdentity jsu identifikvány výhradně předkem, tj. všechny entity v ISA hierarchy sdílí jediný identifikátr. Pdentita může pak mít i další, speciální způsb identifikace. 4. Vlastnsti relační tabulky Každá tabulka má jednznačné jmén. Každý slupec v tabulce má jednznačné jmén. Všechny hdnty danéh slupce jsu stejnéh typu. Nezáleží na přadí slupců. Nezáleží na přadí řádků. Tabulka nemůže mít duplicitní řádky. Všechny hdnty jsu atmické. Každá tabulka musí mít primární klíč. 5. Nrmální frmy relačníh schématu Při splnění určitých pdmínek lze tabulku relační databáze prhlásit za nrmalizvanu. Nrmalizace přispívá k zamezení redundancí, k psílení integrity dat a mezuje vznik anmálií při aktualizaci a údržbě dat. Většinu jsu tabulky nrmalizvány d třetí nrmální frmy. Platí tat pravidla: relace je v 1. nrmální frmě, jsu-li všechny její atributy atmické, tj. dále nedělitelné; relace je v 2. nrmální frmě pkud je v 1. nrmální frmě a sučasně je každý neklíčvý atribut plně závislý na primárním klíči; relace je v 3. nrmální frmě pkud je v 2. nrmální frmě a sučasně jsu všechny její neklíčvé atributy vzájemně nezávislé. Funkční závislst Je dána relace R(A,B), kde A,B mhu být slžené atributy. B je funkčně závislý na A, když pr každu hdntu A je jednznačně daná hdnta B. B je plně funkčně závislý na A, je-li funkčně závislý na A a není funkčně závislý na žádné pdmnžině A. Pstup nrmalizace Není li relace v 1.NF (bsahuje vícehdntvý atribut), vytvříme nvu tabulku. Není-li relace v 2.NF, tak vytvříme prjekci, abychm eliminvali neúplné funkční závislsti na primárním klíči. Není-li relace v 3.NF, tak vytvříme prjekci, abychm dstranili tranzitivní závislsti. Příklad: R(A, B,C,D); A D. není v 2.NF vytvříme prjekci: R1(A,B,C) a R2(A,D) S(E, F,G); F G není v 3.NF vytvříme prjekci: R1(E, F) a R2(F,G)
$PROG 4 Str. 1/3 Umělá inteligence: základní pjmy a definice, blasti výzkumu umělé inteligence, předmět výzkumu, metdy UI. Úlha symblů v umělé inteligenci, systémy symblů, hyptéza systémech symblů. Základní pjmy Expertní systém = pčítačvý prgram, který má za úkl pskytvat expertní rady, rzhdnutí neb dpručit řešení v knkrétní situaci. Neurnvé sítě = výpčetní mdel pužívaný v UI (Umělá neurnvá síť (ANN, artificial neural netwrk) je prstředkem pr zpracvání kmplexních dat, využívajícím ke své práci mnžství prpjených prcesrů a výpčetních cest.) Umělý živt = evluční algritmy, které se neustále zdknalují tak, že se kmbinují dhrmady a dbré výsledky se zachvají. Tyt kmbinace jsu ještě dplněny náhdnými změnami mutacemi. atp. Turingův test - pjmenvaný pdle svéh tvůrce Alana Turinga, který jej prezentval rku 1950) je pkus, který má za cíl prvěřit, jestli nějaký systém umělé inteligence se pravdu chvá inteligentně. Jelikž inteligence je pjem, který lze jen těžk definvat, tím hůře testvat, pužívá Turingův test prvnání s člvěkem. Definice umělé inteligence Vědní disciplína, zabývající se terií systému zpracvávajících znalsti a schpných se více méně samstatně rzhdvat. (M. Minsky 1967) Věda vytváření strjů neb systémů, které budu při řešení určitéh úklu užívat takvéh pstupu, který kdyby h dělal člvěk bychm pvažvali za prjev jeh inteligence (E. Rich 1991) Zabývá se tím, jak pčítačvě řešit úlhy, které dnes zatím zvládají lépe lidé Směry výzkumu Inženýrský (snaha knstruvat systémy, které se chvají inteligentně ) Psychlgický (pznat záknitsti lidskéh myšlení se snahu pchpit a mdelvat je) Oblasti výzkumu UI Jazyky pr UI Matematická lgika Reprezentace znalstí Metdy řešení úlh Aplikační blasti Expertní systémy - znalstní inženýr zpvídá experta v dané blasti a snaží se vlžit jeh znalsti d systému. Neurnvé sítě - šance simulvat některé funkce lidskéh myšlení. Pčítačvé vidění - svět je slžen z třídimenzinálních bjektů, ale d lidskéh ka i d kamery rbta vstupuje 2D braz. Některé systémy pracují v 2D, ale plnhdntné pčítačvé vidění vyžaduje 3D infrmaci, která není jen mnžinu 2D brazů. V sučasnsti jsu jen mezené mžnsti, jak reprezentvat 3D scénu, a ty nejsu ani zdaleka tak dbré, jak lidské k.
$PROG 4 Str. 2/3 Rzpznávání řeči - v 90. letech dsáhl praktických výsledků pr limitvané účely. Dnes je mžné instruvat pčítač řečí, ale většina uživatelů se vrátila ke klávesnici a myši jak k vhdnějším. Analýza scén Rbtika Řešení úlh a plánvání Strjvé učení Zpracvání řečvé infrmace Przumění přirzenému jazyku Umělý živt Metdy umělé inteligence využívají znalsti, přičemž tyt znalsti by měly být reprezentvány tak, že pkrývají zbecnění nereprezentuje se každá individuální situace slučují se případy mající pdstatné splečné rysy jsu blízké pjmům, ve kterých je chápu a pužívají lidé dají se lehce mdifikvat dají se pužít ve velkém pčtu případů Základní metdy prhledávání využití znalstí abstrakce Další metdy metda cílů a prstředků, která spčívá v redukci výchzí úlhy na řadu dílčích úlh (pdcílů), jejichž kmbinace řešení vede k vyřešení výchzí úlhy. Tent prces má rekurzivní charakter ve smyslu redukce slžitějších úlh na jedndušší. Celý prces redukce knčí úspěšně v případě nalezení elementárních úlh, pr něž máme prstředky k vyřešení, neb neúspěšně, nelze-li takvu pslupnst nalézt. metda zkušek a mylů, jejíž princip lze pchpit např. jak metdu, která se pužívá pr cestu bludištěm. Účinek tét metdy je zesilván pužitím heuristik při určvání dalšíh pstupu. S tím suvisí metdy prhledávání stavvých prstrů metda analgie, spčívající v aplikaci pstupů, které se už ukázaly úspěšné při řešení jistéh kruhu prblémů, na úlhy pdbné neb blízké pužití pačnéh pstupu, kdy vycházíme d řešení úlhy a pačnými krky se snažíme přijít k výchzí situaci. Tent pstup není nebvyklý ani u lidskéh myšlení a pužívá se také ve frmálních systémech, v nichž je znám pčáteční stav úlhy, výsledný stav úlhy a elementární transfrmace jednh stavu ve druhý. práce s frmálními systémy, pužívaná zejména u systémů matematick-lgických, směrujících k tvrbě systémů pr dkazvání vět, deduktivních systémů atd. Úlha symblů v UI
$PROG 4 Str. 3/3 Symbly tvří základ nejúčinnějších způsbů zpracvání infrmací technickými systémy. Všechny metdy UI jsu pstaveny na manipulaci se symbly. Na symblvé úrvni jsu reprezentace bjektů definvané pmcí symblů, kterými mhu různé prgramy manipulvat. Jakékliv další vlastnsti, které nabývají symbly svu fyzikální existencí, jsu pr infrmatiku nepdstatné a v rámci infrmatiky se neuvažují. Ckliv, c splňuje tyt předpklady, může plnit v infrmatice, a tedy i v umělé inteligenci úlhu symblů: symbly jsu entity, které jsu fyzikálně realizvatelné a které mají v prstru a čase jisté trvání. Můžeme je identifikvat a jejich kvalitativní určenst se v čase nemění tak, aby t vlivňval naše úvahy nich jsme schpni z nich knstruvat rzsáhlejší struktury. Tyt struktury pak dědí všechny vlastnsti symblů. Symbly a jejich struktury jsu reprdukvatelné symbly mají schpnst značvat krmě sebe i jiné entity, i takvé, které existují puze v našich představách. Ve spjení s vhdným zařízením na zpracvání symblů mají schpnst značvat také pstupy zpracvání entit svéh typu. Vztah značvané entity a značujícíh symblu trvá, dkud t předpkládáme. Tent vztah máme mžnst kdykliv přerušit. Systémy symblů Kncem třicátých let navrhl A. M. Turing abstraktní zařízení, které precizně matematicky definval a které dnes nazýváme Turingův strj. V pdbě tht pjmu má infrmatika k dispzici nejenm abstrakci symblů, ale také zařízení, která jsu schpna symbly a z nich vytvřené struktury zpracvávat. Nazýváme je systémy symblů. Příkladem je abstraktní mdel pčítače, např. právě už zmíněný Turingův strj. Fyzikální systémy symblů jsu technická zařízení na zpracvání symblů ve tvaru elektrnicky vytvřených stp na vhdných paměťvých mediích. Dnes t jsu převážně pčítače. Pčítače se svědčily i při rzhdvání na takvé kvalitativní úrvni, která předpkládá u lidí dluhdbu dbrnu přípravu a praxí nabyté zkušensti. T je případ expertních systémů. Hyptéza systémech symblů Hyptézu vyslvili v rce 1976 dva průkpníci umělé inteligence A. Newell a H. A. Simn. Jde dmněnku, vyslvenu na základě jisté empirické zkušensti. Úklem UI je vyvrátit neb ptvrdit tut hyptézu, případně nalézt hranice jejíh pdstatnění Zmíněná hyptéza zní: Systémy zpracvání symblů umžňují vytvřit všechny nutné a pstačující pdmínky inteligence."
$PROG 5 Str. 1/2 Metdy a principy neinfrmvanéh hledání řešení prblémů. Metdy a principy heuristickéh hledání řešení prblémů. Prdukční (pravidlvé) systémy. 1. Řešení úlh v UI Řešení úlh je důležitu částí bru umělé inteligence. Jedním ze způsbů řešení úlh je prhledávání stavvéh prstru. Je-li dán pčáteční mdel prstředí a pžadvaný kncvý mdel prstředí, je úklem systému na řešení úlh hledat vhdnu pslupnst akcí, jejichž aplikací lze přejít d pčátečníh mdelu ke kncvému. Každému mdelu dpvídá určitý stav prstředí, mnžina těcht stavů se nazývá stavvý prstr řešení. Stavvý prstr lze reprezentvat rientvaným grafem (tj. hrany grafu jsu rientvané ). Každý uzel reprezentuje stav, každá rientvaná hrana přechd mezi stavy. Řešení úlhy lze pak frmulvat jak hledání cesty v rientvaném grafu. Hledání musí být systematické: - nevynechá ani jeden bjekt - ani jeden bjekt nevybere dvakrát. Obecný algritmus prhledávání grafu: - z mnžiny tevřených uzlů vybere jeden, přeřadí h mezi uzavřené uzly, expanduje jej - vytvří jeh následvníky a ty zařadí mezi tevřené uzly - krmě těch, které se již nacházejí v mnžině tevřených neb mnžině uzavřených uzlů. - jestliže v mnžině tevřených uzlů se nachází cílvý, prhledávání je úspěšně uknčen - jestliže mnžina tevřených uzlů je prázdná, prhledávání je neúspěšně uknčen - jinak se pět vrátí k výběru uzlu z mnžiny tevřených uzlů. Expandváním a přidáváním nvých uzlů rzšiřujeme pdgraf prhledávacíh grafu. Expanze uzlu - u zvlené cesty vytvříme všechny přímé následvníky jejíh psledníh uzlu a všechny je přibereme d reprezentačníh pdgrafu. Když dsáhneme cílvý stav, budvání pdgrafu sknčí. Tat strategie pracuje se 2 mnžinami uzlů : - mnžiny tevřených uzlů (OPEN) = všechny uzly, které ještě nebyly przkumány. Uzel se stává tevřeným v kamžiku, kdy je vytvřen při expanzi svéh předka. Pr tevřený uzel platí, že jeh následvníci ještě nebyli vytvřeni a nejsu ještě sučástí reprezentačníh pdgrafu. - mnžiny uzavřených uzlů (CLOSE) = všechny uzly, které již byly przkumány. Uzel se stává uzavřeným v kamžiku, kdy je expandván a jsu vytvřeni jeh následvníci. Pdle th, jak jsu znalsti dané úlze využity v mechanismu prhledávání stavvéh prstru, rzlišujeme algritmy infrmvané a neinfrmvané. 2. Metdy a principy neinfrmvanéh hledání řešení prblémů - slepé prhledávání d šířky při slepém prhledávání d šířky (breadth-first search) se nejdříve expanduje uzel s minimální hlubku hlubku uzlu ve strmu řešení rzumíme pčet hran na cestě d pčátečníh uzlu k danému uzlu - slepé prhledávání d hlubky při tmt prhledávání se přednstně expanduje uzel s největší hlubku prhledávání d hlubky je čast spjen s mezením maximální prhledávané hlubky, při jejímž dsažení se pužívá mechanizmus navracení (backtracking) 3. Metdy a principy heuristickéh hledání řešení prblémů
$PROG 5 Str. 2/2 Infrmvané metdy prhledávání stavvéh prstru řešení prblému pužívají pr výběr nejvhdnějšíh vrchlu k expandvání různé typy heuristik. Heuristika je pstup, jak pstupvat při výpčtu knkrétní situace, který není hrmadný, platí jen pr knkrétní hdnty a knkrétní prblémy a zpravidla byl dpzrvána z praxe. K rzhdnutí, který uzel grafu expandvat se pužívají různé hdntící funkce. Platí, že čím kvalitnější heuristické znalsti prblému jsu pužity k frmulaci hdntící funkce, tím efektivnější bude prhledávání. Pdle becné dhdy tat funkce vybírá ten uzel, ve kterém nabývá minimální hdntu - je-li takvých uzlů víc, pak náhdně jeden z nich. Pkud hdntící funkce dbře pstihuje vlastnsti a charakter úlhy, budu vždy expandvány nejperspektivnější uzly a zabrání se prhledávání cest, které nevedu k cíli. Nejjedndušší verzí infrmvanéh algritmu je gradientní algritmus, resp. cesta nejvyššíh gradientu. Gradientní algritmus expanduje ten uzel, který byl vyhdncen pmcí hdntící funkce f jak nejlepší, a vyhdncuje jeh následvníky. Následvník, který má "nejlepší" hdncení funkcí f je vybrán k další expanzi. "Rdič" i "surzenci" tht uzlu jsu ihned zapmenuti, v paměti je jen rzvíjený uzel. Prhledávání je zastaven, pkud je dsažen stavu, který má lepší hdncení funkcí f, než jeh následvníci. Pdstatnu nevýhdu tht algritmu je mžnst uváznutí v lkálním extrému. Vzhledem k zapmínání statních uzlů než právě rzvíjenéh není vylučen zacyklení. Další mžnstí pužití heuristiky může být cesta nejmenšíh dpru (nejmenší náklady, energie apd.). 4. Prdukční (pravidlvé) systémy - pskytují vhdnu strukturu na ppis a prvádění prcesu prhledávání - cílem činnsti pravidlvéh systému je vyprdukvání dat (údaje), která (který) puživatel pvažuje za řešení svéh prblému - znalsti jsu v systému reprezentvány pmcí pravidel - prdukční pravidla reprezentují pznatek ve frmě pravidel: jesliže platí předpklady => pak platí důsledek - typickým případem reprezentace znalstí pužitím pravidel je lgické prgramvání - tři základní slžky prdukčních systémů: báze dat (reprezentace faktů) část může bsahvat trvale platná fakta část může bsahvat aktuálně platná fakta báze (prdukčních) pravidel předpkladvá část (předpklady) důsledkvá část (důsledek, akce) inferenční mechanizmus (interpreter) řídí prces aplikací prdukčních pravidel na bsah báze dat, tj. řídí výběr pravidla, vyknání pravidla a ulžení výsledku cyklicky prvádí tři krky: 1. Prvnání se vzrem 2. Řešení knfliktvých situací - je-li výsledkem krku 1. více než jedn pravidl, je třeba zvlit mezi nimi pr aplikaci jediné 3. Aplikace zvlenéh pravidla určuje, jak a v jakém přadí aplikvat pravidla na bázi dat, principiálně lze rzlišit: přímé (dpřední) řetězení, kdy při aplikaci prdukčních pravidel pstupujeme ve směru d pčátečníh stavu k některému ze stavů cílvých (strategie řízená daty) zpětné řetězení, kdy se vychází d cíle ve směru pčátečních stavů (strategie řízená cílem)
$PROG 6 Str. 1/3 Expertní systémy základní pjmy, architektura. Znalstní inženýrství. Znalstní prjekty, jejich řízení a příčiny selhání. Aplikace expertních systémů, typy úlh pr aplikaci expertních systémů. Základní pjmy Expert sba, která má hlubké znalsti v nějaké blasti lidské činnsti a je schpna rychle a kvalitně řešit prblémy, které se v tét blasti běžně ale i zřídka kdy vyskytují má v řešení těcht prblémů zkušensti, dvede tyt zkušensti vhdně a v pravý čas využít nezřídka d pstupů řešení různých prblémů zapjuje i ty své schpnsti, které bvykle nazýváme intuicí, citem pr klnsti řešení prblému, atd. Báze znalstí bsahuje znalsti experta ptřebné k řešení zvlenéh prblému zachycuje znalsti d nejbecnějších, učebnicvých, až p úzce speciální, d všebecně známých až ke znalstem sukrmým, d exaktních až k nejistým Expertní systém prgram, který využívá vhdně v pčítači ulžených pznatků lidských expertů k řešení prblémů, které bvykle v praxi vyžadují znalst expertů napdbují činnst lidských expertů při řešení prblémů Fakta je třeba je identifikvat jsu relevantní k řešenému prblému musíme zajistit způsb, jakým je bude systém zpracvávat při změně uvažvanéh světa Heuristiky pvažujeme je za nejvyšší úrveň znalstí na tét úrvni je expert schpen vytvářet nvá pravidla určena ke zpracvání různých, někdy dknce unikátních klnstí a prblémů Heuristické řešení je čast jen přibližné, zalžené na pučeném dhadu, intuici, zkušensti neb prstě na zdravém rzumu. První dhad se může pstupně zlepšvat, i když heuristika nikdy nezaručuje nejlepší řešení. Zat je univerzálně pužitelná, jednduchá a rychlá. Nejjedndušší heuristická metda je pkus a myl, kteru lze pužít kdekli, d přihledávání šrubů na kl až p řešení algebraických prblémů. Architektura Znalstní inženýrství Hlavní náplní je vytvření expertníh systému (tzv. znalstní aplikace) Expertní systém vniká spluprací experta a znalstníh inženýra (iterativní prces) Účelem získávání znalstí je patření všech ptřebných znalstí pr tut činnst
$PROG 6 Str. 2/3 Fáze vývje expertníh systému Analýza prblému (identifikace prbledá, psuzení vhdnsti) Specifikace Vývj (knceptuální návrh, návrh implementace, implementace, vyhdncení) Využití (nasazení systému, údržba systému) Prjektvý tým znalstních prjektů: - řádní členvé (veducí prjektu-celkvá dpvědnst, znalstní inženýři-získávání znalstí, návrháři-výběr prstředí, vývjví pracvníci-zprvznění prstředí) - pdpůrní členvé týmu (manažer prjektu-příprava cíl.prstředí, manažeři dílčích úklů, dménví experti-zdrj znalstí, uživatelé) - knzultanti (specialisté, externí pradci, analytici) Typy selhání - základní selhání (prjekt nedknčen, nedsaženy žádné knkrétní výsledky) - primární selhání (prjekt dknčen, neplní uspkjivě všechny stanvené cíle neb specifikacesystém je bezcenným) - sekundární selhání (selhává v plnění něklika důležitých pžadavků-lze mdifikvat) - kvalitativní selhání (mezení pužití systému) - časvé a nákladvé selhání (špatně řízený prjekt) Typy selhání chybí manažerská pdpra stanvené cíle příliš vysk malé zapjení uživatele d prjektu pdcenění peračních a rganizačních činnstí chybí dménví experti / příliš mnh dménvých expertů slabý prjektvý tým pužití neadekvátních (neefektivních) nástrjů Aplikace expertních systému prgramvací jazyky (LISP a jeh varianty, PROLOG, C, C++, Pascal, ) vývjvá prstředí (EXSYS Prfessinal, M.4, G2, RTwrks) Systém G2 prstředí pr vývj rzsáhlých expertních systémů reálnéh času s vyskými nárky na kntinuální a inteligentní sledvání prcesů, diagnstické účely a řízení - mžné aplikační blasti jsu řízení výrbních prcesů, telekmunikace, medicína, řízení ksmických letů, finančnictví neb rbtika Typy expertních úlh diagnstické - diagnóza (prces nalezení chyb či chybných funkcí systému) - interpretace (analýza dat s cílem určení jejich významu) - mnitrvání (interpretace signálů a dat a určení kamžiku, kdy je nutná intervence)
$PROG 6 Str. 3/3 generativní - návrh (vytváření knfigurací bjektů vyhvujících daným pdmínkám) - plánvání (nalezení pslupnsti akcí k dsažení cíle) - predikce (předpvěď běhu buducích událstí na základě mdelu minulsti a sučasnsti)
$PROG 7 Str. 1/3 Objektvé mdelvání a prgramvání - základní pjmy, pdstata, využití. Sftwarvý prces. UML. Událstmi řízené prgramvání. Architektura MVC. základní pjmy Prgram pslupnst příkazů ppisujících určitu činnst Prces prváděný (běžící) prgram Sekvenční instrukce zpracvávány pstupně Paralelní - instrukce zpracvávány suběžně Prcesr zařízení, které dkáže vyknávat příkazy prgramu Data bjekty (údaje), s nimiž pracují prcesy Zdrjvý kód kód prgramu zapsaný v nějakém prgramvacím jazyce Cílvý kód binární kód, (vytvřený p překladu zdr. kódu) je spustitelný Bytekód (java) spustitelný mezikód, vzniká jak cílvý kód, ale je spuštěn a prváděn běhvým prstředím (Runtime Envirnment, Virtuální strj) Objektvé prgramvání pužívá prgramvací jazyk k napdbení bjektů skutečnéh světa definváním tříd. Zásady bjektvéh prgramvání (zdrj: Rudlf Pecinvský) Prgramvat prti rzhraní a ne prti implementaci Dbát na důsledné zapuzdření a skrývání implementace Zapuzdřit a dputat části kódu, které by se mhly měnit Maximalizvat sudržnst (chesin) entit (balíčků, tříd a metd). Každá entita by měla řešit jen jeden knkrétní úkl Kncentrvat zdpvědnst za řešení úklu na jednu entitu návrh řízený zdpvědnstmi (respnsibility driven design) Minimalizvat vzájemnu prvázanst (cupling) entit Vyhýbat se duplicitám kódu Pdstata, využití základní bjektvé kncepty Abstrakce separvání důležitých rysů d nedůležitých v závislsti na kntextu Zapuzdření (encapsulatin) data a perace bjektu tvří nedělitelný celek Dědičnst (inheritance) schpnst bjektů dědit vlastnsti a chvání předka Plymrfizmus jev, kdy perace stejnéh jména je pužívána pr více bjektů dlišných tříd. Vlastnst, která umžňuje: jednmu bjektu vlat jednu metdu s různými parametry (parametrický plymrfismus) bjektům dvzených z různých tříd vlat tutéž metdu se stejným významem v kntextu jejich třídy, čast pmcí rzhraní přetěžvání perátrů znamená prvedení perace v závislsti na typu perandů (perátrvý plymrfismus) Kmunikace (zasílání zpráv = vlání metd) bjekty mezi sebu kmunikují zasíláním zpráv. Výsledkem přijetí zprávy příjemcem je vyknání nějaké perace Objektvé mdelvání snaha reálně ppsat existující (neb vznikající) systém v zjedndušené (abstraktnější) pdbě Význam mdelvání snadné změny s nízkými náklady prti reálnému systému usnadnění kmunikace v týmu a se zákazníkem
$PROG 7 Str. 2/3 přehled aktuálním stavu prjektu vytváření dkumentace Princip tří architektur knceptuální úrveň mdel reality, nejvyšší abstrakce, ppisuje bsah IS, ne frmu (CO) technlgická úrveň ppis technlgie s hledem na prstředí implementace (JAK) fyzická úrveň ppis detailů implementace v knkr. prstředí (ČÍM) Sftwarvý prces Živtní cyklus infrmačníh systému (IS) Analýza firemníh prstředí jak funguje firma Analýza IS c má IS nabízet Návrh IS jak realizvat pžadvaný systém Implementace IS realizace prgramvání Nasazení IS nasazení u zákazníka Unified Mdeling Langue (UML) - grafický jazyk pr specifikaci, vizuální ppis, tvrbu a dkumentaci jedntlivých sučástí sftwarvéh systému. Jazyk pr OO mdelvání. Mdelvání typvých úlh nástrjem je Diagram typvých úlh (Use Case Diagram), vyjadřuje vztahy Aktér-úlha a úlha-úlha. Důležité jsu scénáře. Mdelvání tříd nástrjem je Diagram tříd (Class Diagram). Jet základní strukturální diagram UML. Třída abstraktní definice mnžiny bjektů (atributy, metdy) Rzhraní tříd definuje kntrakt, ke kterému se třídy přihlašují Asciace definují vztahy mezi bjekty Mdelvání dynamiky systému dva základní (vzájemně izmrfní) diagramy OSD a OCD sekvenční diagram (Object Sequence Diagram - OSD) zbrazuje interakci bjektů s důrazem na časvu pslupnst, mapván k jedné typvé úlze diagram bjektvé splupráce (Object Cllabratin Diagram - OCD) phled na strukturu splupráce vztahy mezi bjekty diagram aktivit lze pužít pr mdelvání chvání, ale není izmrfní s OSD a OCD, mdeluje typvu úlhu jak pslupnst aktivit ne jak interakci uživatele a systému Událstmi řízené prgramvání (Event-Driven Prgramming) událst vzniká buď jak výsledek interakce mezi uživatelem a GUI neb jak důsledek změny vnitřníh stavu aplikace či OS. Obsluha událsti úsek kódu, který je při vzniku událsti autmaticky vyvlán a prvádí činnst k událsti připjenu (Event Handler) Typy událstí klik/dvjklik změna stavu kmpnenty stisk/uvlnění klávesy/tl. myši překreslení událst systému neb zpráva časvače Architektura MVC - Mdel-view-cntrller (MVC) - je sftwarvá architektura, která rzděluje datvý mdel aplikace, uživatelské rzhraní a řídicí lgiku d tří nezávislých kmpnent tak, že mdifikace některé z nich má minimální vliv na statní. Mdel (mdel) - dménvě specifická reprezentace infrmací, s nimiž aplikace pracuje
$PROG 7 Str. 3/3 View (phled) - převádí data reprezentvaná mdelem d pdby vhdné k interaktivní prezentaci uživateli Cntrller (řadič) - reaguje na událsti (typicky pcházející d uživatele) a zajišťuje změny v mdelu neb v phledu Čistě OOP versus hybridní prg. Jazyky čisté OOP jazyky jsu jazyky, které nepřipuštějí jiné prgramvací mdely. Funkci nemůžeme napsat samstatně, pkud není sučástí třídy. Nemůžeme deklarvat glbální prměnnu. Příklady čistých jazyků jsu Smalltalk a Eiffel. S hybridními jazyky můžeme dělat ckli chceme včetně úplnéh vypuštění OOP principů. Příklady hybridních jazyků jsu všechny ty, které jsu kmpatibilní s již existujícími, jak například C++ neb Object Pascal. Zdrje: Přednášky PRO1, OMO1, PRO2 http://cs.wikipedia.rg/wiki/mdel-view-cntrller http://cs.wikipedia.rg/wiki/plymrfismus_(prgramvání) http://www.fi.muni.cz/usr/jkucera/pv109/2002/xkriz1.htm
$PROG 8 Str. 1/3 Práce s klekcemi algritmy a implementace ve zvleném prgramvacím jazyce. Klekce jsu bjekty, které seskupují skupinu elementů d jednh celku (=kntejnery) Další zdrje vhdné pr prstudvání: Kntejnery I. - Úvd d prblematiky, Základy práce s klekcemi v jazyce Java Kntejnery II. - Kategrie kntejnervých rzhraní, Implementace, Wrapppery Kntejnery III. Algritmy Kntejnery (v Javě bvykle nazývané "klekce") jsu datvé bjekty, které nám umžňují snadn a efektivně spravvat variabilní hrmadná data (i další bjekty). Pdle způsbů ulžení dat a práce s nimi rzlišujeme různé druhy kntejnerů a při jejich pužití si vždy vybereme ten, který se pr daný případ nejlépe hdí v knkrétním jazyce. Základními peracemi dle typu kntejneru je iterace, prvnávání, přidávání a mazání. Zvlený jazyk: Java Ple nejzákladnější struktura vhdná zejména pr primitivní hdnty, které se nemusí nahrazvat bjektem (známe předem pčet bjektů ve skupině). Nevýhdu je jeh dynamické plnění (nutné definvat jeh rzsah časvá nárčnst). Ple mhu být vícerzměrné. Klekce struktura vhdná zejména pr práci s bjekty, kdy se nemusíme starat velikst klekce. Nvé bjekty lze vkládat bez nutnsti realkace. Vhdné při vytváření předem neznáméh pčtu bjektů. The Cllectin Framewrk (CF) systém rzhraní a tříd, které bezprstředně suvisí s klekcemi. Naprstu většinu z nich najdeme v balíku java.util (v Javě 5.0 - tj. d JDK 1.5.0 dšl v CF k významným změnám). Suvisející pjmy: Iterátr prstředek zajišťující sekvenční přístup k datům, pracující krkvě, v každém dalším krku pskytne přístup k dalšímu prvku. Rychlé právě v případě sekvenčníh prcházení. Zajišťuje mžnst prcházení prvků bez znalsti jejich implementace. nezáleží na přadí, neb je přadí dané vlastnstmi klekce metda iteratr() danéh kntejneru metda next() - vrátí další prvek v kntejneru metda hasnext() - je-li v kntejneru další prvek metda remve() - vyjmutí psledníh bjektu vrácenéh iterátrem Prvnatelnst důležitá vlastnst, kteru ptřebujeme pr ulžení d některých kntejnerů. Datvé bjekty mhu mít prvnatelnst implementvánu prakticky libvlným způsbem, třída implementuje rzhraní Cmparable (bsahuje jedinu metdu cmparet()). Vectr nejzákladnější implementace = ple s prměnnu velikstí indexace d 0, v případě ulžení primitivníh datvéh typu nutné zapuzdření. Třída ještě před vznikem CF. Chvání třídy Vectr je prakticky shdné s třídu ArrayList s drbnými rzdíly. Vectr má některé metdy navíc (např. hledání d určitéh indexu), lze mu stanvit přírůstek kapacity a je synchrnizvaný (viz dále). V běžných případech dnes nemáme důvd pužívat Vectr namíst třídy ArrayList. HashTable implementuje hašvací tabulku mapující klíče na hdnty (bjí becně typu Object) -> plymrfní, každý bjekt - klíč musí implementvat metdy hashcde a equals
$PROG 8 Str. 2/3 Klekce základní perace add(bject) blean addall(cllectin) clear() cntains(object) blean cntainsall(cllectin) blean isempty() - blean iteratr() - vrací iterátr remve(object) remveall(cllectin) blean retainall(cllectin) pnechá ty, které se schdují s argumentem size() tarray() - vrátí ple addall(klekce,pzice) get(pzice) indexof(bjekt) lastindexof(bjekt) remve(pzice) listiteratr(), listiteratr(pzice) set(pzice, bjekt) sublist(d,d) Máme dvě základní mnžiny kntejnerů, každá z nich vychází z jednh rzhraní: Klekce nrmální klekce - skupina samstatných prvků (rzhraní Cllectin) Vždy zahrnují: Rzhraní: umžňují pracvat s klekcí bez hledu na detaily její implementace Implementaci: knkrétní znvupužitelné implementace rzhraní. Algritmy: metdy, které prvádějí užitečné výpčty typu vyhledávání, třídění s bjekty klekcí Mnžiny (rzhraní Set) - každý prvek může být v kntejneru puze jednu (jinak kntejner zabrání vlžení). Není zde bdba kntejneru multiset (mžnst vícenásbné přítmnsti téhž prvku). Prvek becně nemá určenu žádnu plhu v mnžině, na základě které by k němu byl mžné přistupvat. Zvláštním případem je pdrzhraní SrtedSet, cž je seřazená mnžina. bjekty, vlžené d kntejneru, musí mít definvat metdu equals() - umžní určit jedinečnst Implementace HashSet mnžina s hešvací tabulku -V situaci, kdy je třeba ulžit brvské ple nějakých řetězců a jedntlivé řetězce velmi rychle vyhledávat. Sekvenční prhledávání díky své velké časvé nárčnsti není vhdné. Jedntlivé řetězce se rzdělilí d skupin, které si jsu pdbné. K tmu jsu hešvací funkce, která dkážu jedntlivé řetězce rzptýlit d něch plíček. Objekty musí definvat metdu hashcde() - vrací celé čísl (int) c nejlépe charakterizující bsah bjektu TreeSet setříděný kntejner typu mnžina rzhraní SrtedSet metdy first() - vrátí nejmenší prvek last() - největší prvek subset(frmelement, telement) pdmnžina d určenéh d druhéh určenéh prvku headset(telement) pdmnžina menších prvků, než telement tailset(frmelement) pdmnžina větších prvků, než frmelement Seznamy (rzhraní List) - prvek může být v kntejneru vícekrát a má určenu jednznačnu plhu (index). Indexván d 0. seřazení seznamu srt(list)