4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.

Slides:



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

Standardní knihovní funkce pro práci s textovými řetězci
(instance konkrétní třídy)
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Funkce Připomeňme si program pro výpočet faktoriálu:
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.
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
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.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
Vytvoření prvního programu
4IT101 šestá přednáška.
Polymorfismus Dědičnost
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
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
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
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,...)
4IT101 Testování a ladění, dokumentace API třídy,
C# - struktury, výčtové typy, pole
Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní
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í.
4IT101 7.přednáška Třída String a regulární výrazy Algoritmy v kolekcích Vnitřní a vnořené třídy.
Třída jako zdroj funkcionality
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Objektové programování
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
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
JavaScript Podmínky, cykly a pole.
Vaše jistota na trhu IT Interní datové typy Rudolf Pecinovský
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í.
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í.
IB111 Programování a algoritmizace
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.
Šesté cvičení Výjimky Balíky.
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é.
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.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
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é.
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é.
Programovací jazyk C# 4. část - cykly.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
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é.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Algoritmizace a programování
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
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:

4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy

Kolekce Rozhraní Implementace Algoritmy Generické typy Všechny třídy jsou z balíčku java.util Collections

Java Collection Framework

Kolekce Základní vlastnosti seznamů (List) –Libovolný počet prvků –Udržuje pořadí –Může obsahovat více prvků stejné hodnoty –Lze používat indexy Základní vlastnosti množin (Set) –Libovolný počet prvků –Neudržuje pořadí –Nemůže obsahovat více prvků stejné hodnoty –Nelze používat indexy

Základní operace Vložení prvku – metoda add() Rušení prvku – metoda remove() Vyhledání prvku – metoda contains() Postupné procházení kolekce – cyklus for (tzv. for each)

Balíčky (package) Java API je tvořeno několika tisíci tříd, které je třeba nějak logicky uspořádat. Balíček tvoří zároveň i základní jmenný prostor, třída musí mít jednoznačné jméno v rámci package, ve kterém je deklarována. Klíčové slovo package Noname package – nepojmenovaný balíček Základní balíček java.lang Plná jména tříd x import

Obalové třídy primitivních typů 5801 Pepa 5802 Vašek Dušan 5804 Luboš Jarmila 5805 Renata 5806

Obalové třídy Ke každému primitivnímu typu existuje jeho objektový obal (obalová třída) primitivní typobalová třída byteByte shortShort intInteger longLong floatFloat doubleDouble charCharacter booleanBoolean

K čemu slouží obalové třídy Obalové třídy jsou read only. S hodnotami v obalovém typu (stejně jako u všech tříd) se dát pracovat pouze pomocí metod od 5.0 automatické konverze mezi obalovými třídami a primitivní typy (autoboxing)

Autoboxing Integer cislo = 5; cislo += 2; Integer cislo = new Integer (5); int pomocna = cislo.intValue(); // převod na primitivní typ pomocna += 2; cislo = new Integer(pomocna);

K čemu slouží obalové třídy Obalové typy obsahují další metody pro práci s těmito typy (např. převod řetězce na číslo) Obalové třídy číselných typů mají definovány konstanty: –maximální a minimální hodnotu daného typu např. Integer.MAX_VALUE –Jsou zde definovány konstanty jako Double.NEGATIV_INFINITY, Boolean.TRUE, Double.NaN

Jednorozměrná a vícerozměrná pole

Pole (array) – základní vlastnosti Určený počet prvků Přístup pomocí indexů Může obsahovat více prvků stejné hodnoty Lze vkládat primitivní datové typy Neexistují metody Obtížně se vyjadřuje neexistence prvku Rychlejší než seznam (ne vždy) jednorozměrné i vícerozměrné

Deklarace a inicializace jednorozměrného pole typ [ ] jméno; int [ ] poleCisel; String [ ] nazvyMesicu; jméno = new typ [rozsah]; poleCisel = new int [10]; nazvyMesicu = new String [12]; typ [ ] jméno = new typ [rozsah]; double [ ] poleRealCisel = new double [20]; String [ ] vikend = new {"sobota", "nedele"}

double [] poleRealCisel = {2.4, 5.7, 8.2, 5, 4.21} index hodnota Na jednotlivé položky pole se odkazujeme jménem pole a indexem položky. Indexuje se od nuly. poleRealCisel [0]

Jednorozměrné pole Každé pole má datový atribut length, která obsahuje údaj o počtu prvků v poli. poleRealCisel.length

Jednorozměrné pole jako parametr metody Pokud potřebujete metodě předat větší počet parametrů stejného typu, je vhodné deklarovat příslušný parametr jako pole. Při volání metody můžeme přímo zadat čísla k sečtení do hlavičky metody

Jednorozměrné pole jako parametr metody int vysl = sectiPrvkyPole(new int [] {4, 6, 10, 20});

Jednorozměrné pole jako parametr metody public int sectiPrvkyPole(int [ ] pole) { int soucet = 0; for (int i=0; i < pole.length; i++) { soucet += pole[i]; } return soucet; } public int sectiPrvkyPole(int [ ] pole) { int soucet = 0; for (int prvek : pole) { soucet += prvek; } return soucet; }

