Pokročilé techniky programování .NET a C#

52
přednáška 03 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2012/2013

Transcript of Pokročilé techniky programování .NET a C#

Page 1: Pokročilé techniky programování .NET a C#

přednáška 03

Fakulta elektrotechniky a informatikyUniverzita Pardubice2012/2013

Page 2: Pokročilé techniky programování .NET a C#

Ing. Jan Hřídel (@h0nza)◦ [email protected]

◦ 466 037 178

◦ kancelář: 03 012

◦ www.hridel.com

Page 3: Pokročilé techniky programování .NET a C#

@h0nza

Page 4: Pokročilé techniky programování .NET a C#
Page 5: Pokročilé techniky programování .NET a C#

Nejvyšší úroveň◦ Váš kód vás přežije

Dijkstra Knuth Kay

No comment ;)The Art of Commputer

Programming

TeX

OOPWindowing GUI

Page 6: Pokročilé techniky programování .NET a C#

Světově známí a vybudovali úspěšný byznys◦ The real freedom zero

Carmack Hansson Gates

Doom | Quake | … RoR | 37 Signals No comment ;)

Page 7: Pokročilé techniky programování .NET a C#

Známí v programátorských kruzích◦ Slavný je dobrý, ale úspěšný je lepší

Většinou pracují pro velké a dobře známé korporace nebo jsou členy startup týmů

Page 8: Pokročilé techniky programování .NET a C#

Úspěšná kariéra softwarových vývojářů

Výborné skills◦ Nemají problém sehnat práci

◦ Firmy je berou „všema deseti“

Ale co dál? Kam se odtud posunout?

Page 9: Pokročilé techniky programování .NET a C#

Dost dobrý programátor, který ale není vynikající programátor◦ A možná ani nikdy nebude

◦ Většinou chybí talent na kódování

Page 10: Pokročilé techniky programování .NET a C#

Rádi kódují

Ukazují své projekty

Věnují programování hodně volného času

Mohou se rychle přesunout do skupiny pracujících programátorů

Page 11: Pokročilé techniky programování .NET a C#

Typický programátor – Jan Kodér

Obvykle pracuje v rámci velké „anonymní“ společnosti

Programování je jejich práce, ne „celý jejich život“

Page 12: Pokročilé techniky programování .NET a C#

Spadli do programátorské role ani nevědí jak.◦ A to bez předchozích znalostí a zkušeností

Vše, na co sáhnou, se stává utrpením pro ostatní spolupracovníky (programátory) –možná s výjimkou jiných špatných programátorů.

Page 13: Pokročilé techniky programování .NET a C#

Bez rostoucího nadšení to bude zas jen rutina a

práce

Page 14: Pokročilé techniky programování .NET a C#
Page 15: Pokročilé techniky programování .NET a C#

Je to vždy vaše chyba!

Page 16: Pokročilé techniky programování .NET a C#

Nejlepší kód je „žádný“ kód!

http://goo.gl/87XHC

Page 17: Pokročilé techniky programování .NET a C#

Nejlepší kód je „žádný“ kód!◦ Jako softwaroví vývojáři jste svým vlastním

nejhorším nepřítelem.

Page 18: Pokročilé techniky programování .NET a C#

Nejlepší kód je „žádný“ kód!◦ Kód lze hodnotit z mnoha úhlů pohledů:

Stručnost

Plná funkcionalita

Rychlost

Čas strávený kódováním

Robustnost

Flexibilita

if (s == String.Empty) vs. if (s == “”)

Page 19: Pokročilé techniky programování .NET a C#

Komentáře!◦ Ne co

◦ Ne jak

◦ Ale proč

„to write good comments you have to be a good writer“

Page 20: Pokročilé techniky programování .NET a C#

Dodržujte konvence!

Page 21: Pokročilé techniky programování .NET a C#
Page 22: Pokročilé techniky programování .NET a C#

Pascal casing◦ První písmeno každého slova velkým písmenem◦ Nepoužívají se podtržítka DruhaMocnina

◦ Pro většinu identifikátorů

Camel casing◦ První písmeno malé; druhé a další slova začínají

velkým písmenem. druhaMocnina

◦ Parametry metod, lokální proměnné, soukromé datové složky třídy

Page 23: Pokročilé techniky programování .NET a C#

Prostory jmen◦ Hlavní namespace – název společnosti

◦ Vnořený namespace – název projektu (aplikace)

Názvy identifikátorů se uvádějí bez prefixu◦ Kromě rozhrání s prefixem I, např. Idisposable

◦ Například název třídy by neměl být CDog nebo TDog, ale jen Dog

Page 24: Pokročilé techniky programování .NET a C#

