Jazyk C# (seminář 3)

Podobné dokumenty
Generické programování

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Jazyk C# (seminář 6)

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

NMIN201 Objektově orientované programování 1 / :36:09

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

NPRG031 Programování II 1 / :25:46

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

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

PREPROCESOR POKRAČOVÁNÍ

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

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

Abstraktní třída a rozhraní

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

Mnohotvarost (polymorfizmus)

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

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

Seminář Java IV p.1/38

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

typová konverze typová inference

20. Projekt Domácí mediotéka

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/

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

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

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

Výčtový typ strana 67

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

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

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

Programování v Javě I. Leden 2008

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Jazyk C# (seminář 3)

Objektové programování

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

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

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

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

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

, Brno Připravil: David Procházka Návrhové vzory

Objektově orientované programování v PHP 5. Martin Klíma

Zápis programu v jazyce C#

Programování v C++ 2, 4. cvičení

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

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

Java Enum Java, zimní semestr ,2017 1

1. Dědičnost a polymorfismus

Dědění, polymorfismus

Jazyk C# (seminář 5)

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Principy objektově orientovaného programování

1. Programování proti rozhraní

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

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

Dědičnost, rozhraní (interface)

PB161 Základy OOP. Tomáš Brukner

11. Dědičnost. Dědičnost strana 103

KTE / ZPE Informační technologie

Dědičnost (inheritance)

Komponenty v.net. Obsah přednášky

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Pavel Procházka. 3. prosince 2014

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

C# - OOP (object oriented programming)

Seminář Java II p.1/43

Jakub Čermák Microsoft Student Partner

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

Základy objektové orientace I. Únor 2010

Teoretické minimum z PJV

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

Úvod do programovacích jazyků (Java)

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

3. Třídy. Základní pojmy objektového programování. Třídy

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

Jazyk C++ I. Šablony

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

9. Polymorfismus a rozhraní

Jazyk C++ I. Šablony 2

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

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

Programování II. Polymorfismus

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Klíčová slova: OOP, konstruktor, destruktor, třída, objekt, atribut, metoda

Návrhové vzory OMO, LS 2014/2015

ZÁPADOČESKÁ UNIVERZITA V PLZNI

1 Nejkratší cesta grafem

KTE / ZPE Informační technologie

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

Algoritmizace a programování

Objektově orientované programování

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

Algoritmizace a programování

Transkript:

Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014

Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na to, jak se objekt chová a co obsahuje Atributem OOP je zapouzdření členské proměnné třídy nejsou dostupné přímo, ale zásadně přes metody, které by navíc měly zajišťovat kontrolu správnosti vstupu dosahujeme tím robustnosti programu (odolnosti vůči chybám). Polymorfismus mnohotvarost stejně nazvané metody mohou být jinak naimplementované. Krava->mluvit(); // buuuu Kun->mluvit(); //ihahaaaa Dědičnost ve smyslu IS A. Nějaký objekt je současně i jiný objekt. Například kůň je savec všimněte si třídy kůň a savec. Problém vícenásobné dědičnosti. Uživatel Uklízečka, Student, Učitel Co když chceme vytvořit objekt Akademik dědící od učitele i studenta?

Zapouzdření v C# Objektově orientované programování (OOP) Ochrana členských proměnných a metod pomocí specifikátorů přístupů public veřejný kdekoli v kódu může číst, zapisovat nebo volat private přístup je možný pouze z metody dané třídy nebo struktury rotected chráněno přístup možný pouze v metodě dané třídy nebo v potomcích třídy internal málo používané přistup možný pouze ze stejného assembly bytekódu Obvykle bychom měli používat private nebo protected a přistupovat k nim pomocí metod, které nastavují, čtou proměnnou. class Savec private int weight; void SetWeight( int w ) if( weight <= 0 ) return; weight = w; int GetWeight() return weight;

