Uživatelem definované typy doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007  59 732 4213.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Tomáš Petříček Microsoft C# MVP
Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Vstup a výstup doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
Programování funkcí v Excelu
Vstupy a výstupy v JavaScriptu Vstup: použitím metody prompt objektu window čtením hodnot z položek formuláře Výstup : použitím metody alert objektu window.
Programování 2 Cvičení 5.
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
Seznamy v jazyce Haskell doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
Fakulta elektrotechniky a informatiky
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Programovací jazyk Prolog
Programování v Pascalu Přednáška 3
Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
C# pro začátečníky Mgr. Jaromír Osčádal
Programovací jazyk Haskell Ing. Lumír Návrat  katedra informatiky, A 1018 
Druhé cvičení Vytváření identifikátorů Datové typy
C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš.
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Třída jako zdroj funkcionality
Syntaxí řízený překlad
Datové typy a práce s nimi
DEKLARACE PROMĚNNÝCH A KONSTANT
Návrh a tvorba WWW Přednáška 11
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Základy λ- kalkulu doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
Počítače a programování 1 8.přednáška. Obsah přednášky Řetězce - deklarace a vytvoření Základní metody pro práci s řetezci Znaky - třída Character Základní.
Informatika I 4. přednáška
Abstraktní datové typy doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
IB111 Programování a algoritmizace
Funkcionální programování Haskell
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
Programovací jazyk Haskell doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
XQuery Dotazovací jazyk XML Daniel Privalenkov. O čem bude prezentace Nutnost dotazovacího jazyku v XML Rychlý přehled XQuery Několik příkladů.
Uživatelem definované typy Ing. Lumír Návrat  katedra informatiky, A 1018 
Seznamy v jazyce Haskell Ing. Lumír Návrat  katedra informatiky, D-403 
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
4. Typ pole 4.1 Jednorozměrná pole
Uživatelské aspekty tvorby počítačové aplikace
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Fce VB - matematické Abs( výraz ) Fix( výraz ) Int( výraz) Sgn(výraz )
Funkcionální programování Haskell Jan Hric, KTIML MFF UK,
Ing. Jiří Štěpánek.  V tomto případě je barva písma i použitý font definován jako atribut elementu font. Tento způsob znemožňuje znovupoužitelnost.
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Překladače 6. Sémantická analýza
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Y36PJC Programování v jazyce C/C++
Funkcionální programování Haskell
Výukový materiál zpracován v rámci projektu
Překladače Syntaktická analýza
Typový příklad 3 – zadání 1
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Programovací jazyk Haskell
Funkcionální programování Haskell
Funkcionální programování Haskell
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
C# přehled vlastností.
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
Funkcionální programování Haskell
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

Uživatelem definované typy doc. Dr. Ing. Miroslav Beneš  katedra informatiky, A-1007 

2ÚDPJ - Uživatelem definované typy Definice uživatelského typu data Color = Red | Green | Blue Color – typový konstruktor Color – typový konstruktor Red / Green / Blue – datové konstruktory Red / Green / Blue – datové konstruktory data Point = Point Float Float dist (Point x1 y1) (Point x2 y2) = dist (Point x1 y1) (Point x2 y2) = sqrt ((x2-x1)**2 + (y2-y1)**2) sqrt ((x2-x1)**2 + (y2-y1)**2) dist (Point ) (Point ) = 5.0 dist (Point ) (Point ) = 5.0 data Point a = Point a a polymorfismus polymorfismus konstruktor Point :: a -> a -> Point a konstruktor Point :: a -> a -> Point a

3ÚDPJ - Uživatelem definované typy Součinové datové typy data Point = Point Int Int existuje jen jediná varianta existuje jen jediná varianta typová kontrola v době překladu typová kontrola v době překladu žádná kontrola v době běhu žádná kontrola v době běhu data Dvojice a b = Dvojice a b type Dvojice a b = (a,b) izomorfní s uspořádanými n-ticemi izomorfní s uspořádanými n-ticemi

4ÚDPJ - Uživatelem definované typy Součtové datové typy data Color = Red | Green | Blue existuje více variant existuje více variant každá varianta je součinovým typem každá varianta je součinovým typem nutnost kontroly v době běhu nutnost kontroly v době běhu isRed :: Color -> Bool isRed Red = True může nastat chyba: isRed Blue = ??? může nastat chyba: isRed Blue = ???

5ÚDPJ - Uživatelem definované typy Rekurzivní datové typy Seznam data List a = Null | Cons a (List a) lst :: List Int lst = Cons 1 (Cons 2 (Cons 3 Null)) append Null ys = ys append (Cons x xs) ys = Cons x (append xs ys)

6ÚDPJ - Uživatelem definované typy Rekurzivní datové typy Strom data Tree1 a = Leaf a | Branch (Tree1 a) (Tree1 a) data Tree2 a = Leaf a | Branch a (Tree2 a) (Tree2 a) data Tree3 a = Null | Branch a (Tree3 a) (Tree3 a) t2l (Leaf x) = [x] t2l (Branch lt rt) = (t2l lt) ++ (t2l rt)

7ÚDPJ - Uživatelem definované typy Synonyma datových typů type String = [Char] type Name = String data Address = None | Addr String type Person = (Name, Address) type Table a = [(String, a)] jsou ekvivalentní původním typům jsou ekvivalentní původním typům představují pouze zkratky představují pouze zkratky

