Třída jako zdroj funkcionality

Slides:



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

Množiny Přirozená čísla Celá čísla Racionální čísla Komplexní čísla
(instance konkrétní třídy)
Programování funkcí v Excelu
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Strukturované datové typy
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
Vytvoření prvního programu
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.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Programování v C++ Cvičení.
Druhé cvičení Vytváření identifikátorů Datové typy
Čtvrté cvičení Objektové programování Objektový model v Javě
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Objektové programování
Datové typy a práce s nimi
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í.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Počítače a programování 1
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
VISUAL BASIC PRALG.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Datové typy a struktury
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
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.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Databázové modelování
KIV/PPA1 cvičení 9 Cvičící: Pavel Bžoch. Osnova cvičení Třída String a její metody –Řetězce a operace s nimi.
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é.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
6. Typ záznam Strukturovaný datový typ - znamená spojení několika elementů stejného nebo různých typů do jedné proměnné. Např. pole je strukturovaný datový.
PŘÍKAZ while úkol 1_42.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
České vysoké učení technické Fakulta elektrotechnická Datové typy, výrazy vstup, výstup Jazyk JAVA A0B36PRI - PROGRAMOVÁN Í v1.02.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Algoritmizace a programování Aritmetické, Relační a Logické operátory, Knihovny.
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é.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
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.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Y36PJC Programování v jazyce C/C++
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Y36PJC Programování v jazyce C/C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Polymorfismus = Mnohotvarost
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená množinou identifikátorů, které mají třídou definovaný význam a které označují prostředky, které lze v téže či jiných třídách využít. Třída je zdrojem metod popisujících řešení problému rozkladem na podproblémy. Základem aplikace, tj. uživatelského programu, je třída, ve které je deklarována spouštěcí metoda přesně takto: public static void main( String[ ] args ) { ... } mohou být deklarovány další pomocné metody mohou být deklarovány statické proměnné, které jsou použitelné jako nelokální proměnné ve metodách dané třídy Mnohé třídy nemají deklaraci metody main, např.: knihovní třída java.lang.Math poskytující matematické funkce třída sugar.Sys poskytující jednoduché metody pro vstup a výstup V jiných jazycích, např. v C++, lze program vytvořit bez použití třídy alg7

Třída jako datový typ Obecně je třída popisem strukturovaného datového typu, tzn. specifikuje množinu hodnot datových objektů skládajících se ze složek, a množinu operací s datovými objekty Datové objekty typu třída ( zkráceně jen objekty ) se nazývají též instancemi třídy V jazyku Java lze objekty (instance tříd) vytvářet pouze dynamicky pomocí operátoru new a přistupovat k nim pomocí referenčních proměnných ( Pole jsou také objekty a tudíž i referenční typy ) Třídy jako datové typy se nejprve naučíme používat pasivně Příkladem třídy jako datového typu je třída sugar.Complex (v balíku sugar) hodnotami jsou komplexní čísla tvořená dvojicemi čísel typu double (reálná a imaginární část) množinu operací tvoří obvyklé operace nad komplexními čísly (absolutní hodnota, sčítání, odčítání, násobení a dělení) alg7

Konstruktory Třída Complex umožňuje vytvořit a inicializovat objekt třemi způsoby: Complex c1 = new Complex(); c1 0 0 Complex c2 = new Complex(1); c2 1 0 Complex c3 = new Complex(1,1); c3 1 1 Tyto tři možnosti jsou dány třemi konstruktory třídy Complex konstruktor bez parametrů Complex( ) inicializuje vytvořený objekt hodnotami 0,0 konstruktor s jedním parametrem Complex( double re ) inicializuje vytvořený objekt hodnotami re,0 konstruktor se dvěma parametry Complex( double re, double im ) inicializuje vytvořený objekt hodnotami re a im alg7