Jednorozměrné pole jako parametr metody Od verze 1.5 je možné použít tzv. proměnlivý počet parametrů metody. public static int secti(int... cisla) { int soucet=0; for (int cislo: cisla) { soucet += cislo; } return soucet; } int vysl = secti(4, 6, 10, 20);

Proměnlivý počet parametrů Lze uvést v hlavičce metody pouze jednou a to na posledním místě public static String format(String format, Object... args)

Vícerozměrná pole Vícerozměrná pole v Javě jsou realizovaná jako pole polí int poleDvojrozmerne [] []; int poleDvojrozmerne [] [] = new int [2] [3]; int poleDvojrozmerne [ ] [ ] = new { { 1, 2, 3, }, { 4, 5, 6, }, }

Vícerozměrná pole int poleDvojrozmerne [ ] [ ] = new int [2] [ ]; poleDvojrozmerne [0] = new int [3]; poleDvojrozmerne [1] = new int [5]; int pocetRadku = poleDvojrozmerne.length; int pocetPrvkuPrvniRadek = poleDvojrozmerne[0].length

Výpis dvourozměrného pole public static void vypisPole(int [][]pole){ for (int[] radek : pole){ for (int prvek : radek) { System.out.print(prvek + ", "); } System.out.println(); }

Výpis dvourozměrného pole public static void vypisPole2(int[][]pole){ for (int i = 0; i < pole.length; i++){ for (int j = 0; j < pole[i].length; j++) { System.out.print(pole[i][j] + ", "); } System.out.println(); }

Mazání v poli Jak smazat položku 8.2 (položku s indexem 2)?

Mazání v poli Přepsat implicitní hodnotou –Poměrně problematické hlavně u primitivních datových typů Vytvořit nové pole o délce n – 1 a překopírovat hodnoty

Výčtový typ

Výčtový typ Enum od verze 5.0 Jedná se o specielní typ tříd –Předem daný počet pojmenovaných instancí public enum DenVTydnu { PONDELI, UTERY, STREDA, CTVRTEK, PATEK, SOBOTA, NEDELE }

Použití výčtového typu typově bezpečné, odolnější vůči změnám, public void pridejTermin(DenVTydnu den, String odKdy, String doKdy, String popis) { // obsah metody } rozvrh.pridejTermin(DenVTydnu.PONDELI, "14:30", "16:00", "konzultační hodiny"); rozvrh.pridejTermin(DenVTydnu.UTERY, "12:45", "14:15", "konzultační hodiny");

Výčtový typ - operace metoda values() vrátí seznam hodnot implementuje Comparable – metoda compareTo –Slouží pro třídění (pořadí deklarace == pořadí při řazení) metoda valueOf pro získání konkrétní hodnoty z řetězce, for (DenVTydnu den : DenVTydnu.values() ) { System.out.println(den); } DenVTydnu den = DenVTydnu.valueOf(“SOBOTA”); DenVTydnu den = DenVTydnu.valueOf(“nedele”);

Rozšíření příkazu switch switch (den) { case NEDELE: case SOBOTA: System.out.println("víkend"); break; case PONDELI: case UTERY: case STREDA: case CTVRTEK: case PATEK: System.out.println("pracovní den"); break; default : System.out.println("takový den neznám"); }

Výčtový typ uvnitř třídy public class Vypocet { private enum Operace { PLUS, MINUS, NASOBENO, DELENO } public double vypocet (Operace operace, double prvni, double druhy) { switch (operace) { case PLUS: return prvni + druhy; case MINUS: return prvni - druhy; case NASOBENO: return prvni * druhy; case DELENO: return prvni/druhy; default : return 0; }

Výčtový typ – další možnosti speciální datové struktury: EnumSet, EnumMap, výčtový typ lze rozšiřovat o další metody, překrývat stávající metody, k vlastní hodnotě lze ukládat i doplňující údaje –např. k měsícům lze uložit i počet dní, –k seznamu planet velikost, public enum HodnoceniKurzu { VYBORNE("1"), VELMI_DOBRE("2"), DOBRE("3"), NEPROSPEL("4"), OMLUVEN("O"); private String pismeno; private HodnoceniKurzu(String pismeno) { this.pismeno=pismeno; }

Statické prvky třídy

Statické proměnné Datové atributy Statický inicializační blok Statické metody Metody Konstruktory Vnitřní třídy Statické vnitřní třídy Třída (další prvky)

Statické proměnné (proměnné třídy) Proměnná je společná pro všechny instance dané třídy. V deklaraci je uveden modifikátor static. Ostatní modifikátory se používají stejně jako u datových atributů Pojmenované konstanty jsou obvykle statické (static final) Zaměstnanec početZaměstnanců jméno příjmeni

Deklarace třídy se statickou proměnnou public class Zamestnanec { private static int pocetZamestnancu; private String jmeno; private String prijmeni; ………… }

Vztah instancí k statické proměnné pocetZamestnancu: 2 jmeno: Pepa prijmeni:Novák jmeno: Kája prijmeni: Mařík

Použití statické proměnné Statická proměnná se používá ve spojení se jménem třídy např. Zamestnanec.pocetZamestnancu –pokud je privátní, nelze ji takto zvenku „přečíst“ ani změnit

Pojmenované konstanty celá čísla (int) používají se modifikátory static a final public static final int DEN_NEDELE=0; public static final int DEN_PONDELI=1; public static final int DEN_UTERY=2; public static final int DEN_STREDA=3; public static final int DEN_CTVRTEK=4; public static final int DEN_PATEK=5; public static final int DEN_SOBOTA=6;

Použití a nevýhody pojmenovaných konstant public void pridejTermin(int den, String odKdy, String doKdy, String popis) { // obsah metody } rozvrh.pridejTermin(DEN_PONDELI, "14:30", "16:00", "konzultační hodiny"); rozvrh.pridejTermin(DEN_UTERY, "12:45", "14:15", "konzultační hodiny"); rozvrh.pridejTermin(999, "14:30", "16:00", "konzultační hodiny");

Použití modifikátoru final Modifikátor final je příznakem neměnnosti/konečnosti. –final u třídy – nelze z ní dědit –final u metody – nelze ji překrýt –final u datového atributu a statické proměnné – nelze ji změnit –final u pomocné proměnné – nelze ji změnit –final u parametru metody – nelze ji změnit

Statická metoda (metoda třídy) Metoda společná pro všechny instance. Metoda třídy má modifikátor static.

Deklarace statické metody public class Zamestnanec { private static int pocetZamestnancu; private String jmeno; private String prijmeni; public Zamestnanec (String jmeno, String prijmeni){ this.jmeno = jmeno; this.prijmeni = prijmeni; pocetZamestnancu ++; } ……………………………………. public static int getPocetZamestnancu(){ return pocetZamestnancu; }

Volání metody třídy volání ve stejné třídě, ve které je metoda definována volání v jiné třídě getPocetZamestnancu(); Zamestnanec.getPocetZamestnancu(); název třídy název metody

Použití statických metod pro přístup k statickým proměnným pro operace, kde není zapotřebí instance pro získání instance na základě parametrů

Inicializace Všechny objekty musíme vytvořit S objekty manipulujeme pomocí odkazů Objekty nemusíme mazat Zaručená inicializace pomocí konstruktoru

Inicializace objektů v paměti ClassLoader Konstruktor je speciální metoda využívaná při vytváření instance, instanci vytváří JVM.

int pocet = Zamestnanec.getPocetZamestnancu(); Zamestnanec pepa = new Zamestnanec (“Pepa”,”Novák”); Zamestnanec jana = new Zamestnanec (“Jana”,”Nováková”); prijmeni = null jmeno = null pocetZamestnancu = 0 prijmeni = null jmeno = null Pepa Novák Jana 1 Nováková 2 public class Zamestnanec { private static int pocetZamestnancu; private String jmeno; private String prijmeni; public Zamestnanec (String jmeno, String prijmeni){ this.jmeno = jmeno; this.prijmeni = prijmeni; pocetZamestnancu ++; } ……………………………………. public static int getPocetZamestnancu(){ return pocetZamestnancu; }

Třída Math Třída ze standardu Javy, která obsahuje pouze statické konstanty a statické metody Třída nemá veřejný konstruktor, nelze tedy vytvořit instanci Takto navržená třída se označuje jako utilita

Třída Math Jsou zde dvě konstanty –Math.PI –Math.E Metody pro matematické funkce např. –Math.abs(double a) –Math.cos(double a) –Math.max(long a, long b) –Math.sqrt(double a)

Třída System další utilita ze základního balíčku java.lang poskytuje tři statické proměnné sloužící pro vstup a výstup z/na konzolu (lze přesměrovat jinam) –in –out –err

System.out Statická proměnná System.out je automaticky nasměrovaná na konzolu, je typu PrintStream Nejčastěji se používá pro volání dvou metod: println (String text) print (String text)

Třída System metody z této třídy slouží pro čtení properties, nastavení zabezpečení atd. metoda System.exit(int status) –k ukončení aplikace (pokud je někdy třeba skončit jinak než provedením všech příkazů)

Metoda main – spouštění javovské aplikace Aby bylo možno spustit aplikaci, musí existovat vstupní bod do aplikace Při spouštění JVM říkáme, jaká třída má být natažena do paměti první java MojeTrida JVM pak hledá v kódu metodu main s následující hlavičkou: public static void main (String [] args) Aplikace provede kód v metodě main a skončí –dříve – výjimky, return, metodou System.exit( ), –později – čekání na dokončení vláken

Parametry příkazové řádky public static void main(String [] args) Na příkazovém řádku je možno uvést parametry: java Trida ahoj "Dobry den" "ahoj""15""48""45.4""Dobry den" 01234

Použité zdroje Dokumentace k Javě ( Pavlíčková, Pavlíček : Úvod do Javy Pecinovský: Myslíme objektově v jazyku Java Java a Duke jsou registrované známky firmy Oracle