Jazyk C# (seminář 5)



Podobné dokumenty
Jazyk C# (seminář 6)

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

SOUBORY, VSTUPY A VÝSTUPY

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

C# - I/O, streamy, práce se soubory

Principy objektově orientovaného programování

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

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.

PREPROCESOR POKRAČOVÁNÍ

Úvod Informace o prostředí Práce se soubory Regulární výrazy Konec. Programování v C# Soubory a regulární výrazy. Petr Vaněček 1 / 27

Teoretické minimum z PJV

Úvod do programování 8. hodina

přetížení operátorů (o)

Jazyk C# (seminář 3)

Generické programování

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

Ošetřování chyb v programech

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

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Zápis programu v jazyce C#

Úvod do programovacích jazyků (Java)

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jazyk C# (seminář 3)

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

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

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

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

Tabulková data. budeme pracovat s CSV soubory položky oddělené středníkem, např.

Kolekce, cyklus foreach

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

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

Pavel Procházka. 3. prosince 2014

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Standardní algoritmy v C++.

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Objekty jako zapozdření dat. začneme vytvářet vlastní objekty a třídy

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

8 Třídy, objekty, metody, předávání argumentů metod

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

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Úvod do programovacích jazyků (Java)

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

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/

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Práce se soubory v Javě

přetížení operátorů (o)

Jazyk C# a platforma.net

IRAE 07/08 Přednáška č. 1

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

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

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

IRAE 07/08 Přednáška č. 7. Začátek (head)

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Jazyk C# (seminář 9)

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Mnohotvarost (polymorfizmus)

Přetěžování operátorů

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

KTE / ZPE Informační technologie

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Dědičnost (inheritance)

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

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

PB161 Programování v jazyce C++ Přednáška 10

Programování v C++ 1, 5. cvičení

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

Soubor jako posloupnost bytů

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

PB přednáška (26. října 2015)

C# bez předchozích znalostí

Programování v Javě I. Leden 2008

Jazyk C# a platforma.net

C++ objektově orientovaná nadstavba programovacího jazyka C

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

Jazyk C++ I. Polymorfismus

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Textové soubory. alg9 1

Konstruktory překladačů

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

Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015. poslední přednáška a materiál k samostudiu

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

URČITÝM ZPŮSOBEM PODOBNÉ

Jazyk C# - přístup k datům

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

Jazyk C# přednáška 01. Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015

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

Algoritmizace a programování

Jazyk C++ II. Šablony a implementace

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

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

Programování v C++ První kroky

Jazyk C++ I. Šablony 2

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Úvod do programovacích jazyků (Java)

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Abstraktní datové typy: zásobník

Transkript:

Jazyk C# (seminář 5) Pavel Procházka KMI 23. října 2014

Přetěžování metod motivace Představme si, že máme metodu, která uvnitř dělá prakticky to samé, ale liší se pouze parametry V C# můžeme více metod nazvat stejně s tím, že se budou lišit ve svých parametrech a tím se odliší Vlastně už to trochu známe, přetěžovali jsme konstruktory Jelikož je konstruktor metoda, lze přetěžovat i metody Při volání metody se kompilátor rozhodne, kterou použije na základě typu předaných parametrů Pozor! Všechny přetížené metody musí vracet stejný typ

