C# &.NET. Cvičení Mgr. Filip Krijt.

Podobné dokumenty
C# &.NET. Cvičení Mgr. Filip Krijt.

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

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

1. Téma 03 - Rozhodování

Návrhové vzory OMO, LS 2014/2015

Algoritmizace a programování

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

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

Výčtový typ strana 67

Vývoj řízený testy Test Driven Development

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

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

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET)

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Řízení reálných projektů, agilní metodiky

MS Excel makra a VBA

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

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

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

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

Java/QE Akademie - Osnova

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

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

Nástroje pro vývoj software

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Objektově orientované programování

KTE / ZPE Informační technologie

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Základy programování Zdrojový kód, dokumentace, týmová práce

Úvod Vývojová prostředí Štábní kultura Dokumentace Konec. Programování v C# Prostředí a doporučení 1 / 39

2. Modelovací jazyk UML 2.1 Struktura UML Diagram tříd Asociace OCL. 3. Smalltalk 3.1 Jazyk Pojmenování

Vývoj informačních systémů. Přehled témat a úkolů

RESTful API TAMZ 1. Cvičení 11

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Desatero, aneb nejčastější chyby v programování

VZOROVÝ STIPENDIJNÍ TEST Z INFORMAČNÍCH TECHNOLOGIÍ

Vývoj informačních systémů. Přehled témat a úkolů

Programovací jazyk Pascal

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

ALGORITMIZACE A PROGRAMOVÁNÍ

Programovací jazyk Java

MVC (Model-View-Controller)

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

ROZDÍL MEZI VZTAHEM EXTEND A INCLUDE V USE CASE DIAGRAMECH

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

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Dědičnost (inheritance)

Algoritmizace a programování

Jak testovat software v praxi. aneb šetříme svůj vlastní čas

Tabulka obsluhovaná kódem VBA

Reaktivní programování v.net

Algoritmy I. Cvičení č.1 ALGI 2015/16

Procesy a vlákna (Processes and Threads)

NPRG031 Programování II --- 2/2 Z, Zk

Datové struktury. alg12 1

Základy datových vazeb Silverlightu. Funkce Silverlightu 2. Podpora jazyků a technologie.net Framework

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

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

Úvod do programovacích jazyků (Java)

1. Programování proti rozhraní

Sdílení dat mezi podprogramy

CineStar Černý Most Praha

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Software602 Form Designer

Algoritmizace. Cíle předmětu

Použití dalších heuristik

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

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

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

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

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Vstupní požadavky, doporučení a metodické pokyny

Architektura počítačů Agenda

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Lokální definice (1) plocha-kruhu

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Jak správně psát scénáře k případům užití?

7.3 Diagramy tříd - základy

Dynamické datové struktury IV.

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

Algoritmizace prostorových úloh

Unity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Ukládání a vyhledávání XML dat

12 Zajištění kvality programového vybavení

10 Balíčky, grafické znázornění tříd, základy zapozdření

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

Transkript:

C# &.NET http://d3s.mff.cuni.cz Cvičení Mgr. Filip Krijt krijt@d3s.mff.cuni.cz http://d3s.mff.cuni.cz/~krijt/ CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Plán Nežárka.NET Rekapitulace Objektový návrh Technické věci O hledání bugu Zadání další úlohy: Huffmanovo kódování Pokud zbyde čas: Zarovnávání do bloku

MVC design pattern Model Retrieves data from Manipulates View Selects Controller Is observed by Interacts with

Různé varianty oddělení funkcionality Na úrovni metod drtivá většina Na úrovni tříd Skládáním oficiální řešení Dědičností Proč má v případě Views smysl rozdělení do více tříd? Lepší testovatelnost a rozšiřitelnost Lepší sémantika jeden View odpovídá konkrétní webové stránce Funkcionalita se zapouzdří do dat => větší flexibilita

Zajímavé otázky Kam umístit přidání a odebrání do košíku? Má smysl mít IModel, IView a IController? Má smysl mít více Controllerů? Má smysl reprezentovat požadavky samostatnými objekty? Měl by být Controller bezstavový? Kdo by měl vytvářet konkrétní views (ve smyslu volání new)?