Zkratky a akronymy◦ Malými písmeny – první znak však závisí na typu

identifikátoru

htmlControl – pro soukromé složky

HtmlControl – pro ostatní složky

◦ Výjimka – dvouznaké zkratky jsou velkými písmeny

kromě těch, které jsou na začátku identifikátoru a mají být psány velbloudím stylem

DBCommand – veřejná složka

dbCommand – soukromá složka

V .NET není pevně dodrženo (DbConnection)

Page 25: Pokročilé techniky programování .NET a C#

Více viz MSDN knihovna a téma„Guidelines for Names“

http://goo.gl/179I1

Page 26: Pokročilé techniky programování .NET a C#

Posloupnost písmen a číslic začínající písmenem.◦ „Písmeno“ – jakýkoliv znak

z UNICODE

Rozlišují se malá a velká písmena

Na začátek lze přidat znak @◦ @do vs. do

Klíčové slovo

Page 27: Pokročilé techniky programování .NET a C#

Vždy malým písmenem

http://goo.gl/8Di7A

Page 28: Pokročilé techniky programování .NET a C#

Modifikátory(nep) typ identifikátor inicializace(nep)

◦ Modifikátory

const

volatile

◦ Typ – typ proměnné

◦ Identifikátor – jméno proměnné

◦ Inicializace – inicializační část

Page 29: Pokročilé techniky programování .NET a C#
Page 30: Pokročilé techniky programování .NET a C#

There areNO GLOBAL

variables in C#

Page 31: Pokročilé techniky programování .NET a C#

Příklady

int i, j = 11, k = 5;

const int m = 10, n = 20;

n je také konstanta

Page 32: Pokročilé techniky programování .NET a C#

Rozdíly oproti C++◦ Modifikátor const lze použít pro předdefinované

(základní) datové typy. U referenčních typů (třídy) jej lze použít pouze tehdy, pokud je proměnná inicializována hodnotou null.

◦ Překladač nedovolí použít proměnnou jež nebyla inicializována.

◦ Ve vnořeném bloku nelze deklarovat proměnnou stejného jména jako v bloku nadřezeném.

Page 33: Pokročilé techniky programování .NET a C#

Rozdíly oproti C++

◦ Mezi prostorem jmen a identifikátorem a mezi vnořeným a nadřazeným prostorem jmen se uvádí tečka.

◦ Pro složky prostorů jmen lze uvést přístupová práva.

Page 34: Pokročilé techniky programování .NET a C#

Deklaracenamespace jméno { direktiva_using(nep)

deklarace_složek }

◦ jméno – název prostoru jmen

◦ direktiva_using – direktiva using (viz dále)

◦ deklarace_složek – deklarace datových typů (tříd, struktur, výčtových typů, …)

Page 35: Pokročilé techniky programování .NET a C#

Deklarace vnořeného prostoru jmen◦ Způsob 1

namespace Vnější

{

namespace Vnitřní

{

class X {}

}

}

Page 36: Pokročilé techniky programování .NET a C#

Deklarace vnořeného prostoru jmen◦ Způsob 2 (v C++ neexistuje)

namespace Vnější.Vnitřní

{

class X {}

}

V obou případech se mimo prostor jmenk X přistoupí způsobem Vnější.Vnitřní.X

Page 37: Pokročilé techniky programování .NET a C#

Přístupová práva◦ public – datový typ je veřejně přístupný, lze jej

použít i v jiných sestaveních

◦ internal – datový typ lze použít pouze v sestavení, ve kterém je deklarován

internal je výchozí – automaticky doplněno překladačem, pokud není specifikováno jinak

Page 38: Pokročilé techniky programování .NET a C#

Syntaxe deklarace◦ using jméno_prostoru_jmen;

◦ using alias = jméno_prostoru_jmen;

◦ using alias = jméno_typu;

Direktiva using musí předcházet všem deklaracím v prostoru jmen.

Page 39: Pokročilé techniky programování .NET a C#

Syntaxe deklarace◦ using jméno_prostoru_jmen;

Slouží k specifikaci prostoru jmen, jehož identifikátory se nemusí v programu klasifikovat jménem tohoto prostoru.

Při použití using System; lze psát rovnouConsole.Writeline(); protože Console je součástí prostoru jmen System.◦ Nelze však psát File.Create(“data.txt“); ani

IO. File.Create(“data.txt“);

PROČ?

Page 40: Pokročilé techniky programování .NET a C#

Syntaxe deklarace◦ using jméno_prostoru_jmen;

Slouží k specifikaci prostoru jmen, jehož identifikátory se nemusí v programu klasifikovat jménem tohoto prostoru.

Při použití using System; lze psát rovnouConsole.Writeline(); protože Console je součástí prostoru jmen System.◦ Nelze však psát File.Create(“data.txt“); ani

IO. File.Create(“data.txt“);

PROČ?File leží v prostoru jmen System.IO, a ten není

direktivou usingzpřístupněn.

Page 41: Pokročilé techniky programování .NET a C#

Syntaxe deklarace◦ using alias = jméno_prostoru_jmen;

Slouží k jinému pojmenování existujícího prostoru jmen.

alias – nové jméno prostoru jmen

jméno_prostoru_jmen – původní označení prostoru jmen

using VV = Vnější.Vnitřní;

Ke složce X pak lze přistoupit přes: VV.X.

Page 42: Pokročilé techniky programování .NET a C#

Syntaxe deklarace◦ using alias = jméno_typu;

Slouží k nového jména pro daný typ.

alias – nové jméno typu

jméno_typu – původní označení typu

using VVX = Vnější.Vnitřní.X;

Nelze přejmenovat klíčové slovo:◦ using cela = int;

Lze však napsat:◦ using cela = System.Int32;

Typ int je jiné označení pro

Int32 v prostoru jmen System

Obdoba typedefz C++

Page 43: Pokročilé techniky programování .NET a C#

namespace alias qualifier

Používá se ve spojení s klíčovým slovem global nebo ve spojení s aliasem prostoru jmen.

global lze využít ke zpřístupnění složkyz globálního prostoru jmen, která je zastíněna

jiným jmenným prostorem.

Obdoba unárního rozlišovacího operátoru ::z C++

Page 44: Pokročilé techniky programování .NET a C#

namespace GlobalniProstorJmen

{

class System { }

class Program

{

static void Main(string[] args)

{

System.Console.WriteLine("Text");

global::System.Console.WriteLine("Text");

global::System.Console.ReadKey();

}

}

}

Page 45: Pokročilé techniky programování .NET a C#

V C# je rozdíl mezi strukturami a třídami o poznání větší než v C++.

Syntaxe◦ Modifikátor(nep) struct jméno specifikace_rozhraní(nep) {

složky(nep) } ;(nep)

modifikátor – přístupová práva.

jméno – identifikátor datového typu dané struktury, který tato deklarace zavádí.

specifikace_rozhraní – rozhraní, která tato struktura implementuje (viz dále).

složky – seznam složek struktury (datové složky, metody, přetížené operátory, konstruktory, vlastnosti, události a vnořené typy).

Page 46: Pokročilé techniky programování .NET a C#

Rozdíly mezi třídami a strukturami

◦ Struktury patří mezi hodnotové typy, třídy mezi referenční typy. Hodnotové typy se vytvářejív zásobníku, referenční na haldě.

◦ Všechny struktury jsou potomkem třídy System.ValueType, která je odvozena od třídy object. V deklaraci nelze specifikovat předka a od struktury nelze odvodit potomka.

Page 47: Pokročilé techniky programování .NET a C#

Rozdíly mezi třídami a strukturami

◦ Struktury nemohou mít destruktor.

◦ Struktury nemohou mít uživatelem definovaný konstruktor bez parametrů.

◦ Konstruktor struktury musí inicializovat všechny její datové složky.

Překladač automaticky vytváří implicitní konstruktor, který inicializuje všechny datové složky na hodnotu 0, false nebo null.

Page 48: Pokročilé techniky programování .NET a C#

Vytvoření instance◦ Pomocí operátoru new◦ Inicializací všech datových složek struktury

struct Bod

{

public double x, y;

public Bod(double x, double y)

{

this.x = x;

this.y = y;

}

}

Page 49: Pokročilé techniky programování .NET a C#

Vytvoření instance◦ Bod a = new Bod();

◦ Bod b = new Bod(30, 40);

K jednotlivým datovým

složkám lze přistoupit přes

tečku(a.x, a.y, b.x, b.y).

Jaké budou jejich hodnoty?

Page 50: Pokročilé techniky programování .NET a C#

Vytvoření instance◦ Bod a = new Bod();

◦ Bod b = new Bod(30, 40);

a.x = 0, a.y = 0

b.x = 30, b.y = 40

Identifikátorya, b nejsou ukazatelé.

Operátor new u struktury

nepředstavujedynamickou alokaci

paměti.

Jedná se o instance.

Page 51: Pokročilé techniky programování .NET a C#

Bod c;

c.x = 10;

c.y = 20;

int v = c.x + c.y;

Nevolá se konstruktor.

Složky lze inicializovat samostatně

OK

Page 52: Pokročilé techniky programování .NET a C#

Think about your users and

their needs before you start

building the code, and they’ll

be happy with the final

product once you’re done!