Ilustrace použití static class MyMath{ public int Plus( int x, int y ){ return x+y; public int Plus( int x, int y, int z ) { return x+y+z;... /* vybere metodu s dvemi parametry */ MyMath.Plus (5, 6); /* vybere metodu s tremi parametry */ MyMath.Plus (5, 6, 7); V čem je to výhodné, v čem ne?

Přetěžování operátorů Zopakujeme co je to operátor V jazycích rodiny C jsou to obvykle +, -, *, /,.,[], ==,, =, atd. Jsou vyčleněny z jinak prefixové notace typu operace( arg1,.., argn ) Ale v zásadě jsou implementovatelné funkcemi v našem případě metodami. C# nabízí, jak tyto operátory (na které se můžeme dívat jako na metody) přetížit Umožňuje také definovat implicitní konverze typů

Demonstrační příklad class Frac{ public int citatel, jmenovatel;... public static Frac operator *( Frac f1, Frac f2) { return new Frac(f1.citatel * f2.citatel, f1.jmenovatel * f2.jmenovatel); Frac num1 = new Frac( 3, 4 ); Frac num2 = new Frac( 2, 8 ); Frac num = num1 * num2; Console.WriteLine( "{0 / {1", num.citatel, num.jmenovatel );

Rozšířený demonstrační příklad Co je na něm špatně? Definice zlomku. Zlomek je definván (rekurzivně) takto: a/b je zlomek, kde a je zlomek nebo celé číslo, b je zlomek nebo nenulové celé číslo. Takže trochu musíme změnit implementaci, v C# máme zřejmě jenom jednu možnost, jak to uděláme zkuste to vymyslet. Využijeme faktu, že i číslo je zlomek a tudíž ho můžeme implicitně přetypovávat na zlomek.

Demonstrační příklad 2 class Frac{ public Frac citatel, jmenovatel; bool je_cele_cislo = false; public cele_cislo = 0; /* konstruktory */ public Frac( int citatel ){ je_cele_cislo = true; cele_cislo = citatel; public Frac( Frac c, Frac j ){ citatel = c; jmenovatel = j; /* implicitni pretypovani intu na Frac */ public static implicit operator Frac(int x) { return new Frac( x );

Příklad použití demo2... Frac c1 = new Frac( 2 ); // 2/1 Frac f1 = new Frac( 1, 2 ); // 1/2 Frac f3 = new Frac( c1, new Frac( 1, 2 ) ); // 2/(1/2)

v C# Zajišt ují je třídy z namespace System.IO Nás bude zajímat především BinaryReader, BinaryWriter, Directory, DirectoryInfo, FileStream analogie k FILE v C. StringReader, StringWriter, File slouží k nejběžnějším úkolům Použití je analogické jako v C, zejména musíme explicitně použít Close metodu Pokud se chcete vyhnout používání metody Close, Microsoft pro vás připravil novou sémantiku klíčového slova using, když ho použijete ve tvaru using( INICIALIZACE_POPISOVACE ){ PRACE_SE_SOUBOREM tak se chová tak, že implictně zavolá Close místo vás Namespace File obsahuje celou řadu připravených writerů a readerů např. File.AppendText, ale hlavně Open

Běžný zápis a čtení textové soubory čtení using System.IO; /* cteni celeho textoveho souboru unix */ string readtext = File.ReadAllText( "/path/to/file" ); /* cteni windows */ string readtext = File.ReadAllText( "C:\\path\\to\\file" ); /* cteni textoveho souboru po radcich */ StreamReader file = new StreamReader("c:\\test.txt"); while((string line = file.readline())!= null) { Console.WriteLine (line);

Běžný zápis a čtení textové soubory zápis /* zapis do txt souboru */ /* prepise nebo vytvori file */ File.WriteAllText ( "/path/to/txt/file", "Hello World!"); /* zapis textoveho souboru po radcich */ /* pokud je druhy argument true -- jsme v rezimu append */ string [] lines = { "hello", "world", "there" ); StreamWriter file = new StreamWriter( "path/to/fle", true); foreach( string l in lines ) { file.writeline (line);

Běžný zápis a čtení binární soubory čtení using (BinaryReader b = new BinaryReader(File.Open("file.bin", FileMode.Open))) { int pos = 0; int length = (int)b.basestream.length; while (pos < length) { /* Dulezite je nasledujici hodnotu "parsovat" */ int v = b.readint32(); Console.WriteLine(v); pos += sizeof(int);

Běžný zápis a čtení binární soubory zápis using (BinaryWriter binwriter = new BinaryWriter(File.Open(fileName, FileMode.Create))) { binwriter.write("hello"); binwriter.write("world"); binwriter.write(10); binwriter.write(true); binwriter.write(math.pi);

Zápis a čtení odchytávání výjimek Vyjímkami se budeme ještě zabývat, berte to zatím jako dogma try{ // Prace se souborem catch(exception e){ // Pokud se neco nepovede (otevreni apod.) // Vysvetleni co se nepovedlo je v e

Předávání argumentů konzolové aplikaci Skoro stejné jako v C Předání pomocí vstupní metody Main, všimněte si, že obsahuje pole string [] args V poli args jsou potom argumenty napsané zleva doprava Pozor na rozdíl od jazyka C není nultá položka args rovna jménu skriptu!

A ted vy Přepište ve třídě Frac metodu ToString, aby vypisovala zlomek čitelným způsobem. Např. Console.WriteLine ( new Frac( 1, new Frac( 3, 2 ) ) se vyhodnotí na (1 / (3 / 2)) Přetěžte operátor! tak, aby se choval jako inverze zlomku tzn. ( a ) 1 b = b a Přetěžte operátor konverze na double tak, aby vypočítal reálnou hodnotu zlomku Udělejte konzolovou aplikaci, která bere jako své argumenty dva binární soubory obsahující matice libovolné dimenze (strukturu souboru si určete sami). Třetí argument je volitelný přebírá operaci s maticemi, pro jednoduchost +,,*-, v případě, že není předán provede se vytištění obou matic na obrazovku. V případě, že je předán třetí argument, můžeme předat čtvrty argument, což je výstupní soubor, pokud není zadán provede se vytištění matice na obrazovku. Pro shrnutí syntaxe nástroje vypadá takto matrix_comp mat1.bin mat2.bin [{+,-,* [mat_out.bin]]