Instanční metody Operace s objekty se realizují pomocí instančních metod (dále jen metod) Metody mohou mít parametry a mohou vracet výsledek nějakého typu Volání, tj. užití, metody m na objekt referencovaný proměnnou p má tvar: p.m(seznam argumentů) Zkráceně říkáme, že „metoda m se volá na objekt p“ Příklady metod definovaných třídou Complex: double abs() výsledkem volání c.abs() je absolutní hodnota komplexního čísla c Complex plus( Complex y ) výsledkem volání c1.plus(c2) je reference na nový objekt typu Complex, jehož hodnotou je součet komplexních čísel c1 a c2 String toString() výsledkem volání c.toString( ) je řetěz znakové reprezentace komplexního čísla c ( metodou je zavedena implicitní typová konverze z typu Complex na typ String ) a další alg7

Příklad použití třídy Complex package alg7; import sugar.Complex; import sugar.Sys; public class KomplexniCisla { public static void main(String[] args) { Complex c1 = new Complex(10); Complex c2 = new Complex(3,4); Sys.pln( "abs(" +c1+ " )=" +c1.abs()); Sys.pln( "abs(" +c2+ " )=" +c2.abs()); Complex c3 = c1.plus(c2); Sys.pln(c1+ "+" +c2+ "=" +c3); } Program vypíše: abs([10.0, 0.0])=10.0 abs([3.0, 4.0])=5.0 [10.0, 0.0]+[3.0, 4.0]=[13.0, 4.0] alg7

Statické a instanční metody Rekapitulace významu termínu „metoda“ v jazyku Java Pod pojmem třída se skrývají dva druhy metod: statické metody instanční metody a navenek se celkem neliší: mohou mít parametry a mohou vracet výsledek Statická metoda je dostupná pomocí jména třídy - aniž je nutno vytvářet někaký objekt. Voláme ji tedy takto: JménoTřídy . jménoMetody( seznam argumentů ) Instanční metoda označuje operaci nad objektem čili instancí dané třídy. Je dostupná jen přes referenci na objekt. Voláme ji tedy takto: referenčníProměnná . jménoMetody( seznam argumentů ) alg7

Struktura objektu Hodnota objektu je strukturovaná, tzn. skládá se dílčích hodnot, které mohou různého typu Objekt je tedy abstrakcí paměťového místa skládajícího se z částí, ve kterých jsou uloženy dílčí hodnoty a které se nazývají položkami ( atributy, instančními proměnnými, fields, attributes ) objektu Položky objektu jsou označeny jmény, která mohou být třídou zveřejněna anebo ukryta Příklad: objekty třídy Complex jsou tvořeny dvěma položkami typu double, jejichž jména jsou re a im a třída tato jména zveřejňuje Veřejný atribut se jménem f objektu, který je referencován proměnnou p, lze označit zápisem p.f Příklad: objektu vytvořenému deklarací Complex c = new Complex(); lze změnit hodnoty položek pomocí příkazů c.re = 1; c.im = 1; alg7

Více referencí na jeden objekt Objekt může být referencován i více referencemi Jestliže hodnotu referenční proměnné typu T přiřadíme jiné referenční proměnné téhož typu, pak obě proměnné referencují tentýž objekt Příklad: Complex c1 = new Complex(); Complex c2 = c1; c1 0 0 c2 c1.re = 1; c1 1 0 Sys.pln(c2.re); // vypíše 1 alg7

Sbírání smetí Objekt se stane „smetím“, není-li přístupný pomocí žádné reference Příklad: Complex c1 = new Complex(1,1); Complex c2 = new Complex(2,2); c1 1 1 c2 2 2 c2 = c2.plus(c1) c1 1 1 c2 2 2 smetí 3 3 Paměť přidělená nepřístupným objektům se uvolňuje automaticky (sbírání smetí, garbage collection) alg7

Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních tříd se liší třemi specialitami: objekt typu String lze vytvořit literálem ( posloupnost znaků uzavřená mezi uvozovky ) hodnotu objektu typu String nelze jakkoli změnit operací konkatenace čili zřetězení je nejen realizována metodou concat, ale i přetíženým operátorem + Příklady referečních proměnných typu String: String str1 = "Nazdar"; str1 Nazdar String str2 = str1; str1 Nazdar str2 alg7

Operace s řetězy Spojení řetězů ( konkatenace ) + Příklad: "abc" + "123" výsledek je "abc123" Jestliže jeden operand operátoru + je typu String a druhý je jiného typu, pak druhý operand se převede na typ String a výsledkem je konkatenace řetězů Příklady: "abc" + 5 výsledek je "abc5" "a" + 1 + 2 výsledek je "a12" "a" + 1 + (-2) výsledek je "a1-2" Porovnávání řetězů relační operátory == a != porovnávají reference, nikoliv obsah řetězů pro porovnání řetězů na rovnost slouží metoda equals String s1 = "abcd" ; String s2 = "ab" ; String s3 = s2 + "cd" ; Sys.pln(s1==s3); // vypíše false Sys.pln(s1.equals(s3)); // vypíše true alg7

Operace s řetězy Pro lexikografické porovnání řetězů slouží metoda compareTo: String s = "abcd"; Sys.pln(s1.compareTo( "abdc" )); // vypíše –1 Sys.pln(s1.compareTo( "abcd" )); // vypíše 0 Sys.pln(“abdc”.compareTo(s1)); // vypíše 1 Některé další operace: String s = “nazdar”; int delka = s.length(); // délka je 5 char znak = s.charAt(1); // znak je ‘a’ String ss = s.substring(2,4); // ss je “zd” int z1 = s.indexOf(‘a’); // z1 je 1 int z2 = s.lastIndexOf(‘a’); // z2 je 4 int z3 = s.lastIndexOf(‘A’); // z3 je -1 Hodnotu referenční proměnné typu String lze změnit ( odkazuje pak na jiný řetěz ), vlastní řetěz změnit nelze alg7

Příklad - palindrom Napišme program, který přečte jeden řádek a zjistí, zda se po vynechání mezer jedná o palindrom (čte se stejně zpředu jako zezadu, např. “kobyla ma maly bok”) Řešení – funkce s parametrem typu String a výsledkem typu boolean: static boolean jePalindrom(String str) { int i = 0, j = str.length()-1; while (i<j) { while (str.charAt(i)==' ') i++; while (str.charAt(j)==' ') j--; if (str.charAt(i)!=str.charAt(j))return false; i++; j--; } return true; alg7

Příklad - palindrom Výsledný program: public class Palindrom { public static void main(String[] args) { Sys.pln( "Zadejte jeden řádek" ); String radek = Sys.readLine(); String vysl; if (jePalindrom(radek)) vysl = "je" ; else vysl = "není" ; Sys.pln( "Na řádku " +vysl+ " palindrom" ); } static boolean jePalindrom(String str) { ... alg7

Pole znaků a řetěz Příklad: funkce pro převod celého čísla na řetěz tvořený zápisem čísla v hexadecimální soustavě final static String hexa = "0123456789abcdef"; static String hexadecimal(int x) { if (x==0) return "0" ; char[] znaky = new char[9]; int y; if (x<0) y=-x; else y=x; int prvni = 9; do { prvni--; znaky[prvni] = hexa.charAt(y%16); y = y / 16; } while (y>0); if (x<0) { prvni--; znaky[prvni] = '-'; } return new String(znaky, prvni, 9-prvni); alg7

Kolekce Kolekce je datová struktura obsahující proměnný počet prvků, pro kterou jsou ( mimo jiné ) definovány operace vytvoření prázdné kolekce přidání, odebrání, vložení, přístup k prvku zjištění rozsahu, výpis a další V knihovně java.util je řada tříd definujících různé druhy kolekcí Příkladem je třída ArrayList, ve které se vložené prvky rozlišují pomocí indexu počítaných od 0 ArrayList ko = new ArrayList(); // nová prázdná kolekce ko.add( "abcd" ); // přidání na konec ko.add( "xyz" ); // přidání na konec Sys.pln( ko.get(0) ); // vypíše se abcd Sys.pln( ko.get(1) ); // vypíše se xyz Sys.pln( ko.size() ); // aktuální počet prvků: 2 alg7

Příklad použití třídy ArrayList Program, který přečte řádky zakončené prázdným řádkem a vypíše je v opačném pořadí import sugar.Sys; import java.util.ArrayList; public class KontejnerRadku { public static void main(String[] args) { ArrayList radky = new ArrayList(); Sys.pln( "zadejte řádky zakončené prázdným řádkem" ); String radek = Sys.readLine(); while (!radek.equals( "" )) { radky.add(radek); radek = Sys.readLine(); } Sys.pln( "výpis řádků v opačném pořadí" ); for (int i=radky.size()-1; i>=0; i--) Sys.pln(radky.get(i)); alg7

Příklad použití třídy ArrayList Chceme-li z kolekce radky získat např. referenci na první řetěz a uložit jí do referenční proměnné String prvni; nelze však použít příkaz prvni = radky.get(0); který způsobí chybu při překladu, ale je třeba použít přetypování: prvni = (String)radky.get(0); Zjednodušené vysvětlení: metody add a get jsou specifikovány takto: void add(Object obj) Object get() hodnotou proměnné, parametru nebo výsledkem metody typu Object může být reference na objekt jakéhokoliv typu jestliže o je proměnná, parametr nebo výsledek metody typu Object a její hodnotou je reference na objekt typu T, pak pro přístup k referencovanému objektu jako k objektu typu T je třeba použít operaci přetypování o na typ T ve tvaru (T)o operace zkontroluje, zda o skutečně referencuje objekt typu T; není-li tomu tak, nastane chyba při výpočtu alg7

Primitivní typy jako objekty Do kolekcí lze vkládat pouze reference na objekty, nikoli primitivní typ Primitivní typ např. čísla typu int, musíme je nejprve zabalit (wrap) do objektů typu java.lang.Integer Příklad: ArrayList cisla = new ArrayList(); cisla.add( new Integer(10)); cisla.add( new Integer(20)); Sys.pln(cisla.get(0)); // vypíše se 10 Sys.pln(cisla.get(1)); // vypíše se 20 Integer prvni = (Integer)cisla.get(0); Číslo, které je v objektu typu Integer uloženo, získáme metodou intValue: int n = prvni.intValue(); Podobné obalovací třídy ( wrapper classes ) jsou v Javě definovány pro všechny primitivní typy, kterých je pouze osm. alg7

Hierarchie tříd V on-line dokumentaci jazyka Java týkající se třídy ArrayList najdeme následující obrázek: java.lang.Object | +--java.util.AbstractCollection | +--java.util.AbstractList | +--java.util.ArrayList Tento obrázek vyjadřuje, že: třída ArrayList ( definovaná v balíku java.util ) je podtřídou třídy AbstractList třída AbstractList je podtřídou třídy AbstractCollection třída AbstractCollection je podtřídou nejvyšší třídy java.lang.Object alg7 pro zájemce

Hierarchie tříd pro zájemce Třída Tpod, která je podtřídou třídy Tnad, dědí vlastnosti nadtřídy Tnad a rozšiřuje je o nové vlastnosti; některé zděděné vlastnosti mohou být v podtřídě modifikovány Pro instanční metody to znamená: každá metoda třídy Tnad je i metodou třídy Tpod, v podtřídě však může mít jinou implementaci v podtřídě mohou být definovány nové metody Pro strukturu objektu to znamená: instance třídy Tpod mají všechny členy třídy Tnad a případně další Pro referenční proměnné to znamená: proměnné typu Tnad může být přiřazena reference na objekt typu Tpod na objekt referencovaný proměnnou typu Tnad lze vyvolat pouze metodu deklarovanou ve třídě Tnad; jde-li však o objekt typu Tpod, metoda se provede tak, jak je dáno třídou Tpod hodnotu referenční proměnné typu Tnad lze přiřadit referenční proměnné typu Tpod pouze s použitím přetypování, které zkontroluje, zda referencovaný objekt je typu Tpod Vztah nadtřída – podtřída je tranzitivní alg7 pro zájemce