Stringy a řízení programu Stringy jsou vhodné pro textová data na zobrazení uživateli, ale máloco jiného Propagaci stringů programem je vhodné utnout co nejdříve to jde Tedy např. mít jasně oddělené parsování vstupu a jeho interpretaci Na předávání rozumně omezené množiny příkazů dál do programu je vhodnější výčtový typ (enum) Hlavně kvůli kontrole kompilátorem Enum se hodí i místo intových identifikátorů operací Pro složitější případy např. návrhový vzor Command

Krátce k větvení DEMO If a závorky Každý if nám zvedá úroveň odsazení Obecně: Hlubší odsazení než 4 úrovně není dobře Řešení pro if Else if Switch Řešení obecně: Extrakce vnitřků do samostatných funkcí

Prostor pro dotazy

Cesta k pěknému kódu Přemýšlet v objektech Návrh shora dolů Best practices Kódovací konvence (Coding Style) Self-documenting code Metodiky, heuristiky TDD Test Driven Development SOLID Pět základních principů pro OOP Návrhové vzory

Konvence (Coding style) Jména proměnných, závorky, whitespacing Cíl: Nelze poznat kdo psal co, všichni dokážou číst a chápat vše Obecně: Je celkem jedno jak je zvolíte, důležité je to všude dodržovat Nicméně.NET sám o sobě už nějaké konvence má, je tedy dobrý nápad je adoptovat Závorky na nové řádce Velikost písmen v názvech Pojmenovávání IEnumerable, IsEmpty Dodržovat jeden jazyk v kódu Dobře rozmýšlet jména!

Pojmenovávání v.net PascalCasing Třídy, rozhraní, metody camelcasing Lokální proměnné, parametry, private prvky třídy Rozhraní mají prefix I (IEnumerable, IDataProvider, IRobot ) Správná slova pro jména Třídy podstatná jména Rozhraní podstatná jména, přídavná jména Metody, funkce slovesa (Insert, Add, Process, Contains) Proměnné a vlastnosti podle datového typu, typicky podstatná jména, občas přídavná či větné fragmenty (HasValue, IsEmpty) SomethingException Pozor na obecná, nic neříkající jména (MyException, Input, Item ) Pozor na zkratky

Pár heuristik Pozor na dlouhé metody => Rozbít na menší metody Pozor na duplikaci kódu => Extrakce nové metody, třídy, nebo konstanty Pozor na globální prvky (static) V principu není příliš objektové Main musí být, ale jinak minimum Vizuální rozdělení věcí pomocí konců řádků Odřádkování za metodou, blokem atp.

Pár heuristik Pozor na omnitřídy Třída Reader by asi neměla mít metodu WriteLine :) Reader a Writer v jednom => Single responsibility principle, dvě třídy Pozor na nadměrnou delegaci Main(args) { Run(args) }

Prostor pro dotazy

O hledání bugu V CodExu bude nová úloha Máte se pokusit do deseti minut odladit Chybí celkem podstatná část úlohy :) Cílem je vyzkoušet si, jak dobře/špatně se takový program ladí

Základ: Zadání Poučení: Ladit samotný program bez přihlédnutí k zadání nemá smysl Tj. první co hledám když něco nefunguje jsou odchylky od specifikace, až poté bugy Klidně přečíst zadání třikrát :) Se zadáním to nebývá jednoduché Zákazník neví přesně co chce dokud to neuvidí I když to náhodou ví, není to schopen přesně popsat I když to je schopen přesně popsat, zadání se za rok vývoje může drasticky změnit

Pex 4 fun http://pex4fun.com/ Puzzle metody se skrytou implementací Možné díky analýze programu Microsoftí nástroj Pex (typicky používán na generování unit testů) NSWI132 Analýza programů a verifikace kódu (RNDr. Pavel Parízek, Ph.D. D3S)

Zadání Huffmana