9. přednáška - třídy, objekty

Podobné dokumenty
Třída jako zdroj funkcí

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Třídy a dědičnost. BD6B36PJV Fakulta elektrotechnická České vysoké učení technické

Úvod do programovacích jazyků (Java)

Algoritmizace a programování

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Paměť počítače. alg2 1

typová konverze typová inference

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Datové struktury. alg12 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

PŘETĚŽOVÁNÍ OPERÁTORŮ

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Abstraktní datové typy: zásobník

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

Spojové struktury. x, y, a, b. X1 y1 X2 y2 X3 y3. Grafické objekty bod. kružnice. obdélník. lomenáčára

Úvod do programování - Java. Cvičení č.4

Teoretické minimum z PJV

5. přednáška - Rozklad problému na podproblémy

7. Dynamické datové struktury

Řídicí struktury. alg3 1

8. přednáška: Soubory a proudy

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

KTE / ZPE Informační technologie

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Algoritmizace a programování

1. Téma 12 - Textové soubory a výjimky

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Jak v Javě příkazy, operace a výrazy. BD6B36PJV 00 Fakulta elektrotechnická České vysoké učení technické

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Výčtový typ strana 67

Spojové struktury. Spojová struktura (linked structure):

Seminář Java IV p.1/38

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

OOPR_05. Případové studie

Soubor jako posloupnost bytů

Typický prvek kolekce pro české řazení

5 Přehled operátorů, příkazy, přetypování

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Algoritmizace a programování. Terminálový vstup a výstup

boolean hasnext() Object next() void remove() Kolekce

Regulární výrazy. Vzory

Algoritmizace a programování

Generické programování

Seminář Java II p.1/43

Jazyk C# a platforma.net

Principy objektově orientovaného programování

Část 1 Soubory a vytvoření projektu. Řetězce a řídicí struktury. Část 2 Připomínka (NSD) Část 3 Textové řetězce, operátory a načítání vstupu

3 KTE / ZPE Informační technologie

Řetězce a řídicí struktury

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

Java a XML. 10/26/09 1/7 Java a XML

Algoritmizace a programování

7. Datové typy v Javě

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

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Java - řazení objektů

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Vytváření a použití knihoven tříd

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

Obsah 6. přednášky: Tato tematika je zpracována v Záznamy přednášek: str

Rozklad problému na podproblémy

20. Projekt Domácí mediotéka

Programovací jazyk Pascal

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Abstraktní třídy, polymorfní struktury

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

KTE / ZPE Informační technologie

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

Programování v Javě I. Leden 2008

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Java - výjimky. private void vstup() throws IOException {... }

Programování v jazyku Java hierarchie tříd, přetypování, výjimky

Textové soubory. alg9 1

Pole a kolekce. v C#, Javě a C++

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Programovací jazyk Java

Java Výjimky Java, zimní semestr

6. Příkazy a řídící struktury v Javě

Datové typy strana 29

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

PREPROCESOR POKRAČOVÁNÍ

KTE / ZPE Informační technologie

Abstraktní třída a rozhraní

5 Rekurze a zásobník. Rekurzivní volání metody

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Programování v Javě I. Únor 2009

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Transkript:

třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1

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 Algoritmizace (Y36ALG), Šumperk - 9. přednáška 2

Spojenířetězů ( konkatenace ) + Příklad: "abc" + "123" Operace s řetězy 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 "a" + 1 + 2 "a" + 1 + (-2) Porovnávánířetězů výsledek je "abc5" výsledek je "a12" výsledek je "a1-2" 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" ; System.out.println (s1==s3); // vypíše false System.out.println (s1.equals(s3)); // vypíše true Algoritmizace (Y36ALG), Šumperk - 9. přednáška 3

Operace s řetězy Pro lexikografické porovnánířetězů slouží metoda compareto: String s = "abcd"; System.out.println(s1.compareTo( "abdc" ));// vypíše 1 System.out.println(s1.compareTo( "abcd" ));// vypíše 0 System.out.println( abdc.compareto(s1)); // vypíše 1 Některé další operace: String s = nazdar ; int delka = s.length(); // délka je 6 char znak = s.charat(1); String ss = s.substring(2,4); // znak je a // 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. Algoritmizace (Y36ALG), Šumperk - 9. přednáška 4

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; Algoritmizace (Y36ALG), Šumperk - 9. přednáška 5

Příklad - palindrom Výsledný program: public class Palindrom { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.println("Zadejte jeden řádek"); String radek = sc.nextline(); String vysl; if (jepalindrom(radek)) vysl = "je" ; else vysl = "není" ; System.out.println("Na řádku " +vysl+ " palindrom"); static boolean jepalindrom(string str) {... Algoritmizace (Y36ALG), Šumperk - 9. přednáška 6

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); Algoritmizace (Y36ALG), Šumperk - 9. přednáška 7

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 System.out.println( ko.get(0) );// vypíše se abcd System.out.println( ko.get(1) );// vypíše se xyz System.out.println( ko.size() );//aktuální počet prvků: 2 Algoritmizace (Y36ALG), Šumperk - 9. přednáška 8

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 java.util.arraylist; public class KontejnerRadku { public static void main(string[] args) { ArrayList radky = new ArrayList(); System.out.println("zadejte řádky zakončené prázdným řádkem"); String radek = scan.nextline(); while (!radek.equals( "" )) { radky.add(radek); radek = scan.nextline(); System.out.println( "výpis řádků v opačném pořadí" ); for (int i=radky.size()-1; i>=0; i--) System.out.println(radky.get(i)); Algoritmizace (Y36ALG), Šumperk - 9. přednáška 9

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 Algoritmizace (Y36ALG), Šumperk - 9. přednáška 10

Typované kolekce v Javě 5.0 Řešením jsou typované kolekce: ArrayList<String> radky = new ArrayList();... naplnění String prvni = radky.get(0); Algoritmizace (Y36ALG), Šumperk - 9. přednáška 11

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)); System.out.println(cisla.get(0)); // vypíše se 10 System.out.println(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. pro zájemce Algoritmizace (Y36ALG), Šumperk - 9. přednáška 12

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 pro zájemce Algoritmizace (Y36ALG), Šumperk - 9. přednáška 13

Hierarchie tříd 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í. pro zájemce Algoritmizace (Y36ALG), Šumperk - 9. přednáška 14