Zapouzdření pohodlněji Naštestí v C# existují settery, gettery umožňují k proměnným přistupovat přímo, a přesto nejsme ochuzeni o kontrolu vstupu klíčová slova get, set class Savec /* skutecna vnitrni promenna */ private int weight = 1; public int Weight /* nastavovana hodnota je v promenne value */ set if( value <= 0 ) return; weight = value; get return weight; Savec s = new Savec(); /* zavola se setter s value = 10 */ s.weight = 10; /* prenastavi na 10 */ /* ve skutecnosti se zavola getter a vrati 10 */ Console.WriteLine( "w: 0", s.weight );

Dědičnost Dědíme VŽDY ve smyslu object IS A other object ne ve smyslu object have other object. Syntaxe class MORE_PARTICULAR_CLASS : MORE_GENERAL_CLASS class Savec public int hmotnost = 10; public int Hmotnost() return hmotnost; class Kun : Savec public void Mluv() Console.WriteLine("ihahaaa"); class Koza : Savec pubic void Mluv() Console.WriteLine("me-eee"); Koza k = new Koza(); k.mluv(); Console.WriteLine( "0", k.hmotnost() );

Statické třídy Není potřeba instance třídy provede se automaticky a má stejné jméno jako třída Klíčové slovo static Už to známe například System.Console je taková statická třída static class SampleClass public static string SampleString = "Sample String"; Console.WriteLine(SampleClass.SampleString);

Virtuální metody Objektově orientované programování (OOP) Klíčové slovo virtual Metoda může být vyměněna při dědení za jinou metodu pomocí klíčového slova override class Savec public int hmotnost = 10; public int Hmotnost() return hmotnost; public virtual void Mluv() Console.WriteLine("----"); class Kun : Savec public override void Mluv() Console.WriteLine("ihahaaa"); public class Koza : Savec pubic override void Mluv() Console.WriteLine("me-eee"); Koza k = new Koza(); k.mluv(); Console.WriteLine( "0", k.hmotnost() );

Abstraktní třídy Objektově orientované programování (OOP) Taková třída není určena k instanciaci instance takového typu nedává moc smysl například Savec abstract class Savec abstract public void Mluv(); class Kun : Savec public override void Mluv() Console.WriteLine( "ihahaaa" ); /* nelze */ Savec s = new Savec(); /* lze */ Kun k = new Kun(); k.mluv(); // -> ihahaaa

Vnořené třídy Objektově orientované programování (OOP) class Container public class Nested Container.Nested nestedinstance = new Container.Nested()

Překrývání Lze překrývat členské proměnné, metody i vnořené třídy. public class BaseC public static int x = 55; public static int y = 22; public class DerivedC : BaseC // Hide field x. new public static int x = 100; static void Main() // Display the new value of x: Console.WriteLine(x); // Display the hidden value of x: Console.WriteLine(BaseC.x); // Display the unhidden member y: Console.WriteLine(y);

Rozhraní interface Objektově orientované programování (OOP) Klíčové slovo interface Je to jako abstraktní třída, která neobsahuje žádnou implementovanou metodu Neobsahuje modifikátory přístupu Nesmí obsahovat členské proměnné ani konstanty Třída, která dědí (implementuje) rozhraní musí implementovat všechny metody Využití například při psaní driverů interface IFileSystem byte [] Read( string path ); bool Write( string path, string mode, byte [] data ); class FSNull : IFileSystem public int state = 0; public byte [] Read( string path ) return null; public bool Write( string path, string mode, byte [] data )

A teď vy Napište třídu Rectangle Napište abstraktní třídu Shape2D s virtuálními metodami Area vracející obsah objektu jako double, BoundingBox vracející Rectangle obdélník obalující tvar, bool InsideP( int x, int y ) vracející true pokud bod na souřadnicích [x,y] leží uvnitř objektu, false jinak. abstraktní třída Shape2D obsahuje proměnné symbolizující polohu tvaru int x,y, které Udělejte třídu Rect, Triangle, Circle, které dědí od Shape2D a implementují Area, BoundingBox, InsideP Do třídy Rect si doimplementujte metodu bool IntersectsP( Rect r ) vracející true, pokud se obdélníky překrývají Zkuste si doimplementovat interface IFileSystem pomocí třídy ArrayFS, která bude zapisovat, číst data z pole v paměti.