8ÚDPJ - Uživatelem definované typy Zavedení nového typu newtype Natural = MakeNatural Int není ekvivalentní původnímu typu Int není ekvivalentní původnímu typu Int vyžaduje explicitní konverzní funkce vyžaduje explicitní konverzní funkce toNatural :: Int -> Natural toNatural x | x < 0 = error “Chyba” | otherwise = MakeNatural x | otherwise = MakeNatural x fromNatural :: Natural -> Int fromNatural (MakeNatural x) = x

9ÚDPJ - Uživatelem definované typy Pojmenované složky typů Selektor – vrací složku hodnoty data Point = Pt Float Float px :: Point -> Float px (Pt x y) = x data Point = Pt Float Float px :: Point -> Float px (Pt x y) = x Pojmenované složky = selektory data Point = Pt { px, py :: Float } abs (Pt px=x, py=y) = sqrt (x*x+y*y) abs p = sqrt ((px p)**2 + (py p)**2) data Point = Pt { px, py :: Float } abs (Pt px=x, py=y) = sqrt (x*x+y*y) abs p = sqrt ((px p)**2 + (py p)**2) Vytvoření modifikované kopie p { px = x } p { px = x }

10ÚDPJ - Uživatelem definované typy Typové třídy Kontext (C 1 a, C 2 b, …), resp. C a omezení na typové proměnné a, b,... omezení na typové proměnné a, b,... C 1, C 2... jsou typové třídy C 1, C 2... jsou typové třídy Typ  u. cx => t u – typové proměnné u – typové proměnné cx – kontext cx – kontext t – typový výraz t – typový výraz Př.: Eq a => a -> [a] -> Bool (Eq a, Num b) => (a, b) -> [a] Př.: Eq a => a -> [a] -> Bool (Eq a, Num b) => (a, b) -> [a]

11ÚDPJ - Uživatelem definované typy Definice typové třídy Definice signatury metod a implicitní metody class Eq a where (==), (/=) :: a -> a -> Bool x /= y = not (x == y) class Eq a where (==), (/=) :: a -> a -> Bool x /= y = not (x == y) Dědičnost class (Eq a) => Ord a where ( ),(>=) :: a -> a -> Bool max, min :: a -> a -> a class (Eq a) => Ord a where ( ),(>=) :: a -> a -> Bool max, min :: a -> a -> a class (Read a, Show a) => Textual a class (Read a, Show a) => Textual a

12ÚDPJ - Uživatelem definované typy Definice instance typové třídy instance Eq Int where x == y = intEq x y instance Eq a => Eq [a] where [] == [] = True (x:xs) == (y:ys) = x == y && xs == ys _ == _ = False instance (Eq q, Eq b) => Eq (a,b) where (x1,y1) == (x2,y2) = x1==x2 && y1==y2

13ÚDPJ - Uživatelem definované typy Základní typové třídy Eq a Eq a (==), (/=) (==), (/=) Eq a => Ord a Eq a => Ord a ( ), (>=), min, max ( ), (>=), min, max Enum a Enum a succ, pred succ, pred Read a Read a readsPrec readsPrec Show a Show a showsPres, show showsPres, show (Eq a, Show a) => Num a (Eq a, Show a) => Num a (+), (-), (*), negate, abs (+), (-), (*), negate, abs (Num a) => Fractional a (Num a) => Fractional a (/), recip (/), recip (Fractional a) => Floating a (Fractional a) => Floating a pi, exp, log, sqrt, (**), … pi, exp, log, sqrt, (**), …

14ÚDPJ - Uživatelem definované typy Třída Show Hodnoty převoditelné na řetězec type ShowS = String -> String class Show a where showsPrec :: Int -> a -> ShowS show :: a -> String showList :: [a] -> ShowS type ShowS = String -> String class Show a where showsPrec :: Int -> a -> ShowS show :: a -> String showList :: [a] -> ShowS showPoint :: Point -> String showPoint (Pt x,y) = “(“ ++ show x ++ ”;” ++ show y ++ ”)” showPoint :: Point -> String showPoint (Pt x,y) = “(“ ++ show x ++ ”;” ++ show y ++ ”)” instance Show Point where show p = showPoint p instance Show Point where show p = showPoint p

15ÚDPJ - Uživatelem definované typy Třída Read Hodnoty převoditelné z řetězce type ReadS a = String -> [(a,String)] class Read a where readsPrec :: Int -> ReadS a readList :: ReadS [a] type ReadS a = String -> [(a,String)] class Read a where readsPrec :: Int -> ReadS a readList :: ReadS [a] readsPoint :: ReadS Point readsPoint (‘(‘:s) = [ (Pt x y, s’’) | (x, ’;’:s’) <- reads s, (y, ‘)’:s;;) <- reads s’] readsPoint :: ReadS Point readsPoint (‘(‘:s) = [ (Pt x y, s’’) | (x, ’;’:s’) <- reads s, (y, ‘)’:s;;) <- reads s’] instance Read Point where readsPrec _ = readsPoint instance Read Point where readsPrec _ = readsPoint

16ÚDPJ - Uživatelem definované typy Příklady pro cvičení 1) Vyhledání maximální hodnoty ve stromu maxTree :: Ord a => Tree a -> a maxTree :: Ord a => Tree a -> a 2) Reprezentace aritmetického výrazu uživatelským datovým typem data Expr = Plus Expr Expr | … | Num Int data Expr = Plus Expr Expr | … | Num Int 3) Vyhodnocení výrazu eval :: Expr -> Int eval :: Expr -> Int 4) Převod výrazu na řetězec instance Show Expr where … instance Show Expr where …