Obsah 6. přednášky: Tato tematika je zpracována v Záznamy přednášek: str
|
|
- Věra Hájková
- před 8 lety
- Počet zobrazení:
Transkript
1 Obsah 6. přednášky: Třídy a objekty Deklarace třídy a objektu, vytvoření objektu Proměnné primitivní vs. objektové Přímý přístup k atributům a metodám Program sestávající z více tříd Konstruktor a klíčové slovo this Autorizovaný přístup Vytváření, volání a přetěžování metod Pole objektů třídy String - příklad knihovní třídy Metody třídy String a jejich použití Třída StringBuffer* Programování procedurální vs. objektové Tato tematika je zpracována v Záznamy přednášek: str Prostudujte i motivační příklad Osoba - BMI! Budete ho potřebovat na cvičení a při řešení domácích úloh. Přednášky KIV/PPA1, A. Netrvalová, přednáška
2 Třídy a objekty Programování - procedurální (dosud) - objektové (OOP objektově orientované programování) Motivace vzniku OOP Dekompozice problému s velkým množstvím detailů na dílčí zvládnutelné problémy, s možností řešení současně více programátory Simula 67 (1967, Norwegian Computing Center) základem byl Algol 60 (bloková struktura) Blok (podprogram), nezávislý na zbytku programu - formální popis vzor seskupení dat, algoritmů a akcí - vykonání - vytvoření dynamické instance Java třída jako nový datový typ Třída (class) - základní jazyková konstrukce OOP - šablona (template) objektový typ, pro dynamické vytváření objektů této třídy - členské /instanční proměnné /atributy (stav) - členské /instanční metody (chování) Strana 2 (celkem 37)
3 Příklad: třída Kruh Kruh o poloměru r s výpočtem plochy P Kruh r double polomer P = r 2 double spoctiplochu() Objekt (object), instance (instance) - datový prvek (množina hodnot a množina operací), vytvořený dle vzoru třídy Příklad objektů třídy Kruh r = 1 1 P = 3.14 mujkruhzluty r = 2 mujkruhmodry polomer = 1.0 P = polomer = 2.0 P = 3.14 P = Strana 3 (celkem 37)
4 Deklarace třídy a objektu, vytvoření objektu Deklarace třídy Příklad: class Jmeno { typ a jmeno atributu, inicializace typ a jmeno metody() {... telo metody... class Kruh { double polomer = 1.0; double spoctiplochu() { return 3.14*polomer*polomer; Deklarace a vytvoření objektu Přístup k objektům - prostřednictvím referenční proměnné např. mujkruhzluty, mujkruhmodry Strana 4 (celkem 37)
5 Deklarace objektu JmenoTridy jmenoobjektu; Příklad: Kruh mujkruh; referenční proměnná mujkruh null Vytvoření objektu jmenoobjektu = new JmenoTridy(); Příklad: mujkruh = new Kruh(); referenční proměnná mujkruh Kruh polomer = 1 objekt Strana 5 (celkem 37)
6 Deklarace a vytvoření objektu současně JmenoTridy jmenoobjektu = new JmenoTridy(); Příklad: Kruh mujkruh = new Kruh(); Zrušení objektu (Garbage collector) - pokud na objekt není reference Příklad: mujkruh = null; referenční proměnná mujkruh null Kruh polomer = 1 objekt Strana 6 (celkem 37)
7 Proměnné primitivní vs. objektové Rozdíl v pojetí - při deklaraci a vzniku Primitivní typ při deklaraci při vytvoření Objektový typ při deklaraci k int i; i = 1; i i??? Kruh k = new Kruh(); null 1 při vytvoření k Kruh polomer = 1 - při přiřazení proměnných int i = 1; Kruh k1 = new Kruh(5); int j = 2; Kruh k2 = new Kruh(9); Přiřazení: primitivní typ i = j před: po: Přiřazení: typ objekt k1 = k2 před: po: i 1 i 2 k1 k1 j 2 j 2 k2 k2 Kruh Kruh polomer = 5 polomer = 9 Strana 7 (celkem 37)
8 Přímý přístup k objektu tj. k atributům a metodám Reference atributu či metody - tečkovaná notace Komunikace s objektem - zasíláním zpráv (volání instančních metod) Reference atributu jmenoobjektu.promenna Př.: mujkruh.polomer Reference metody jmenoobjektu.metoda() Př.: mujkruh.spoctiplochu() Program sestávající z více tříd Deklaraci, vytvoření a použití objektu (tj. atributů a metod) provádíme v jiné třídě. Na počátku, pro jednoduchost, budeme vytvářet a používat programy sestávající pouze ze dvou tříd. Hlavní program - tj. třída obsahující main() - zde budeme programy spouštět. Pokud program sestává z více tříd, každou třídu ukládáme do samostatného souboru (výjimkou je odevzdání DÚ na validátor). Důvodem je snadné použití třídy v jiném programu či předání třídy (souboru) jinému programátorovi. Strana 8 (celkem 37)
9 Poznámky: Uložení programu - pokud jsou třídy výjimečně uloženy společně v jednom souboru, potom je pouze třída s hlavním programem, tj. s metodou main(), opatřena modifikátorem public! Překlad programu třída: - příkazová řádka: javac JmenoTridy.java - Scite: Ctrl+F7 celý program: - příkazová řádka: javac *.java - Scite: F7 Spouštění programu třída: - příkazová řádka: java JmenoTridy - Scite: F5 celý program: - příkazová řádka: java HlavniProgram - Scite: F5 v hlavní třídě Terminologie - poznámka - pro označení třídy jakožto šablony se lze setkat s pojmem datová třída (Data Model Class), tj. třída sloužící zejména k uchování dat a manipulaci s nimi. Instancí takové třídy je datový objekt (Data Object). Strana 9 (celkem 37)
10 Příklad vytvoření a použití objektu class Kruh { TŘÍDA KRUH double polomer = 1.0; double spoctiplochu(){ return 3.14*polomer*polomer; public class TestKruhu { HLAVNÍ PROGRAM TŘÍDA - obsahující main() (ŘÍDICÍ, APLIKAČNÍ, UŽIVATELSKÁ) public static void main(string[] args){ // main()-entry point Kruh mujkruh = new Kruh(); // vytvoreni //polomer nastaven na inicializovanou hodnotu atributu tridy System.out.println("Polomer = " + mujkruh.polomer); mujkruh.polomer = 10;// nastaveni nove hodnoty polomeru // vypis System.out.println("Plocha kruhu o polomeru " + mujkruh.polomer + " je " + mujkruh.spoctiplochu() + "."); Polomer = 1.0 Plocha kruhu o polomeru 10.0 je Výpis výsledků v předchozím příkladu je zbytečně zdlouhavý, a kdykoliv budeme potřebovat vypsat poloměr či plochu musíme příkazy zopakovat. Strana 10 (celkem 37)
11 Řešením je použití metody String tostring(), (vrací řetězec se stavem objektu), napíšeme ji dle potřeby ve třídě Kruh a pak tuto metodu zavoláme (v metodě pro výpis) v hlavním programu (viz dále). class Kruh { public class TestKruhu { double polomer = 1.0; double spoctiplochu(){ return 3.14*polomer*polomer; /** Vypis objektu pouzitim metody tostring() (pretizena metoda) String retezec s informaci o objektu */ public String tostring(){ return "<Kruh: polomer = " + polomer + ", plocha = " + spoctiplochu() + ">"; public static void main(string[] args){ Kruh mujkruh = new Kruh(); System.out.println("Polomer = " + mujkruh.polomer); mujkruh.polomer = 10; // vhodnejsi zpusob vypisu System.out.println(mujKruh.toString()); // staci pouze zapis bez uvedeni tostring() System.out.println(mujKruh); Strana 11 (celkem 37)
12 Konstruktor a klíčové slovo this Konstruktor - speciální metoda, která umožňuje vytvoření objektu (přidělení paměti a inicializace členských proměnných) Liší se od ostatních metod: - nelze volit jeho jméno, má jméno třídy - nemá žádnou návratovou hodnotu (tj. ani void) - nelze volat rekurzivně - použití operátoru new Konstruktor - implicitní vytvoří se, i když ho nenapíšeme (předchozí příklad fungoval! Volali jsme Kruh(), ale ve třídě Kruh konstruktor zapsán nebyl) - explicitní nutno napsat (může být i přetížen, tj. konstruktorů můžeme napsat více) Použití klíčového slova this - typicky se vyskytuje v konstruktoru, ale i jinde (viz dále) Formální parametry konstruktoru mají často jméno shodné s atributem nutno odlišit. Řešením je this.jmenoatributu neboť this odkazuje vždy na samotný objekt. Upravíme tedy náš předchozí příklad: Strana 12 (celkem 37)
13 public class Kruh { double polomer; Kruh(double polomer) { // konstruktor this.polomer = polomer; // this zde musí byt Kruh(){ /* konstruktor bez parametru, musi byt napsan, ale jen pokud jej potrebujeme, tzv. pretizeny konstruktor */ polomer = 1.0; // this zde neni nutné, nelze pochybit double spoctiplochu(){ return polomer*polomer*math.pi; // this by mohlo byt uvedeno, ale zatim nadbytecne... public class TestKruhuSKonstruktory { //aplikace public static void main(string[] args) { // nastav polomer 5.0 Kruh mujkruh = new Kruh(5.0); // vypocet a tisk System.out.println(mujKruh); // defaultni polomer Kruh tvujkruh = new Kruh(); // vypocet a tisk System.out.println(tvujKruh); <Kruh: polomer = 5.0, plocha = > <Kruh: polomer = 1.0, plocha = > Strana 13 (celkem 37)
14 Autorizovaný přístup Uživatel se pohodlně dostává přímým přístupem k nastavení atributu - výhoda, ale tím pádem může tento atribut i nevhodně změnit - nevýhoda (např. v našem případě zadat záporný poloměr!) Řešení - použít modifikátor (specifikátor) private (privátní, soukromý) - zapouzdření (encapsulation) skrytí atributů před vnějšími vlivy Přístupová práva: Specifikátor public private protected žádný (tzv. package friendly) Z libovolné třídy. Povolený přístup Pouze zevnitř dané třídy, žádný přístup z vnějšku. Z kterékoliv třídy téhož balíku, případně z potomka třídy kdekoliv. Z kterékoliv třídy téhož balíku. Důsledek - použitím specifikátoru private přímý přístup k atributu již nefunguje! Nutný autorizovaný přístup, tj. - vytvoření přístupových metod pro nastavení a vrácení hodnoty atributu (setters, getters) Poznámka: Přístupové právo metod bývá většinou public, ale i metody je možné (někdy vhodné) skrývat, potom je použit modifikátor private (s důsledky obdobnými jako u atributu). Strana 14 (celkem 37)
15 Úprava: přidáme modifikátor private pro atribut polomer a přístupové metody getpolomer() a setpolomer() public class Kruh { private double polomer; // privatni atribut public Kruh() { polomer = 1.0; public Kruh(double polomer) { setpolomer(polomer); // volani setru v konstruktoru // metoda pristupu k atributu vraceni hodnoty = getr public double getpolomer() { return polomer; // metoda pristupu k atributu nastaveni hodnoty = setr public void setpolomer(double polomer) { if(polomer > 0){ this.polomer = polomer; //osetri pripustnost vstupu double spoctiplochu(){ return polomer*polomer*math.pi; public String tostring(){ return "<Kruh: polomer = " + polomer + ", plocha = " + spoctiplochu() + ">"; Strana 15 (celkem 37)
16 public class TestKruhuSPrivateModifikatorem { public static void main(string[] args) { // Vytvor kruh a nastav polomer 5.0 Kruh mujkruh = new Kruh(5.0); /* Toto uz nelze pouzit!!! System.out.println(mujKruh.polomer); */ // vypocet a tisk System.out.println(mujKruh); // Zvetsi polomer o 10% mujkruh.setpolomer(mujkruh.getpolomer()*1.1); System.out.println(mujKruh); <Kruh: polomer = 5.0, plocha = > <Kruh: polomer = 5.5, plocha = > Vytváření, volání, přetěžování metod Vytváření - píšeme dle běžných konvencí - instanční metody - static ne! (instance je dynamická) Volání - z aplikační třídy (použít referenci na objekt, který metodu volá!) - v rámci stejné třídy (běžné konvence) Přetěžování - platí stejná pravidla jako pro statické metody Strana 16 (celkem 37)
17 Pole objektů třídy - větší počet objektů: soubor položek stejného typu - vhodné použít pole (jako dříve) Motivační příklad stene objekt Pes objekt Pes Lord Rex objekt Pes Lady null null $ smecka pole referencí na objekty Pes Pes stene = new Pes ("Rex"); Pes [] smecka = { new Pes("Lord", stene, new Pes ("Lady") ; Vytvořeny 3 objekty: Pes - objekt referencovaný jako stene a smecka[1] Pes - objekt referencovaný jako smecka[0] Pes - objekt referencovaný jako smecka[2] Pes[] - pole objektů referencované jako smecka Strana 17 (celkem 37)
18 Úprava příkladu Kruh (aplikační třídy TestKruhu.java): Úkol - vytvořme několik objektů typu Kruh a seřaďme je podle velikosti ploch Řadíme reference nikoliv objekty! Upravovat budeme pouze aplikační třídu, do které doplníme mimo jiné i metodu řazení. Přidáme statickou metodu pro vytvoření pole objektů Kruh a statickou metodu řazení podle velikosti plochy, zvolíme metodu InsertSort, kterou upravíme pro řazení objektů. Pozor: Porovnávání při řazení nutno použít reference na atribut či metodu! Všimněte si příkazu: p = tmp.spoctiplochu(); výpočet p odstraní několikanásobné použití reference metody (a tudíž počítání hodnoty, která se nemění) v cyklu while! Výstup programu z následující stránky: [<Kruh: polomer = 3.0, plocha = >, <Kruh: polomer = 2.0, plocha = >, <Kruh: polomer = 3.0, plocha = > ] [<Kruh: polomer = 2.0, plocha = >, <Kruh: polomer = 3.0, plocha = >, <Kruh: polomer = 3.0, plocha = > ] Strana 18 (celkem 37)
19 import java.util.*; public class TestKruhuPoleObjektu { static private Random r = new Random(); public static Kruh[] vytvorkruhy(int pocetkruhu){ Kruh [] kruhy = new Kruh [pocetkruhu]; for(int i=0;i<kruhy.length;i++){ kruhy[i] = new Kruh(r.nextInt(pocetKruhu)+1); return kruhy; public static void seradpodleplochy(kruh kruhy[]) { for (int i=0; i<kruhy.length; i++) { Kruh tmp = kruhy[i]; int j=i; double p = tmp.spoctiplochu(); while((j>0) && (kruhy[j-1].spoctiplochu() > p)) { kruhy[j]=kruhy[j-1]; j--; kruhy[j]=tmp; public static void main(string[] args) { int pocetkruhu = r.nextint(5)+1; Kruh [] kruhy = vytvorkruhy(pocetkruhu); System.out.println(Arrays.toString(kruhy)); seradpodleplochy(kruhy); System.out.println(Arrays.toString(kruhy)); Strana 19 (celkem 37)
20 Příklad: náš první program Pozdrav - objektově public class HelloWorld { public static void main(string[] args) { Pozdrav pozdrav = new Pozdrav("Ahoj světe!"); pozdrav.print(); // 1. zpusob System.out.println(pozdrav); // 2. zpusob // nyni se pozdrav zmeni, puvodni je uz nedostupny pozdrav = new Pozdrav("Hello world!"); pozdrav.print(); System.out.println(pozdrav); class Pozdrav { private String text; public Pozdrav(String pozdrav) { text = pozdrav; // privatni metoda - privatni getr private String gettext() { // zde private ok return text; // 1 - metoda pro vypis // konstruktor Ahoj světe! Ahoj světe! Hello world! Hello world! public void print() { // public metoda vola privatni getr System.out.println(getText()); // 2 - metoda pro vypis public String tostring(){ // public metoda vola privatni getr return gettext(); Poznámka pro odevzdávání DÚ na validátor: Validátor pracuje pouze s jedním souborem. Takže, kdybychom chtěli např. odevzdat předchozí příklad, pak třídu Pozdrav uvedeme bez specifikátoru public a uložíme spolu do souboru s HelloWorld (v tomto souboru tedy budou dvě třídy). Pouze aplikační třída může mít specifikátor public. Takto upravený výsledný soubor odešleme na validátor. Strana 20 (celkem 37)
21 Poznámka (podrobně - viz Záznamy - str. 127): Na cvičení a v DÚ bude používán lékařský termín BMI (Body Mass Index), který nemá nic společného s programováním. Je pouze použit pouze pro příklad výpočtu dat odvozených z dat základních. BMI: podíl hmotnosti [kg] a čtverce výšky [m], tj. Hodnoty BMI: BMI = m / (v * v) < 18 podváha 18 až 25 ideální hmotnost 25 až 30 nadváha > 30 obezita ohrožující zdraví Příklad: vytvoříme třídu Osoba s atributy jmeno, vaha, vyska s konstruktorem Osoba() s metodami: getjmeno(), getvaha(), setvaha(), getvyska() a vypoctibmi() (viz slide na následující stránce) Dále si vytvoříme v aplikační třídě objekt třídy Osoba, tj. osobu Hana, s vahou 50 kg a výškou 170 cm. Vypíšeme informace o objektu, jméno a spočtené BMI. Potom nastavíme váhu Hany na 55 kg a opět objekt (tj. informace o něm) vypíšeme. public class OsobyObjektyAplikace { public static void main(string[] args) { Osoba o; o = new Osoba("Hana", 50, 170); System.out.println(o.toString()); System.out.println(o.getJmeno() + " ma BMI " + o.vypoctibmi()); o.setvaha(55.0); System.out.println(o); <Hana, vaha: 50.0, vyska: 170, BMI: 17> Hana ma BMI 17 <Hana, vaha: 55.0, vyska: 170, BMI: 19> Strana 21 (celkem 37)
22 class Osoba { private String jmeno; // atributy private double vaha; private int vyska; // konstruktor public Osoba(String jmeno, double vaha, int vyska) { this.jmeno = jmeno; setvaha(vaha); this.vyska = vyska; // getry a setry public String getjmeno() { return jmeno; public double getvaha() { return vaha; public void setvaha(double vaha) { if (vaha > 0.0) { this.vaha = vaha; public int getvyska() { return vyska; // ostatni metody public int vypoctibmi() { double vyskametry = vyska / 100.0; double bmi = vaha / (vyskametry * vyskametry); return (int) Math.round(bmi); // zaokrouhleni public String tostring() { return "\n<" + jmeno + ", vaha: " + vaha + ", vyska: " + vyska + ", BMI: " + vypoctibmi() + ">"; Strana 22 (celkem 37)
23 String - příklad knihovní třídy - jedna z nejpoužívanějších tříd (cca 50 metod) - inicializovaný objekt typu String: deklarace proměnné typu String a přiřazení řetězce v uvozovkách (i bez operátoru new) - řetězcový literál (v uvozovkách) - automatické vytvoření objektu typu String // s2 odkazuje na stejny objekt jako s1 // takto budeme prednostne pouzivat String s1 = "retezec"; String s2 = s1; // skutecne vytvoreni noveho objektu, na nejz odkazuje s3 String s3 = new String(s1); System.out.println("s1: " + s1); - řetězec je speciální pole znaků, 0 až length()-1 - jednou vytvořený řetězec je konstantní, nelze jej měnit ( měnitelný řetězec - třída StringBuffer) - spojení řetězců (konkatenace) použitím operátoru + - řetězec jako operand následovaný operandem jiného typu se automaticky převede na řetězec Volání metod a práce s řetězci String s = "ahoj", s1 = "hi", s2 = "bye"; s.jmenometody(), s1.jmenometody(s2) s1: retezec s2: retezec s3: retezec Např.: String s = "Ahoj"; char c = s.charat(0); // A = znak na pozici 0 Strana 23 (celkem 37)
24 Práce se znaky String s = "Ahoj"; int i = s.length(); // pocet znaku retezce vysledek i=4 int j = s.indexof('a'); // první výskyt znaku 'a' int k = s.lastindexof('o'); // index posledního výskytu 'o' Porovnávání řetězců Příklad: totožnost - výsledek true/false String s1 = "Ahoj"; String s2 = "ahoj"; boolean shoda = s1.equals(s2); // false Příklad: hodnotou - výsledek (0: rovnost, <0: první je menší, >0: druhé je menší) String s1 = "Ahoj"; String s2 = "ahoj"; int k = s1.compareto(s2); // <0 Práce s podřetězci String s = "proto"; int i = s.indexof("to"); // výsledek i= 3 String p = s.substring(2); // výsledek p="oto" Test začátku a konce řetězce String s = "proto"; boolean z = s.startswith("pr"); // výsledek z = true boolean k = s.endswith(''ale"); // výsledek z = false Strana 24 (celkem 37)
25 Náhrada všech určených znaků String s2,s1 = "cacao"; s2 = s1.replace('c', 'k'); // vysledek kakao Oříznutí bílých znaků String s = "\t ahoj \t\n\r"; s = s.trim(); // ahoj Spojení řetězců (konkatenace) String s1 = "Pan"; String s2 = "TAU"; // operatorem + String s3 = s1 + " " + s2; // metodou concat() String s4 = s1.concat(" " + s2); // Pan TAU Převod řetězce na pole znaků a zpět String s1 = "retezec"; char poleznaku[] = s1.tochararray(); // pouziti pretizeneho konstruktoru String s2 = new String(poleznaku); KONVERZE: A. Řetězec základní datové typy Datové typy int, double, long,... mají své obalovací třídy: Integer, Double, Long,... Strana 25 (celkem 37)
26 1. Metoda parse() volána ve tvaru: ObalovaciTrida.parseTyp (s) s je String Integer.parseInt(s), Long.parseLong(s), Double.parseDouble(s) 2. Metoda valueof() volána ve tvaru: ObalovaciTrida.valueOf (s) s je String Integer.valueOf(s), Long.valueOf(s), Double.valueOf(s) // Prevod retezce na celociselny typ // 1. zpusob String s1 = "123"; int i = Integer.parseInt(s1); // i = 123 // 2. zpusob String s2 = "123.45"; double p = Double.valueOf(s2) ; // p = B. Základní datové typy řetězec 1. Metoda tostring() volána ve tvaru: ObalovaciTrida.toString (x) x je primitivní datový typ Integer.toString(), Long.toString(), Double.toString(), 2. Metoda valueof() volána ve tvaru: String.valueOf(x) x je primitivní datový typ String.tvalueOf(x), Strana 26 (celkem 37)
27 // Prevod celociselneho typu na retezec // 1. zpusob int i = 123; String s3 = Integer.toString(i); // s3 = "123" // 2. zpusob double p = ; String s4 = String.valueOf(p) ; // s4 = "123.45" Další užitečné metody a třídy pro práci s řetězci o metoda split(), třída StringTokenizer Podrobné informace - JavaCoreAPI (String) Příklad 1: Zpracování dat na vstupu (ilustrace použití třídy String a metod: trim(), split(), parseint()) Na vstupu je neznámý počet dvojic čísel, každá dvojice na jednom řádku, čísla navzájem oddělena mezerou, úkolem je postupné načtení zpracování. String input; String [] idata = new String[2]; // použije split() int a, b; while (sc.hasnext()) { input = sc.nextline().trim(); idata = input.split(" "); a = Integer.parseInt(idata[0]); b = Integer.parseInt(idata[1]); // oddelovac 1 mezera Strana 27 (celkem 37)
28 Příklad 2: Zjistěte, zda se zadané písmeno v řetězci vyskytuje, a pokud ano, pak na které pozici je jeho první výskyt, pokud ne, pouze vypište zprávu. import java.util.scanner; public class HledaniPismenaVRetezci { private static Scanner sc = new Scanner(System.in); public static void main(string[] args) { System.out.print("Zadejte retezec:"); String retezec = sc.nextline(); System.out.print("Zadejte hledane pismeno:"); char hledej = sc.nextline().charat(0); boolean nalezeno = false; int index = 0; // nasledujici programovou sekvenci bychom museli napsat /* for(int i = 0; i < retezec.length(); i++) { // cyklem if(retezec.charat(i) == hledej){ nalezeno = true; index = i+1; break; */ if((index = retezec.indexof(hledej))>=0) { // knihovni metodou index++; nalezeno = true; if(nalezeno) { System.out.println("Pismeno '"+ hledej + "' je na pozici:" + index); else { System.out.println("Pismeno '"+ hledej + "' nenalezeno!"); Zadejte retezec:alenka Zadejte retezec:alenka Zadejte hledane pismeno:a Zadejte hledane pismeno:o Pismeno 'a' je na pozici:1 Pismeno 'o' nenalezeno! Strana 28 (celkem 37)
29 Př. 3: Césarova šifra - vytvořte program pro šifrování textu (pouze malá písmena anglické abecedy), které spočívá v posouvání znaku v abecedě o určitý, pevně stanovený počet znaků. Např. slovo "ahoj" se posunem textu o 1 znak transformuje na "bipk". import java.util.*; public class CesarovaSifra { private static Scanner sc = new Scanner(System.in); public static void main(string [] args){ // inicializace promennych String s = "abcdefghijklmnopqrstuvwxyz"; System.out.printf("Puvodni zprava: %s\n", s); String zprava = ""; int posun = 1; // posun mozno nastavit: sc.nextint(); // cyklus prochazejici jednotlive znaky for (char c : s.tochararray()) { // for Each int i = (int)c; i += posun; // presun na zacatek abecedy if (i > (int)'z') { i -= 26; //pocet pismen char znak = (char)i; zprava += znak; // vypis System.out.printf("Zasifrovana zprava: %s\n", zprava); Puvodni zprava: abcdefghijklmnopqrstuvwxyz Zasifrovana zprava: bcdefghijklmnopqrstuvwxyza Další podobnou úložku hledejte na konci přednášky Strana 29 (celkem 37)
30 Jednoduchý příklad: použití String a objektu - pro připomenutí základů objektového programování Třída DomaciZvirata obsahující: - dvě proměnné: druh zvířete a zvuk, který vydává - dva konstruktory - žádnou metodu public class AplikaceDomaciZvirata { public static void main(string[] args) { // deklarace s inicializaci: instance pes DomaciZvirata alik = new DomaciZvirata(); alik.druh = "pes"; alik.zvuk = "haf"; // vytvorime novou instanci zvirete: kocku DomaciZvirata mica = new DomaciZvirata("kocka","mnau"); System.out.println("Jsem " + alik.druh + " a delam " + alik.zvuk); System.out.println("Jsem " + mica.druh + " a delam " + mica.zvuk); DomaciZvirata pipina = new DomaciZvirata("slepice","kokodak"); System.out.println("Ja jsem " + pipina.druh + " a delam " + pipina.zvuk); // ukazka NullPointerException, odkomentujte nasledujici radek // pipina = null; // objekt nevytvoren System.out.println("" + pipina.zvuk.concat(", kokodak") + " :to je " + pipina.druh); class DomaciZvirata { // druh a zvuk, ktery zvire vydava public String druh; public String zvuk; public DomaciZvirata() { //konstruktor public DomaciZvirata(String druh, String zvuk) { // konstruktor this.druh = druh; this.zvuk = zvuk; Jsem pes a delam haf Jsem kocka a delam mnau Jsem slepice a delam kokodak kokodak, kokodak :to je slepice Strana 30 (celkem 37)
31 A lépe: třídu DomaciZvirata doplníme metodami kdoje() a jakdela() a metodou tostring() class DomaciZvirata { // doplneni metod public String druh; public String zvuk; public DomaciZvirata(){ public DomaciZvirata(String druh, String zvuk){ this.druh = druh; this.zvuk = zvuk; public String jakdela(){ return zvuk; public String kdoje(){ return druh; public String tostring(){ return "<zvire: " + kdoje() + "... " + jakdela() + ">"; public class AplikaceKockaAPes { public static void main(string[] args) { DomaciZvirata alik = new DomaciZvirata(); alik.druh = "pes"; alik.zvuk = "haf"; DomaciZvirata mica = new DomaciZvirata("kocka","mnau"); // použiti doplnene metody System.out.println("zvire: " + alik.kdoje() + "... " + alik.jakdela()); System.out.println("zvire: " + mica.kdoje() + "... " + mica.jakdela()); DomaciZvirata pipina = new DomaciZvirata("slepice","kokodak"); // zjednoduseni vypisu pouzitim metody tostring() System.out.println(pipina); Strana 31 (celkem 37)
32 Třída StringBuffer* (pouze informace) - objekty typu String jsou řetězce neměnitelné - vyšší odolnost vůči chybám a efektivnější zacházení - měnitelné řetězce - použít instance třídy StringBuffer. - doporučení - používat instance třídy String, je-li třeba změny - zkonvertovat na typ StringBuffer a pak opět uchovat v objektech typu String. // vytvoreni objektu StringBuffer (s kapacitou 16 znaku) StringBuffer jmenobuf2 = new StringBuffer(); String jmeno = "princezna Lada"; // vytvoreni objektu StringBuffer s pouzitim tridy String StringBuffer jmenobuf1 = new StringBuffer(jmeno); // vytvoreni objektu StringBuffer s kapacitou zadanou cislem StringBuffer jmenobuf2 = new StringBuffer(20); Převod objektu StringBuffer na String a zpět Převod StringBuffer na String se provede metodou tostring. Převod ze String na StringBuffer se provede vhodným použitím operátoru new (je to zcela intuitivní). Ze String do StringBuffer: StringBuffer jmenobuf = new StringBuffer("Pepa "); Ze StringBuffer do String String jmeno = jmenobuf.tostring(); Základy práce s třídou StringBuffer append(), insert ()- přidávání a vkládání textu StringBuffer buf = new StringBuffer("jmeno :"); buf.append(" Koza"); buf.insert(8, " Oliver") // vystup: "jmeno : Oliver Koza"; System.out.println(buf.toString()); Strana 32 (celkem 37)
33 replace() - změna textu ve StringBufferu StringBuffer buf = new StringBuffer("Miroslav Koula"); String s1 = "Mirek"; // nahradi text zacinajici na pozici 1 až 8 novym textem buf.replace(1,8,s1); capacity() - zjištění kapacity StringBufferu. Kapacita představuje maximalní počet znaků, který lze do StringBufferu uložit. StringBuffer buf = new StringBuffer("delsi retezec"); // delka je nastavena na 10 buf.setlength(10); // ale do kapacity je ulozena hodnota 14 int kapacita = buf.capacity(); reverse() - obrácení textu ve StringBufferu StringBuffer obraceni = new StringBuffer("Radar"); System.out.println("Obraceni Radar: " + obraceni.reverse()); Užitečné testování znaků Character.isDigit()- je znak číslice? Character.isLetter()- je znak písmeno? Character.isLetterOrDigit()- je znak písmeno nebo číslice? Character.isLowerCase()- je znak malé písmeno? Character.isUpperCase()- je znak velké písmeno? Character.isWhitespace()- je to bílý znak? Strana 33 (celkem 37)
34 StringBuffer s = new StringBuffer(koniklec); System.out.println("Character.isDigit(s.charAt(0)): " + Character.isDigit(s.charAt(0))); System.out.println("Character.isLetter: " + Character.isLetter(s.charAt(0))); System.out.println("Character.isLetterOrDigit: " + Character.isLetterOrDigit(s.charAt(0))); System.out.println("Character.isLowerCase: " + Character.isLowerCase(s.charAt(0))); System.out.println("Character.isUpperCase: " + Character.isUpperCase(s.charAt(0))); System.out.println("Character.isWhitespace: " + Character.isWhitespace(s.charAt(0))); Programování procedurální vs. objektové V následujícím příkladu je patrný rozdíl mezi procedurálním a objektovým programováním. Obě formy mají své výhody a nevýhody! Objektové programování představuje více administrativy, kód je však strukturovaný a přehledný, provedení ale zabere relativně více času. Procedurální programování míchá data a metody, je méně přehledné, ale má relativně rychlejší běh. (více v PPA2) Příklad (Kruh) ilustrace obou forem programování Vytvoříme dva kruhy a napíšeme další metodu, která spočte rozdíl ploch obou kruhů. Strana 34 (celkem 37)
35 Procedurálně: Počítáme rozdíl dvou ploch. public class SpoctiRozdilPlochProc { static double spoctiplochu(double polomer){ return polomer*polomer*math.pi; static double spoctirozdilploch(double polomer1, double polomer2){ return Math.abs(spoctiPlochu(polomer1)-spoctiPlochu(polomer2)); public static void main(string[] args) { double polomer1 = 10.0; double polomer2 = 1; System.out.println(spoctiPlochu(polomer1)); System.out.println(spoctiPlochu(polomer2)); System.out.println("Rozdil ploch: " + spoctirozdilploch (polomer1, polomer2)); Rozdil ploch: Objektově: Počítáme rozdíl plochy kruhu referencovaného, tj. našeho (this) objektu - vůči ploše kruhu jiného objektu, který je předán skutečným parametrem v metodě. Strana 35 (celkem 37)
36 class Kruh { private double polomer; public Kruh() { polomer = 1.0; public Kruh(double polomer) { setpolomer(polomer); public double getpolomer() { return polomer; public void setpolomer(double polomer) { if(polomer > 0){ this.polomer = polomer; public double spoctiplochu(){ return polomer*polomer*math.pi; public double spoctirozdilploch(kruh k) { return Math.abs(this.spoctiPlochu() - k.spoctiplochu()); public String tostring() { return "<Kruh: polomer = " + polomer + ", plocha = " + spoctiplochu() + ">"; public class SpoctiRozdilPlochObj { public static void main(string[] args) { Kruh kruh = new Kruh(10.0); Kruh krouzek = new Kruh(); System.out.println(kruh); System.out.println(krouzek); System.out.println("Rozdil ploch: " + kruh.spoctirozdilploch(krouzek)); <Kruh: polomer = 10.0, plocha = > <Kruh: polomer = 1.0, plocha = > Rozdil ploch: Strana 36 (celkem 37)
37 Další jednoduché úložky: 1. Vytvořte program, který bude fungovat jako kodér a dekodér pro znaky Morseovy abecedy. 2. Celé číslo nazveme super číslem, jestliže ho můžeme vyjádřit jako součet dvou čtverců nebo jako podíl dvou čtverců. Napište program, který ověří, zda číslo je či není super číslem, víte-li, že např. rok 1914 nebyl super rokem! Strana 37 (celkem 37)
9. přednáška - třídy, objekty
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
Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!
Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného
KTE / ZPE Informační technologie
4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
11.5.2012. 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 přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
Algoritmizace a programování
Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém
8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
Seminář Java II p.1/43
Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii
3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti
Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti 3. přednáška nalezení největšího prvku, druhého nejvyššího prvku, algoritmus shozeného praporku. Algoritmizace
Úvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Algoritmizace a programování. Terminálový vstup a výstup
Algoritmizace a programování Terminálový vstup a výstup Verze pro akademický rok 2012/2013 1 Výpis hodnot Terminálový vstup a výstup budeme používat jako základní způsob interakce programu s uživatelem
Výčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
Paměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
1. Téma 12 - Textové soubory a výjimky
1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se
Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20
Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................
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/04.0006
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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
4.4.2012. 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
Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -
Teoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,
Řídicí struktury. alg3 1
Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: posloupnost, předepisující postupné provedení
Programování v Javě I. Únor 2009
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory
Vytváření a použití knihoven tříd
Vytváření a použití knihoven tříd doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Prostory jmen motivace spolupráce
Principy objektově orientovaného programování
Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T
Java - řazení objektů
Java - řazení objektů Kapitola seznamuje se základními principy řazení objektů Klíčové pojmy: Přirozené řazení, absolutní řazení, ideální porovnávatelná třída ŘAZENÍ OBJEKTŮ U objektů není příliš jasné,
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
Třída jako zdroj funkcí
Třída jako zdroj funkcí Třída v jazyku Java je programová jednotka tvořená množinou identifikátorů, které mají třídou definovaný význam Základem uživatelského programu v jazyku Java je třída, ve které
Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová
Programové konvence, dokumentace a ladění 2. přednáška Alena Buchalcevová Proč dodržovat programové konvence? velkou část životního cyklu softwaru tvoří údržba údržbu provádí většinou někdo jiný než autor
Algoritmizace a programování
Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,
Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics
Java Cvičení 01 http://d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Příklady - Porovnání Co kód vypíše? package cz.cuni.mff.java.example01.tests; public class Test01
Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)
Třída Character Práce s textem doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz reprezentuje objekty zapouzdřující hodnotu
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
Jazyk C# (seminář 6)
Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí
IB111 Programování a algoritmizace. Objektově orientované programování (OOP)
IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33
Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt
OOPR_05. Případové studie
OOPR_05 Případové studie 1 Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2 Grafický objekt - čára
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
Regulární výrazy. Vzory
Regulární výrazy Regulární výrazy jsou určeny pro práci s textovými řetězci, jsou součástí J2SDK až od verze 1.4, v předchozích verzích je potřeba použít některou z externích knihoven, např. knihovnu ORO
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
Programování v C++ 2, 4. cvičení
Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva
Pole a kolekce. v C#, Javě a C++
Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java
Java a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
Programování v C++ 3, 3. cvičení
Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového
KTE / ZPE Informační technologie
7 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň - ternární
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1
24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE
Abstraktní třída a rozhraní
Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo
Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)
7. Dynamické datové struktury
7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.
IRAE 07/08 Přednáška č. 1
Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní
Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13
Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
14.4.1. Typický prvek kolekce pro české řazení
14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení
Zápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
7. Datové typy v Javě
7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);
Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());
1. Programování proti rozhraní
1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
Datové typy strana 29
Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo
Úvod do programování 6. hodina
Úvod do programování 6. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Algoritmy Třídění pole: Selection
17. Projekt Trojúhelníky
Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským
ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů
ÚVODNÍ ZNALOSTI datové struktury správnost programů analýza algoritmů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
5 Přehled operátorů, příkazy, přetypování
5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování
3. Třídy. Základní pojmy objektového programování. Třídy
3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat
Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.
Proměnná Pojmenované místo v paměti sloužící pro uložení hodnoty. K pojmenování můžeme použít kombinace alfanumerických znaků, včetně diakritiky a podtržítka Rozlišují se velká malá písmena Název proměnné
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 )/ ;
Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,
Obsah přednášky. Postup při vytváření objektů. Postup při vytváření objektů. Alokace paměti. Inicializace hodnot atributů
Základy programování (IZAPR, IZKPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Postup při vytváření
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Soubor jako posloupnost bytů
Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení
Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
8. přednáška: Soubory a proudy
8. přednáška: Soubory a proudy Soubor jako posloupnost bytů Ukládání/čtení primitivních typů Ukládání/čtení primitivních typů a objektů (řetězců) Ukládání/čtení objektů do souboru - serializace Obsah Algoritmizace
Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické
Třídy a dědičnost A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické Dnešní témata Dědičnost Kompozice Typ String Třídy a dědičnost Dopravní prostředek Vzdušný Pozemní Vodní
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19
C++ přetěžování funkcí a operátorů 1 Přetěžování funkcí jazyk C++ umožňuje napsat více funkcí se stejným názvem, těmto funkcím říkáme přetížené přetížené funkce se musí odlišovat typem nebo počtem parametrů,
Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016
ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce
Z. Kotala, P. Toman: Java ( Obsah )
Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například
Textové soubory. alg9 1
Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle
Dědění, polymorfismus
Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá
NMIN201 Objektově orientované programování 1 / :36:09
NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat
Základy programování (IZP)
Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
Tato tematika je zpracována v Záznamy přednášek: str
Obsah 2. přednášky: Číselné soustavy Kódování Datové typy a Java Deklarace proměnné Výraz, přiřazení, příkaz Operátory Konverze typu Základní matematické funkce Terminálový formátovaný vstup a výstup Tato
1. Téma 03 - Rozhodování
1. Téma 03 - Rozhodování Cíl látky Seznámit se a prakticky si vyzkoušet zápis rozhodování v jazyce Java 1.1. Úvod Jednou z nejčastěji používanou konstrukcí při programování je rozhodování. Právě této problematice
1. Úvodní informace. BI-EP1 Efektivní programování Martin Kačer
1. Úvodní informace BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické
Objektově orientované programování
10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected: