5. Nejvyšší úroveň
◦ Váš kód vás přežije
The Art of Commputer
Programming OOP
No comment ;)
TeX
Windowing GUI
Dijkstra Knuth Kay
6. Světově známí a vybudovali úspěšný byznys
◦ The real freedom zero
Doom | Quake | … RoR | 37 Signals No comment ;)
Carmack Hansson Gates
7. 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ů
8. Ú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?
9. 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í
10. 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ů
11. 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“
12. 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ů.
16. Nejlepší kód je „žádný“ kód!
http://goo.gl/87XHC
17. Nejlepší kód je „žádný“ kód!
◦ Jako softwaroví vývojáři jste svým vlastním
nejhorším nepřítelem.
18. 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 == “”)
19. Komentáře!
◦ Ne co
◦ Ne jak
◦ Ale proč
„to write good comments you have to be a good writer“
22. 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
23. 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
24. 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)
25. Více viz MSDN knihovna a téma
„Guidelines for Names“
http://goo.gl/179I1
26. 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
31. Příklady
int i, j = 11, k = 5;
const int m = 10, n = 20;
n je také
konstanta
32. 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.
33. 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.
34. Deklarace
namespace 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ů, …)
35. Deklarace vnořeného prostoru jmen
◦ Způsob 1
namespace Vnější
{
namespace Vnitřní
{
class X {}
}
}
36. 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 jmen
k X přistoupí způsobem Vnější.Vnitřní.X
37. 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
38. 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.
39. 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 rovnou
Console.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Č?
40. 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 rovnou
Console.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 using
zpřístupněn.
41. 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.
42. Obdoba typedef
z 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: Typ int je jiné
◦ using cela = System.Int32; označení pro
Int32 v prostoru
jmen System
43. 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žky
z 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++
44. namespace GlobalniProstorJmen
{
class System { }
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Text");
global::System.Console.WriteLine("Text");
global::System.Console.ReadKey();
}
}
}
45. 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).
46. 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.
47. 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.
48. 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;
}
}
49. Vytvoření instance
◦ Bod a = new Bod();
K jednotlivým
datovým
◦ Bod b = new Bod(30, 40); složkám lze
přistoupit přes
tečku
(a.x, a.y, b.x, b.y).
Jaké budou
jejich hodnoty?
50. Vytvoření instance
Identifikátory
◦ Bod a = new Bod();
a, b nejsou
a.x = 0, a.y = 0
ukazatelé.
◦ Bod b = new Bod(30, 40);
Operátor new u
struktury
b.x = 30, b.y = 40 nepředstavuje
dynamickou alokaci
paměti.
Jedná se o instance.
51. Bod c;
Nevolá se konstruktor.
c.x = 10;
c.y = 20; Složky lze inicializovat samostatně
int v = c.x + c.y;
OK
52. 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!